nadesiko3 3.2.27
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.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/bin/cnako3 +10 -0
- package/bin/cnako3.bat +11 -0
- package/bin/nako3server.bat +6 -0
- package/demo/ace_editor.html +90 -0
- package/demo/ace_editor_tabs.html +162 -0
- package/demo/basic.html +71 -0
- package/demo/browsers.html +128 -0
- package/demo/css/basic.css +3 -0
- package/demo/css/common.css +157 -0
- package/demo/css/editor.css +8 -0
- package/demo/css/flow.css +3 -0
- package/demo/css/index.css +3 -0
- package/demo/extlib/ace@1.4.12/ace.js +17 -0
- package/demo/extlib/ace@1.4.12/ext-code_lens.min.js +1 -0
- package/demo/extlib/ace@1.4.12/ext-language_tools.min.js +1 -0
- package/demo/extlib/ace@1.4.12/ext-options.min.js +1 -0
- package/demo/extlib/ace@1.4.12/ext-settings_menu.js +8 -0
- package/demo/extlib/ace@1.4.12/keybinding-vscode.js +8 -0
- package/demo/extlib/ace@1.4.12/theme-monokai.js +8 -0
- package/demo/extlib/ace@1.4.12/theme-xcode.js +8 -0
- package/demo/extlib/chart.js@3.2.1/chart.min.js +13 -0
- package/demo/extlib/pure-min.css +11 -0
- package/demo/flow.html +97 -0
- package/demo/graph.html +53 -0
- package/demo/image/nako.png +0 -0
- package/demo/image/nakopad-icon256.png +0 -0
- package/demo/image/turtle.fla +0 -0
- package/demo/image/turtle.png +0 -0
- package/demo/index.html +134 -0
- package/demo/js/common.js +17 -0
- package/demo/js/turtle3d_test.js +44 -0
- package/demo/js/turtle_test.js +44 -0
- package/demo/runscript.html +47 -0
- package/demo/runscript2.html +33 -0
- package/demo/turtle.html +58 -0
- package/demo/turtle2.html +141 -0
- package/demo/turtle3.html +278 -0
- package/demo/turtle3d.html +58 -0
- package/demo/turtle3d2.html +107 -0
- package/demo/version.html +24 -0
- package/doc/SETUP.md +172 -0
- package/doc/about.md +34 -0
- package/doc/browsers.md +60 -0
- package/doc/docgen.md +21 -0
- package/doc/editor.md +44 -0
- package/doc/files.md +37 -0
- package/doc/plugins.md +195 -0
- package/doc/release.md +78 -0
- package/doc/win32.md +57 -0
- package/package.json +196 -0
- package/release/_hash.txt +65 -0
- package/release/_script-tags.txt +13 -0
- package/release/command.json +1 -0
- package/release/command.json.js +1 -0
- package/release/command_cnako3.json +1 -0
- package/release/command_list.json +1 -0
- package/release/editor.js +2 -0
- package/release/editor.js.LICENSE.txt +32 -0
- package/release/josi.json +48 -0
- package/release/nako_gen_async.js +1 -0
- package/release/nako_gen_async.js.LICENSE.txt +595 -0
- package/release/plugin_caniuse.js +1 -0
- package/release/plugin_caniuse.js.LICENSE.txt +411 -0
- package/release/plugin_csv.js +1 -0
- package/release/plugin_csv.js.LICENSE.txt +367 -0
- package/release/plugin_datetime.js +1 -0
- package/release/plugin_datetime.js.LICENSE.txt +471 -0
- package/release/plugin_kansuji.js +1 -0
- package/release/plugin_kansuji.js.LICENSE.txt +491 -0
- package/release/plugin_markup.js +1 -0
- package/release/plugin_markup.js.LICENSE.txt +363 -0
- package/release/plugin_turtle.js +1 -0
- package/release/plugin_turtle.js.LICENSE.txt +435 -0
- package/release/plugin_webworker.js +1 -0
- package/release/plugin_webworker.js.LICENSE.txt +491 -0
- package/release/version.js +2 -0
- package/release/version.js.LICENSE.txt +32 -0
- package/release/wnako3.js +2 -0
- package/release/wnako3.js.LICENSE.txt +1 -0
- package/release/wnako3webworker.js +1 -0
- package/release/wnako3webworker.js.LICENSE.txt +847 -0
- package/release/yoyakugo.json +30 -0
- package/src/browsers.md +60 -0
- package/src/cnako3.js +466 -0
- package/src/commander_ja.js +154 -0
- package/src/enako3.js +69 -0
- package/src/era.json +22 -0
- package/src/index.js +5 -0
- package/src/nako3.js +836 -0
- package/src/nako3_assert.js +37 -0
- package/src/nako3editorfix.sfd +106 -0
- package/src/nako3editorfix.woff +0 -0
- package/src/nako3server.js +51 -0
- package/src/nako_colors.js +86 -0
- package/src/nako_errors.js +176 -0
- package/src/nako_gen.js +1459 -0
- package/src/nako_gen_async.js +1622 -0
- package/src/nako_global.js +113 -0
- package/src/nako_indent.js +480 -0
- package/src/nako_josi_list.js +46 -0
- package/src/nako_lex_rules.js +259 -0
- package/src/nako_lexer.js +576 -0
- package/src/nako_logger.js +138 -0
- package/src/nako_parser3.js +1768 -0
- package/src/nako_parser_base.js +265 -0
- package/src/nako_parser_const.js +37 -0
- package/src/nako_prepare.js +293 -0
- package/src/nako_reserved_words.js +35 -0
- package/src/nako_source_mapping.js +251 -0
- package/src/nako_test.js +37 -0
- package/src/nako_version.js +8 -0
- package/src/plugin_browser.js +191 -0
- package/src/plugin_browser_ajax.js +352 -0
- package/src/plugin_browser_audio.js +109 -0
- package/src/plugin_browser_canvas.js +462 -0
- package/src/plugin_browser_chart.js +296 -0
- package/src/plugin_browser_color.js +49 -0
- package/src/plugin_browser_crypto.js +26 -0
- package/src/plugin_browser_dialog.js +53 -0
- package/src/plugin_browser_dom_basic.js +322 -0
- package/src/plugin_browser_dom_event.js +193 -0
- package/src/plugin_browser_dom_parts.js +163 -0
- package/src/plugin_browser_geolocation.js +51 -0
- package/src/plugin_browser_hotkey.js +25 -0
- package/src/plugin_browser_html.js +59 -0
- package/src/plugin_browser_in_worker.js +44 -0
- package/src/plugin_browser_location.js +21 -0
- package/src/plugin_browser_speech.js +111 -0
- package/src/plugin_browser_storage.js +121 -0
- package/src/plugin_browser_system.js +12 -0
- package/src/plugin_browser_websocket.js +73 -0
- package/src/plugin_caniuse.js +24 -0
- package/src/plugin_csv.js +57 -0
- package/src/plugin_datetime.js +414 -0
- package/src/plugin_express.js +212 -0
- package/src/plugin_kansuji.js +224 -0
- package/src/plugin_keigo.js +55 -0
- package/src/plugin_markup.js +32 -0
- package/src/plugin_math.js +319 -0
- package/src/plugin_node.js +1018 -0
- package/src/plugin_promise.js +94 -0
- package/src/plugin_system.js +2109 -0
- package/src/plugin_test.js +38 -0
- package/src/plugin_turtle.js +646 -0
- package/src/plugin_webworker.js +334 -0
- package/src/plugin_weykturtle3d.js +1216 -0
- package/src/plugin_worker.js +92 -0
- package/src/repl.nako3 +63 -0
- package/src/turtle-elephant.png +0 -0
- package/src/turtle-panda.png +0 -0
- package/src/turtle64.png +0 -0
- package/src/wnako3.js +162 -0
- package/src/wnako3_editor.css +215 -0
- package/src/wnako3_editor.js +1645 -0
- package/src/wnako3_editor_marker_red.png +0 -0
- package/src/wnako3_editor_marker_red.xcf +0 -0
- package/src/wnako3_editor_marker_yellow.png +0 -0
- package/src/wnako3_editor_marker_yellow.xcf +0 -0
- package/src/wnako3webworker.js +70 -0
- package/test/ace_editor/karma.config.js +94 -0
- package/test/ace_editor/test/.babelrc.json +3 -0
- package/test/ace_editor/test/ace_editor_test.js +178 -0
- package/test/ace_editor/test/html/custom_context.html +140 -0
- package/test/async/async_basic_test.js +124 -0
- package/test/browser/karma.config.js +212 -0
- package/test/browser/test/.babelrc.json +3 -0
- package/test/browser/test/compare_util.js +50 -0
- package/test/browser/test/html/canvas_basic.html +1 -0
- package/test/browser/test/html/div_basic.html +2 -0
- package/test/browser/test/html/event_dom_form.html +4 -0
- package/test/browser/test/html/event_dom_scrolldiv.html +5 -0
- package/test/browser/test/image/canvas_test1.png +0 -0
- package/test/browser/test/image/canvas_test2.png +0 -0
- package/test/browser/test/image/canvas_test3.png +0 -0
- package/test/browser/test/image/canvas_test4.png +0 -0
- package/test/browser/test/image/canvas_test7.png +0 -0
- package/test/browser/test/image/canvas_test8.png +0 -0
- package/test/browser/test/image/canvas_test_blank.png +0 -0
- package/test/browser/test/image/elephant_kana.png +0 -0
- package/test/browser/test/image/panda_kana.png +0 -0
- package/test/browser/test/image/turtle_kana.png +0 -0
- package/test/browser/test/import_plugin_checker.js +24 -0
- package/test/browser/test/plugin_browser_test.js +52 -0
- package/test/browser/test/plugin_browser_test_ajax.js +123 -0
- package/test/browser/test/plugin_browser_test_color.js +18 -0
- package/test/browser/test/plugin_browser_test_dialog.js +72 -0
- package/test/browser/test/plugin_browser_test_dom_event.js +598 -0
- package/test/browser/test/plugin_browser_test_dom_parts.js +125 -0
- package/test/browser/test/plugin_browser_test_system.js +9 -0
- package/test/browser/test/plugin_turtle_test.js +817 -0
- package/test/browser/test/plugin_webworker_test.js +87 -0
- package/test/browser/test/require_test.js +71 -0
- package/test/bundled/karma.config.base.js +117 -0
- package/test/bundled/karma.config.js +86 -0
- package/test/bundled/test/.babelrc.json +3 -0
- package/test/bundled/test/bundled_test.js +69 -0
- package/test/bundled/test/html/custom_context.html +65 -0
- package/test/bundled/test/html/custom_debug.html +66 -0
- package/test/bundled/test4b.cmd +52 -0
- package/test/bundled/test_base/.babelrc.json +3 -0
- package/test/bundled/test_base/_checktool_test.js +25 -0
- package/test/bundled/test_base/basic_ajax_test.js +56 -0
- package/test/bundled/test_base/basic_async_test.js +18 -0
- package/test/bundled/test_base/basic_test.js +153 -0
- package/test/bundled/test_base/calc_test.js +132 -0
- package/test/bundled/test_base/css/browsers_box.css +114 -0
- package/test/bundled/test_base/html/custom_context.html +69 -0
- package/test/bundled/test_base/html/custom_debug.html +71 -0
- package/test/bundled/test_base/js/browsers_box.js +72 -0
- package/test/bundled/test_base/plugin_csv_test.js +37 -0
- package/test/bundled/test_base/plugin_datetime_test.js +115 -0
- package/test/bundled/test_base/plugin_kansuji_test.js +49 -0
- package/test/bundled/test_base/plugin_system_test.js +410 -0
- package/test/bundled/test_base/plugin_webworker_test.js +53 -0
- package/test/bundled/test_base/resources/ok.txt +1 -0
- package/test/bundled/test_base/test_utils.js +191 -0
- package/test/common/array_test.js +40 -0
- package/test/common/basic_test.js +317 -0
- package/test/common/calc_test.js +139 -0
- package/test/common/debug_test.js +16 -0
- package/test/common/error_test.js +16 -0
- package/test/common/flow_test.js +360 -0
- package/test/common/func_call.js +136 -0
- package/test/common/func_test.js +149 -0
- package/test/common/indent_test.js +362 -0
- package/test/common/lex_test.js +146 -0
- package/test/common/literal_test.js +72 -0
- package/test/common/nako_logger_test.js +26 -0
- package/test/common/plugin_browser_test.js +24 -0
- package/test/common/plugin_browser_ut_audio_test.js +88 -0
- package/test/common/plugin_browser_ut_color_test.js +21 -0
- package/test/common/plugin_browser_ut_dialog_test.js +100 -0
- package/test/common/plugin_browser_ut_html_test.js +13 -0
- package/test/common/plugin_browser_ut_system_test.js +10 -0
- package/test/common/plugin_csv_test.js +39 -0
- package/test/common/plugin_datetime_test.js +120 -0
- package/test/common/plugin_kansuji_test.js +59 -0
- package/test/common/plugin_promise_test.js +18 -0
- package/test/common/plugin_system_test.js +451 -0
- package/test/common/prepare_test.js +93 -0
- package/test/common/re_test.js +20 -0
- package/test/common/variable_scope_test.js +105 -0
- package/test/jsconfig.json +19 -0
- package/test/karma.config.js +91 -0
- package/test/node/add_test.nako3 +1 -0
- package/test/node/async_test.js +80 -0
- package/test/node/commander_ja_test.js +82 -0
- package/test/node/error_message_test.js +244 -0
- package/test/node/kai_test.nako3 +6 -0
- package/test/node/node_test.js +43 -0
- package/test/node/plugin_broken.js.txt +3 -0
- package/test/node/plugin_browser_ut_ajax_test.js +355 -0
- package/test/node/plugin_browser_ut_location_test.js +32 -0
- package/test/node/plugin_markup_test.js +44 -0
- package/test/node/plugin_math_test.js +42 -0
- package/test/node/plugin_node_test.js +93 -0
- package/test/node/plugin_test.js +16 -0
- package/test/node/relative_import_test_1.nako3 +1 -0
- package/test/node/relative_import_test_2.nako3 +2 -0
- package/test/node/require_nako3_test.js +59 -0
- package/test/node/requiretest.nako3 +4 -0
- package/test/node/requiretest_indirect.nako3 +1 -0
- package/test/node/requiretest_name.nako3 +5 -0
- package/test/node/runtime_error.nako3 +2 -0
- package/test/node/side_effects_test.js +106 -0
- package/test/node/sjis.txt +5 -0
- package/test/node/syntax_error.nako3 +2 -0
- package/test/node/wnako3_editor_test.js +360 -0
- package/tools/README.md +7 -0
- package/tools/nako3edit/html/edit.html +83 -0
- package/tools/nako3edit/html/edit_plugin.js +6 -0
- package/tools/nako3edit/html/files.html +49 -0
- package/tools/nako3edit/html/nako3edit.css +66 -0
- package/tools/nako3edit/index.nako3 +145 -0
- package/tools/nako3edit/run.js +12 -0
- package/tools/nako3server/html/edit.html +104 -0
- package/tools/nako3server/html/edit_plugin.js +6 -0
- package/tools/nako3server/html/files.html +53 -0
- package/tools/nako3server/html/nako3edit.css +66 -0
- package/tools/nako3server/index.nako3 +129 -0
- package/tools/nako3server/run.js +12 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const NakoCompiler = require('../../src/nako3')
|
|
3
|
+
|
|
4
|
+
describe('plugin_system_test', () => {
|
|
5
|
+
const nako = new NakoCompiler()
|
|
6
|
+
// nako.logger.addListener('trace', ({ browserConsole }) => { console.log(...browserConsole) })
|
|
7
|
+
const cmp = (code, res) => {
|
|
8
|
+
nako.logger.debug('code=' + code)
|
|
9
|
+
assert.strictEqual(nako.run(code).log, res)
|
|
10
|
+
}
|
|
11
|
+
const cmpex = (code, exinfo) => {
|
|
12
|
+
nako.logger.debug('code=' + code)
|
|
13
|
+
assert.throws(() => { nako.run(code) }, exinfo)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// --- test ---
|
|
17
|
+
it('ナデシコエンジンを表示', () => {
|
|
18
|
+
cmp('ナデシコエンジンを表示', 'nadesi.com/v3')
|
|
19
|
+
})
|
|
20
|
+
it('四則演算', () => {
|
|
21
|
+
cmp('1に2を足して3を掛けて表示', '9')
|
|
22
|
+
cmp('10を2で割って表示', '5')
|
|
23
|
+
cmp('10を2で割った余り;それを表示', '0')
|
|
24
|
+
cmp('10の2倍;それを表示', '20')
|
|
25
|
+
cmp('V=3;もし(Vが1から5の範囲内)ならば「OK」と表示;違えば「NG」と表示。', 'OK')
|
|
26
|
+
cmp('V=30;もし(Vが1から5の範囲内)ならば「IN」と表示;違えば「OUT」と表示。', 'OUT')
|
|
27
|
+
cmp('もし、1が2と等しく無いならば「OK」を表示。', 'OK')
|
|
28
|
+
cmp('もし、1が2と不一致ならば「OK」を表示。', 'OK')
|
|
29
|
+
cmp('もし、[1,2]が[1,1]と不一致ならば「OK」を表示。', 'OK')
|
|
30
|
+
})
|
|
31
|
+
it('JS実行', () => {
|
|
32
|
+
cmp('「3+6」をJS実行して表示', '9')
|
|
33
|
+
cmp('「Math.floor(3.5)」をJS実行して表示', '3')
|
|
34
|
+
})
|
|
35
|
+
it('型変換', () => {
|
|
36
|
+
cmp('「3.14」を文字列変換して表示', '3.14')
|
|
37
|
+
cmp('「0xFF」を整数変換して表示', '255')
|
|
38
|
+
})
|
|
39
|
+
it('変数型確認', () => {
|
|
40
|
+
cmp('30の変数型確認して表示。', 'number')
|
|
41
|
+
})
|
|
42
|
+
it('SIN/COS/TAN', () => {
|
|
43
|
+
cmp('SIN(1)を表示。', '' + Math.sin(1))
|
|
44
|
+
cmp('COS(1)を表示。', '' + Math.cos(1))
|
|
45
|
+
cmp('TAN(1)を表示。', '' + Math.tan(1))
|
|
46
|
+
})
|
|
47
|
+
it('RGB', () => {
|
|
48
|
+
cmp('RGB(255,255,0)を表示。', '#ffff00')
|
|
49
|
+
})
|
|
50
|
+
it('LOGN', () => {
|
|
51
|
+
cmp('LOGN(10,10)を表示。', '' + (Math.LOG10E * Math.log(10)))
|
|
52
|
+
cmp('LOGN(2,10)を表示。', '' + (Math.LOG2E * Math.log(10)))
|
|
53
|
+
})
|
|
54
|
+
it('文字挿入', () => {
|
|
55
|
+
cmp('「12345」の2に「**」を文字挿入して表示', '1**2345')
|
|
56
|
+
cmp('「12345」の1に「**」を文字挿入して表示', '**12345')
|
|
57
|
+
cmp('「12345」の6に「**」を文字挿入して表示', '12345**')
|
|
58
|
+
cmp('「12345」の0に「**」を文字挿入して表示', '**12345')
|
|
59
|
+
})
|
|
60
|
+
it('出現回数', () => {
|
|
61
|
+
cmp('「aabbccaabbcc」で「aa」の出現回数。表示', '2')
|
|
62
|
+
cmp('「aa**bb**cc」で「**」の出現回数。表示', '2')
|
|
63
|
+
cmp('「aa.+bb.+cc」で「.+」の出現回数。表示', '2')
|
|
64
|
+
})
|
|
65
|
+
it('シングル文字列', () => {
|
|
66
|
+
cmp('\'abcd\'を表示。', 'abcd')
|
|
67
|
+
})
|
|
68
|
+
it('文字抜き出す', () => {
|
|
69
|
+
cmp('MID(\'abcdef\',1,2)を表示', 'ab')
|
|
70
|
+
cmp('「abcdef」の1から2を文字抜き出しを表示', 'ab')
|
|
71
|
+
cmp('MID(\'abcdefg\',3,2)を表示', 'cd')
|
|
72
|
+
cmp('「abcdefg」の3から2を文字抜き出しを表示', 'cd')
|
|
73
|
+
cmp('MID(\'abcd\',4,2)を表示', 'd')
|
|
74
|
+
cmp('「abcd」の4から2を文字抜き出しを表示', 'd')
|
|
75
|
+
})
|
|
76
|
+
it('RIGHT', () => {
|
|
77
|
+
cmp('RIGHT(\'abcdef\',2)を表示', 'ef')
|
|
78
|
+
cmp('「abcde」の3だけ文字右部分。それを表示', 'cde')
|
|
79
|
+
})
|
|
80
|
+
it('LEFT', () => {
|
|
81
|
+
cmp('LEFT(\'abcd\',2)を表示', 'ab')
|
|
82
|
+
cmp('「abcde」の3だけ文字左部分。それを表示', 'abc')
|
|
83
|
+
})
|
|
84
|
+
it('切り取る', () => {
|
|
85
|
+
cmp('「abc,def,ghi」から「,」まで切り取る。それを表示。', 'abc')
|
|
86
|
+
cmp('「a,b,c」から「*」まで切り取る。それを表示。', 'a,b,c')
|
|
87
|
+
})
|
|
88
|
+
it('文字削除', () => {
|
|
89
|
+
cmp('「abcd」の1から2だけ文字削除。それを表示。', 'cd')
|
|
90
|
+
cmp('「abcd」の2から2だけ文字削除。それを表示。', 'ad')
|
|
91
|
+
cmp('A=「ab」;「abcd」の1から(Aの文字数)だけ文字削除。それを表示。', 'cd')
|
|
92
|
+
})
|
|
93
|
+
it('置換', () => {
|
|
94
|
+
cmp('「a,b,c」の「,」を「-」に置換して表示。', 'a-b-c')
|
|
95
|
+
cmp('「e,f,g」の「,」を「-」へ単置換して表示。', 'e-f,g')
|
|
96
|
+
})
|
|
97
|
+
it('空白除去', () => {
|
|
98
|
+
cmp('「 aaa 」の空白除去して表示。', 'aaa')
|
|
99
|
+
})
|
|
100
|
+
it('正規表現置換', () => {
|
|
101
|
+
cmp('「aa,bb,cc」の「[a-z]+」を「x」で正規表現置換して表示。', 'x,x,x')
|
|
102
|
+
cmp('「aa,bb,cc」の「/[a-z]+/」を「x」で正規表現置換して表示。', 'x,bb,cc')
|
|
103
|
+
cmp('「aa,bb,cc」の「/[a-z]+/g」を「x」で正規表現置換して表示。', 'x,x,x')
|
|
104
|
+
})
|
|
105
|
+
it('正規表現マッチ - /.../を省略', () => {
|
|
106
|
+
// パターンを省略するとグローバルマッチ
|
|
107
|
+
cmp('「aa,bb,cc」を「[a-z]+」で正規表現マッチ。JSONエンコード。表示。', '["aa","bb","cc"]')
|
|
108
|
+
// グループを指定しても、結果は無視
|
|
109
|
+
cmp('「aa,bb,cc」を「([a-z]+)」で正規表現マッチ。JSONエンコード。表示。', '["aa","bb","cc"]')
|
|
110
|
+
})
|
|
111
|
+
it('正規表現マッチ - /.../あり グルーピングなし', () => {
|
|
112
|
+
cmp('「12-34-56」を「/[0-9]+\\-/」で正規表現マッチ。JSONエンコード。表示。', '"12-"')
|
|
113
|
+
})
|
|
114
|
+
it('正規表現マッチ - /.../あり グルーピングあり', () => {
|
|
115
|
+
// グループ(..)を指定した場合
|
|
116
|
+
cmp('「12-34-56」を「/([0-9]+)\\-/」で正規表現マッチ。JSONエンコード。表示。抽出文字列をJSONエンコードして表示。', '"12-"\n["12"]')
|
|
117
|
+
})
|
|
118
|
+
it('正規表現マッチ2', () => {
|
|
119
|
+
cmp('「AA,BB,CC」を「/^[a-z]+/i」で正規表現マッチ。表示。', 'AA')
|
|
120
|
+
})
|
|
121
|
+
it('正規表現区切る', () => {
|
|
122
|
+
cmp('「aa,bb,cc」を「/\\,/g」で正規表現区切る。JSONエンコード。表示。', '["aa","bb","cc"]')
|
|
123
|
+
})
|
|
124
|
+
it('通貨形式', () => {
|
|
125
|
+
cmp('12345を通貨形式。表示。', '12,345')
|
|
126
|
+
cmp('1000を通貨形式。表示。', '1,000')
|
|
127
|
+
})
|
|
128
|
+
it('ゼロ埋め', () => {
|
|
129
|
+
cmp('10を3でゼロ埋め。表示。', '010')
|
|
130
|
+
cmp('123を5でゼロ埋め。表示。', '00123')
|
|
131
|
+
cmp('12345を3でゼロ埋め。表示。', '12345')
|
|
132
|
+
})
|
|
133
|
+
it('空白埋め', () => {
|
|
134
|
+
cmp('10を3で空白埋め。表示。', ' 10')
|
|
135
|
+
cmp('「10」を3で空白埋め。表示。', ' 10')
|
|
136
|
+
cmp('「010」を4で空白埋め。表示。', ' 010')
|
|
137
|
+
cmp('「123」を5で空白埋め。表示。', ' 123')
|
|
138
|
+
cmp('「12345」を3で空白埋め。表示。', '12345')
|
|
139
|
+
})
|
|
140
|
+
it('配列要素数', () => {
|
|
141
|
+
cmp('A=[0,1,2,3];Aの配列要素数。表示。', '4')
|
|
142
|
+
cmp('A={"a":1,"b":2,"c":3};Aの配列要素数。表示。', '3')
|
|
143
|
+
})
|
|
144
|
+
it('配列一括挿入', () => {
|
|
145
|
+
cmp('A=[1,1,1];Aの1に[0,0]を配列一括挿入。JSONエンコード。表示。', '[1,0,0,1,1]')
|
|
146
|
+
})
|
|
147
|
+
it('配列ソート', () => {
|
|
148
|
+
cmp('A=[\'ccc\',\'bb\',\'aaa\'];Aを配列ソート。Aを「:」で配列結合。表示。', 'aaa:bb:ccc')
|
|
149
|
+
})
|
|
150
|
+
it('配列数値ソート', () => {
|
|
151
|
+
cmp('A=[\'a\',1,3,2];Aを配列数値ソート。Aを「:」で配列結合。表示。', 'a:1:2:3')
|
|
152
|
+
cmp('A=[\'30\',\'222\',\'55\'];Aを配列数値ソート。Aを「:」で配列結合。表示。', '30:55:222')
|
|
153
|
+
})
|
|
154
|
+
it('配列カスタムソート', () => {
|
|
155
|
+
cmp('●HOGE(aをbで)\n(b-a)を戻す\nここまで\n' +
|
|
156
|
+
'A=[1,5,3];Aを「HOGE」で配列カスタムソート。Aを「:」で配列結合。表示。', '5:3:1')
|
|
157
|
+
})
|
|
158
|
+
it('配列逆順', () => {
|
|
159
|
+
cmp('A=[1,2,3];Aを配列逆順。Aを「:」で配列結合。表示。', '3:2:1')
|
|
160
|
+
})
|
|
161
|
+
it('配列切取/配列削除', () => {
|
|
162
|
+
cmp('A=[0,1,2,3];Aの2を配列切り取る。C=それ。Aを「:」で配列結合。表示。Cを表示', '0:1:3\n2')
|
|
163
|
+
cmp('A=[0,1,2,3];Aから2を配列削除。C=それ。Aを「:」で配列結合。表示。Cを表示', '0:1:3\n2')
|
|
164
|
+
cmp('A=[[1,2],[3,4],[5,6]];' +
|
|
165
|
+
'Aから2を配列削除して「:」で配列結合して表示。' +
|
|
166
|
+
'Aの要素数を表示。', '5:6\n2')
|
|
167
|
+
cmp('A=[[1,2],[3,4],[5,6]];' +
|
|
168
|
+
'Aから0を配列削除;' +
|
|
169
|
+
'A[0]を「:」で配列結合して表示。', '3:4')
|
|
170
|
+
})
|
|
171
|
+
it('配列削除で辞書型変数を指定', () => {
|
|
172
|
+
cmp('A={"aaa":1,"bbb":2};' +
|
|
173
|
+
'Aから"aaa"を配列削除;' +
|
|
174
|
+
'AをJSONエンコードして表示。', '{"bbb":2}')
|
|
175
|
+
})
|
|
176
|
+
it('配列複製', () => {
|
|
177
|
+
cmp('A=[1,2,3];B=Aを配列複製。B[0]=100。Bを「:」で配列結合。表示。', '100:2:3')
|
|
178
|
+
cmp('A=[1,2,3];B=Aを配列複製。B[0]=100。Aを「:」で配列結合。表示。', '1:2:3')
|
|
179
|
+
})
|
|
180
|
+
it('配列足す', () => {
|
|
181
|
+
cmp('A=[1,2,3];B=[4,5,6];AにBを配列足してJSONエンコードして表示。', '[1,2,3,4,5,6]')
|
|
182
|
+
cmp('A=[1,2,3];B=[4,5,6];AにBを配列足してCに代入。AをJSONエンコードして表示', '[1,2,3]') // A自体は変更しない
|
|
183
|
+
})
|
|
184
|
+
it('配列最大値', () => {
|
|
185
|
+
cmp('[2,1,3]の配列最大値を表示', '3')
|
|
186
|
+
})
|
|
187
|
+
it('配列最小値', () => {
|
|
188
|
+
cmp('[2,1,3]の配列最小値を表示', '1')
|
|
189
|
+
})
|
|
190
|
+
it('配列合計', () => {
|
|
191
|
+
cmp('[1,2,3]の配列合計を表示', '6')
|
|
192
|
+
cmp('[10,100]の配列合計を表示', '110')
|
|
193
|
+
cmp('["a","b","c"]の配列合計を表示', '0')
|
|
194
|
+
cmp('[10,100,"c"]の配列合計を表示', '110')
|
|
195
|
+
})
|
|
196
|
+
it('表ソート', () => {
|
|
197
|
+
cmp('A=[[4,4,"b"],[2,2,"a"],[5,5,"c"]];Aの2を表ソート。AをJSONエンコードして表示。', '[[2,2,"a"],[4,4,"b"],[5,5,"c"]]')
|
|
198
|
+
cmp('A=[[1,"12",4],[2,"1",2],[3,"2",5]];Aの1を表ソート。AをJSONエンコードして表示。', '[[2,"1",2],[1,"12",4],[3,"2",5]]')
|
|
199
|
+
cmp('A=[{n:"b"},{n:"a"},{n:"c"}];Aの"n"を表ソート。AをJSONエンコードして表示。', '[{"n":"a"},{"n":"b"},{"n":"c"}]')
|
|
200
|
+
})
|
|
201
|
+
it('表数値ソート', () => {
|
|
202
|
+
cmp('A=[[4,4,4],[2,2,2],[5,5,5]];Aの1を表数値ソート。AをJSONエンコードして表示。', '[[2,2,2],[4,4,4],[5,5,5]]')
|
|
203
|
+
cmp('A=[[1,4,4],[2,2,2],[3,5,5]];Aの1を表数値ソート。AをJSONエンコードして表示。', '[[2,2,2],[1,4,4],[3,5,5]]')
|
|
204
|
+
cmp('A=[{n:11},{n:9},{n:13}];Aの"n"を表数値ソート。AをJSONエンコードして表示。', '[{"n":9},{"n":11},{"n":13}]')
|
|
205
|
+
})
|
|
206
|
+
it('表ピックアップ', () => {
|
|
207
|
+
cmp('A=[["赤",1],["青",2],["緑",3]];Aの0から「赤」を表ピックアップしてJSONエンコードして表示。', '[["赤",1]]')
|
|
208
|
+
cmp('A=[{n:"赤猫"},{n:"青犬"},{n:"白兎"},{n:"青魚"}];Aの"n"から「青」を表ピックアップしてJSONエンコードして表示。', '[{"n":"青犬"},{"n":"青魚"}]')
|
|
209
|
+
cmp('A=[["赤猫",1],["青雉",2],["緑猫",3],["赤字",4]];Aの0から「赤」を表ピックアップしてJSONエンコードして表示。', '[["赤猫",1],["赤字",4]]')
|
|
210
|
+
})
|
|
211
|
+
it('表完全一致ピックアップ', () => {
|
|
212
|
+
cmp('A=[["赤猫",1],["青雉",2],["緑猫",3],["赤字",4]];Aの0から「赤」を表完全一致ピックアップしてJSONエンコードして表示。', '[]')
|
|
213
|
+
cmp('A=[["赤猫",1],["青雉",2],["緑猫",3],["赤字",4]];Aの0から「赤猫」を表完全一致ピックアップしてJSONエンコードして表示。', '[["赤猫",1]]')
|
|
214
|
+
cmp('A=[{n:"赤猫"},{n:"青犬"},{n:"白兎"},{n:"青魚"}];Aの"n"から「青」を表完全一致ピックアップしてJSONエンコードして表示。', '[]')
|
|
215
|
+
})
|
|
216
|
+
it('表検索', () => {
|
|
217
|
+
cmp('A=[["赤",1],["青",2],["緑",3]];Aの0で0から「青」を表検索して表示。', '1')
|
|
218
|
+
cmp('A=[["赤",1],["青",2],["緑",3]];Aの0で0から「紫」を表検索して表示。', '-1')
|
|
219
|
+
})
|
|
220
|
+
it('表列数', () => {
|
|
221
|
+
cmp('A=[["赤",1],["青",2],["緑",3,3]];Aの表列数を表示。', '3')
|
|
222
|
+
cmp('A=["a","b"];Aの表列数を表示。', '1')
|
|
223
|
+
})
|
|
224
|
+
it('表行列交換', () => {
|
|
225
|
+
cmp('A=[["赤",1],["青",2],["緑",3]];Aを表行列交換してJSONエンコードして表示。', '[["赤","青","緑"],[1,2,3]]')
|
|
226
|
+
cmp('A=[[1,2,3],[4,5,6]];Aを表行列交換してJSONエンコードして表示。', '[[1,4],[2,5],[3,6]]')
|
|
227
|
+
cmp('A=[[1,2,3,4],[4,5,6]];Aを表行列交換してJSONエンコードして表示。', '[[1,4],[2,5],[3,6],[4,""]]')
|
|
228
|
+
})
|
|
229
|
+
it('表右回転', () => {
|
|
230
|
+
cmp('A=[[1,2,3],[4,5,6]];Aを表右回転してJSONエンコードして表示。', '[[4,1],[5,2],[6,3]]')
|
|
231
|
+
})
|
|
232
|
+
it('表重複削除', () => {
|
|
233
|
+
cmp('A=[[1,2,3],[1,1,1],[4,5,6]];Aの0を表重複削除してJSONエンコードして表示。', '[[1,2,3],[4,5,6]]')
|
|
234
|
+
})
|
|
235
|
+
it('表列取得', () => {
|
|
236
|
+
cmp('A=[[1,2,3],[4,5,6]];Aの1を表列取得してJSONエンコードして表示。', '[2,5]')
|
|
237
|
+
})
|
|
238
|
+
it('表列挿入', () => {
|
|
239
|
+
cmp('A=[[1,2,3],[4,5,6]];Aの0へ[9,9]を表列挿入してJSONエンコードして表示。', '[[9,1,2,3],[9,4,5,6]]')
|
|
240
|
+
cmp('A=[[1,2,3],[4,5,6]];Aの1へ[9,9]を表列挿入してJSONエンコードして表示。', '[[1,9,2,3],[4,9,5,6]]')
|
|
241
|
+
})
|
|
242
|
+
it('表列削除', () => {
|
|
243
|
+
cmp('A=[[1,2,3],[4,5,6]];Aの1を表列削除してJSONエンコードして表示。', '[[1,3],[4,6]]')
|
|
244
|
+
})
|
|
245
|
+
it('表列合計', () => {
|
|
246
|
+
cmp('A=[[1,2,3],[4,5,6]];Aの1を表列合計して表示。', '7')
|
|
247
|
+
})
|
|
248
|
+
it('表曖昧検索', () => {
|
|
249
|
+
cmp('A=[[1,"佐藤"],[2,"加藤"]];Aの0から1で「佐」を表曖昧検索して表示。', '0')
|
|
250
|
+
})
|
|
251
|
+
it('表正規表現ピックアップ', () => {
|
|
252
|
+
cmp('A=[[1,"佐藤"],[2,"加藤"]];Aの1から「佐」を表正規表現ピックアップしてJSONエンコードして表示。', '[[1,"佐藤"]]')
|
|
253
|
+
cmp('A=[[1,"佐藤"],[2,"加藤"]];Aの1から「.+藤」を表正規表現ピックアップしてJSONエンコードして表示。', '[[1,"佐藤"],[2,"加藤"]]')
|
|
254
|
+
})
|
|
255
|
+
it('文字種変換', () => {
|
|
256
|
+
cmp('「abc」を大文字変換して表示', 'ABC')
|
|
257
|
+
cmp('「ABC」を小文字変換して表示', 'abc')
|
|
258
|
+
cmp('「アイウ」を平仮名変換して表示', 'あいう')
|
|
259
|
+
cmp('「あいう」をカタカナ変換して表示', 'アイウ')
|
|
260
|
+
})
|
|
261
|
+
it('空配列', () => {
|
|
262
|
+
cmp('A=空配列;A@0=10;A@1=20;A@2=30;A@1を表示。', '20')
|
|
263
|
+
})
|
|
264
|
+
it('空ハッシュ', () => {
|
|
265
|
+
cmp('A=空ハッシュ;A[「あ」]=10;A[「い」]=20;A[「う」]=30;A[「い」]を表示。', '20')
|
|
266
|
+
})
|
|
267
|
+
it('空オブジェクト', () => {
|
|
268
|
+
cmp('A=空オブジェクト;A[「あ」]=10;A[「い」]=20;A[「う」]=30;A[「い」]を表示。', '20')
|
|
269
|
+
})
|
|
270
|
+
it('四捨五入', () => {
|
|
271
|
+
cmp('3.14を四捨五入して表示。', '3')
|
|
272
|
+
cmp('3.6を四捨五入して表示。', '4')
|
|
273
|
+
cmp('3.5を四捨五入して表示。', '4')
|
|
274
|
+
cmp('3.15を1で小数点四捨五入して表示。', '3.2')
|
|
275
|
+
cmp('3.14を1で小数点四捨五入して表示。', '3.1')
|
|
276
|
+
})
|
|
277
|
+
it('切り上げ・切り捨て', () => {
|
|
278
|
+
cmp('3.14を切り上げして表示。', '4')
|
|
279
|
+
cmp('3.8を切り上げして表示。', '4')
|
|
280
|
+
cmp('3.1を切り捨てして表示。', '3')
|
|
281
|
+
cmp('3.8を切り捨てして表示。', '3')
|
|
282
|
+
cmp('0.31を1で小数点切り上げして表示。', '0.4')
|
|
283
|
+
cmp('0.38を1で小数点切り下げして表示。', '0.3')
|
|
284
|
+
})
|
|
285
|
+
it('カタカナか判定', () => {
|
|
286
|
+
cmp('「アイウエオ」がカタカナか判定して表示。', 'true')
|
|
287
|
+
cmp('「あいうえお」がカタカナか判定して表示。', 'false')
|
|
288
|
+
})
|
|
289
|
+
it('数字か判定', () => {
|
|
290
|
+
cmp('「12345」が数字か判定して表示。', 'true')
|
|
291
|
+
cmp('「あいうえお」が数字か判定して表示。', 'false')
|
|
292
|
+
})
|
|
293
|
+
it('数列か判定', () => {
|
|
294
|
+
cmp('「12345」が数列か判定して表示。', 'true')
|
|
295
|
+
cmp('「あいうえお」が数列か判定して表示。', 'false')
|
|
296
|
+
})
|
|
297
|
+
it('XOR', () => {
|
|
298
|
+
cmp('XOR(0xFF, 0xF)を表示。', '240')
|
|
299
|
+
})
|
|
300
|
+
it('進数変換', () => {
|
|
301
|
+
cmp('255を16進数変換して大文字変換して表示。', 'FF')
|
|
302
|
+
})
|
|
303
|
+
it('CHR-サロゲートペアを考慮', () => {
|
|
304
|
+
cmp('CHR(12354)を表示。', 'あ')
|
|
305
|
+
cmp('CHR(0x5200)を表示。', '刀')
|
|
306
|
+
cmp('CHR(0x29E3D)を表示。', '𩸽')
|
|
307
|
+
cmp('CHR(0x2A6CF)を表示。', '𪛏')
|
|
308
|
+
})
|
|
309
|
+
it('ASC-サロゲートペアを考慮', () => {
|
|
310
|
+
cmp('ASC("あ")を表示。', '12354')
|
|
311
|
+
cmp('HEX(ASC("𩸽"))を表示。', '29e3d')
|
|
312
|
+
})
|
|
313
|
+
it('文字数-サロゲートペアを考慮', () => {
|
|
314
|
+
cmp('文字数("𩸽のひらき")を表示。', '5')
|
|
315
|
+
})
|
|
316
|
+
it('文字列分解-サロゲートペアを考慮', () => {
|
|
317
|
+
cmp('JSONエンコード(文字列分解("𩸽のひらき"))を表示。', '["𩸽","の","ひ","ら","き"]')
|
|
318
|
+
})
|
|
319
|
+
it('プラグイン一覧取得', () => {
|
|
320
|
+
cmp('プラグイン一覧取得して「:」で配列結合して表示', 'PluginSystem:PluginMath:PluginPromise:PluginAssert')
|
|
321
|
+
})
|
|
322
|
+
it('配列切り取り', () => {
|
|
323
|
+
cmp('A=[0,1,2,3,4,5];Aの0を配列切り取り;表示', '0')
|
|
324
|
+
cmp('A=[0,1,2,3,4,5];Aの1を配列切り取り;Aを「:」で配列結合して表示', '0:2:3:4:5')
|
|
325
|
+
})
|
|
326
|
+
it('ハッシュ', () => {
|
|
327
|
+
cmp('A={"a":0,"b":1,"c":2};Aのハッシュキー列挙して配列ソートして「:」で配列結合して表示', 'a:b:c')
|
|
328
|
+
cmp('A={"a":0,"b":1,"c":2};Aの要素数を表示', '3')
|
|
329
|
+
cmp('A={"a":0,"b":1,"c":2};Aから「b」をハッシュキー削除して要素数を表示', '2')
|
|
330
|
+
cmp('A={"a":0,"b":1,"c":2};Aのハッシュ内容列挙して配列ソートして「:」で配列結合して表示', '0:1:2')
|
|
331
|
+
cmp('A={"a":0,"b":1,"c":2};Aに"c"がハッシュキー存在。もし、そうならば「OK」と表示。違えば、「NG」と表示。', 'OK')
|
|
332
|
+
cmp('A={"a":0,"b":1,"c":2};Aに"d"がハッシュキー存在。もし、そうならば「NG」と表示。違えば、「OK」と表示。', 'OK')
|
|
333
|
+
})
|
|
334
|
+
it('辞書型変数 #950', () => {
|
|
335
|
+
cmp('A={"a":0,"b":1,"c":2};Aの辞書キー列挙して配列ソートして「:」で配列結合して表示', 'a:b:c')
|
|
336
|
+
cmp('A={"a":0,"b":1};Aの要素数を表示', '2')
|
|
337
|
+
cmp('A={"a":0,"b":1,"c":2};Aから「b」を辞書キー削除して要素数を表示', '2')
|
|
338
|
+
cmp('A={"a":0,"b":1,"c":2};Aに"c"が辞書キー存在。もし、そうならば「OK」と表示。違えば、「NG」と表示。', 'OK')
|
|
339
|
+
})
|
|
340
|
+
it('空辞書の定義間違い #1060', () => {
|
|
341
|
+
cmp('A=空辞書。A["aaa"]=30;A["bbb"]=50;Aの辞書キー列挙して配列ソートして「:」で配列結合して表示', 'aaa:bbb')
|
|
342
|
+
})
|
|
343
|
+
it('ビット演算', () => {
|
|
344
|
+
cmp('OR(0xF0,0xF)を表示', '255')
|
|
345
|
+
cmp('AND(0xF7,0xF)を表示', '7')
|
|
346
|
+
cmp('XOR(1,1)を表示', '0')
|
|
347
|
+
cmp('XOR(0,1)を表示', '1')
|
|
348
|
+
cmp('NOT(0xFF)を表示', '-256')
|
|
349
|
+
})
|
|
350
|
+
it('論理演算', () => {
|
|
351
|
+
cmp('論理OR(1,0)を表示', '1')
|
|
352
|
+
cmp('論理AND(1,0)を表示', '0')
|
|
353
|
+
cmp('論理NOT(1)を表示', '0')
|
|
354
|
+
})
|
|
355
|
+
it('英数記号全角半角変換', () => {
|
|
356
|
+
cmp('「#!」を英数記号半角変換して表示', '#!')
|
|
357
|
+
cmp('「#!」を英数記号全角変換して表示', '#!')
|
|
358
|
+
cmp('「abc123#」を英数記号全角変換して表示', 'abc123#')
|
|
359
|
+
cmp('「abc123#」を英数記号半角変換して表示', 'abc123#')
|
|
360
|
+
cmp('「abc123」を英数全角変換して表示', 'abc123')
|
|
361
|
+
cmp('「abc123」を英数半角変換して表示', 'abc123')
|
|
362
|
+
})
|
|
363
|
+
it('カタカナ全角半角変換', () => {
|
|
364
|
+
cmp('「アガペ123」をカタカナ半角変換して表示', 'アガペ123')
|
|
365
|
+
cmp('「アガペ123」をカタカナ全角変換して表示', 'アガペ123')
|
|
366
|
+
cmp('「アガペ#!123」を半角変換して表示', 'アガペ#!123')
|
|
367
|
+
cmp('「アガペ#!123」を全角変換して表示', 'アガペ#!123')
|
|
368
|
+
cmp('「チャイナマンゴー」をカタカナ半角変換して表示', 'チャイナマンゴー')
|
|
369
|
+
cmp('「チャイナマンゴー」をカタカナ全角変換して表示', 'チャイナマンゴー')
|
|
370
|
+
})
|
|
371
|
+
it('JS関数実行', () => {
|
|
372
|
+
cmp('"Math.floor"を[3.14]でJS関数実行して表示', '3')
|
|
373
|
+
cmp('"Math.floor"を3.14でJS関数実行して表示', '3')
|
|
374
|
+
cmp('F="Math.floor"でJS実行;Fを[3.14]でJS関数実行して表示', '3')
|
|
375
|
+
})
|
|
376
|
+
it('文字列検索', () => {
|
|
377
|
+
cmp('「しんぶんし」で1から「ん」を文字検索して表示', '2')
|
|
378
|
+
cmp('「しんぶんし」で3から「ん」を文字検索して表示', '4')
|
|
379
|
+
cmp('「しんぶんし」で5から「ん」を文字検索して表示', '0')
|
|
380
|
+
})
|
|
381
|
+
it('TYPEOF', () => {
|
|
382
|
+
cmp('TYPEOF(「あ」)を表示', 'string')
|
|
383
|
+
cmp('TYPEOF(0)を表示', 'number')
|
|
384
|
+
cmp('もし、NAN判定(INT(「あ」))ならば、「ok」と表示。違えば、「ng」と表示', 'ok')
|
|
385
|
+
})
|
|
386
|
+
it('URLエンコード', () => {
|
|
387
|
+
cmp('「埼玉県さいたま市」をURLエンコードして表示', '%E5%9F%BC%E7%8E%89%E7%9C%8C%E3%81%95%E3%81%84%E3%81%9F%E3%81%BE%E5%B8%82')
|
|
388
|
+
})
|
|
389
|
+
it('URLデコード', () => {
|
|
390
|
+
cmp('「%E5%9F%BC%E7%8E%89%E7%9C%8C%E3%81%95%E3%81%84%E3%81%9F%E3%81%BE%E5%B8%82」をURLデコードして表示', '埼玉県さいたま市')
|
|
391
|
+
})
|
|
392
|
+
it('URLパラメータ解析', () => {
|
|
393
|
+
cmp('「http://hoge.com/」のURLパラメータ解析してJSONエンコードして表示', '{}')
|
|
394
|
+
cmp('「https://nadesi.com/?a=3&b=5」のURLパラメータ解析;それ["a"]を表示;それ["b"]を表示。', '3\n5')
|
|
395
|
+
})
|
|
396
|
+
it('助詞省略形のコマンド', () => {
|
|
397
|
+
cmp('3が1以上。もし、そうなら「OK」と表示。', 'OK')
|
|
398
|
+
cmp('1が3以上。もし、そうなら「NG」と表示。もし、そうでなければ「OK」と表示。', 'OK')
|
|
399
|
+
})
|
|
400
|
+
it('HYPOTの問題 #603', () => {
|
|
401
|
+
cmp('HYPOT(1,1)を表示。', '1.4142135623730951')
|
|
402
|
+
cmp('HYPOT(10,5)を表示。', '11.180339887498949')
|
|
403
|
+
})
|
|
404
|
+
it('ナデシコする', () => {
|
|
405
|
+
cmp('「1+2を表示する。」をナデシコする。', '3')
|
|
406
|
+
cmp('Aは3;「1+Aを表示する。」をナデシコする。', '4')
|
|
407
|
+
cmp('Bは2;「BはB+3。Bを表示する。」をナデシコする。Bを表示する。', '5\n5')
|
|
408
|
+
cmp('●Cとは\n5を戻す\nここまで\n「1+C()を表示する。」をナデシコする。C()を表示する。', '6\n5')
|
|
409
|
+
cmp('「Dは4;Dを表示する。」をナデシコする。3+Dを表示する。', '4\n7')
|
|
410
|
+
cmp('Eは5;「Eは3;Eを表示する。」をナデシコする。5+Eを表示する。', '3\n8')
|
|
411
|
+
cmpex('「●Fとは\n2を戻す\nここまで\nF()を表示する。」をナデシコする。7+F()を表示する。', { name: 'Error', message: /関数『F』が見当たりません。/ })
|
|
412
|
+
cmp('Bは2;Bを表示する。;「BはB+3。Bを表示する。」をナデシコする。Bを表示する。', '5\n5')
|
|
413
|
+
cmp('Bは2;Bを表示する。;「BはB+3。Bを表示する。」をナデシコ続ける。Bを表示する。', '2\n5\n5')
|
|
414
|
+
cmp(`1と2を足す\n「それを表示」をナデシコする`, '3')
|
|
415
|
+
})
|
|
416
|
+
it('敬語 #728', () => {
|
|
417
|
+
cmp('32を表示してください', '32')
|
|
418
|
+
cmp('1に2を足して3を掛けて表示してください。', '9')
|
|
419
|
+
cmp('1に2を足して3を掛けて表示してください。お願いします。', '9')
|
|
420
|
+
cmp('拝啓、「abc」の「a」を「*」に置換してください。お願いします。礼節レベル取得して表示', '2')
|
|
421
|
+
})
|
|
422
|
+
it('一致 #831', () => {
|
|
423
|
+
cmp('1と1が一致。もしそうなら"1"を表示。違えば"0"を表示。', '1')
|
|
424
|
+
cmp('[1,2,3]と[1,2,3]が一致。もしそうなら"1"を表示。違えば"0"を表示。', '1')
|
|
425
|
+
cmp('[1,2,3]と[2,3]が一致。もしそうなら"NG"を表示。違えば"OK"を表示。', 'OK')
|
|
426
|
+
cmp('["a",2,3]と["a",2,3]が一致。もしそうなら"OK"を表示。違えば"NG"を表示。', 'OK')
|
|
427
|
+
})
|
|
428
|
+
it('「ナデシコ」が空白行を出力してしまう問題の修正', () => {
|
|
429
|
+
let lineCount = 0
|
|
430
|
+
nako.logger.addListener('stdout', (data) => { lineCount++ })
|
|
431
|
+
nako.run('「a=1+2」をナデシコ')
|
|
432
|
+
assert.strictEqual(lineCount, 0)
|
|
433
|
+
})
|
|
434
|
+
it('JSメソッド実行 #854', () => {
|
|
435
|
+
let globalScope
|
|
436
|
+
let globalName
|
|
437
|
+
if (typeof window === 'object' && typeof window.navigator === 'object') {
|
|
438
|
+
globalScope = window
|
|
439
|
+
globalName = 'window'
|
|
440
|
+
} else {
|
|
441
|
+
globalScope = global
|
|
442
|
+
globalName = 'global'
|
|
443
|
+
}
|
|
444
|
+
globalScope.jstest = () => { return 777 }
|
|
445
|
+
cmp('「'+globalName+'」の「jstest」を[]でJSメソッド実行して表示。', '777')
|
|
446
|
+
globalScope.jstest_x2 = (a) => { return a * 2 }
|
|
447
|
+
cmp('「'+globalName+'」の「jstest_x2」を30でJSメソッド実行して表示。', '60')
|
|
448
|
+
globalScope.jstest_mul = (a, b) => { return a * b }
|
|
449
|
+
cmp('「'+globalName+'」の「jstest_mul」を[30,30]でJSメソッド実行して表示。', '900')
|
|
450
|
+
})
|
|
451
|
+
})
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const NakoPrepare = require('../../src/nako_prepare')
|
|
3
|
+
|
|
4
|
+
describe('prepare', () => {
|
|
5
|
+
const p = new NakoPrepare()
|
|
6
|
+
|
|
7
|
+
const convert = (code) => {
|
|
8
|
+
// 変換してからソースマップを除く
|
|
9
|
+
return p.convert(code).map((v) => v.text).join('')
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// --- test ---
|
|
13
|
+
it('simple', () => {
|
|
14
|
+
const a = convert('abc')
|
|
15
|
+
assert.strictEqual(a, 'abc')
|
|
16
|
+
const b = convert('SRSR')
|
|
17
|
+
assert.strictEqual(b, 'SRSR')
|
|
18
|
+
})
|
|
19
|
+
it('simple-multibytes', () => {
|
|
20
|
+
const a_ = '単語'
|
|
21
|
+
const a = convert(a_)
|
|
22
|
+
assert.strictEqual(a, a_)
|
|
23
|
+
const b_ = '牛乳|美貌|麦油|破棄'
|
|
24
|
+
const b = convert(b_)
|
|
25
|
+
assert.strictEqual(b, b_)
|
|
26
|
+
const c_ = 'A=50 #hogehoge\nAを表示'
|
|
27
|
+
const c = convert(c_)
|
|
28
|
+
assert.strictEqual(c, c_)
|
|
29
|
+
})
|
|
30
|
+
it('convert num flag', () => {
|
|
31
|
+
const a = convert('123')
|
|
32
|
+
assert.strictEqual(a, '123')
|
|
33
|
+
const b = convert('あbc')
|
|
34
|
+
assert.strictEqual(b, 'あbc')
|
|
35
|
+
})
|
|
36
|
+
it('str', () => {
|
|
37
|
+
const a = convert('123「123」')
|
|
38
|
+
assert.strictEqual(a, '123「123」')
|
|
39
|
+
const b = convert('123『123』123')
|
|
40
|
+
assert.strictEqual(b, '123『123』123')
|
|
41
|
+
const c = convert('123“あいう”')
|
|
42
|
+
assert.strictEqual(c, '123“あいう”')
|
|
43
|
+
const d = convert('123“123”123')
|
|
44
|
+
assert.strictEqual(d, '123“123”123')
|
|
45
|
+
})
|
|
46
|
+
it('str2', () => {
|
|
47
|
+
const a = convert('123"123"123')
|
|
48
|
+
assert.strictEqual(a, '123"123"123')
|
|
49
|
+
const b = convert('123\'123\'123')
|
|
50
|
+
assert.strictEqual(b, '123\'123\'123')
|
|
51
|
+
})
|
|
52
|
+
it('str3 - 全角を半角自動変換', () => {
|
|
53
|
+
const d = convert('123"123"123')
|
|
54
|
+
assert.strictEqual(d, '123"123"123')
|
|
55
|
+
const c = convert('123\'123\'123')
|
|
56
|
+
assert.strictEqual(c, '123\'123\'123')
|
|
57
|
+
})
|
|
58
|
+
it('str4 - 絵文字文字列 - 全角を半角自動変換', () => {
|
|
59
|
+
const a = convert('123🌴123🌴123')
|
|
60
|
+
assert.strictEqual(a, '123🌴123🌴123')
|
|
61
|
+
const b = convert('123🌿123🌿123')
|
|
62
|
+
assert.strictEqual(b, '123🌿123🌿123')
|
|
63
|
+
})
|
|
64
|
+
it('CR+LF1', () => {
|
|
65
|
+
const a = convert('123\r\n456\r789')
|
|
66
|
+
assert.strictEqual(a, '123\n456\n789')
|
|
67
|
+
const b = convert('123_ \r\n456 \n789')
|
|
68
|
+
assert.strictEqual(b, '123_ \n456 \n789')
|
|
69
|
+
})
|
|
70
|
+
it('CR+LF2', () => { const a = convert('A= 1 + _ \r\n1 + 2 \nAを表示')
|
|
71
|
+
assert.strictEqual(a, 'A= 1 + _ \n1 + 2 \nAを表示')
|
|
72
|
+
})
|
|
73
|
+
it('Multibyte Flag to Singlebyte Flag', () => {
|
|
74
|
+
const a = convert('!$12345#')
|
|
75
|
+
assert.strictEqual(a, '!$12345#\n')
|
|
76
|
+
})
|
|
77
|
+
it('convertTable', () => {
|
|
78
|
+
const a = convert('123※456')
|
|
79
|
+
assert.strictEqual(a, '123#456\n') // #はコメント扱い
|
|
80
|
+
const b = convert('123、456。') // 読点はカンマに変換 (#276)あらため(#877)
|
|
81
|
+
assert.strictEqual(b, '123,456;')
|
|
82
|
+
})
|
|
83
|
+
it('「,.」を「、。」として扱う(#735)', () => {
|
|
84
|
+
const a = convert('3.14')
|
|
85
|
+
assert.strictEqual(a, '3.14')
|
|
86
|
+
const b = convert(',')
|
|
87
|
+
assert.strictEqual(b, ',')
|
|
88
|
+
})
|
|
89
|
+
it('複数行コメント内にある文字列記号でエラーになる問題(#731)', () => {
|
|
90
|
+
const a = convert('/* " */')
|
|
91
|
+
assert.strictEqual(a, '/* " */')
|
|
92
|
+
})
|
|
93
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const NakoCompiler = require('../../src/nako3')
|
|
3
|
+
|
|
4
|
+
describe('re_test', () => {
|
|
5
|
+
const nako = new NakoCompiler()
|
|
6
|
+
// nako.logger.addListener('trace', ({ browserConsole }) => { console.log(...browserConsole) })
|
|
7
|
+
const cmp = (code, res) => {
|
|
8
|
+
nako.logger.debug('code=' + code)
|
|
9
|
+
assert.strictEqual(nako.run(code).log, res)
|
|
10
|
+
}
|
|
11
|
+
// --- test ---
|
|
12
|
+
it('正規表現マッチ - 基本', () => {
|
|
13
|
+
cmp('『abc123abc456』を『/[0-9]+/』で正規表現マッチして表示', '123')
|
|
14
|
+
cmp('『aaa:bbb:ccc』を『/[a-z]+/g』で正規表現マッチ;それ@1を表示', 'bbb')
|
|
15
|
+
})
|
|
16
|
+
it('正規表現マッチ - 抽出文字列', () => {
|
|
17
|
+
cmp('『abc123abc456』を『/([0-9]+)([a-z]+)/』で正規表現マッチ;抽出文字列[1]を表示', 'abc')
|
|
18
|
+
cmp('『// hoge』を『/\/\/\\s*(.+)/』で正規表現マッチ;抽出文字列[0]を表示', 'hoge')
|
|
19
|
+
})
|
|
20
|
+
})
|