From 55164968203f5d9f52eaba41fa04b08860646217 Mon Sep 17 00:00:00 2001 From: "rdevlin.cronin@chromium.org" Date: Tue, 10 Sep 2013 20:33:55 +0000 Subject: Handle invalid input, add more tests for SourceHighlighter In response to Finnur's @ 23624002 BUG=21734 Review URL: https://chromiumcodereview.appspot.com/23875013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222330 0039d316-1c4b-4281-b951-d872f2087c98 --- extensions/browser/file_highlighter.cc | 15 +++++++++++++-- extensions/browser/file_highlighter_unittest.cc | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) (limited to 'extensions') diff --git a/extensions/browser/file_highlighter.cc b/extensions/browser/file_highlighter.cc index d3edeca..2cc669e 100644 --- a/extensions/browser/file_highlighter.cc +++ b/extensions/browser/file_highlighter.cc @@ -203,8 +203,19 @@ SourceHighlighter::~SourceHighlighter() { } void SourceHighlighter::Parse(size_t line_number) { - for (size_t i = 1; i < line_number; ++i) - start_ = contents_.find('\n', start_) + 1; + // If line 0 is requested, highlight nothing. + if (line_number == 0) { + start_ = contents_.size(); + return; + } + + for (size_t i = 1; i < line_number; ++i) { + start_ = contents_.find('\n', start_); + if (start_ == std::string::npos) + break; + start_ += 1; + } + end_ = contents_.find('\n', start_); // If we went off the end of the string (i.e., the line number was invalid), diff --git a/extensions/browser/file_highlighter_unittest.cc b/extensions/browser/file_highlighter_unittest.cc index 6352be4..a449bf9 100644 --- a/extensions/browser/file_highlighter_unittest.cc +++ b/extensions/browser/file_highlighter_unittest.cc @@ -95,4 +95,26 @@ TEST(ManifestHighlighterUnitTest, ManifestHighlighterUnitTest) { EXPECT_EQ(kInternationalFeature, international_feature.GetFeature()); } +TEST(SouceHighlighterUnitTest, SourceHighlighterUnitTest) { + const char kBasicSourceFile[] = "line one\nline two\nline three"; + + SourceHighlighter basic1(kBasicSourceFile, 1u); + EXPECT_EQ("line one", basic1.GetFeature()); + SourceHighlighter basic2(kBasicSourceFile, 2u); + EXPECT_EQ("line two", basic2.GetFeature()); + SourceHighlighter basic3(kBasicSourceFile, 3u); + EXPECT_EQ("line three", basic3.GetFeature()); + + const char kNoNewlineSourceFile[] = "thisisonelonglinewithnobreaksinit"; + + SourceHighlighter full_line(kNoNewlineSourceFile, 1u); + EXPECT_EQ(kNoNewlineSourceFile, full_line.GetFeature()); + + SourceHighlighter line_zero(kNoNewlineSourceFile, 0u); + EXPECT_EQ(EmptyString(), line_zero.GetFeature()); + + SourceHighlighter out_of_bounds(kNoNewlineSourceFile, 2u); + EXPECT_EQ(EmptyString(), out_of_bounds.GetFeature()); +} + } // namespace extensions -- cgit v1.1