summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-10 20:33:55 +0000
committerrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-10 20:33:55 +0000
commit55164968203f5d9f52eaba41fa04b08860646217 (patch)
treed078f1b17d49b84d48c6caa0cdfc429802cf6e90 /extensions
parentee2085b3a548e0959c31ce06cd42d48540899a52 (diff)
downloadchromium_src-55164968203f5d9f52eaba41fa04b08860646217.zip
chromium_src-55164968203f5d9f52eaba41fa04b08860646217.tar.gz
chromium_src-55164968203f5d9f52eaba41fa04b08860646217.tar.bz2
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
Diffstat (limited to 'extensions')
-rw-r--r--extensions/browser/file_highlighter.cc15
-rw-r--r--extensions/browser/file_highlighter_unittest.cc22
2 files changed, 35 insertions, 2 deletions
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