This test checks that toString() round-trip on a function that has a typeof operator applied to a group expression will not remove the grouping.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS unevalf(eval(unevalf(typeof_should_preserve_parens))) is unevalf(typeof_should_preserve_parens)
PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens)) is true
PASS typeof_should_preserve_parens('a', 1); is 'number'
PASS eval(unevalf(typeof_should_preserve_parens))('a', 1); is 'number'
PASS unevalf(eval(unevalf(typeof_should_preserve_parens1))) is unevalf(typeof_should_preserve_parens1)
PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens1)) is true
PASS typeof_should_preserve_parens1('a', 1); is 'number'
PASS eval(unevalf(typeof_should_preserve_parens1))('a', 1); is 'number'
PASS unevalf(eval(unevalf(typeof_should_preserve_parens2))) is unevalf(typeof_should_preserve_parens2)
PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens2)) is true
PASS typeof_should_preserve_parens2('a', 1); is 'number'
PASS eval(unevalf(typeof_should_preserve_parens2))('a', 1); is 'number'
PASS unevalf(eval(unevalf(typeof_should_preserve_parens_multi))) is unevalf(typeof_should_preserve_parens_multi)
PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens_multi)) is true
PASS typeof_should_preserve_parens_multi('a', 1); is 'number'
PASS eval(unevalf(typeof_should_preserve_parens_multi))('a', 1); is 'number'
PASS successfullyParsed is true

TEST COMPLETE

