[racket-dev] how to test rackunit

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Sun Nov 3 00:48:39 EDT 2013

In general, you should look at what DrDr does to decide how to run
some tests. For instance, with Rackunit, you can look here:

http://drdr.racket-lang.org/27688/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/

and here in particular:

http://drdr.racket-lang.org/27688/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/run-tests.rkt

One thing that you will see is that as part of testing there are some
failing tests to see what happens, but the tests deliberately switch
current-error-port with current-input-port so that it does not result
in STDERR output that DrDr would count as a failure.

Jay


On Sat, Nov 2, 2013 at 10:21 PM, David T. Pierson <dtp at mindstory.com> wrote:
> What is the correct way to run the tests which test rackunit?
>
> I am running the following after building with a clean tree:
>
>  $ racket/bin/raco test pkgs/rackunit-pkgs/rackunit-test/tests/rackunit
>
> This seems to show several "failures", though since it is testing rackunit
> I'm pretty sure most if not all are intentional (to verify that things
> which should fail do fail.)  The full output is below [*].
>
> What is not clear is how do people run this and determine whether they
> have any unintentional failures?  Is there a separate command I should
> be using?  Perhaps people just diff the output from a clean tree vs
> the output with their changes?
>
> BTW, I have read:
>
> http://blog.racket-lang.org/2012/11/tutorial-contributing-to-racket.html
>
> which has been very helpful since Joe's example was a change to
> rackunit, but I didn't see anything addressing this problem.
>
> For additional context: my motivation for running these tests is to improve
> check-exn so it no longer passes when given a non-thunk.  I think it
> should raise an error instead.  I already have a patch for this but
> running the tests has me thinking I'm not using the correct command to
> test rackunit.
>
> David
>
> [*] Here is the output from the above 'raco test ...' command, with stdout
> and stderr redirected to a file.  Note the redirection changes the
> ordering of some lines compared to the terminal output.
>
>
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/all-rackunit-tests.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/base-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/check-info-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/check-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/counter-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/format-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/hash-monad-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/location-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/log.rkt"
> --------------------
> FAILURE
> name:       check-true
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/log.rkt> 38 2 1185 15)
> expression: (check-true #f)
> params:     (#f)
>
> Check failure
> --------------------
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/monad-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/pr10950.rkt"
> 1 test--------------------
> ERROR
> Outta here!
>   context...:
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/check.rkt:133:29
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/check.rkt:58:0: top-level-check-around
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/check.rkt:119:21: check-pred492750
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-check-test.rkt: [running body]
>    f88
>    loop
>    loop
>    loop
>    f88
>    /home/dtp/src/dtp-racket/pkgs/compiler-pkgs/compiler-lib/compiler/commands/test.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/raco.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/main.rkt: [running body]
>
> --------------------
> --------------------
> FAILURE
> name:       check
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-check-test.rkt> 44 0 1344 17)
> expression: (check = 1 2)
> params:     (#<procedure:=> 1 2)
> message:    0.0
>
> Check failure
> --------------------
> --------------------
> ERROR
> First Outta here!
>   context...:
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-test-case-test.rkt: [running body]
>    f88
>    loop
>    loop
>    loop
>    f88
>    /home/dtp/src/dtp-racket/pkgs/compiler-pkgs/compiler-lib/compiler/commands/test.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/raco.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/main.rkt: [running body]
>
> --------------------
> --------------------
> error
> ERROR
> Second Outta here!
>   context...:
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-test-case-test.rkt: [running body]
>    f88
>    loop
>    loop
>    loop
>    f88
>    /home/dtp/src/dtp-racket/pkgs/compiler-pkgs/compiler-lib/compiler/commands/test.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/raco.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/main.rkt: [running body]
>
> --------------------
> --------------------
> FAILURE
> actual:     1
> expected:   2
> name:       check-eq?
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-test-case-test.rkt> 19 12 520 15)
> expression: (check-eq? 1 2)
>
> Check failure
> --------------------
> --------------------
> failure
> FAILURE
> actual:     1
> expected:   2
> name:       check-eq?
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-test-case-test.rkt> 20 21 558 15)
> expression: (check-eq? 1 2)
>
> Check failure
> --------------------
> --------------------
> FAILURE
> actual:     #""
> expected:   #"Oh HAI!\nI didn't run\n"
> name:       check-equal?
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone.rkt> 29 4 956 23)
> expression: (check-equal? cout #"Oh HAI!\nI didn't run\n")
>
> Check failure
> --------------------
> --------------------
> FAILURE
> actual:     #""
> expected:   #"--------------------\nERROR\nOutta here!\n\n--------------------\n--------------------\nFAILURE\nname:       check\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-check-test.rkt> 44 0 1344 17)\nexpression: (check = 1 2)\nparams:     (#<procedure:=> 1 2)\nmessage:    0.0\n\nCheck failure\n--------------------\n"
> name:       check-equal?
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone.rkt> 30 4 984 23)
> expression: (check-equal? cerr #"--------------------\nERROR\nOutta here!\n\n--------------------\n--------------------\nFAILURE\nname:       check\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-check-test.rkt> 44 0 1344 17)\nexpression: (check = 1 2)\nparams:     (#<procedure:=> 1 2)\nmessage:    0.0\n\nCheck failure\n--------------------\n")
>
> Check failure
> --------------------
> --------------------
> FAILURE
> actual:     #""
> expected:   #"--------------------\nERROR\nFirst Outta here!\n\n--------------------\n--------------------\nerror\nERROR\nSecond Outta here!\n\n--------------------\n--------------------\nFAILURE\nactual:     1\nexpected:   2\nname:       check-eq?\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-test-case-test.rkt> 19 12 520 15)\nexpression: (check-eq? 1 2)\n\nCheck failure\n--------------------\n--------------------\nfailure\nFAILURE\nactual:     1\nexpected:   2\nname:       check-eq?\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-test-case-test.rkt> 20 21 558 15)\nexpression: (check-eq? 1 2)\n\nCheck failure\n--------------------\n"
> name:       check-equal?
> location:   (#<path:/home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone.rkt> 30 4 984 23)
> expression: (check-equal? cerr #"--------------------\nERROR\nFirst Outta here!\n\n--------------------\n--------------------\nerror\nERROR\nSecond Outta here!\n\n--------------------\n--------------------\nFAILURE\nactual:     1\nexpected:   2\nname:       check-eq?\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-test-case-test.rkt> 19 12 520 15)\nexpression: (check-eq? 1 2)\n\nCheck failure\n--------------------\n--------------------\nfailure\nFAILURE\nactual:     1\nexpected:   2\nname:       check-eq?\nlocation:   (#<path:PLTHOME/collects/tests/rackunit/standalone-test-case-test.rkt> 20 21 558 15)\nexpression: (check-eq? 1 2)\n\nCheck failure\n--------------------\n")
>
> Check failure
> --------------------
>  passed
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/result-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/run-tests.rkt"
> 127 success(es) 0 failure(s) 0 error(s) 127 test(s) run
> 0
> --------------------
> Failures > Intended to fail
> Intended to fail
> FAILURE
> name:       fail
> location:   pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/all-rackunit-tests.rkt:47:33
> params:     Check failure
> --------------------
> --------------------
> Failures > Also intended to fail
> Also intended to fail
> FAILURE
> name:       check-eq?
> location:   pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/all-rackunit-tests.rkt:48:38
> actual:     'apples
> expected:   'orange
> Check failure
> --------------------
> --------------------
> Failures > Yet again intended to fail
> Yet again intended to fail
> FAILURE
> name:       check-equal?
> location:   pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/all-rackunit-tests.rkt:49:3
> actual:     "apples"
> expected:   "oranges"
> Check failure
> --------------------
> --------------------
> Failures > Intended to throw error
> Intended to throw error
> ERROR
> testing: <<This is an error message>>
>   context...:
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/result.rkt:99:3
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/test-suite.rkt:28:2
>    the-tests
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/test-suite.rkt:60:0: apply-test-suite
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/text-ui.rkt:238:0: run-tests14
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/run-tests.rkt: [running body]
>    f88
>    loop
>    loop
>    loop
>    f88
>    /home/dtp/src/dtp-racket/pkgs/compiler-pkgs/compiler-lib/compiler/commands/test.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/raco.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/main.rkt: [running body]
>
> --------------------
> --------------------
> Failures > Error within a check
> Error within a check
> ERROR
> name:       check
> location:   pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/all-rackunit-tests.rkt:51:37
> params:     #<procedure:error>
> 'foo
> 'bar
> error: contract violation
>   expected: string?
>   given: 'bar
>   argument position: 2nd
>   other arguments...:
>    'foo
>   context...:
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/check.rkt:133:29
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/check.rkt:119:21: check491437
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/result.rkt:99:3
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/test-suite.rkt:28:2
>    the-tests
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/private/test-suite.rkt:60:0: apply-test-suite
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-lib/rackunit/text-ui.rkt:238:0: run-tests14
>    /home/dtp/src/dtp-racket/pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/run-tests.rkt: [running body]
>    f88
>    loop
>    loop
>    loop
>    f88
>    /home/dtp/src/dtp-racket/pkgs/compiler-pkgs/compiler-lib/compiler/commands/test.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/raco.rkt: [running body]
>    /home/dtp/src/dtp-racket/racket/collects/raco/main.rkt: [running body]
>
> --------------------
> 0 success(es) 3 failure(s) 2 error(s) 5 test(s) run
> 5
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-check-test.rkt"
> Oh HAI!
> I didn't run
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone-test-case-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/standalone.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/test-case-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/test-suite-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/test-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/text-ui-test.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/text-ui-util-test.rkt"
> 55/340 test failures
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/tl.rkt"
> raco test: "pkgs/rackunit-pkgs/rackunit-test/tests/rackunit/util-test.rkt"
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93


Posted on the dev mailing list.