diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2021-09-17 09:16:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-17 09:16:40 -0700 |
commit | d8de4eb685e35646c7d541e9a75bdc296127b7e2 (patch) | |
tree | 4bb05ec713856715ac9ba57e5d116eed344511b9 /test/functional/eval/string_spec.lua | |
parent | d56002f7b722facd97b0958e141c8ed2d01495f7 (diff) | |
download | rneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.tar.gz rneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.tar.bz2 rneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.zip |
test: reorg #15698
Problem:
Subdirectories like "visual", "insert", "normal" encourage people to
separate *related* tests for no good reason. Typically the _mode_ is
not the relevant topic of a test (and when it is, _then_ create
an appropriate describe() or it()).
Solution:
- Delete the various `test/functional/<mode>/` subdirectories, move
their tests to more meaningful topics.
- Rename `…/normal/` to `…/editor/`.
- Move or merge `…/visual/*` and `…/insert/*` tests into here where
appropriate.
- Rename `…/eval/` to `…/vimscript/`.
- Move `…/viml/*` into here also.
* test(reorg): insert/* => editor/mode_insert_spec.lua
* test(reorg): cmdline/* => editor/mode_cmdline_spec.lua
* test(reorg): eval core tests => eval_spec.lua
Diffstat (limited to 'test/functional/eval/string_spec.lua')
-rw-r--r-- | test/functional/eval/string_spec.lua | 277 |
1 files changed, 0 insertions, 277 deletions
diff --git a/test/functional/eval/string_spec.lua b/test/functional/eval/string_spec.lua deleted file mode 100644 index adc1af9b8e..0000000000 --- a/test/functional/eval/string_spec.lua +++ /dev/null @@ -1,277 +0,0 @@ -local helpers = require('test.functional.helpers')(after_each) -local clear = helpers.clear -local eq = helpers.eq -local command = helpers.command -local meths = helpers.meths -local eval = helpers.eval -local exc_exec = helpers.exc_exec -local redir_exec = helpers.redir_exec -local funcs = helpers.funcs -local NIL = helpers.NIL -local source = helpers.source -local dedent = helpers.dedent - -describe('string() function', function() - before_each(clear) - - describe('used to represent floating-point values', function() - it('dumps NaN values', function() - eq('str2float(\'nan\')', eval('string(str2float(\'nan\'))')) - end) - - it('dumps infinite values', function() - eq('str2float(\'inf\')', eval('string(str2float(\'inf\'))')) - eq('-str2float(\'inf\')', eval('string(str2float(\'-inf\'))')) - end) - - it('dumps regular values', function() - eq('1.5', funcs.string(1.5)) - eq('1.56e-20', funcs.string(1.56000e-020)) - eq('0.0', eval('string(0.0)')) - end) - - it('dumps special v: values', function() - eq('v:true', eval('string(v:true)')) - eq('v:false', eval('string(v:false)')) - eq('v:null', eval('string(v:null)')) - eq('v:true', funcs.string(true)) - eq('v:false', funcs.string(false)) - eq('v:null', funcs.string(NIL)) - end) - - it('dumps values with at most six digits after the decimal point', - function() - eq('1.234568e-20', funcs.string(1.23456789123456789123456789e-020)) - eq('1.234568', funcs.string(1.23456789123456789123456789)) - end) - - it('dumps values with at most seven digits before the decimal point', - function() - eq('1234567.891235', funcs.string(1234567.89123456789123456789)) - eq('1.234568e7', funcs.string(12345678.9123456789123456789)) - end) - - it('dumps negative values', function() - eq('-1.5', funcs.string(-1.5)) - eq('-1.56e-20', funcs.string(-1.56000e-020)) - eq('-1.234568e-20', funcs.string(-1.23456789123456789123456789e-020)) - eq('-1.234568', funcs.string(-1.23456789123456789123456789)) - eq('-1234567.891235', funcs.string(-1234567.89123456789123456789)) - eq('-1.234568e7', funcs.string(-12345678.9123456789123456789)) - end) - end) - - describe('used to represent numbers', function() - it('dumps regular values', function() - eq('0', funcs.string(0)) - eq('-1', funcs.string(-1)) - eq('1', funcs.string(1)) - end) - - it('dumps large values', function() - eq('2147483647', funcs.string(2^31-1)) - eq('-2147483648', funcs.string(-2^31)) - end) - end) - - describe('used to represent strings', function() - it('dumps regular strings', function() - eq('\'test\'', funcs.string('test')) - end) - - it('dumps empty strings', function() - eq('\'\'', funcs.string('')) - end) - - it('dumps strings with \' inside', function() - eq('\'\'\'\'\'\'\'\'', funcs.string('\'\'\'')) - eq('\'a\'\'b\'\'\'\'\'', funcs.string('a\'b\'\'')) - eq('\'\'\'b\'\'\'\'d\'', funcs.string('\'b\'\'d')) - eq('\'a\'\'b\'\'c\'\'d\'', funcs.string('a\'b\'c\'d')) - end) - - it('dumps NULL strings', function() - eq('\'\'', eval('string($XXX_UNEXISTENT_VAR_XXX)')) - end) - - it('dumps NULL lists', function() - eq('[]', eval('string(v:_null_list)')) - end) - - it('dumps NULL dictionaries', function() - eq('{}', eval('string(v:_null_dict)')) - end) - end) - - describe('used to represent funcrefs', function() - before_each(function() - source([[ - function Test1() - endfunction - - function s:Test2() dict - endfunction - - function g:Test3() dict - endfunction - - let g:Test2_f = function('s:Test2') - ]]) - end) - - it('dumps references to built-in functions', function() - eq('function(\'function\')', eval('string(function("function"))')) - end) - - it('dumps references to user functions', function() - eq('function(\'Test1\')', eval('string(function("Test1"))')) - eq('function(\'g:Test3\')', eval('string(function("g:Test3"))')) - end) - - it('dumps references to script functions', function() - eq('function(\'<SNR>1_Test2\')', eval('string(Test2_f)')) - end) - - it('dumps partials with self referencing a partial', function() - source([[ - function TestDict() dict - endfunction - let d = {} - let TestDictRef = function('TestDict', d) - let d.tdr = TestDictRef - ]]) - eq("\nE724: unable to correctly dump variable with self-referencing container\nfunction('TestDict', {'tdr': function('TestDict', {E724@1})})", - redir_exec('echo string(d.tdr)')) - end) - - it('dumps automatically created partials', function() - eq('function(\'<SNR>1_Test2\', {\'f\': function(\'<SNR>1_Test2\')})', - eval('string({"f": Test2_f}.f)')) - eq('function(\'<SNR>1_Test2\', [1], {\'f\': function(\'<SNR>1_Test2\', [1])})', - eval('string({"f": function(Test2_f, [1])}.f)')) - end) - - it('dumps manually created partials', function() - eq('function(\'Test3\', [1, 2], {})', - eval('string(function("Test3", [1, 2], {}))')) - eq('function(\'Test3\', {})', - eval('string(function("Test3", {}))')) - eq('function(\'Test3\', [1, 2])', - eval('string(function("Test3", [1, 2]))')) - end) - - it('does not crash or halt when dumping partials with reference cycles in self', - function() - meths.set_var('d', {v=true}) - eq(dedent([[ - - E724: unable to correctly dump variable with self-referencing container - {'p': function('<SNR>1_Test2', {E724@0}), 'f': function('<SNR>1_Test2'), 'v': v:true}]]), - redir_exec('echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": g:d.f}))')) - end) - - it('does not show errors when dumping partials referencing the same dictionary', - function() - command('let d = {}') - -- Regression for “eval/typval_encode: Dump empty dictionary before - -- checking for refcycle”, results in error. - eq('[function(\'tr\', {}), function(\'tr\', {})]', eval('string([function("tr", d), function("tr", d)])')) - -- Regression for “eval: Work with reference cycles in partials (self) - -- properly”, results in crash. - eval('extend(d, {"a": 1})') - eq('[function(\'tr\', {\'a\': 1}), function(\'tr\', {\'a\': 1})]', eval('string([function("tr", d), function("tr", d)])')) - end) - - it('does not crash or halt when dumping partials with reference cycles in arguments', - function() - meths.set_var('l', {}) - eval('add(l, l)') - -- Regression: the below line used to crash (add returns original list and - -- there was error in dumping partials). Tested explicitly in - -- test/unit/api/private_helpers_spec.lua. - eval('add(l, function("Test1", l))') - eq(dedent([=[ - - E724: unable to correctly dump variable with self-referencing container - function('Test1', [[{E724@2}, function('Test1', [{E724@2}])], function('Test1', [[{E724@4}, function('Test1', [{E724@4}])]])])]=]), - redir_exec('echo string(function("Test1", l))')) - end) - - it('does not crash or halt when dumping partials with reference cycles in self and arguments', - function() - meths.set_var('d', {v=true}) - meths.set_var('l', {}) - eval('add(l, l)') - eval('add(l, function("Test1", l))') - eval('add(l, function("Test1", d))') - eq(dedent([=[ - - E724: unable to correctly dump variable with self-referencing container - {'p': function('<SNR>1_Test2', [[{E724@3}, function('Test1', [{E724@3}]), function('Test1', {E724@0})], function('Test1', [[{E724@5}, function('Test1', [{E724@5}]), function('Test1', {E724@0})]]), function('Test1', {E724@0})], {E724@0}), 'f': function('<SNR>1_Test2'), 'v': v:true}]=]), - redir_exec('echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": function(g:d.f, l)}))')) - end) - end) - - describe('used to represent lists', function() - it('dumps empty list', function() - eq('[]', funcs.string({})) - end) - - it('dumps nested lists', function() - eq('[[[[[]]]]]', funcs.string({{{{{}}}}})) - end) - - it('dumps nested non-empty lists', function() - eq('[1, [[3, [[5], 4]], 2]]', funcs.string({1, {{3, {{5}, 4}}, 2}})) - end) - - it('errors when dumping recursive lists', function() - meths.set_var('l', {}) - eval('add(l, l)') - eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container', - exc_exec('echo string(l)')) - end) - - it('dumps recursive lists despite the error', function() - meths.set_var('l', {}) - eval('add(l, l)') - eq('\nE724: unable to correctly dump variable with self-referencing container\n[{E724@0}]', - redir_exec('echo string(l)')) - eq('\nE724: unable to correctly dump variable with self-referencing container\n[[{E724@1}]]', - redir_exec('echo string([l])')) - end) - end) - - describe('used to represent dictionaries', function() - it('dumps empty dictionary', function() - eq('{}', eval('string({})')) - end) - - it('dumps list with two same empty dictionaries, also in partials', function() - command('let d = {}') - eq('[{}, {}]', eval('string([d, d])')) - eq('[function(\'tr\', {}), {}]', eval('string([function("tr", d), d])')) - eq('[{}, function(\'tr\', {})]', eval('string([d, function("tr", d)])')) - end) - - it('dumps non-empty dictionary', function() - eq('{\'t\'\'est\': 1}', funcs.string({['t\'est']=1})) - end) - - it('errors when dumping recursive dictionaries', function() - meths.set_var('d', {d=1}) - eval('extend(d, {"d": d})') - eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container', - exc_exec('echo string(d)')) - end) - - it('dumps recursive dictionaries despite the error', function() - meths.set_var('d', {d=1}) - eval('extend(d, {"d": d})') - eq('\nE724: unable to correctly dump variable with self-referencing container\n{\'d\': {E724@0}}', - redir_exec('echo string(d)')) - eq('\nE724: unable to correctly dump variable with self-referencing container\n{\'out\': {\'d\': {E724@1}}}', - redir_exec('echo string({"out": d})')) - end) - end) -end) |