Chromium Code Reviews| Index: runtime/vm/unit_test.h |
| diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h |
| index 945fd6e8378b88ed8045a6672439cfc73e770a68..76a06c5a9f95468f2231809d3f2e5a56ab01e9df 100644 |
| --- a/runtime/vm/unit_test.h |
| +++ b/runtime/vm/unit_test.h |
| @@ -21,21 +21,29 @@ |
| #include "vm/simulator.h" |
| #include "vm/zone.h" |
| -// The UNIT_TEST_CASE macro is used for tests that do not need any |
| +// The VM_UNIT_TEST_CASE macro is used for tests that do not need any |
| // default isolate or zone functionality. |
| -#define UNIT_TEST_CASE(name) \ |
| +#define VM_UNIT_TEST_CASE(name) \ |
| void Dart_Test##name(); \ |
| static const dart::TestCase kRegister##name(Dart_Test##name, #name); \ |
| void Dart_Test##name() |
| -// The VM_TEST_CASE macro is used for tests that need an isolate and zone |
| -// in order to test its functionality. This macro is used for tests that |
| +// The RAW_VM_UNIT_TEST_CASE macro is used for tests that do not require any |
| +// functionality provided by the VM. Tests declared using this macro will be run |
| +// before the VM is initialized. |
| +#define RAW_VM_UNIT_TEST_CASE(name) \ |
|
Cutch
2017/01/31 22:47:35
UNIT_TEST_CASE
bkonyi
2017/01/31 22:57:18
Done.
|
| + void Dart_Test##name(); \ |
| + static const dart::RawTestCase kRegister##name(Dart_Test##name, #name); \ |
| + void Dart_Test##name() |
| + |
| +// The ISOLATE_UNIT_TEST_CASE macro is used for tests that need an isolate and |
| +// zone in order to test its functionality. This macro is used for tests that |
| // are implemented using the VM code directly and do not use the Dart API |
| // for calling into the VM. The safepoint execution state of threads using |
| // this macro is transitioned from kThreadInNative to kThreadInVM. |
| -#define VM_TEST_CASE(name) \ |
| +#define ISOLATE_UNIT_TEST_CASE(name) \ |
| static void Dart_TestHelper##name(Thread* thread); \ |
| - UNIT_TEST_CASE(name) { \ |
| + VM_UNIT_TEST_CASE(name) { \ |
| TestIsolateScope __test_isolate__; \ |
| Thread* __thread__ = Thread::Current(); \ |
| ASSERT(__thread__->isolate() == __test_isolate__.isolate()); \ |
| @@ -52,7 +60,7 @@ |
| // execution state of threads using this macro remains kThreadNative. |
| #define TEST_CASE(name) \ |
| static void Dart_TestHelper##name(Thread* thread); \ |
| - UNIT_TEST_CASE(name) { \ |
| + VM_UNIT_TEST_CASE(name) { \ |
| TestIsolateScope __test_isolate__; \ |
| Thread* __thread__ = Thread::Current(); \ |
| ASSERT(__thread__->isolate() == __test_isolate__.isolate()); \ |
| @@ -77,7 +85,7 @@ |
| // C++ callee-saved registers are not preserved. Arguments may be passed in. |
| #define ASSEMBLER_TEST_RUN(name, test) \ |
| static void AssemblerTestRun##name(AssemblerTest* test); \ |
| - VM_TEST_CASE(name) { \ |
| + ISOLATE_UNIT_TEST_CASE(name) { \ |
| Assembler __assembler__; \ |
| AssemblerTest test("" #name, &__assembler__); \ |
| AssemblerTestGenerate##name(test.assembler()); \ |
| @@ -100,7 +108,7 @@ |
| // Pass the name of test and the expected results as RawObject. |
| #define CODEGEN_TEST_RUN(name, expected) \ |
| static void CodeGenTestRun##name(const Function& function); \ |
| - VM_TEST_CASE(name) { \ |
| + ISOLATE_UNIT_TEST_CASE(name) { \ |
| CodeGenTest __test__("" #name); \ |
| CodeGenTestGenerate##name(&__test__); \ |
| __test__.Compile(); \ |
| @@ -120,7 +128,7 @@ |
| // and evaluate its result. |
| #define CODEGEN_TEST_RAW_RUN(name, function) \ |
| static void CodeGenTestRun##name(const Function& function); \ |
| - VM_TEST_CASE(name) { \ |
| + ISOLATE_UNIT_TEST_CASE(name) { \ |
| CodeGenTest __test__("" #name); \ |
| CodeGenTestGenerate##name(&__test__); \ |
| __test__.Compile(); \ |
| @@ -133,7 +141,7 @@ |
| // The first one may reference the Function object generated by the second one. |
| #define CODEGEN_TEST2_RUN(name1, name2, expected) \ |
| static void CodeGenTestRun##name1(const Function& function); \ |
| - VM_TEST_CASE(name1) { \ |
| + ISOLATE_UNIT_TEST_CASE(name1) { \ |
| /* Generate code for name2 */ \ |
| CodeGenTest __test2__("" #name2); \ |
| CodeGenTestGenerate##name2(&__test2__); \ |
| @@ -261,6 +269,10 @@ class TestCaseBase { |
| void RunTest(); |
| static void RunAll(); |
| + static void RunAllRaw(); |
| + |
| + protected: |
| + bool raw_test_; |
| private: |
| static TestCaseBase* first_; |
| @@ -323,6 +335,20 @@ class TestCase : TestCaseBase { |
| }; |
| +class RawTestCase : TestCaseBase { |
| + public: |
| + typedef void(RunEntry)(); |
| + |
| + RawTestCase(RunEntry* run, const char* name) : TestCaseBase(name), run_(run) { |
| + raw_test_ = true; |
| + } |
| + virtual void Run(); |
| + |
| + private: |
| + RunEntry* const run_; |
| +}; |
| + |
| + |
| class TestIsolateScope { |
| public: |
| TestIsolateScope() { |