1 // Copyright 2020 The Tint Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef SRC_SEM_TEST_HELPER_H_ 16 #define SRC_SEM_TEST_HELPER_H_ 17 18 #include <utility> 19 20 #include "gtest/gtest.h" 21 #include "src/program_builder.h" 22 23 namespace tint { 24 namespace sem { 25 26 /// Helper class for testing 27 template <typename BASE> 28 class TestHelperBase : public BASE, public ProgramBuilder { 29 public: 30 /// Builds and returns the program. Must only be called once per test 31 /// @return the built program Build()32 Program Build() { 33 diag::Formatter formatter; 34 [&]() { 35 ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" 36 << formatter.format(Diagnostics()); 37 }(); 38 return Program(std::move(*this)); 39 } 40 }; 41 using TestHelper = TestHelperBase<testing::Test>; 42 43 template <typename T> 44 using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>; 45 46 } // namespace sem 47 } // namespace tint 48 49 #endif // SRC_SEM_TEST_HELPER_H_ 50