and the working directory to contain the cargo-miri-test project.
'''
-import sys, subprocess
+import sys, subprocess, os
+
+CGREEN = '\33[32m'
+CBOLD = '\33[1m'
+CEND = '\33[0m'
def fail(msg):
- print("TEST FAIL: {}".format(msg))
+ print("\nTEST FAIL: {}".format(msg))
sys.exit(1)
-def test(name, cmd, stdout_ref, stderr_ref):
+def cargo_miri(cmd):
+ args = ["cargo", "miri", cmd, "-q"]
+ if 'MIRI_TEST_TARGET' in os.environ:
+ args += ["--target", os.environ['MIRI_TEST_TARGET']]
+ return args
+
+def test(name, cmd, stdout_ref, stderr_ref, stdin=b'', env={}):
print("==> Testing `{}` <==".format(name))
## Call `cargo miri`, capture all output
+ p_env = os.environ.copy()
+ p_env.update(env)
p = subprocess.Popen(
cmd,
+ stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
- stderr=subprocess.PIPE
+ stderr=subprocess.PIPE,
+ env=p_env,
)
- (stdout, stderr) = p.communicate()
+ (stdout, stderr) = p.communicate(input=stdin)
stdout = stdout.decode("UTF-8")
stderr = stderr.decode("UTF-8")
# Show output
fail("stderr does not match reference")
def test_cargo_miri_run():
- test("cargo miri run", ["cargo", "miri", "run", "-q"], "stdout.ref", "stderr.ref")
- test("cargo miri run (with arguments)",
- ["cargo", "miri", "run", "-q", "--", "--", "hello world", '"hello world"'],
- "stdout.ref", "stderr.ref2"
+ test("cargo miri run",
+ cargo_miri("run"),
+ "stdout.ref", "stderr.ref",
+ stdin=b'12\n21\n',
+ env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
+ )
+ test("cargo miri run (with arguments and target)",
+ cargo_miri("run") + ["--bin", "cargo-miri-test", "--", "hello world", '"hello world"'],
+ "stdout.ref2", "stderr.ref2"
)
def test_cargo_miri_test():
- test("cargo miri test", ["cargo", "miri", "test", "-q"], "test.stdout.ref", "test.stderr.ref")
+ test("cargo miri test",
+ cargo_miri("test"),
+ "test.stdout.ref", "test.stderr.ref",
+ env={'MIRIFLAGS': "-Zmiri-seed=feed"},
+ )
test("cargo miri test (with filter)",
- ["cargo", "miri", "test", "-q", "--", "--", "impl"],
+ cargo_miri("test") + ["--", "--format=pretty", "le1"],
"test.stdout.ref2", "test.stderr.ref"
)
+ test("cargo miri test (without isolation)",
+ cargo_miri("test") + ["--", "--format=pretty", "num_cpus"],
+ "test.stdout.ref3", "test.stderr.ref",
+ env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
+ )
+ test("cargo miri test (test target)",
+ cargo_miri("test") + ["--test", "test", "--", "--format=pretty"],
+ "test.stdout.ref4", "test.stderr.ref"
+ )
+ test("cargo miri test (bin target)",
+ cargo_miri("test") + ["--bin", "cargo-miri-test", "--", "--format=pretty"],
+ "test.stdout.ref5", "test.stderr.ref"
+ )
+
+os.chdir(os.path.dirname(os.path.realpath(__file__)))
+target_str = " for target {}".format(os.environ['MIRI_TEST_TARGET']) if 'MIRI_TEST_TARGET' in os.environ else ""
+print(CGREEN + CBOLD + "## Running `cargo miri` tests{}".format(target_str) + CEND)
+
+if not 'MIRI_SYSROOT' in os.environ:
+ # Make sure we got a working sysroot.
+ # (If the sysroot gets built later when output is compared, that leads to test failures.)
+ subprocess.run(cargo_miri("setup"), check=True)
test_cargo_miri_run()
test_cargo_miri_test()
-print("TEST SUCCESSFUL!")
+
+print("\nTEST SUCCESSFUL!")
sys.exit(0)