|  | // Copyright 2021 The Tint Authors. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | #include "gmock/gmock.h" | 
|  | #include "src/program.h" | 
|  |  | 
|  | #if TINT_BUILD_SPV_READER | 
|  | #include "src/reader/spirv/parser_impl_test_helper.h" | 
|  | #endif | 
|  |  | 
|  | #if TINT_BUILD_WGSL_WRITER | 
|  | #include "src/writer/wgsl/generator.h" | 
|  | #endif | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | void TintInternalCompilerErrorReporter(const tint::diag::List& diagnostics) { | 
|  | FAIL() << diagnostics.str(); | 
|  | } | 
|  |  | 
|  | struct Flags { | 
|  | bool spirv_reader_dump_converted = false; | 
|  |  | 
|  | bool parse(int argc, char** argv) { | 
|  | bool errored = false; | 
|  | for (int i = 1; i < argc && !errored; i++) { | 
|  | auto match = [&](std::string name) { return name == argv[i]; }; | 
|  |  | 
|  | if (match("--dump-spirv")) { | 
|  | spirv_reader_dump_converted = true; | 
|  | } else { | 
|  | std::cout << "Unknown flag '" << argv[i] << "'" << std::endl; | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  | }; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | // Entry point for tint unit tests | 
|  | int main(int argc, char** argv) { | 
|  | testing::InitGoogleMock(&argc, argv); | 
|  |  | 
|  | #if TINT_BUILD_WGSL_WRITER | 
|  | tint::Program::printer = [](const tint::Program* program) { | 
|  | auto result = tint::writer::wgsl::Generate(program, {}); | 
|  | if (!result.error.empty()) { | 
|  | return "error: " + result.error; | 
|  | } | 
|  | return result.wgsl; | 
|  | }; | 
|  | #endif  //  TINT_BUILD_WGSL_WRITER | 
|  |  | 
|  | Flags flags; | 
|  | if (!flags.parse(argc, argv)) { | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | #if TINT_BUILD_SPV_READER | 
|  | if (flags.spirv_reader_dump_converted) { | 
|  | tint::reader::spirv::test::DumpSuccessfullyConvertedSpirv(); | 
|  | } | 
|  | #endif  // TINT_BUILD_SPV_READER | 
|  |  | 
|  | tint::SetInternalCompilerErrorReporter(&TintInternalCompilerErrorReporter); | 
|  |  | 
|  | auto res = RUN_ALL_TESTS(); | 
|  |  | 
|  | return res; | 
|  | } |