summaryrefslogtreecommitdiffstats
blob: ebf9dc65e8e662640c045d4790db54d430efa2e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import SCons.Util, os

def generate(env) :
    def registerTest(env, target, type = "unit", is_checker = False) :
        if env["TEST_TYPE"] == "all" or env["TEST_TYPE"] == type :
            if SCons.Util.is_List(target) :
                cmd = target[0].abspath
            else :
                cmd = target.abspath
            params = ""

            # Special support for unittest checker
            if is_checker and env.get("checker_report", False) :
                params = " --xml"

            ignore_prefix = ""
            if env.get("TEST_IGNORE_RESULT", False) :
                ignore_prefix = "-"

            # Set environment variables for running the test
            test_env = env.Clone()
            for i in ["HOME", "PATH", "USERPROFILE", "APPDATA", "ASAN_OPTIONS", "LSAN_OPTIONS", "SWIFT_NETWORK_TEST_IPV4", "SWIFT_NETWORK_TEST_IPV6"]:
                if os.environ.get(i, "") :
                    test_env["ENV"][i] = os.environ[i]
            if env["target"] == "android" :
                test_env["ENV"]["PATH"] = env["android_sdk_bin"] + ";" + test_env["ENV"]["PATH"]
            else :
                if test_env["PLATFORM"] == "darwin" :
                    test_env["ENV"]["DYLD_FALLBACK_LIBRARY_PATH"] = ":".join(map(lambda x : str(x), test_env.get("LIBPATH", [])))
                elif test_env["PLATFORM"] == "win32" :
                    test_env["ENV"]["PATH"] = ";".join(map(lambda x : str(x), test_env.get("LIBRUNPATH", []))) + ";" + test_env["ENV"]["PATH"]


            # Run the test
            if env["target"] == "android":
                exec_name = os.path.basename(cmd)
                test_env.Command("**dummy**", target, SCons.Action.Action(
                    ["adb shell mount -o rw,remount /system",
                    "adb push " + cmd + " /system/bin/" + exec_name,
                    "adb shell SWIFT_CLIENTTEST_JID=\"" + os.getenv("SWIFT_CLIENTTEST_JID") + "\" SWIFT_CLIENTTEST_PASS=\"" + os.getenv("SWIFT_CLIENTTEST_PASS") + "\" " + env.get("TEST_RUNNER", "") + "/system/bin/" + exec_name], cmdstr = "$TESTCOMSTR"))
            else :
                test_env.Command("**dummy**", target,
                    SCons.Action.Action(ignore_prefix + env.get("TEST_RUNNER", "") + cmd + " " + params, cmdstr = "$TESTCOMSTR"))

    def registerScriptTests(env, scripts, name, type) :
        if env["TEST_TYPE"] == "all" or env["TEST_TYPE"] == type :
            pass

    env.AddMethod(registerTest, "Test")
    env.AddMethod(registerScriptTests, "ScriptTests")

def exists(env) :
    return True