| /* |
| Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com> |
| Copyright (C) 2012 Robert Gust-Bardon <donate@robert.gust-bardon.org> |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY |
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| 'use strict'; |
| |
| var esprima = require('./3rdparty/esprima'), |
| escodegen = require('./loader'), |
| chai = require('chai'), |
| expect = chai.expect, |
| data; |
| |
| data = [{ |
| options: { |
| base: 2, |
| indent: ' ' |
| }, |
| items: { |
| 'test': ' test;' |
| } |
| }, { |
| options: { |
| base: 4, |
| indent: '\t' |
| }, |
| items: { |
| 'test': '\t\t\t\ttest;' |
| } |
| }, { |
| options: { |
| base: ' ', |
| format: { |
| indent: { |
| base: 4, |
| style: '\t' |
| } |
| } |
| }, |
| items: { |
| 'test': ' test;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: false, |
| hexadecimal: false |
| }, |
| parse: true |
| }, |
| items: { |
| '42e-010': '42e-010;' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| renumber: false, |
| hexadecimal: false |
| }, |
| parse: true |
| }, |
| items: { |
| '42e-010': '4.2e-9;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: true, |
| hexadecimal: false |
| }, |
| parse: true |
| }, |
| items: { |
| '42e-010': '42e-010;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: false, |
| hexadecimal: false |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': '1e+400;', |
| '1.7976931348623157e+308': '1.7976931348623157e+308;', |
| '4.2e+100': '4.2e+100;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42000;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '0.42;', |
| '0.042': '0.042;', |
| '0.0042': '0.0042;', |
| '0.00042': '0.00042;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| renumber: false, |
| hexadecimal: false |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': 'null;', |
| '1.7976931348623157e+308': '1.7976931348623157e+308;', |
| '4.2e+100': '4.2e+100;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42000;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '0.42;', |
| '0.042': '0.042;', |
| '0.0042': '0.0042;', |
| '0.00042': '0.00042;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| renumber: true, |
| hexadecimal: false |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': 'null;', |
| '1.7976931348623157e+308': '1.7976931348623157e308;', |
| '4.2e+100': '42e99;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42e3;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '0.42;', |
| '0.042': '0.042;', |
| '0.0042': '42e-4;', |
| '0.00042': '42e-5;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| renumber: true, |
| hexadecimal: true |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': 'null;', |
| '1.7976931348623157e+308': '1.7976931348623157e308;', |
| '4.2e+100': '42e99;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42e3;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '0.42;', |
| '0.042': '0.042;', |
| '0.0042': '42e-4;', |
| '0.00042': '42e-5;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: true, |
| hexadecimal: false |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': '1e400;', |
| '1.7976931348623157e+308': '1.7976931348623157e308;', |
| '4.2e+100': '42e99;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42e3;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '.42;', |
| '0.042': '.042;', |
| '0.0042': '.0042;', |
| '0.00042': '42e-5;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: true, |
| hexadecimal: true |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': '1e400;', |
| '1.7976931348623157e+308': '1.7976931348623157e308;', |
| '4.2e+100': '42e99;', |
| '1000000000001': '0xe8d4a51001;', |
| '100000000001': '100000000001;', |
| '42000': '42e3;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '.42;', |
| '0.042': '.042;', |
| '0.0042': '.0042;', |
| '0.00042': '42e-5;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| renumber: false, |
| hexadecimal: true |
| }, |
| parse: null |
| }, |
| items: { |
| '4.2e+500': '1e+400;', |
| '1.7976931348623157e+308': '1.7976931348623157e+308;', |
| '4.2e+100': '4.2e+100;', |
| '1000000000001': '1000000000001;', |
| '100000000001': '100000000001;', |
| '42000': '42000;', |
| '4200': '4200;', |
| '420': '420;', |
| '42': '42;', |
| '4.2': '4.2;', |
| '0': '0;', |
| '0.42': '0.42;', |
| '0.042': '0.042;', |
| '0.0042': '0.0042;', |
| '0.00042': '0.00042;', |
| '4.2e-99': '4.2e-99;', |
| '5e-324': '5e-324;' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'single', |
| escapeless: false |
| }, |
| parse: null |
| }, |
| items: { |
| '+\'\'': '+\'\';', |
| '+""': '+\'\';', |
| '+\'\\\'\'': '+\'\\\'\';', |
| '+\'"\'': '+\'"\';', |
| '+\'\\\'"\'': '+\'\\\'"\';', |
| '+\'/\'': '+\'/\';', |
| '+\'\\\\\'': '+\'\\\\\';', |
| '+\'\\n\'': '+\'\\n\';', |
| '+\'\\r\'': '+\'\\r\';', |
| '+\'\\u2028\'': '+\'\\u2028\';', |
| '+\'\\u2029\'': '+\'\\u2029\';', |
| '+\'\\0\'': '+\'\\0\';', |
| '+\'\\x000\'': '+\'\\x000\';', |
| '+\'\\b\'': '+\'\\b\';', |
| '+\'\\f\'': '+\'\\f\';', |
| '+\'\\t\'': '+\'\\t\';', |
| '+\'\\x0B\'': '+\'\\x0B\';', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\';', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\';', |
| '+\'\\x7F\'': '+\'\\x7F\';', |
| '+\'\\x80\'': '+\'\\x80\';', |
| '+\'\\u0100\'': '+\'\\u0100\';', |
| '+\'hello, world\\n\'': '+\'hello, world\\n\';', |
| '+"hello, world\\n"': '+\'hello, world\\n\';' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| quotes: 'single', |
| escapeless: false |
| }, |
| parse: null |
| }, |
| items: { |
| '+\'\'': '+"";', |
| '+""': '+"";', |
| '+\'\\\'\'': '+"\'";', |
| '+\'"\'': '+"\\"";', |
| '+\'\\\'"\'': '+"\'\\"";', |
| '+\'/\'': '+"\\/";', |
| '+\'\\\\\'': '+"\\\\";', |
| '+\'\\n\'': '+"\\n";', |
| '+\'\\r\'': '+"\\r";', |
| '+\'\\u2028\'': '+"\\u2028";', |
| '+\'\\u2029\'': '+"\\u2029";', |
| '+\'\\0\'': '+"\\u0000";', |
| '+\'\\x000\'': '+"\\u00000";', |
| '+\'\\b\'': '+"\\b";', |
| '+\'\\f\'': '+"\\f";', |
| '+\'\\t\'': '+"\\t";', |
| '+\'\\x0B\'': '+"\\u000B";', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+"\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\u000E\\u000F\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F";', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+" !\\"#$%&\'()*+,-.\\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";', |
| '+\'\\x7F\'': '+"\x7F";', |
| '+\'\\x80\'': '+"\x80";', |
| '+\'\\u0100\'': '+"\u0100";', |
| '+\'hello, world\\n\'': '+"hello, world\\n";', |
| '+"hello, world\\n"': '+"hello, world\\n";' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'double', |
| escapeless: false |
| }, |
| parse: null |
| }, |
| items: { |
| '+\'\'': '+"";', |
| '+""': '+"";', |
| '+\'\\\'\'': '+"\'";', |
| '+\'"\'': '+"\\"";', |
| '+\'\\\'"\'': '+"\'\\"";', |
| '+\'/\'': '+"/";', |
| '+\'\\\\\'': '+"\\\\";', |
| '+\'\\n\'': '+"\\n";', |
| '+\'\\r\'': '+"\\r";', |
| '+\'\\u2028\'': '+"\\u2028";', |
| '+\'\\u2029\'': '+"\\u2029";', |
| '+\'\\0\'': '+"\\0";', |
| '+\'\\x000\'': '+"\\x000";', |
| '+\'\\b\'': '+"\\b";', |
| '+\'\\f\'': '+"\\f";', |
| '+\'\\t\'': '+"\\t";', |
| '+\'\\x0B\'': '+"\\x0B";', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+"\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F";', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+" !\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";', |
| '+\'\\x7F\'': '+"\\x7F";', |
| '+\'\\x80\'': '+"\\x80";', |
| '+\'\\u0100\'': '+"\\u0100";', |
| '+\'hello, world\\n\'': '+"hello, world\\n";', |
| '+"hello, world\\n"': '+"hello, world\\n";' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'auto', |
| escapeless: false |
| }, |
| parse: null |
| }, |
| items: { |
| '+\'\'': '+\'\';', |
| '+""': '+\'\';', |
| '+\'\\\'\'': '+"\'";', |
| '+\'"\'': '+\'"\';', |
| '+\'\\\'"\'': '+\'\\\'"\';', |
| '+\'/\'': '+\'/\';', |
| '+\'\\\\\'': '+\'\\\\\';', |
| '+\'\\n\'': '+\'\\n\';', |
| '+\'\\r\'': '+\'\\r\';', |
| '+\'\\u2028\'': '+\'\\u2028\';', |
| '+\'\\u2029\'': '+\'\\u2029\';', |
| '+\'\\0\'': '+\'\\0\';', |
| '+\'\\x000\'': '+\'\\x000\';', |
| '+\'\\b\'': '+\'\\b\';', |
| '+\'\\f\'': '+\'\\f\';', |
| '+\'\\t\'': '+\'\\t\';', |
| '+\'\\x0B\'': '+\'\\x0B\';', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\';', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\';', |
| '+\'\\x7F\'': '+\'\\x7F\';', |
| '+\'\\x80\'': '+\'\\x80\';', |
| '+\'\\u0100\'': '+\'\\u0100\';', |
| '+\'hello, world\\n\'': '+\'hello, world\\n\';', |
| '+"hello, world\\n"': '+\'hello, world\\n\';' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'single', |
| escapeless: true |
| }, |
| parse: null |
| }, |
| items: { |
| '+\'\'': '+\'\';', |
| '+""': '+\'\';', |
| '+\'\\\'\'': '+\'\\\'\';', |
| '+\'"\'': '+\'"\';', |
| '+\'\\\'"\'': '+\'\\\'"\';', |
| '+\'/\'': '+\'/\';', |
| '+\'\\\\\'': '+\'\\\\\';', |
| '+\'\\n\'': '+\'\\n\';', |
| '+\'\\r\'': '+\'\\r\';', |
| '+\'\\u2028\'': '+\'\\u2028\';', |
| '+\'\\u2029\'': '+\'\\u2029\';', |
| '+\'\\0\'': '+\'\0\';', |
| '+\'\\x000\'': '+\'\x000\';', |
| '+\'\\b\'': '+\'\b\';', |
| '+\'\\f\'': '+\'\f\';', |
| '+\'\\t\'': '+\'\t\';', |
| '+\'\\x0B\'': '+\'\x0B\';', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+\'\x01\x02\x03\x04\x05\x06\x07\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\';', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\';', |
| '+\'\\x7F\'': '+\'\x7F\';', |
| '+\'\\x80\'': '+\'\x80\';', |
| '+\'\\u0100\'': '+\'\u0100\';', |
| '+\'hello, world\\n\'': '+\'hello, world\\n\';', |
| '+"hello, world\\n"': '+\'hello, world\\n\';' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'single', |
| escapeless: false |
| }, |
| parse: true |
| }, |
| items: { |
| '+\'\'': '+\'\';', |
| '+""': '+"";', |
| '+\'\\\'\'': '+\'\\\'\';', |
| '+\'"\'': '+\'"\';', |
| '+\'\\\'"\'': '+\'\\\'"\';', |
| '+\'/\'': '+\'/\';', |
| '+\'\\\\\'': '+\'\\\\\';', |
| '+\'\\n\'': '+\'\\n\';', |
| '+\'\\r\'': '+\'\\r\';', |
| '+\'\\u2028\'': '+\'\\u2028\';', |
| '+\'\\u2029\'': '+\'\\u2029\';', |
| '+\'\\0\'': '+\'\\0\';', |
| '+\'\\x000\'': '+\'\\x000\';', |
| '+\'\\b\'': '+\'\\b\';', |
| '+\'\\f\'': '+\'\\f\';', |
| '+\'\\t\'': '+\'\\t\';', |
| '+\'\\x0B\'': '+\'\\x0B\';', |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\'': |
| '+\'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0E\\x0F\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1A\\x1B\\x1C\\x1D\\x1E\\x1F\';', |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\'': |
| '+\' !"#$%&\\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\';', |
| '+\'\\x7F\'': '+\'\\x7F\';', |
| '+\'\\x80\'': '+\'\\x80\';', |
| '+\'\\u0100\'': '+\'\\u0100\';', |
| '+\'hello, world\\n\'': '+\'hello, world\\n\';', |
| '+"hello, world\\n"': '+"hello, world\\n";' |
| } |
| }, { |
| options: { |
| format: { |
| json: true, |
| quotes: 'single', |
| escapeless: true |
| }, |
| parse: true |
| }, |
| items: { |
| '+\'\\0\'': '+"\\u0000";' |
| } |
| }, { |
| options: { |
| format: { |
| json: false, |
| quotes: 'single', |
| escapeless: true |
| }, |
| parse: true |
| }, |
| items: { |
| '+""': '+"";', |
| '+\'\\0\'': '+\'\\0\';' |
| } |
| }, { |
| options: { |
| base: 1, |
| indent: ' ', |
| format: { |
| compact: false, |
| parentheses: true |
| } |
| }, |
| items: { |
| '{}': ' {\n }', |
| '{42}': ' {\n 42;\n }', |
| '[]': ' [];', |
| '[,42]': ' [\n ,\n 42\n ];', |
| '!{}': ' !{};', |
| '!{42:42,foo:42}': ' !{\n 42: 42,\n foo: 42\n };', |
| 'switch(42){}': ' switch (42) {\n }', |
| 'switch(42){default:42}': ' switch (42) {\n default:\n 42;\n }', |
| '42;42': ' 42;\n 42;', |
| |
| '!function(foo,bar){}': ' !function (foo, bar) {\n };', |
| '42,42': ' 42, 42;', |
| 'foo=42': ' foo = 42;', |
| '42?42:42': ' 42 ? 42 : 42;', |
| 'foo(42,42)': ' foo(42, 42);', |
| 'new Foo(42,42)': ' new Foo(42, 42);', |
| '!{42:42}': ' !{ 42: 42 };', |
| 'do{}while(42);': ' do {\n } while (42);', |
| 'try{}catch(foo){}': ' try {\n } catch (foo) {\n }', |
| 'var foo=42': ' var foo = 42;', |
| 'var foo,bar': ' var foo, bar;', |
| 'try{}finally{}': ' try {\n } finally {\n }', |
| 'switch(foo){}': ' switch (foo) {\n }', |
| 'if(42){}': ' if (42) {\n }', |
| 'if(42){}else if(42){}': ' if (42) {\n } else if (42) {\n }', |
| 'if(42){}else{}': ' if (42) {\n } else {\n }', |
| 'for(;42;42);': ' for (; 42; 42);', |
| 'for(foo in 42);': ' for (foo in 42);', |
| 'while(42);': ' while (42);', |
| 'with({});': ' with ({});', |
| |
| 'foo in bar,[]in[]': ' foo in bar, [] in [];', |
| 'new Foo(),new[]()': ' new Foo(), new []();', |
| 'typeof 42,typeof[]': ' typeof 42, typeof [];', |
| 'throw 42;throw[]': ' throw 42;\n throw [];', |
| 'switch(42){case 42:case[]:}': ' switch (42) {\n case 42:\n case []:\n }', |
| 'if(42){}else 42;if(42){}else[];': ' if (42) {\n } else\n 42;\n if (42) {\n } else\n [];', |
| 'for(foo in 42);for(foo in[]);': ' for (foo in 42);\n for (foo in []);', |
| '!function(){return 42},function(){return[]}': ' !function () {\n return 42;\n }, function () {\n return [];\n };', |
| |
| '!function foo(){}': ' !function foo() {\n };', |
| '!{get 42(){},set 42(bar){}}': ' !{\n get 42() {\n },\n set 42(bar) {\n }\n };', |
| 'foo:while(42)break foo;': ' foo:\n while (42)\n break foo;', |
| 'foo:while(42)continue foo;': ' foo:\n while (42)\n continue foo;', |
| 'var foo': ' var foo;', |
| 'for(var foo in 42);': ' for (var foo in 42);', |
| 'function foo(){}': ' function foo() {\n }', |
| |
| '({})': ' ({});', |
| '(function(){})': ' (function () {\n });', |
| '/ / / / /': ' / / / / /;', |
| '/ / /10': ' / / / 10;' |
| } |
| }, { |
| options: { |
| base: 1, |
| indent: ' ', |
| format: { |
| compact: true, |
| parentheses: true |
| } |
| }, |
| items: { |
| '{}': '{}', |
| '{42}': '{42;}', |
| '[]': '[];', |
| '[,42]': '[,42];', |
| '!{}': '!{};', |
| '!{42:42,foo:42}': '!{42:42,foo:42};', |
| 'switch(42){}': 'switch(42){}', |
| 'switch(42){default:42}': 'switch(42){default:42;}', |
| '42;42': '42;42;', |
| |
| '!function(foo,bar){}': '!function(foo,bar){};', |
| '42,42': '42,42;', |
| 'foo=42': 'foo=42;', |
| '42?42:42': '42?42:42;', |
| 'foo(42,42)': 'foo(42,42);', |
| 'new Foo(42,42)': 'new Foo(42,42);', |
| '!{42:42}': '!{42:42};', |
| 'do{}while(42);': 'do{}while(42);', |
| 'try{}catch(foo){}': 'try{}catch(foo){}', |
| 'var foo=42': 'var foo=42;', |
| 'var foo,bar': 'var foo,bar;', |
| 'try{}finally{}': 'try{}finally{}', |
| 'switch(foo){}': 'switch(foo){}', |
| 'if(42){}': 'if(42){}', |
| 'if(42){}else if(42){}': 'if(42){}else if(42){}', |
| 'if(42){}else{}': 'if(42){}else{}', |
| 'for(;42;42);': 'for(;42;42);', |
| 'for(foo in 42);': 'for(foo in 42);', |
| 'while(42);': 'while(42);', |
| 'with({});': 'with({});', |
| |
| 'foo in bar,[]in[]': 'foo in bar,[]in[];', |
| 'new Foo(),new[]()': 'new Foo(),new[]();', |
| 'typeof 42,typeof[]': 'typeof 42,typeof[];', |
| 'throw 42;throw[]': 'throw 42;throw[];', |
| 'switch(42){case 42:case[]:}': 'switch(42){case 42:case[]:}', |
| 'if(42){}else 42;if(42){}else[];': 'if(42){}else 42;if(42){}else[];', |
| 'for(foo in 42);for(foo in[]);': 'for(foo in 42);for(foo in[]);', |
| '!function(){return 42},function(){return[]}': '!function(){return 42;},function(){return[];};', |
| |
| '!function foo(){}': '!function foo(){};', |
| '!{get 42(){},set 42(bar){}}': '!{get 42(){},set 42(bar){}};', |
| 'foo:while(42)break foo;': 'foo:while(42)break foo;', |
| 'foo:while(42)continue foo;': 'foo:while(42)continue foo;', |
| 'var foo': 'var foo;', |
| 'for(var foo in 42);': 'for(var foo in 42);', |
| 'function foo(){}': 'function foo(){}', |
| |
| '({})': '({});', |
| '(function(){})': '(function(){});', |
| '/ / / / /': '/ // / /;', |
| '/ / /1': '/ //1;' |
| } |
| }, { |
| options: { |
| format: { |
| parentheses: true |
| } |
| }, |
| items: { |
| 'new Foo()': 'new Foo();', |
| 'new Foo(42)': 'new Foo(42);', |
| 'new Foo() in bar': 'new Foo() in bar;', |
| 'new Date.constructor()': 'new Date.constructor();', |
| 'new Date().constructor': 'new Date().constructor;', |
| 'new Date.setUTCMilliseconds(0)': 'new Date.setUTCMilliseconds(0);', |
| 'new Date().setUTCMilliseconds(0)': 'new Date().setUTCMilliseconds(0);', |
| 'new new Foo()()': 'new new Foo()();', |
| 'new new (Foo()())()()': 'new new (Foo()())()();' |
| } |
| }, { |
| options: { |
| format: { |
| parentheses: false |
| } |
| }, |
| items: { |
| 'new Foo()': 'new Foo;', |
| 'new Foo(42)': 'new Foo(42);', |
| 'new Foo() in bar': 'new Foo in bar;', |
| 'new Date.constructor()': 'new Date.constructor;', |
| 'new Date().constructor': 'new Date().constructor;', |
| 'new Date.setUTCMilliseconds(0)': 'new Date.setUTCMilliseconds(0);', |
| 'new Date().setUTCMilliseconds(0)': 'new Date().setUTCMilliseconds(0);', |
| 'new new Foo()()': 'new new Foo;', |
| 'new new (Foo()())()()': 'new new (Foo()());' |
| } |
| }, { |
| options: { |
| format: { |
| indent: { |
| base: 1, |
| style: ' ' |
| }, |
| semicolons: true |
| } |
| }, |
| items: { |
| '{}': ' {\n }', |
| '{;}': ' {\n ;\n }', |
| '{42}': ' {\n 42;\n }', |
| 'if(42);': ' if (42);', |
| 'if(42)42': ' if (42)\n 42;', |
| 'if(42);else;': ' if (42);\n else ;', |
| 'if(42)42;else 42': ' if (42)\n 42;\n else\n 42;', |
| 'do;while(42)': ' do ;\n while (42);', |
| 'do 42;while(42)': ' do\n 42;\n while (42);', |
| 'while(42);': ' while (42);', |
| 'while(42)42': ' while (42)\n 42;', |
| 'for(;;);': ' for (;;);', |
| 'for(;;)42': ' for (;;)\n 42;', |
| 'for(foo in 42);': ' for (foo in 42);', |
| 'for(foo in 42)42': ' for (foo in 42)\n 42;', |
| 'with({});': ' with ({});', |
| 'with({})42': ' with ({})\n 42;', |
| 'switch(42){default:}': ' switch (42) {\n default:\n }', |
| 'switch(42){default:;}': ' switch (42) {\n default:\n ;\n }', |
| 'switch(42){default:42}': ' switch (42) {\n default:\n 42;\n }', |
| 'foo:;': ' foo:;', |
| 'foo:42': ' foo:\n 42;', |
| 'try{}catch(foo){}finally{}': ' try {\n } catch (foo) {\n } finally {\n }', |
| 'try{;}catch(foo){;}finally{;}': ' try {\n ;\n } catch (foo) {\n ;\n } finally {\n ;\n }', |
| 'try{42}catch(foo){42}finally{42}': ' try {\n 42;\n } catch (foo) {\n 42;\n } finally {\n 42;\n }', |
| '!function(){}': ' !function () {\n };', |
| '!function(){;}': ' !function () {\n ;\n };', |
| '!function(){42}': ' !function () {\n 42;\n };', |
| '': '', |
| ';': ' ;', |
| '42': ' 42;', |
| '42;foo': ' 42;\n foo;' |
| } |
| }, { |
| options: { |
| format: { |
| indent: { |
| base: 1, |
| style: ' ' |
| }, |
| semicolons: false |
| } |
| }, |
| items: { |
| '{}': ' {\n }', |
| '{;}': ' {\n ;\n }', |
| '{42}': ' {\n 42\n }', |
| 'if(42);': ' if (42);', |
| 'if(42)42': ' if (42)\n 42', |
| 'if(42);else;': ' if (42);\n else ;', |
| 'if(42)42;else 42': ' if (42)\n 42;\n else\n 42', |
| 'do;while(42)': ' do ;\n while (42)', |
| 'do 42;while(42)': ' do\n 42;\n while (42)', |
| 'while(42);': ' while (42);', |
| 'while(42)42': ' while (42)\n 42', |
| 'for(;;);': ' for (;;);', |
| 'for(;;)42': ' for (;;)\n 42', |
| 'for(foo in 42);': ' for (foo in 42);', |
| 'for(foo in 42)42': ' for (foo in 42)\n 42', |
| 'with({});': ' with ({});', |
| 'with({})42': ' with ({})\n 42', |
| 'switch(42){default:}': ' switch (42) {\n default:\n }', |
| 'switch(42){default:;}': ' switch (42) {\n default:\n ;\n }', |
| 'switch(42){default:42}': ' switch (42) {\n default:\n 42\n }', |
| 'foo:;': ' foo:;', |
| 'foo:42': ' foo:\n 42', |
| 'try{}catch(foo){}finally{}': ' try {\n } catch (foo) {\n } finally {\n }', |
| 'try{;}catch(foo){;}finally{;}': ' try {\n ;\n } catch (foo) {\n ;\n } finally {\n ;\n }', |
| 'try{42}catch(foo){42}finally{42}': ' try {\n 42\n } catch (foo) {\n 42\n } finally {\n 42\n }', |
| '!function(){}': ' !function () {\n }', |
| '!function(){;}': ' !function () {\n ;\n }', |
| '!function(){42}': ' !function () {\n 42\n }', |
| '': '', |
| ';': ' ;', |
| '42': ' 42', |
| '42;foo': ' 42;\n foo' |
| } |
| }, { |
| options: { |
| format: { |
| compact: true, |
| semicolons: false |
| } |
| }, |
| items: { |
| 'switch(42){case 42:42;default:}': 'switch(42){case 42:42;default:}', |
| 'if(cond)stmt;else stmt;': 'if(cond)stmt;else stmt', |
| 'if(cond){stmt;}else stmt;': 'if(cond){stmt}else stmt', |
| 'if(cond){stmt;}else{stmt;}': 'if(cond){stmt}else{stmt}', |
| 'if(cond){stmt;}else if(cond)for(;;)stmt;': 'if(cond){stmt}else if(cond)for(;;)stmt', |
| 'if(cond){stmt;}else if(cond);': 'if(cond){stmt}else if(cond);', |
| 'do ; while(cond);': 'do;while(cond)', |
| 'while(cond);': 'while(cond);', |
| '/a/\nwhile(cond); ': '/a/;while(cond);', |
| '/a/ instanceof b': '/a/ instanceof b', |
| '/a/ in b': '/a/ in b', |
| '[] in b': '[]in b', |
| 'for(var a = /a/ in []);': 'for(var a=/a/ in[]);', |
| 'a < !--b': 'a< !--b', |
| 'a << !--b': 'a<< !--b' |
| } |
| }, { |
| options: { |
| comment: true, |
| format: { |
| compact: true, |
| semicolons: false, |
| safeConcatenation: false |
| } |
| }, |
| items: { |
| '': '', |
| '//A': '//A', |
| '{}': '{}', |
| '!{}': '!{}', |
| '{}//A': '{}//A' |
| } |
| }, { |
| options: { |
| comment: true, |
| format: { |
| compact: true, |
| semicolons: false, |
| safeConcatenation: true |
| } |
| }, |
| items: { |
| '': '', |
| '//A': '\n//A\n', |
| '{}': '\n{}', |
| '!{}': '\n!{};', |
| '{}//A': '\n{}//A\n' |
| } |
| }, { |
| options: { |
| format: { |
| newline: '\r\n', |
| semicolons: false |
| } |
| }, |
| items: { |
| '{}': '{\r\n}', |
| '{;}': '{\r\n ;\r\n}', |
| '{42}': '{\r\n 42\r\n}', |
| 'if(42);': 'if (42);', |
| 'if(42)42': 'if (42)\r\n 42', |
| 'if(42);else;': 'if (42);\r\nelse ;', |
| 'if(42)42;else 42': 'if (42)\r\n 42;\r\nelse\r\n 42', |
| 'do;while(42)': 'do ;\r\nwhile (42)', |
| 'do 42;while(42)': 'do\r\n 42;\r\nwhile (42)', |
| 'while(42);': 'while (42);', |
| 'while(42)42': 'while (42)\r\n 42', |
| 'for(;;);': 'for (;;);', |
| 'for(;;)42': 'for (;;)\r\n 42', |
| 'for(foo in 42);': 'for (foo in 42);', |
| 'for(foo in 42)42': 'for (foo in 42)\r\n 42', |
| 'with({});': 'with ({});', |
| 'with({})42': 'with ({})\r\n 42', |
| 'switch(42){default:}': 'switch (42) {\r\ndefault:\r\n}', |
| 'switch(42){default:;}': 'switch (42) {\r\ndefault:\r\n ;\r\n}', |
| 'switch(42){default:42}': 'switch (42) {\r\ndefault:\r\n 42\r\n}', |
| 'foo:;': 'foo:;', |
| 'foo:42': 'foo:\r\n 42', |
| 'try{}catch(foo){}finally{}': 'try {\r\n} catch (foo) {\r\n} finally {\r\n}', |
| 'try{;}catch(foo){;}finally{;}': 'try {\r\n ;\r\n} catch (foo) {\r\n ;\r\n} finally {\r\n ;\r\n}', |
| 'try{42}catch(foo){42}finally{42}': 'try {\r\n 42\r\n} catch (foo) {\r\n 42\r\n} finally {\r\n 42\r\n}', |
| '!function(){}': '!function () {\r\n}', |
| '!function(){;}': '!function () {\r\n ;\r\n}', |
| '!function(){42}': '!function () {\r\n 42\r\n}', |
| '42;foo': '42;\r\nfoo' |
| } |
| }, { |
| options: { |
| format: { |
| newline: '\r\n', |
| space: ' ', |
| semicolons: false |
| } |
| }, |
| items: { |
| '{}': '{\r\n}', |
| '{;}': '{\r\n ;\r\n}', |
| '{42}': '{\r\n 42\r\n}', |
| 'if(42);': 'if (42);', |
| 'if(42)42': 'if (42)\r\n 42', |
| 'if(42);else;': 'if (42);\r\nelse ;', |
| 'if(42)42;else 42': 'if (42)\r\n 42;\r\nelse\r\n 42', |
| 'do;while(42)': 'do ;\r\nwhile (42)', |
| 'do 42;while(42)': 'do\r\n 42;\r\nwhile (42)', |
| 'while(42);': 'while (42);', |
| 'while(42)42': 'while (42)\r\n 42', |
| 'for(;;);': 'for (;;);', |
| 'for(;;)42': 'for (;;)\r\n 42', |
| 'for(foo in 42);': 'for (foo in 42);', |
| 'for(foo in 42)42': 'for (foo in 42)\r\n 42', |
| 'with({});': 'with ({});', |
| 'with({})42': 'with ({})\r\n 42', |
| 'switch(42){default:}': 'switch (42) {\r\ndefault:\r\n}', |
| 'switch(42){default:;}': 'switch (42) {\r\ndefault:\r\n ;\r\n}', |
| 'switch(42){default:42}': 'switch (42) {\r\ndefault:\r\n 42\r\n}', |
| 'foo:;': 'foo:;', |
| 'foo:42': 'foo:\r\n 42', |
| 'try{}catch(foo){}finally{}': 'try {\r\n} catch (foo) {\r\n} finally {\r\n}', |
| 'try{;}catch(foo){;}finally{;}': 'try {\r\n ;\r\n} catch (foo) {\r\n ;\r\n} finally {\r\n ;\r\n}', |
| 'try{42}catch(foo){42}finally{42}': 'try {\r\n 42\r\n} catch (foo) {\r\n 42\r\n} finally {\r\n 42\r\n}', |
| '!function(){}': '!function () {\r\n}', |
| '!function(){;}': '!function () {\r\n ;\r\n}', |
| '!function(){42}': '!function () {\r\n 42\r\n}', |
| '42;foo': '42;\r\nfoo' |
| } |
| }, { |
| options: { |
| format: { |
| space: '\t', |
| semicolons: false |
| } |
| }, |
| items: { |
| '{}': '{\n}', |
| '{;}': '{\n ;\n}', |
| '{42}': '{\n 42\n}', |
| 'if(42);': 'if\t(42);', |
| 'if(42)42': 'if\t(42)\n 42', |
| 'if(42);else;': 'if\t(42);\nelse\t;', |
| 'if(42)42;else 42': 'if\t(42)\n 42;\nelse\n 42', |
| 'do;while(42)': 'do\t;\nwhile\t(42)', |
| 'do 42;while(42)': 'do\n 42;\nwhile\t(42)', |
| 'while(42);': 'while\t(42);', |
| 'while(42)42': 'while\t(42)\n 42', |
| 'for(;;);': 'for\t(;;);', |
| 'for(;;)42': 'for\t(;;)\n 42', |
| 'for(foo in 42);': 'for\t(foo\tin\t42);', |
| 'for(foo in 42)42': 'for\t(foo\tin\t42)\n 42', |
| 'with({});': 'with\t({});', |
| 'with({})42': 'with\t({})\n 42', |
| 'switch(42){default:}': 'switch\t(42)\t{\ndefault:\n}', |
| 'switch(42){default:;}': 'switch\t(42)\t{\ndefault:\n ;\n}', |
| 'switch(42){default:42}': 'switch\t(42)\t{\ndefault:\n 42\n}', |
| 'foo:;': 'foo:;', |
| 'foo:42': 'foo:\n 42', |
| 'try{}catch(foo){}finally{}': 'try\t{\n}\tcatch\t(foo)\t{\n}\tfinally\t{\n}', |
| 'try{;}catch(foo){;}finally{;}': 'try\t{\n ;\n}\tcatch\t(foo)\t{\n ;\n}\tfinally\t{\n ;\n}', |
| 'try{42}catch(foo){42}finally{42}': 'try\t{\n 42\n}\tcatch\t(foo)\t{\n 42\n}\tfinally\t{\n 42\n}', |
| '!function(){}': '!function\t()\t{\n}', |
| '!function(){;}': '!function\t()\t{\n ;\n}', |
| '!function(){42}': '!function\t()\t{\n 42\n}', |
| '42;foo': '42;\nfoo' |
| } |
| }]; |
| |
| function adjustRegexLiteral(key, value) { |
| if (key === 'value' && value instanceof RegExp) { |
| value = value.toString(); |
| } |
| return value; |
| } |
| |
| function runTest(options, source, expectedCode) { |
| var tree, actualTree, expectedTree, actualCode, optionsParser = { |
| raw: true |
| }; |
| if (options.comment) { |
| optionsParser.comment = true; |
| optionsParser.range = true; |
| optionsParser.loc = true; |
| optionsParser.tokens = true; |
| } |
| tree = esprima.parse(source); |
| expectedTree = JSON.stringify(tree, adjustRegexLiteral, 4); |
| tree = esprima.parse(source, optionsParser); |
| if (options.comment) { |
| tree = escodegen.attachComments(tree, tree.comments, tree.tokens); |
| } |
| actualCode = escodegen.generate(tree, options); |
| tree = esprima.parse(actualCode); |
| actualTree = JSON.stringify(tree, adjustRegexLiteral, 4); |
| expect(actualTree).to.be.equal(expectedTree); |
| expect(actualCode).to.be.equal(expectedCode); |
| } |
| |
| describe('options test', function () { |
| data.forEach(function (category, index) { |
| it('data[' + index + ']', function () { |
| var options = category.options; |
| Object.keys(category.items).forEach(function (source) { |
| var expectedCode = category.items[source]; |
| if (options.parse) { |
| options.parse = esprima.parse; |
| } |
| runTest(options, source, expectedCode); |
| }); |
| }); |
| }); |
| }); |
| /* vim: set sw=4 ts=4 et tw=80 : */ |