| // Copyright (c) 2020, 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. |
| |
| // A slimmed down version of runtime/vm/unit_test.h that only runs C++ |
| // non-DartVM unit tests. |
| |
| #ifndef RUNTIME_VM_COMPILER_FFI_UNIT_TEST_H_ |
| #define RUNTIME_VM_COMPILER_FFI_UNIT_TEST_H_ |
| |
| // Don't use the DartVM zone, so include this first. |
| #include "vm/compiler/ffi/unit_test_custom_zone.h" |
| |
| #include "platform/globals.h" |
| |
| // The UNIT_TEST_CASE macro is used for tests. |
| #define UNIT_TEST_CASE_WITH_EXPECTATION(name, expectation) \ |
| void Dart_Test##name(); \ |
| static const dart::compiler::ffi::RawTestCase kRegister##name( \ |
| Dart_Test##name, #name, expectation); \ |
| void Dart_Test##name() |
| |
| #define UNIT_TEST_CASE(name) UNIT_TEST_CASE_WITH_EXPECTATION(name, "Pass") |
| |
| // The UNIT_TEST_CASE_WITH_ZONE macro is used for tests that need a custom |
| // dart::Zone. |
| #define UNIT_TEST_CASE_WITH_ZONE_WITH_EXPECTATION(name, expectation) \ |
| static void Dart_TestHelper##name(dart::Zone* Z); \ |
| UNIT_TEST_CASE_WITH_EXPECTATION(name, expectation) { \ |
| dart::Zone zone; \ |
| Dart_TestHelper##name(&zone); \ |
| } \ |
| static void Dart_TestHelper##name(dart::Zone* Z) |
| |
| #define UNIT_TEST_CASE_WITH_ZONE(name) \ |
| UNIT_TEST_CASE_WITH_ZONE_WITH_EXPECTATION(name, "Pass") |
| |
| namespace dart { |
| namespace compiler { |
| namespace ffi { |
| |
| extern const char* kArch; |
| extern const char* kOs; |
| |
| void WriteToFile(char* path, const char* contents); |
| |
| void ReadFromFile(char* path, char** buffer_pointer); |
| |
| class TestCaseBase { |
| public: |
| explicit TestCaseBase(const char* name, const char* expectation); |
| virtual ~TestCaseBase() {} |
| |
| const char* name() const { return name_; } |
| const char* expectation() const { return expectation_; } |
| |
| virtual void Run() = 0; |
| void RunTest(); |
| |
| static void RunAll(); |
| static void RunAllRaw(); |
| |
| static bool update_expectations; |
| |
| private: |
| static TestCaseBase* first_; |
| static TestCaseBase* tail_; |
| |
| TestCaseBase* next_; |
| const char* name_; |
| const char* expectation_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestCaseBase); |
| }; |
| |
| class RawTestCase : TestCaseBase { |
| public: |
| typedef void(RunEntry)(); |
| |
| RawTestCase(RunEntry* run, const char* name, const char* expectation) |
| : TestCaseBase(name, expectation), run_(run) {} |
| virtual void Run(); |
| |
| private: |
| RunEntry* const run_; |
| }; |
| |
| } // namespace ffi |
| } // namespace compiler |
| } // namespace dart |
| |
| #endif // RUNTIME_VM_COMPILER_FFI_UNIT_TEST_H_ |