about summary refs log tree commit diff
path: root/src/compiletest/header.rs
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-04-13 09:19:07 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-04-13 12:41:37 -0700
commitdfc548dddafbf4e58a568329ebbe29f1eb36a0e8 (patch)
tree2a5556c9569230186275df690e96c1f5318f5128 /src/compiletest/header.rs
parentd2482fd7631d05b1888e3beac0df3f25d33867b8 (diff)
downloadrust-dfc548dddafbf4e58a568329ebbe29f1eb36a0e8.tar.gz
rust-dfc548dddafbf4e58a568329ebbe29f1eb36a0e8.zip
add option exec-env to set env variables during test execution
Diffstat (limited to 'src/compiletest/header.rs')
-rw-r--r--src/compiletest/header.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs
index 75f4eb98050..0db9672f50d 100644
--- a/src/compiletest/header.rs
+++ b/src/compiletest/header.rs
@@ -17,13 +17,16 @@ type test_props = {
     // pretty-printed
     pp_exact: option<str>,
     // Modules from aux directory that should be compiled
-    aux_builds: [str]
+    aux_builds: [str],
+    // Environment settings to use during execution
+    exec_env: [(str,str)]
 };
 
 // Load any test directives embedded in the file
 fn load_props(testfile: str) -> test_props {
     let mut error_patterns = [];
     let mut aux_builds = [];
+    let mut exec_env = [];
     let mut compile_flags = option::none;
     let mut pp_exact = option::none;
     iter_header(testfile) {|ln|
@@ -43,12 +46,17 @@ fn load_props(testfile: str) -> test_props {
         option::iter(parse_aux_build(ln)) {|ab|
             aux_builds += [ab];
         }
+
+        option::iter(parse_exec_env(ln)) {|ee|
+            exec_env += [ee];
+        }
     };
     ret {
         error_patterns: error_patterns,
         compile_flags: compile_flags,
         pp_exact: pp_exact,
-        aux_builds: aux_builds
+        aux_builds: aux_builds,
+        exec_env: exec_env
     };
 }
 
@@ -97,6 +105,18 @@ fn parse_compile_flags(line: str) -> option<str> {
     parse_name_value_directive(line, "compile-flags")
 }
 
+fn parse_exec_env(line: str) -> option<(str, str)> {
+    parse_name_value_directive(line, "exec-env").map {|nv|
+        // nv is either FOO or FOO=BAR
+        let strs = str::splitn_char(nv, '=', 1u);
+        alt strs.len() {
+          1u { (strs[0], "") }
+          2u { (strs[0], strs[1]) }
+          n { fail #fmt["Expected 1 or 2 strings, not %u", n]; }
+        }
+    }
+}
+
 fn parse_pp_exact(line: str, testfile: str) -> option<str> {
     alt parse_name_value_directive(line, "pp-exact") {
       option::some(s) { option::some(s) }