From 7d2f6b32f5c6db32a6098491ce367dbb3bf90c0f Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Wed, 6 Feb 2008 04:26:13 -0600
Subject: [PATCH] Add builder.test

---
 extra/builder/builder.factor   | 46 +++++++++++++---------------------
 extra/builder/test/test.factor | 33 ++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 28 deletions(-)
 create mode 100644 extra/builder/test/test.factor

diff --git a/extra/builder/builder.factor b/extra/builder/builder.factor
index 375023cb5e..2acdbc3294 100755
--- a/extra/builder/builder.factor
+++ b/extra/builder/builder.factor
@@ -8,6 +8,15 @@ IN: builder
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
+: runtime ( quot -- time ) benchmark nip ;
+
+: log-runtime ( quot file -- )
+  >r runtime r> <file-writer> [ . ] with-stream ;
+
+: log-object ( object file -- ) <file-writer> [ . ] with-stream ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
 : datestamp ( -- string )
   now `{ ,[ dup timestamp-year   ]
          ,[ dup timestamp-month  ]
@@ -35,11 +44,6 @@ SYMBOL: builder-recipients
 
 : target ( -- target ) `{ ,[ os ] %[ cpu "." split ] } "-" join ;
 
-! : target ( -- target )
-!   { { [ os "windows" = ] [ "windows-nt-x86-32" ] }
-!     { [ t ]              [ `{ ,[ os ] %[ cpu "." split ] } "-" join ] } }
-!   cond ;
-
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 : factor-binary ( -- name )
@@ -84,10 +88,8 @@ VAR: stamp
 
   "factor" cd
 
-  { "git" "show" } <process-stream>
-  [ readln ] with-stream
-  " " split second
-  "../git-id" <file-writer> [ print ] with-stream
+  { "git" "show" } <process-stream> [ readln ] with-stream " " split second
+  "../git-id" log-object
 
   { "make" "clean" } run-process drop
 
@@ -117,9 +119,7 @@ VAR: stamp
      { +stdout+   "../boot-log" }
      { +stderr+   +stdout+ }
    }
-  >hashtable
-  [ run-process process-status ]
-  benchmark nip "../boot-time" <file-writer> [ . ] with-stream
+  >hashtable [ run-process ] "../boot-time" log-runtime process-status
   0 =
   [ ]
   [
@@ -127,26 +127,16 @@ VAR: stamp
     "builder: bootstrap" throw
   ] if
 
-!   `{
-!      { +arguments+
-!        { ,[ factor-binary ] "-e=USE: tools.browser load-everything" } }
-!      { +stdout+    "../load-everything-log" }
-!      { +stderr+    +stdout+ }
-!    }
-!   >hashtable [ run-process process-status ] benchmark nip
-!   "../load-everything-time" <file-writer> [ . ] with-stream
-!   0 =
-!   [ ]
-!   [
-!     "builder: load-everything" "../load-everything-log" email-file
-!     "builder: load-everything" throw
-!   ] if ;
-
-  `{ ,[ factor-binary ] "-run=builder.load-everything" } run-process drop
+  `{ ,[ factor-binary ] "-run=builder.test" } run-process drop
+  
   "../load-everything-log" exists?
   [ "builder: load-everything" "../load-everything-log" email-file ]
   when
 
+  "../failing-tests" exists?
+  [ "builder: failing tests" "../failing-tests" email-file ]
+  when
+
   ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/extra/builder/test/test.factor b/extra/builder/test/test.factor
new file mode 100644
index 0000000000..ed75e99527
--- /dev/null
+++ b/extra/builder/test/test.factor
@@ -0,0 +1,33 @@
+
+USING: kernel sequences assocs builder continuations vocabs vocabs.loader
+       io
+       io.files
+       tools.browser
+       tools.test ;
+
+IN: builder.test
+
+: do-load ( -- )
+  [ [ load-everything ] catch ] "../load-everything-time" log-runtime
+  [ require-all-error-vocabs    "../load-everything-log"  log-object ]
+  when* ;
+
+: do-tests ( -- )
+  "" child-vocabs
+  [ vocab-source-loaded? ] subset
+  [ vocab-tests-path ] map
+  [ dup [ ?resource-path exists? ] when ] subset
+  [ dup run-test ] { } map>assoc
+  [ second empty? not ] subset
+  dup empty?
+  [ drop ]
+  [
+    "../failing-tests" <file-writer>
+      [ [ nl failures. ] assoc-each ]
+    with-stream
+  ]
+  if ;
+
+: do-all ( -- ) do-load do-tests ;
+
+MAIN: do-all
\ No newline at end of file