From b38cc75f17ac6c8e4877b8ae85f6d5d4f5bac8c5 Mon Sep 17 00:00:00 2001 From: Michael Ficarra Date: Thu, 16 Dec 2010 01:06:40 -0500 Subject: [PATCH] refactored test_if.coffee, renamed to conditionals.coffee --- test/comments.coffee | 10 --- test/conditionals.coffee | 182 +++++++++++++++++++++++++++++++++++++++ test/test_if.coffee | 149 -------------------------------- 3 files changed, 182 insertions(+), 159 deletions(-) create mode 100644 test/conditionals.coffee delete mode 100644 test/test_if.coffee diff --git a/test/comments.coffee b/test/comments.coffee index d1a2572f..a00cfcf2 100644 --- a/test/comments.coffee +++ b/test/comments.coffee @@ -199,13 +199,3 @@ test "block comments inside class bodies", -> b: -> ok B.prototype.a instanceof Function - -test "#934, block comments inside conditional bodies", -> - - eq undefined, (if true - ### - block comment - ### - else - # comment - ) diff --git a/test/conditionals.coffee b/test/conditionals.coffee new file mode 100644 index 00000000..31c32805 --- /dev/null +++ b/test/conditionals.coffee @@ -0,0 +1,182 @@ +# Conditionals +# ------------ + +# shared "identity" function +id = (_) -> _ + + +#### Basic Conditionals + +test "basic conditionals", -> + if false + ok false + else if false + ok false + else + ok true + + if true + ok true + else if true + ok false + else + ok true + + unless true + ok false + else unless true + ok false + else + ok true + + unless false + ok true + else unless false + ok false + else + ok true + +test "single-line conditional", -> + if false then ok false else ok true + unless false then ok true else ok false + +test "nested conditionals", -> + nonce = {} + eq nonce, (if true + unless false + if false then false else + if true + nonce) + +test "nested single-line conditionals", -> + nonce = {} + + a = if false then undefined else b = if 0 then undefined else nonce + eq nonce, a + eq nonce, b + + c = if false then undefined else (if 0 then undefined else nonce) + eq nonce, c + + d = if true then id(if false then undefined else nonce) + eq nonce, d + +test "empty conditional bodies", -> + eq undefined, (if false + else if false + else) + +test "conditional bodies containing only comments", -> + eq undefined, (if true + ### + block comment + ### + else + # comment + ) + + eq undefined, (if false + # comment + else if true + ### + block comment + ### + else) + +test "return value of if-else is from the proper body", -> + nonce = {} + eq nonce, if false then undefined else nonce + +test "return value of unless-else is from the proper body", -> + nonce = {} + eq nonce, unless true then undefined else nonce + + +#### Interactions With Functions + +test "single-line function definition with single-line conditional", -> + fn = -> if 1 < 0.5 then 1 else -1 + ok fn() is -1 + +test "function resturns conditional value with no `else`", -> + fn = -> + return if false then true + eq undefined, fn() + +test "function returns a conditional value", -> + a = {} + fnA = -> + return if false then undefined else a + eq a, fnA() + + b = {} + fnB = -> + return unless false then b else undefined + eq b, fnB() + +test "passing a conditional value to a function", -> + nonce = {} + eq nonce, id if false then undefined else nonce + +test "unmatched `then` should catch implicit calls", -> + a = 0 + trueFn = -> true + if trueFn undefined then a += 1 + eq 1, a + + +#### if-to-ternary + +test "if-to-ternary with instanceof requires parentheses", -> + nonce = {} + eq nonce, (if {} instanceof Object + nonce + else + undefined) + +test "if-to-ternary as part of a larger operation requires parentheses", -> + ok 2, 1 + if false then 0 else 1 + + +#### Odd Formatting + +test "if-else indented within an assignment", -> + nonce = {} + result = + if false + undefined + else + nonce + eq nonce, result + +test "suppressed indentation via assignment", -> + nonce = {} + result = + if false then undefined + else if no then undefined + else if 0 then undefined + else if 1 < 0 then undefined + else id( + if false then undefined + else nonce + ) + eq nonce, result + +test "tight formatting with leading `then`", -> + nonce = {} + eq nonce, + if true + then nonce + else undefined + +test "#738", -> + nonce = {} + fn = if true then -> nonce + eq nonce, fn() + +test "#748: trailing reserved identifiers", -> + nonce = {} + obj = delete: true + result = if obj.delete + nonce + eq nonce, result diff --git a/test/test_if.coffee b/test/test_if.coffee deleted file mode 100644 index e4a0d4df..00000000 --- a/test/test_if.coffee +++ /dev/null @@ -1,149 +0,0 @@ -a = b = d = true -c = false - -result = if a - if b - if c then false else - if d - true - -ok result - - -first = if false then false else second = if false then false else true - -ok first -ok second - - -result = if false - false -else if NaN - false -else - true - -ok result - - -# Testing unless. -result = unless true - 10 -else - 11 - -ok result is 11 - - -# Nested inline if statements. -echo = (x) -> x -result = if true then echo((if false then 'xxx' else 'y') + 'a') -ok result is 'ya' - - -# Testing inline funcs with inline if-elses. -func = -> if 1 < 0.5 then 1 else -1 -ok func() is -1 - - -# Testing empty or commented if statements ... should compile: -result = if false -else if false -else - -ok result is undefined - -result = if false - # comment -else if true - # comment -else - -ok result is undefined - - -# Return an if with no else. -func = -> - return if false then callback() - -ok func() is undefined - -func = -> - return unless false then 100 else -100 - -ok func() is 100 - -ident = (x) -> x -result = ident if false then 300 else 100 - -ok result is 100 - - -# If-to-ternary with instanceof requires parentheses (no comment). -if {} instanceof Object - ok yes -else - ok no - -try - {} + {} - ok yes -catch e - ok no - - -# If-to-ternary as part of a larger operation requires parens. -x = 1 -result = x + if false then 10 else 1 -ok result is 2 - - -# If/else indented within an assignment. -func = -> - a = - if false - 3 - else - 5 - 101 - a - -ok func() is 5 - - -# Unmatched 'then' should catch implicit calls. -i = 1 -isTrue = (x) -> x is true - -if isTrue yes then i += 1 - -ok i is 2 - -# If/else with a suppressed indentation via assignment. -result = - if false then 10 - else if no then 20 - else if 0 then 30 - else if NaN then 40 - else 50 + - if false then 10 - else 20 - -ok result is 70 - -if 'tight formatting with leading `then` is allowed' -then ok 'yay' -else throw 'boo' - -# Issue #738 -func = if true then -> 1 -eq func(), 1 - - -# Issue #748. Trailing reserved identifiers. -obj = delete: true - -result = if obj.delete - 101 - -ok result is 101