diff --git a/test/regular_expressions.coffee b/test/regular_expressions.coffee new file mode 100644 index 00000000..e3f4eea5 --- /dev/null +++ b/test/regular_expressions.coffee @@ -0,0 +1,56 @@ +# Regular Expressions +# ------------------- +#TODO: add some rigorous regex interpolation tests + +test "basic regular expression literals", -> + ok 'a'.match(/a/) + ok 'a'.match /a/ + ok 'a'.match(/a/g) + ok 'a'.match /a/g + +test "division is not confused for a regular expression", -> + eq 2, 4 / 2 / 1 + + a = 4 + b = 2 + g = 1 + eq 2, a / b/g + + obj = method: -> 2 + two = 2 + eq 2, (obj.method()/two + obj.method()/two) + + i = 1 + eq 2, (4)/2/i + eq 1, i/i/i + +test "backslash escapes", -> + eq "\\/\\\\", /\/\\/.source + +test "#764: regular expressions should be indexable", -> + eq /0/['source'], ///#{0}///['source'] + +test "#584: slashes are allowed unescaped in character classes", -> + ok /^a\/[/]b$/.test 'a//b' + + +#### Heregexe(n|s) + +test "a heregex will ignore whitespace and comments", -> + eq /^I'm\x20+[a]\s+Heregex?\/\/\//gim + '', /// + ^ I'm \x20+ [a] \s+ + Heregex? / // # or not + ///gim + '' + +test "heregex interpolation", -> + eq /\\#{}\\\"/ + '', /// + #{ + "#{ '\\' }" # normal comment + } + # regex comment + \#{} + \\ \" + /// + '' + +test "an empty heregex will compile to an empty, non-capturing group", -> + eq /(?:)/ + '', /// /// + '' diff --git a/test/test_regexps.coffee b/test/test_regexps.coffee deleted file mode 100644 index cf5e196d..00000000 --- a/test/test_regexps.coffee +++ /dev/null @@ -1,51 +0,0 @@ -# Regular expression literals. -ok 'x'.match(/x/g) -ok 'x'.match /x/g -ok 'x'.match(/x/) -ok 'x'.match /x/ - -ok 4 / 2 / 1 is 2 - -y = 4 -x = 2 -g = 1 - -ok y / x/g is 2 - -obj = { - width: -> 10 - height: -> 20 -} -id = 2 - -ok (obj.width()/id - obj.height()/id) is -5 - -eq /\\/.source, "\\\\" - - -eq /^I'm\s+Heregex?\/\/\//gim + '', /// - ^ I'm \s+ Heregex? / // # or not -///gim + '' -eq '\\\\#{}\\\\\\\"', /// - #{ - "#{ '\\' }" # normal comment - } - # regex comment - \#{} - \\ \" -///.source -eq /// /// + '', '/(?:)/' - - -#764: Should be indexable. -eq /0/['source'], ///#{0}///['source'] - - -# If not preceded by whitespace, should be stricter. -i = 5 -eq (1000)/200/i, 1 - -eq i/i/i, 0.2 - -#584: Unescaped slashes in character classes. -ok /:\/[/]goog/.test 'http://google.com'