about summary refs log tree commit diff
path: root/src/test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/test.cc')
-rw-r--r--src/test.cc82
1 files changed, 74 insertions, 8 deletions
diff --git a/src/test.cc b/src/test.cc
index cce226ba92..79468182ea 100644
--- a/src/test.cc
+++ b/src/test.cc
@@ -1,16 +1,82 @@
 #include <iostream>
 
+#include <sys/stat.h>
+#include <sys/types.h>
+
 #include "hash.hh"
+#include "util.hh"
+#include "eval.hh"
+#include "values.hh"
+#include "globals.hh"
 
-int main(int argc, char * * argv)
+
+void evalTest(Expr e)
 {
-    Hash h = hashFile("/etc/passwd");
-    
-    cout << (string) h << endl;
+    EvalResult r = evalValue(e);
+
+    char * s = ATwriteToString(r.e);
+    cout << (string) r.h << ": " << s << endl;
+}
+
+
+void runTests()
+{
+    /* Hashing. */
+    string s = "0b0ffd0538622bfe20b92c4aa57254d9";
+    Hash h = parseHash(s);
+    if ((string) h != s) abort();
+
+    try {
+        h = parseHash("blah blah");
+        abort();
+    } catch (BadRefError err) { };
+
+    try {
+        h = parseHash("0b0ffd0538622bfe20b92c4aa57254d99");
+        abort();
+    } catch (BadRefError err) { };
+
+
+    /* Set up the test environment. */
+
+    mkdir("scratch", 0777);
 
-    h = parseHash("0b0ffd0538622bfe20b92c4aa57254d9");
-    
-    cout << (string) h << endl;
+    string testDir = absPath("scratch");
+    cout << testDir << endl;
+
+    nixValues = testDir;
+    nixLogDir = testDir;
+    nixDB = testDir + "/db";
+
+    initDB();
+
+    /* Expression evaluation. */
+
+    evalTest(ATmake("Str(\"Hello World\")"));
+    evalTest(ATmake("Bool(True)"));
+    evalTest(ATmake("Bool(False)"));
+
+    Hash builder1 = addValue("./test-builder-1.sh");
+
+    evalTest(ATmake("Exec(Str(<str>), External(<str>), [])",
+        thisSystem.c_str(), ((string) builder1).c_str()));
+
+    Hash builder2 = addValue("./test-builder-2.sh");
+
+    evalTest(ATmake("Exec(Str(<str>), External(<str>), [])",
+        thisSystem.c_str(), ((string) builder2).c_str()));
+}
+
+
+int main(int argc, char * * argv)
+{
+    ATerm bottomOfStack;
+    ATinit(argc, argv, &bottomOfStack);
 
-    return 0;
+    try {
+        runTests();
+    } catch (exception & e) {
+        cerr << "error: " << e.what() << endl;
+        return 1;
+    }
 }