96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2003, 2008 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: accessors namespaces arrays prettyprint sequences kernel
 | |
| vectors quotations words parser assocs combinators continuations
 | |
| debugger io io.styles io.files vocabs vocabs.loader source-files
 | |
| compiler.units summary stack-checker effects tools.vocabs fry ;
 | |
| IN: tools.test
 | |
| 
 | |
| SYMBOL: failures
 | |
| 
 | |
| : <failure> ( error what -- triple )
 | |
|     error-continuation get 3array ;
 | |
| 
 | |
| : failure ( error what -- )
 | |
|     "--> test failed!" print
 | |
|     <failure> failures get push ;
 | |
| 
 | |
| SYMBOL: this-test
 | |
| 
 | |
| : (unit-test) ( what quot -- )
 | |
|     swap dup . flush this-test set
 | |
|     failures get [
 | |
|         [ this-test get failure ] recover
 | |
|     ] [
 | |
|         call
 | |
|     ] if ;
 | |
| 
 | |
| : unit-test ( output input -- )
 | |
|     [ 2array ] 2keep '[
 | |
|         _ { } _ with-datastack swap >array assert=
 | |
|     ] (unit-test) ;
 | |
| 
 | |
| : short-effect ( effect -- pair )
 | |
|     [ in>> length ] [ out>> length ] bi 2array ;
 | |
| 
 | |
| : must-infer-as ( effect quot -- )
 | |
|     [ 1quotation ] dip '[ _ infer short-effect ] unit-test ;
 | |
| 
 | |
| : must-infer ( word/quot -- )
 | |
|     dup word? [ 1quotation ] when
 | |
|     '[ _ infer drop ] [ ] swap unit-test ;
 | |
| 
 | |
| : must-fail-with ( quot pred -- )
 | |
|     [ '[ @ f ] ] dip '[ _ _ recover ] [ t ] swap unit-test ;
 | |
| 
 | |
| : must-fail ( quot -- )
 | |
|     [ drop t ] must-fail-with ;
 | |
| 
 | |
| : (run-test) ( vocab -- )
 | |
|     dup vocab source-loaded?>> [
 | |
|         vocab-tests [ run-file ] each
 | |
|     ] [ drop ] if ;
 | |
| 
 | |
| : run-test ( vocab -- failures )
 | |
|     V{ } clone [
 | |
|         failures [
 | |
|             [ (run-test) ] [ swap failure ] recover
 | |
|         ] with-variable
 | |
|     ] keep ;
 | |
| 
 | |
| : failure. ( triple -- )
 | |
|     dup second .
 | |
|     dup first print-error
 | |
|     "Traceback" swap third write-object ;
 | |
| 
 | |
| : test-failures. ( assoc -- )
 | |
|     [
 | |
|         nl
 | |
|         [
 | |
|             "==== ALL TESTS PASSED" print
 | |
|         ] [
 | |
|             "==== FAILING TESTS:" print
 | |
|             [
 | |
|                 swap vocab-heading.
 | |
|                 [ failure. nl ] each
 | |
|             ] assoc-each
 | |
|         ] if-empty
 | |
|     ] [
 | |
|         "==== NOTHING TO TEST" print
 | |
|     ] if* ;
 | |
| 
 | |
| : run-tests ( prefix -- failures )
 | |
|     child-vocabs [ f ] [
 | |
|         [ dup run-test ] { } map>assoc
 | |
|         [ second empty? not ] filter
 | |
|     ] if-empty ;
 | |
| 
 | |
| : test ( prefix -- )
 | |
|     run-tests test-failures. ;
 | |
| 
 | |
| : run-all-tests ( -- failures )
 | |
|     "" run-tests ;
 | |
| 
 | |
| : test-all ( -- )
 | |
|     run-all-tests test-failures. ;
 |