nadesiko3 3.3.45 → 3.3.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -132
  3. package/batch/browsers.template.md +3 -3
  4. package/batch/build_browsers.nako3 +72 -72
  5. package/batch/build_command.nako3 +44 -44
  6. package/batch/build_nako_version.nako3 +42 -42
  7. package/batch/calc_hash.nako3 +29 -29
  8. package/batch/cmd_txt2json.nako3 +74 -74
  9. package/batch/command.txt +270 -338
  10. package/batch/command_nakopad.txt +9 -69
  11. package/batch/download-extlib.nako3 +43 -43
  12. package/batch/gen_command_nakopad.nako3 +57 -57
  13. package/batch/jsplugin2text.nako3 +285 -285
  14. package/batch/pickup_command.nako3 +110 -110
  15. package/batch/pickup_reserved_words.nako3 +11 -11
  16. package/batch/publish_version.nako3 +46 -46
  17. package/batch/show_agents.js +14 -14
  18. package/batch/turtle2js.nako3 +21 -21
  19. package/bin/cnako3 +10 -10
  20. package/core/.editorconfig +6 -0
  21. package/core/.eslintrc.cjs +33 -0
  22. package/core/.github/dependabot.yml +7 -0
  23. package/core/.github/workflows/nodejs.yml +37 -0
  24. package/core/.github/workflows/super-linter.yml +61 -0
  25. package/core/.github/workflows/textlint.yml +199 -0
  26. package/core/LICENSE +21 -0
  27. package/core/README.md +66 -0
  28. package/core/batch/build_nako_version.nako3 +42 -0
  29. package/core/command/snako.mjs +105 -0
  30. package/core/command/snako.mts +116 -0
  31. package/core/index.mjs +21 -0
  32. package/core/index.mts +21 -0
  33. package/core/package.json +47 -0
  34. package/core/sample/hello.nako3 +7 -0
  35. package/core/sample/hoge.mjs +4 -0
  36. package/core/sample/hoge.mts +6 -0
  37. package/core/src/nako3.mjs +858 -0
  38. package/core/src/nako3.mts +967 -0
  39. package/core/src/nako_colors.mjs +78 -0
  40. package/core/src/nako_colors.mts +86 -0
  41. package/core/src/nako_core_version.mjs +8 -0
  42. package/core/src/nako_core_version.mts +19 -0
  43. package/core/src/nako_csv.mjs +185 -0
  44. package/core/src/nako_csv.mts +188 -0
  45. package/core/src/nako_errors.mjs +173 -0
  46. package/core/src/nako_errors.mts +197 -0
  47. package/core/src/nako_from_dncl.mjs +255 -0
  48. package/core/src/nako_from_dncl.mts +250 -0
  49. package/core/src/nako_gen.mjs +1648 -0
  50. package/core/src/nako_gen.mts +1719 -0
  51. package/core/src/nako_gen_async.mjs +1659 -0
  52. package/core/src/nako_gen_async.mts +1732 -0
  53. package/core/src/nako_global.mjs +107 -0
  54. package/core/src/nako_global.mts +138 -0
  55. package/core/src/nako_indent.mjs +445 -0
  56. package/core/src/nako_indent.mts +492 -0
  57. package/core/src/nako_josi_list.mjs +38 -0
  58. package/core/src/nako_josi_list.mts +45 -0
  59. package/core/src/nako_lex_rules.mjs +253 -0
  60. package/core/src/nako_lex_rules.mts +260 -0
  61. package/core/src/nako_lexer.mjs +609 -0
  62. package/core/src/nako_lexer.mts +612 -0
  63. package/core/src/nako_logger.mjs +199 -0
  64. package/core/src/nako_logger.mts +232 -0
  65. package/core/src/nako_parser3.mjs +2439 -0
  66. package/core/src/nako_parser3.mts +2195 -0
  67. package/core/src/nako_parser_base.mjs +370 -0
  68. package/core/src/nako_parser_base.mts +370 -0
  69. package/core/src/nako_parser_const.mjs +37 -0
  70. package/core/src/nako_parser_const.mts +37 -0
  71. package/core/src/nako_prepare.mjs +304 -0
  72. package/core/src/nako_prepare.mts +315 -0
  73. package/core/src/nako_reserved_words.mjs +38 -0
  74. package/core/src/nako_reserved_words.mts +38 -0
  75. package/core/src/nako_source_mapping.mjs +207 -0
  76. package/core/src/nako_source_mapping.mts +262 -0
  77. package/core/src/nako_test.mjs +37 -0
  78. package/core/src/nako_types.mjs +25 -0
  79. package/core/src/nako_types.mts +151 -0
  80. package/core/src/plugin_csv.mjs +49 -0
  81. package/core/src/plugin_csv.mts +50 -0
  82. package/core/src/plugin_math.mjs +328 -0
  83. package/core/src/plugin_math.mts +326 -0
  84. package/core/src/plugin_promise.mjs +91 -0
  85. package/core/src/plugin_promise.mts +91 -0
  86. package/core/src/plugin_system.mjs +2832 -0
  87. package/core/src/plugin_system.mts +2690 -0
  88. package/core/src/plugin_test.mjs +34 -0
  89. package/core/src/plugin_test.mts +34 -0
  90. package/core/test/array_test.mjs +34 -0
  91. package/core/test/basic_test.mjs +344 -0
  92. package/core/test/calc_test.mjs +140 -0
  93. package/core/test/core_module_test.mjs +23 -0
  94. package/core/test/debug_test.mjs +16 -0
  95. package/core/test/dncl_test.mjs +94 -0
  96. package/core/test/error_message_test.mjs +210 -0
  97. package/core/test/error_test.mjs +16 -0
  98. package/core/test/flow_test.mjs +373 -0
  99. package/core/test/func_call.mjs +160 -0
  100. package/core/test/func_test.mjs +149 -0
  101. package/core/test/indent_test.mjs +364 -0
  102. package/core/test/lex_test.mjs +168 -0
  103. package/core/test/literal_test.mjs +73 -0
  104. package/core/test/nako_lexer_test.mjs +35 -0
  105. package/core/test/nako_logger_test.mjs +76 -0
  106. package/core/test/nako_logger_test.mts +78 -0
  107. package/core/test/plugin_csv_test.mjs +38 -0
  108. package/core/test/plugin_promise_test.mjs +18 -0
  109. package/core/test/plugin_system_test.mjs +630 -0
  110. package/core/test/prepare_test.mjs +96 -0
  111. package/core/test/re_test.mjs +22 -0
  112. package/core/test/side_effects_test.mjs +92 -0
  113. package/core/test/variable_scope_test.mjs +149 -0
  114. package/core/tsconfig.json +101 -0
  115. package/demo/ace_editor.html +89 -89
  116. package/demo/ace_editor_tabs.html +161 -161
  117. package/demo/basic.html +71 -71
  118. package/demo/browsers.html +9 -10
  119. package/demo/css/basic.css +3 -3
  120. package/demo/css/common.css +157 -157
  121. package/demo/css/editor.css +8 -8
  122. package/demo/css/flow.css +3 -3
  123. package/demo/css/index.css +3 -3
  124. package/demo/flow.html +98 -98
  125. package/demo/graph.html +53 -53
  126. package/demo/image/nakopad-icon256.png +0 -0
  127. package/demo/index.html +133 -133
  128. package/demo/js/common.js +17 -17
  129. package/demo/js/turtle3d_test.js +44 -44
  130. package/demo/js/turtle_test.js +45 -45
  131. package/demo/nako3/calc.nako3 +4 -4
  132. package/demo/runscript.html +47 -47
  133. package/demo/runscript2.html +33 -33
  134. package/demo/runscript3.html +35 -35
  135. package/demo/runscript4.html +33 -33
  136. package/demo/turtle.html +58 -58
  137. package/demo/turtle2.html +141 -141
  138. package/demo/turtle3.html +279 -279
  139. package/demo/turtle3d.html +58 -58
  140. package/demo/turtle3d2.html +107 -107
  141. package/demo/version.html +24 -24
  142. package/doc/SETUP.md +157 -157
  143. package/doc/about.md +17 -17
  144. package/doc/browsers.md +26 -26
  145. package/doc/docgen.md +21 -21
  146. package/doc/editor.md +44 -44
  147. package/doc/files.md +39 -39
  148. package/doc/plugins.md +234 -234
  149. package/doc/release.md +79 -79
  150. package/doc/textlint.md +43 -43
  151. package/doc/win32.md +57 -57
  152. package/package.json +195 -192
  153. package/release/_hash.txt +28 -28
  154. package/release/_script-tags.txt +14 -14
  155. package/release/command.json +1 -1
  156. package/release/command.json.js +1 -1
  157. package/release/command_cnako3.json +1 -1
  158. package/release/command_list.json +1 -1
  159. package/release/editor.js +1 -1
  160. package/release/nako_gen_async.js +1 -1
  161. package/release/plugin_csv.js +1 -1
  162. package/release/stats.json +1 -1
  163. package/release/version.js +1 -1
  164. package/release/wnako3.js +1 -1
  165. package/release/wnako3webworker.js +1 -1
  166. package/src/browsers.txt +11 -12
  167. package/src/browsers_agents.json +2 -2
  168. package/src/browsers_agents.mjs +1 -1
  169. package/src/cnako3.mjs +17 -10
  170. package/src/cnako3.mts +18 -12
  171. package/src/cnako3mod.mjs +707 -687
  172. package/src/cnako3mod.mts +712 -696
  173. package/src/commander_ja.mjs +164 -164
  174. package/src/commander_ja.mts +161 -161
  175. package/src/enako3.mjs +68 -69
  176. package/src/era.mjs +22 -22
  177. package/src/image_turtle-elephant.mjs +2 -5
  178. package/src/image_turtle-panda.mjs +2 -5
  179. package/src/image_turtle64.mjs +2 -5
  180. package/src/index.mjs +9 -9
  181. package/src/index.mts +10 -11
  182. package/src/nako3editorfix.sfd +106 -106
  183. package/src/nako_version.mjs +8 -8
  184. package/src/nako_version.mts +2 -2
  185. package/src/plugin_browser.mjs +213 -212
  186. package/src/plugin_browser.mts +206 -205
  187. package/src/plugin_browser_ajax.mjs +399 -399
  188. package/src/plugin_browser_audio.mjs +109 -109
  189. package/src/plugin_browser_canvas.mjs +449 -449
  190. package/src/plugin_browser_chart.mjs +294 -294
  191. package/src/plugin_browser_color.mjs +49 -49
  192. package/src/plugin_browser_crypto.mjs +26 -26
  193. package/src/plugin_browser_dialog.mjs +53 -53
  194. package/src/plugin_browser_dom_basic.mjs +336 -336
  195. package/src/plugin_browser_dom_event.mjs +193 -193
  196. package/src/plugin_browser_dom_parts.mjs +396 -396
  197. package/src/plugin_browser_geolocation.mjs +51 -51
  198. package/src/plugin_browser_hotkey.mjs +25 -25
  199. package/src/plugin_browser_html.mjs +59 -59
  200. package/src/plugin_browser_in_worker.mjs +45 -45
  201. package/src/plugin_browser_location.mjs +21 -21
  202. package/src/plugin_browser_speech.mjs +111 -111
  203. package/src/plugin_browser_storage.mjs +121 -121
  204. package/src/plugin_browser_system.mjs +31 -31
  205. package/src/plugin_browser_websocket.mjs +73 -73
  206. package/src/plugin_caniuse.mjs +29 -29
  207. package/src/plugin_datetime.mjs +394 -394
  208. package/src/plugin_httpserver.mjs +277 -0
  209. package/src/plugin_httpserver.mts +286 -0
  210. package/src/plugin_kansuji.mjs +224 -224
  211. package/src/plugin_keigo.mjs +55 -55
  212. package/src/plugin_markup.mjs +32 -32
  213. package/src/plugin_node.mjs +1047 -1047
  214. package/src/plugin_node.mts +980 -980
  215. package/src/plugin_turtle.mjs +647 -647
  216. package/src/plugin_webworker.mjs +334 -334
  217. package/src/plugin_weykturtle3d.mjs +1214 -1214
  218. package/src/plugin_worker.mjs +95 -95
  219. package/src/repl.nako3 +63 -63
  220. package/src/wnako3.mjs +12 -12
  221. package/src/wnako3.mts +11 -11
  222. package/src/wnako3_editor.css +215 -215
  223. package/src/wnako3_editor.mjs +1542 -1542
  224. package/src/wnako3_editor.mts +1657 -1656
  225. package/src/wnako3mod.mjs +213 -213
  226. package/src/wnako3mod.mts +214 -214
  227. package/src/wnako3webworker.mjs +69 -68
  228. package/test/ace_editor/karma.config.js +94 -94
  229. package/test/ace_editor/test/.babelrc.json +3 -3
  230. package/test/ace_editor/test/ace_editor_test.js +178 -178
  231. package/test/ace_editor/test/html/custom_context.html +139 -139
  232. package/test/async/async_basic_test.mjs +122 -122
  233. package/test/browser/karma.config.js +221 -221
  234. package/test/browser/test/.babelrc.json +3 -3
  235. package/test/browser/test/compare_util.js +50 -50
  236. package/test/browser/test/html/div_basic.html +2 -2
  237. package/test/browser/test/html/event_dom_form.html +4 -4
  238. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  239. package/test/browser/test/import_plugin_checker.js +24 -24
  240. package/test/browser/test/plugin_browser_test.js +51 -51
  241. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  242. package/test/browser/test/plugin_browser_test_color.js +18 -18
  243. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  244. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  245. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  246. package/test/browser/test/plugin_browser_test_system.js +9 -9
  247. package/test/browser/test/plugin_turtle_test.js +817 -817
  248. package/test/browser/test/plugin_webworker_test.js +86 -86
  249. package/test/browser/test/require_test.js +68 -68
  250. package/test/bundled/karma.config.base.js +117 -117
  251. package/test/bundled/karma.config.js +86 -86
  252. package/test/bundled/test/.babelrc.json +3 -3
  253. package/test/bundled/test/bundled_test.js +69 -69
  254. package/test/bundled/test/html/custom_context.html +65 -65
  255. package/test/bundled/test/html/custom_debug.html +66 -66
  256. package/test/bundled/test4b.cmd +52 -52
  257. package/test/bundled/test_base/.babelrc.json +3 -3
  258. package/test/bundled/test_base/_checktool_test.js +25 -25
  259. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  260. package/test/bundled/test_base/basic_async_test.js +18 -18
  261. package/test/bundled/test_base/basic_test.js +153 -153
  262. package/test/bundled/test_base/calc_test.js +132 -132
  263. package/test/bundled/test_base/css/browsers_box.css +114 -114
  264. package/test/bundled/test_base/html/custom_context.html +69 -69
  265. package/test/bundled/test_base/html/custom_debug.html +71 -71
  266. package/test/bundled/test_base/js/browsers_box.js +72 -72
  267. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  268. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  269. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  270. package/test/bundled/test_base/plugin_system_test.js +410 -410
  271. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  272. package/test/bundled/test_base/test_utils.js +191 -191
  273. package/test/common/plugin_browser_test.mjs +22 -24
  274. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  275. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  276. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  277. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  278. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  279. package/test/common/plugin_markup_test.mjs +23 -23
  280. package/test/jsconfig.json +19 -19
  281. package/test/karma.config.js +91 -91
  282. package/test/node/async_test.mjs +96 -82
  283. package/test/node/commander_ja_test.mjs +89 -89
  284. package/test/node/error_message_test.mjs +243 -253
  285. package/test/node/kai_test.nako3 +6 -6
  286. package/test/node/node_test.mjs +60 -60
  287. package/test/node/plugin_broken.js.txt +3 -3
  288. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  289. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  290. package/test/node/plugin_markup_test.mjs +47 -46
  291. package/test/node/plugin_math_test.mjs +45 -44
  292. package/test/node/plugin_node_test.mjs +98 -97
  293. package/test/node/plugin_test.mjs +44 -43
  294. package/test/node/relative_import_test_1.nako3 +1 -1
  295. package/test/node/relative_import_test_2.nako3 +2 -2
  296. package/test/node/require_nako3_test.mjs +67 -66
  297. package/test/node/requiretest.nako3 +4 -4
  298. package/test/node/requiretest_indirect.nako3 +1 -1
  299. package/test/node/requiretest_name.nako3 +5 -5
  300. package/test/node/runtime_error.nako3 +2 -2
  301. package/test/node/scope1.nako3 +10 -10
  302. package/test/node/scope2.nako3 +12 -12
  303. package/test/node/side_effects_test.mjs +39 -119
  304. package/test/node/sjis.txt +5 -5
  305. package/test/node/syntax_error.nako3 +1 -1
  306. package/test/node/wnako3_editor_test.mjs +384 -384
  307. package/tools/README.md +12 -7
  308. package/tools/check_new_version.nako3 +25 -25
  309. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  310. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  311. package/tools/nako3edit/html/edit.html +170 -170
  312. package/tools/nako3edit/html/edit_plugin.js +6 -6
  313. package/tools/nako3edit/html/files.html +125 -125
  314. package/tools/nako3edit/html/nako3edit.css +65 -65
  315. package/tools/nako3edit/index.mjs +248 -244
  316. package/tools/nako3server/index.html +10 -0
  317. package/tools/nako3server/index.mjs +116 -116
  318. package/tools/nako3server/index.nako3 +34 -0
  319. package/release/nako_gen_async.js.LICENSE.txt +0 -35
  320. package/release/plugin_caniuse.js.LICENSE.txt +0 -11
  321. package/release/plugin_csv.js.LICENSE.txt +0 -15
  322. package/release/plugin_datetime.js.LICENSE.txt +0 -15
  323. package/release/plugin_kansuji.js.LICENSE.txt +0 -3
  324. package/release/plugin_markup.js.LICENSE.txt +0 -11
  325. package/release/plugin_turtle.js.LICENSE.txt +0 -15
  326. package/release/plugin_webworker.js.LICENSE.txt +0 -3
  327. package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
  328. package/release/wnako3webworker.js.LICENSE.txt +0 -131
  329. package/tools/nako3edit/a.sqlite3 +0 -0
@@ -0,0 +1,73 @@
1
+ import assert from 'assert'
2
+ import { NakoCompiler } from '../src/nako3.mjs'
3
+
4
+ describe('literal_test', async () => {
5
+ const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
6
+ const nako = new NakoCompiler()
7
+ nako.logger.debug('code=' + code)
8
+ assert.strictEqual((await nako.runAsync(code)).log, res)
9
+ }
10
+ const err = async (/** @type {string} */ code) => {
11
+ const nako = new NakoCompiler()
12
+ nako.logger.debug('code=' + code)
13
+ try {
14
+ await nako.runAsync(code)
15
+ } catch (error) {
16
+ assert.ok(error)
17
+ return
18
+ }
19
+ assert.fail()
20
+ }
21
+ // --- test ---
22
+ it('非数', async () => {
23
+ await cmp('0/0を表示', 'NaN')
24
+ await cmp('非数を表示', 'NaN')
25
+ })
26
+ it('無限大', async () => {
27
+ await cmp('3/無限大を表示', '0')
28
+ })
29
+ describe('十進法のテスト', async () => {
30
+ // 基本的に(整数部)(小数部)(指数部)です
31
+ it('0', async () => {
32
+ await cmp('0の変数型確認して表示', 'number')
33
+ await cmp('013+014を表示', '27') // javascriptとは違い0から始まる7以下の数字だけで構成される数は八進数ではなく十進数として解釈されます
34
+ })
35
+ it('小数点', async () => {
36
+ await cmp('.11の変数型確認して表示', 'number') // 小数点から始まっても数として解釈
37
+ await cmp('222.の変数型確認して表示', 'number') // 逆に小数点で終わっても数として解釈
38
+ err('123.$の変数型確認して表示') // しかしドットの後に定義されていない文字列をくっつけるとエラー
39
+ })
40
+ it('指数表記', async () => {
41
+ await cmp('7e+8=7e8を表示', 'true') // 指数表記の+は省略可能
42
+ await cmp('7.5e8の変数型確認して表示', 'number') // 小数と組み合わせることもできる
43
+ await cmp('7.e8の変数型確認して表示', 'number') // もちろん小数部を省略しても数として解釈
44
+ })
45
+ })
46
+ it('十六進法のテスト', async () => {
47
+ await cmp('0x1dfの変数型確認して表示', 'number')
48
+ })
49
+ it('八進法のテスト', async () => {
50
+ await cmp('0o157の変数型確認して表示', 'number')
51
+ })
52
+ it('二進法のテスト', async () => {
53
+ await cmp('0b101の変数型確認して表示', 'number')
54
+ })
55
+ it('数値区切文字', async () => {
56
+ await cmp('12345_00=123_4500を表示', 'true') // 区切り文字として「_」が使用できます
57
+ await cmp('12345_00=1_23_4500を表示', 'true') // 数字の中でのどこでも使用できます
58
+ err('1____23_4500を表示') // 連続して使うことはできません
59
+ await cmp('_123を表示', 'undefined') // 区切り文字で始めることはできません(定義されていない変数「_123」の参照)
60
+ err('123_を表示') // 区切り文字で終わらせることはできません
61
+ await cmp('0xCAFE_F00Dの変数型確認して表示', 'number') // 十六進数でも
62
+ await cmp('0o123456_777の変数型確認して表示', 'number') // 八進数でも
63
+ await cmp('0b1111_0000の変数型確認して表示', 'number') // 二進数でも
64
+ await cmp('101_475_938.322_8の変数型確認して表示', 'number') // 小数でも
65
+ err('3_.1415の変数型確認して表示') // 小数点等の標識の前後では区切り文字は使えません
66
+ err('3e_1415の変数型確認して表示')
67
+ })
68
+ it('単位のテスト #994', async () => {
69
+ await cmp('30kgを表示', '30')
70
+ await cmp('A=100円;Aを表示', '100')
71
+ await cmp('B=300㎡;B=B+1㎡;Bを表示', '301')
72
+ })
73
+ })
@@ -0,0 +1,35 @@
1
+ import assert from 'assert'
2
+ import { NakoLexer } from '../src/nako_lexer.mjs'
3
+ import { NakoLogger } from '../src/nako_logger.mjs'
4
+ import { NakoPrepare } from '../src/nako_prepare.mjs'
5
+
6
+ describe('nako_lexer_test', () => {
7
+ const lex = new NakoLexer(new NakoLogger())
8
+ const pre = NakoPrepare.getInstance()
9
+ // --- test ---
10
+ it('トークンの区切りテスト', () => {
11
+ const a = lex.tokenize('Nは30', 0, 'test.nako3')
12
+ assert.strictEqual(NakoLexer.tokensToTypeStr(a, '|'), 'word|number')
13
+ const b = lex.tokenize('もしN=30ならば', 0, 'test.nako3')
14
+ assert.strictEqual(NakoLexer.tokensToTypeStr(b, '|'), 'もし|word|eq|number')
15
+ })
16
+ it('関数の登録テスト', () => {
17
+ const code = '●AAAとは\n「あ」を表示\nここまで。\n'
18
+ const code2 = pre.convert(code).map((v) => v.text).join('')
19
+ const tok = lex.tokenize(code2, 0, 'test.nako3')
20
+ /** @type {any} */
21
+ const funclist = {}
22
+ // @ts-ignore
23
+ NakoLexer.preDefineFunc(tok, lex.logger, funclist)
24
+ assert.strictEqual(funclist.test__AAA.type, 'func')
25
+ })
26
+ it('変数は登録しないというテスト', () => {
27
+ const code = 'HOGE=333\n'
28
+ const code2 = pre.convert(code).map((v) => v.text).join('')
29
+ const tok = lex.tokenize(code2, 0, 'test.nako3')
30
+ /** @type {any} */
31
+ const funclist = {}
32
+ NakoLexer.preDefineFunc(tok, lex.logger, funclist)
33
+ assert.strictEqual(funclist.HOGE, undefined)
34
+ })
35
+ })
@@ -0,0 +1,76 @@
1
+ import assert from 'assert';
2
+ import { NakoColors } from '../src/nako_colors.mjs';
3
+ import { NakoLogger } from '../src/nako_logger.mjs';
4
+ describe('nako_logger_test', () => {
5
+ it('色付けのテスト', () => {
6
+ const out = NakoColors.convertColorTextFormat(`デフォルト${NakoColors.color.bold}太字${NakoColors.color.red}太字赤${NakoColors.color.reset}デフォルト<script>`);
7
+ assert.strictEqual(out.noColor, 'デフォルト太字太字赤デフォルト<script>');
8
+ assert.strictEqual(out.nodeConsole, 'デフォルト\u001b[1m太字\u001b[31m太字赤\u001b[0mデフォルト<script>\u001b[0m');
9
+ assert.strictEqual(out.html, '<span>デフォルト</span><span style="color: inherit; font-weight: bold;">太字</span><span style="color: red; font-weight: bold;">太字赤</span><span style="color: inherit; font-weight: inherit;">デフォルト&lt;script&gt;</span>');
10
+ assert.deepStrictEqual(out.browserConsole, [
11
+ 'デフォルト%c太字%c太字赤%cデフォルト<script>',
12
+ 'color: inherit; font-weight: bold;',
13
+ 'color: red; font-weight: bold;',
14
+ 'color: inherit; font-weight: inherit;'
15
+ ]);
16
+ });
17
+ it('ログの取得のテスト', (done) => {
18
+ const logger = new NakoLogger();
19
+ logger.addListener('info', (data) => {
20
+ assert.strictEqual(data.noColor, '[情報]main.nako3(2行目): foo');
21
+ done();
22
+ });
23
+ logger.info('foo', {
24
+ startOffset: 0,
25
+ endOffset: 0,
26
+ line: 1,
27
+ file: 'main.nako3'
28
+ });
29
+ });
30
+ it('複数のリスナーのテスト1', () => {
31
+ const logger = new NakoLogger();
32
+ let logStr = '';
33
+ logger.addListener('info', (data) => { logStr += 'i'; });
34
+ logger.addListener('error', (data) => { logStr += 'e'; });
35
+ logger.addListener('stdout', (data) => { logStr += 's'; });
36
+ logger.error('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
37
+ assert.strictEqual(logStr, 'ie');
38
+ });
39
+ it('複数リスナーのテスト2', () => {
40
+ const logger = new NakoLogger();
41
+ let logStr = '';
42
+ logger.addListener('info', (data) => { logStr += 'i'; });
43
+ logger.addListener('error', (data) => { logStr += 'e'; });
44
+ logger.addListener('stdout', (data) => { logStr += 's'; });
45
+ logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
46
+ assert.strictEqual(logStr, 'i');
47
+ });
48
+ it('複数リスナーのテスト3', () => {
49
+ const logger = new NakoLogger();
50
+ let logStr = '';
51
+ logger.addListener('info', (data) => { logStr += 'i'; });
52
+ logger.addListener('error', (data) => { logStr += 'e'; });
53
+ logger.addListener('stdout', (data) => { logStr += 's'; });
54
+ logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
55
+ assert.strictEqual(logStr, 'ies');
56
+ });
57
+ it('複数リスナーのテスト4', () => {
58
+ const logger = new NakoLogger();
59
+ let logStr = '';
60
+ logger.addListener('info', (data) => { logStr += 'i'; });
61
+ logger.addListener('error', (data) => { logStr += 'e'; });
62
+ logger.addListener('stdout', (data) => { logStr += 's'; });
63
+ logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
64
+ assert.strictEqual(logStr, 'ies');
65
+ });
66
+ it('複数リスナーのテスト5', () => {
67
+ const logger = new NakoLogger();
68
+ let logStr = '';
69
+ logger.addListener('all', (data) => { logStr += 'a'; });
70
+ logger.addListener('info', (data) => { logStr += 'i'; });
71
+ logger.addListener('error', (data) => { logStr += 'e'; });
72
+ logger.addListener('stdout', (data) => { logStr += 's'; });
73
+ logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
74
+ assert.strictEqual(logStr, 'ai');
75
+ });
76
+ });
@@ -0,0 +1,78 @@
1
+ import assert from 'assert'
2
+ import { NakoColors } from '../src/nako_colors.mjs'
3
+ import { NakoLogger } from '../src/nako_logger.mjs'
4
+
5
+ describe('nako_logger_test', () => {
6
+ it('色付けのテスト', () => {
7
+ const out = NakoColors.convertColorTextFormat(`デフォルト${NakoColors.color.bold}太字${NakoColors.color.red}太字赤${NakoColors.color.reset}デフォルト<script>`)
8
+ assert.strictEqual(out.noColor, 'デフォルト太字太字赤デフォルト<script>')
9
+ assert.strictEqual(out.nodeConsole, 'デフォルト\u001b[1m太字\u001b[31m太字赤\u001b[0mデフォルト<script>\u001b[0m')
10
+ assert.strictEqual(out.html, '<span>デフォルト</span><span style="color: inherit; font-weight: bold;">太字</span><span style="color: red; font-weight: bold;">太字赤</span><span style="color: inherit; font-weight: inherit;">デフォルト&lt;script&gt;</span>')
11
+ assert.deepStrictEqual(out.browserConsole, [
12
+ 'デフォルト%c太字%c太字赤%cデフォルト<script>',
13
+ 'color: inherit; font-weight: bold;',
14
+ 'color: red; font-weight: bold;',
15
+ 'color: inherit; font-weight: inherit;'
16
+ ])
17
+ })
18
+ it('ログの取得のテスト', (done) => {
19
+ const logger = new NakoLogger()
20
+ logger.addListener('info', (data) => {
21
+ assert.strictEqual(data.noColor, '[情報]main.nako3(2行目): foo')
22
+ done()
23
+ })
24
+ logger.info('foo', {
25
+ startOffset: 0,
26
+ endOffset: 0,
27
+ line: 1,
28
+ file: 'main.nako3'
29
+ })
30
+ })
31
+ it('複数のリスナーのテスト1', () => {
32
+ const logger = new NakoLogger()
33
+ let logStr = ''
34
+ logger.addListener('info', (data) => { logStr += 'i' })
35
+ logger.addListener('error', (data) => { logStr += 'e' })
36
+ logger.addListener('stdout', (data) => { logStr += 's' })
37
+ logger.error('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
38
+ assert.strictEqual(logStr, 'ie')
39
+ })
40
+ it('複数リスナーのテスト2', () => {
41
+ const logger = new NakoLogger()
42
+ let logStr = ''
43
+ logger.addListener('info', (data) => { logStr += 'i' })
44
+ logger.addListener('error', (data) => { logStr += 'e' })
45
+ logger.addListener('stdout', (data) => { logStr += 's' })
46
+ logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
47
+ assert.strictEqual(logStr, 'i')
48
+ })
49
+ it('複数リスナーのテスト3', () => {
50
+ const logger = new NakoLogger()
51
+ let logStr = ''
52
+ logger.addListener('info', (data) => { logStr += 'i' })
53
+ logger.addListener('error', (data) => { logStr += 'e' })
54
+ logger.addListener('stdout', (data) => { logStr += 's' })
55
+ logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
56
+ assert.strictEqual(logStr, 'ies')
57
+ })
58
+ it('複数リスナーのテスト4', () => {
59
+ const logger = new NakoLogger()
60
+ let logStr = ''
61
+ logger.addListener('info', (data) => { logStr += 'i' })
62
+ logger.addListener('error', (data) => { logStr += 'e' })
63
+ logger.addListener('stdout', (data) => { logStr += 's' })
64
+ logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
65
+ assert.strictEqual(logStr, 'ies')
66
+ })
67
+ it('複数リスナーのテスト5', () => {
68
+ const logger = new NakoLogger()
69
+ let logStr = ''
70
+ logger.addListener('all', (data) => { logStr += 'a' })
71
+ logger.addListener('info', (data) => { logStr += 'i' })
72
+ logger.addListener('error', (data) => { logStr += 'e' })
73
+ logger.addListener('stdout', (data) => { logStr += 's' })
74
+ logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
75
+ assert.strictEqual(logStr, 'ai')
76
+ })
77
+ })
78
+
@@ -0,0 +1,38 @@
1
+ /* eslint-disable no-undef */
2
+ import assert from 'assert'
3
+ import { NakoCompiler } from '../src/nako3.mjs'
4
+
5
+ // eslint-disable-next-line no-undef
6
+ describe('plugin_csv_test', () => {
7
+ const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
8
+ const nako = new NakoCompiler()
9
+ nako.logger.debug('code=' + code)
10
+ const g = await nako.runAsync(code)
11
+ assert.strictEqual(g.log, res)
12
+ }
13
+
14
+ // --- test ---
15
+ it('CSV取得', async () => {
16
+ await cmp('a=「1,2,3\n4,5,6」のCSV取得。a[1][2]を表示', '6')
17
+ await cmp('a=「"a",b,c\n""a,b,c\na,""b,c\na,b,c""\n"a,\nb",c,d\na,"b,\nc",d\na,b,"c,\nd"」のCSV取得。a[5][1]を表示', 'b,\nc')
18
+ await cmp('a=「1,"a""a",2」のCSV取得。a[0][1]を表示', 'a"a')
19
+ await cmp('a=「1,"2""2",3\n4,5,6」のCSV取得。a[0][1]を表示', '2"2')
20
+ await cmp('a=「1,,3\n4,5,6」のCSV取得。a[0][2]を表示', '3')
21
+ await cmp('a=「1,2,3,\n4,5,6」のCSV取得。a[1][0]を表示', '4') // #353
22
+ })
23
+ it('TSV取得', async () => {
24
+ await cmp('a=「1\t2\t3\n4\t5\t6」のTSV取得。a[1][2]を表示', '6')
25
+ await cmp('a=「"a"\tb\tc\n""a\tb\tc\na\t""b\tc\na\tb\tc""\n"a\t\nb"\tc\td\na\t"b\t\nc"\td\na\tb\t"c\t\nd"」のTSV取得。a[5][1]を表示', 'b\t\nc')
26
+ await cmp('a=「1\t"a""a"\t2」のTSV取得。a[0][1]を表示', 'a"a')
27
+ await cmp('a=「1\t"2""2"\t3\n4\t5\t6」のTSV取得。a[0][1]を表示', '2"2')
28
+ await cmp('a=「1\t\t3\n4\t5\t6」のTSV取得。a[0][2]を表示', '3')
29
+ })
30
+ it('表CSV変換', async () => {
31
+ await cmp('[[1,2,3],[4,5,6]]を表CSV変換して表示', '1,2,3\r\n4,5,6')
32
+ await cmp('[[1,2,"3\r\n,"],[4,5,6]]を表CSV変換して表示', '1,2,"3\r\n,"\r\n4,5,6')
33
+ })
34
+ it('表TSV変換', async () => {
35
+ await cmp('[[1,2,3],[4,5,6]]を表TSV変換して表示', '1\t2\t3\r\n4\t5\t6')
36
+ await cmp('[[1,2,"3\r\n\t"],[4,5,6]]を表TSV変換して表示', '1\t2\t"3\r\n\t"\r\n4\t5\t6')
37
+ })
38
+ })
@@ -0,0 +1,18 @@
1
+ import assert from 'assert'
2
+ import { NakoCompiler } from '../src/nako3.mjs'
3
+
4
+ // eslint-disable-next-line no-undef
5
+ describe('plugin_promise_test', () => {
6
+ const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
7
+ const nako = new NakoCompiler()
8
+ nako.logger.debug('code=' + code)
9
+ const g = nako.runSync(code)
10
+ assert.strictEqual(g.log, res)
11
+ }
12
+ // --- test ---
13
+ // eslint-disable-next-line no-undef
14
+ it('Promise', async () => {
15
+ cmp('Fは動いた時には(成功,失敗)\n成功(9)\nここまで\nFの成功した時には\n対象を表示\nここまで\nその失敗した時には\n"NG"を表示\nここまで', '9')
16
+ cmp('Fは動いた時には(成功,失敗)\n失敗(5)\nここまで\nFの成功した時には\n"NG"を表示\nここまで\nその失敗した時には\n対象を表示\nここまで', '5')
17
+ })
18
+ })