Clojure

Syntactically broken clojure.test/are tests succeed

Details

  • Type: Defect Defect
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Completed
  • Affects Version/s: Release 1.3
  • Fix Version/s: Release 1.4
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code
  • Approval:
    Ok

Description

While clojure.test/are is a very useful macro, it has one major flaw. If the assertion is syntactically incorrect, the test succeeds. Take this testcase:

(deftest broken-test
  (are [a b c] (= a b c)
       1 1))

See the error? The are form takes three values, but I have provided only two. The test simply passes.

Latest patch checks the number of arguments to are and throws an exception if they don't match.

Activity

Tassilo Horn made changes -
Field Original Value New Value
Attachment 0001-Fix-CLJ-931-Syntactically-broken-clojure.test-are-te.patch [ 10919 ]
Tassilo Horn made changes -
Attachment 0001-Throw-exception-if-are-s-args-don-t-match-its-argv.patch [ 10914 ]
Tassilo Horn made changes -
Attachment 0001-Fix-CLJ-931-Syntactically-broken-clojure.test-are-te.patch [ 10919 ]
Tassilo Horn made changes -
Andy Fingerhut made changes -
Stuart Sierra made changes -
Waiting On richhickey
Approval Screened [ 10004 ]
Priority Major [ 3 ] Minor [ 4 ]
Stuart Sierra made changes -
Description While clojure.test/are is a very useful macro, it has one major flaw. If the assertion is syntactically incorrect, the test succeeds. Take this testcase:

{noformat}
(deftest broken-test
  (are [a b c] (= a b c)
       1 1))
{noformat}

See the error? The are form takes three values, but I have provided only two. The test simply passes.

The attached patch makes clojure.test/are take care that the number of values is divisible by the number of variables declared in the vector and throw an exception if that's not the case.

Stu, I'm still confused about the workflow. Should I've been adding this report to some Fix Version(s), and if so, which?
While clojure.test/are is a very useful macro, it has one major flaw. If the assertion is syntactically incorrect, the test succeeds. Take this testcase:

{code}
(deftest broken-test
  (are [a b c] (= a b c)
       1 1))
{code}

See the error? The are form takes three values, but I have provided only two. The test simply passes.

Latest patch checks the number of arguments to {{are}} and throws an exception if they don't match.
Rich Hickey made changes -
Approval Screened [ 10004 ] Ok [ 10007 ]
Fix Version/s Release 1.4 [ 10040 ]
Stuart Halloway made changes -
Resolution Completed [ 1 ]
Status Open [ 1 ] Closed [ 6 ]

People

Vote (1)
Watch (2)

Dates

  • Created:
    Updated:
    Resolved: