| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/test/expectations/parser.h" | 5 #include "base/test/expectations/parser.h" |
| 6 | 6 |
| 7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 | 8 |
| 9 namespace test_expectations { | 9 namespace test_expectations { |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 } | 32 } |
| 33 } | 33 } |
| 34 | 34 |
| 35 inline bool Parser::HasNext() { | 35 inline bool Parser::HasNext() { |
| 36 return pos_ < end_; | 36 return pos_ < end_; |
| 37 } | 37 } |
| 38 | 38 |
| 39 Parser::StateFunc Parser::Start() { | 39 Parser::StateFunc Parser::Start() { |
| 40 // If at the start of a line is whitespace, skip it and arrange to come back | 40 // If at the start of a line is whitespace, skip it and arrange to come back |
| 41 // here. | 41 // here. |
| 42 if (IsAsciiWhitespace(*pos_)) | 42 if (base::IsAsciiWhitespace(*pos_)) |
| 43 return SkipWhitespaceAndNewLines(&Parser::Start); | 43 return SkipWhitespaceAndNewLines(&Parser::Start); |
| 44 | 44 |
| 45 // Handle comments at the start of lines. | 45 // Handle comments at the start of lines. |
| 46 if (*pos_ == '#') | 46 if (*pos_ == '#') |
| 47 return &Parser::ParseComment; | 47 return &Parser::ParseComment; |
| 48 | 48 |
| 49 // After arranging to come back here from skipping whitespace and comments, | 49 // After arranging to come back here from skipping whitespace and comments, |
| 50 // the parser may be at the end of the input. | 50 // the parser may be at the end of the input. |
| 51 if (pos_ >= end_) | 51 if (pos_ >= end_) |
| 52 return NULL; | 52 return NULL; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 delegate_->EmitExpectation(current_); | 154 delegate_->EmitExpectation(current_); |
| 155 | 155 |
| 156 if (HasNext()) | 156 if (HasNext()) |
| 157 return SkipWhitespaceAndNewLines(&Parser::Start); | 157 return SkipWhitespaceAndNewLines(&Parser::Start); |
| 158 | 158 |
| 159 return NULL; | 159 return NULL; |
| 160 } | 160 } |
| 161 | 161 |
| 162 Parser::StateFunc Parser::ExtractString(StateFunc success) { | 162 Parser::StateFunc Parser::ExtractString(StateFunc success) { |
| 163 const char* start = pos_; | 163 const char* start = pos_; |
| 164 while (!IsAsciiWhitespace(*pos_) && *pos_ != ']' && HasNext()) { | 164 while (!base::IsAsciiWhitespace(*pos_) && *pos_ != ']' && HasNext()) { |
| 165 ++pos_; | 165 ++pos_; |
| 166 if (*pos_ == '#') { | 166 if (*pos_ == '#') { |
| 167 return SyntaxError("Unexpected start of comment"); | 167 return SyntaxError("Unexpected start of comment"); |
| 168 } | 168 } |
| 169 } | 169 } |
| 170 extracted_string_ = base::StringPiece(start, pos_ - start); | 170 extracted_string_ = base::StringPiece(start, pos_ - start); |
| 171 return success; | 171 return success; |
| 172 } | 172 } |
| 173 | 173 |
| 174 Parser::StateFunc Parser::SkipWhitespace(Parser::StateFunc next) { | 174 Parser::StateFunc Parser::SkipWhitespace(Parser::StateFunc next) { |
| 175 while ((*pos_ == ' ' || *pos_ == '\t') && HasNext()) { | 175 while ((*pos_ == ' ' || *pos_ == '\t') && HasNext()) { |
| 176 ++pos_; | 176 ++pos_; |
| 177 } | 177 } |
| 178 return next; | 178 return next; |
| 179 } | 179 } |
| 180 | 180 |
| 181 Parser::StateFunc Parser::SkipWhitespaceAndNewLines(Parser::StateFunc next) { | 181 Parser::StateFunc Parser::SkipWhitespaceAndNewLines(Parser::StateFunc next) { |
| 182 while (IsAsciiWhitespace(*pos_) && HasNext()) { | 182 while (base::IsAsciiWhitespace(*pos_) && HasNext()) { |
| 183 if (*pos_ == '\n') { | 183 if (*pos_ == '\n') { |
| 184 ++line_number_; | 184 ++line_number_; |
| 185 } | 185 } |
| 186 ++pos_; | 186 ++pos_; |
| 187 } | 187 } |
| 188 return next; | 188 return next; |
| 189 } | 189 } |
| 190 | 190 |
| 191 Parser::StateFunc Parser::SyntaxError(const std::string& message) { | 191 Parser::StateFunc Parser::SyntaxError(const std::string& message) { |
| 192 delegate_->OnSyntaxError(message); | 192 delegate_->OnSyntaxError(message); |
| 193 return NULL; | 193 return NULL; |
| 194 } | 194 } |
| 195 | 195 |
| 196 void Parser::DataError(const std::string& error) { | 196 void Parser::DataError(const std::string& error) { |
| 197 data_error_ = true; | 197 data_error_ = true; |
| 198 delegate_->OnDataError(error); | 198 delegate_->OnDataError(error); |
| 199 } | 199 } |
| 200 | 200 |
| 201 } // namespace test_expectations | 201 } // namespace test_expectations |
| OLD | NEW |