| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #include <stdio.h> | |
| #include <utility> | |
| #include <vector> | |
| #include "llvm/ADT/StringRef.h" | |
| #include "llvm/Support/LineIterator.h" | |
| #include "llvm/Support/MemoryBuffer.h" | |
| #include "llvm/Support/Path.h" | |
| #include "llvm/Support/Regex.h" | |
| #include "llvm/Support/WithColor.h" | |
| #include "platform/assert.h" | |
| #include "vm/unit_test.h" | |
| #define LIT_BINARY_DIR "/path/to/bins" | |
| #include "bit.h" | |
| UNIT_TEST_CASE(BasicGetSubstitutions) { | |
| Config config; | |
| config.filename = "/foo/bar/baz.ll"; | |
| config.out_dir = "/test/out/dir"; | |
| StringMap<std::string> expected; | |
| expected["s"] = "/foo/bar/baz.ll"; | |
| expected["p"] = "/foo/bar"; | |
| expected["P"] = "/test/out/dir"; | |
| expected["t"] = "/test/out/dir/baz.ll.tmp"; | |
| expected["codegen"] = "/path/to/bins/codegen"; | |
| expected["bit"] = "/path/to/bins/bit"; | |
| StringMap<std::string> actual = GetSubstitutions(config); | |
| EXPECT_EQ(actual.size(), expected.size()); | |
| for (const auto& p : actual) | |
| EXPECT_EQ(p.getValue(), expected[p.getKey()]); | |
| } | |
| UNIT_TEST_CASE(BasicPerformSubstitutions) { | |
| StringMap<std::string> subs; | |
| subs["foo"] = "/foo/path"; | |
| subs["bar"] = "/bar/path"; | |
| subs["baz"] = "/baz/path"; | |
| std::vector<std::pair<std::string, std::string>> cases = { | |
| {"%foo", "/foo/path"}, | |
| {"%bar", "/bar/path"}, | |
| {"%baz", "/baz/path"}, | |
| {"this has %foo, and %bar, and %baz2", | |
| "this has /foo/path, and /bar/path, and /baz/path2"}, | |
| {"we don't want %this to expand", "we don't want %this to expand"}, | |
| {"%", "%"}}; | |
| for (const auto& test : cases) { | |
| auto out = PerformSubstitutions(subs, test.first); | |
| EXPECT_EQ(out, test.second); | |
| } | |
| } | |
| UNIT_TEST_CASE(BasicGetCommand) { | |
| EXPECT(!GetCommand("; this is some test")); | |
| EXPECT(!GetCommand("2 + 2")); | |
| EXPECT(!GetCommand("echo $VAR > %bit")); | |
| EXPECT(GetCommand(";RUN: blarg") == Optional<std::string>{"blarg"}); | |
| EXPECT(GetCommand("; RUN: foo") == Optional<std::string>{"blarg"}); | |
| EXPECT( | |
| GetCommand("; RUN: echo %bit %p/Input/$(%t2) > $(baz \"$BAR->%t\")") == | |
| Optional<std::string>("echo %bit %p/Input/$(%t2) > $(baz \"$BAR->%t\")")); | |
| } |