// Copyright (c) 2012 The Chromium 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 GPU_CONFIG_GPU_TEST_EXPECTATIONS_PARSER_H_ #define GPU_CONFIG_GPU_TEST_EXPECTATIONS_PARSER_H_ #include #include #include "base/basictypes.h" #include "base/files/file_path.h" #include "gpu/config/gpu_test_config.h" #include "gpu/gpu_export.h" namespace gpu { class GPU_EXPORT 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 std::string& data); bool LoadTestExpectations(const base::FilePath& path); // Query error messages from the last LoadTestExpectations() call. const std::vector& GetErrorMessages() const; // Get the test expectation of a given test on a given bot. int32 GetTestExpectation(const std::string& test_name, const GPUTestBotConfig& bot_config) const; // Parse a list of config modifiers. If we have a valid entry with no // conflicts, | config | stores it, and the function returns true. bool ParseConfig(const std::string& config_data, GPUTestConfig* config); private: struct GPUTestExpectationEntry { GPUTestExpectationEntry(); std::string test_name; GPUTestConfig test_config; int32 test_expectation; size_t line_number; }; // Parse a line of text. If we have a valid entry, save it; otherwise, // generate error messages. bool ParseLine(const std::string& line_data, size_t line_number); // Update OS/GPUVendor/BuildType modifiers. May generate an error message. bool UpdateTestConfig( GPUTestConfig* config, int32 token, size_t line_number); // Update GPUDeviceID modifier. May generate an error message. bool UpdateTestConfig(GPUTestConfig* config, const std::string & gpu_device_id, size_t line_number); // Check if two entries' config overlap with each other. May generate an // error message. bool DetectConflictsBetweenEntries(); // Save an error message, which can be queried later. void PushErrorMessage(const std::string& message, size_t line_number); void PushErrorMessage(const std::string& message, size_t entry1_line_number, size_t entry2_line_number); std::vector entries_; std::vector error_messages_; }; } // namespace gpu #endif // GPU_CONFIG_GPU_TEST_EXPECTATIONS_PARSER_H_