| // |
| // Copyright 2019 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| #ifndef TEST_EXPECTATIONS_GPU_TEST_EXPECTATIONS_PARSER_H_ |
| #define TEST_EXPECTATIONS_GPU_TEST_EXPECTATIONS_PARSER_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include <string> |
| #include <vector> |
| |
| namespace angle |
| { |
| |
| struct GPUTestConfig; |
| |
| class GPUTestExpectationsParser |
| { |
| public: |
| enum GPUTestExpectation |
| { |
| kGpuTestPass = 1 << 0, |
| kGpuTestFail = 1 << 1, |
| kGpuTestFlaky = 1 << 2, |
| kGpuTestTimeout = 1 << 3, |
| kGpuTestSkip = 1 << 4, |
| }; |
| |
| GPUTestExpectationsParser(); |
| ~GPUTestExpectationsParser(); |
| |
| // Parse the text expectations, and if no error is encountered, |
| // save all the entries. Otherwise, generate error messages. |
| // Return true if parsing succeeds. |
| bool loadTestExpectations(const GPUTestConfig &config, const std::string &data); |
| bool loadTestExpectationsFromFile(const GPUTestConfig &config, const std::string &path); |
| |
| // Query error messages from the last LoadTestExpectations() call. |
| const std::vector<std::string> &getErrorMessages() const; |
| |
| // Query error messages from any expectations that weren't used before being queried. |
| std::vector<std::string> getUnusedExpectationsMessages() const; |
| |
| // Get the test expectation of a given test on a given bot. |
| int32_t getTestExpectation(const std::string &testName); |
| |
| private: |
| struct GPUTestExpectationEntry |
| { |
| GPUTestExpectationEntry(); |
| |
| std::string testName; |
| int32_t testExpectation; |
| size_t lineNumber; |
| bool used; |
| }; |
| |
| // Parse a line of text. If we have a valid entry, save it; otherwise, |
| // generate error messages. |
| bool parseLine(const GPUTestConfig &config, const std::string &lineData, size_t lineNumber); |
| |
| // Check a the condition assigned to a particular token. |
| bool checkTokenCondition(const GPUTestConfig &config, |
| bool &err, |
| int32_t token, |
| size_t lineNumber); |
| |
| // Check if two entries' config overlap with each other. May generate an |
| // error message. |
| bool detectConflictsBetweenEntries(); |
| |
| // Query a list of any expectations that were's used before being queried. |
| std::vector<GPUTestExpectationEntry> getUnusedExpectations() const; |
| |
| // Save an error message, which can be queried later. |
| void pushErrorMessage(const std::string &message, size_t lineNumber); |
| void pushErrorMessage(const std::string &message, |
| size_t entry1LineNumber, |
| size_t entry2LineNumber); |
| |
| std::vector<GPUTestExpectationEntry> mEntries; |
| std::vector<std::string> mErrorMessages; |
| }; |
| |
| const char *GetConditionName(uint32_t condition); |
| |
| } // namespace angle |
| |
| #endif // TEST_EXPECTATIONS_GPU_TEST_EXPECTATIONS_PARSER_H_ |