Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6899)

Unified Diff: chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc

Issue 1561813002: [Spellcheck] Fixed subtly broken test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: actual_end should really be named actual_len Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc
diff --git a/chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc b/chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc
index 4cf35ce3182b5deeb0c2c9ea6f8f79b819e034f3..70ed965a5232ae7e1090c7c91e1bf6031eaf9c5f 100644
--- a/chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc
+++ b/chrome/renderer/spellchecker/spellcheck_worditerator_unittest.cc
@@ -17,6 +17,7 @@
#include "testing/gtest/include/gtest/gtest.h"
using base::i18n::BreakIterator;
+using WordIteratorStatus = SpellcheckWordIterator::WordIteratorStatus;
namespace {
@@ -32,6 +33,16 @@ base::string16 GetRulesForLanguage(const std::string& language) {
return attribute.GetRuleSet(true);
}
+WordIteratorStatus GetNextNonSkippableWord(SpellcheckWordIterator* iterator,
+ base::string16* word_string,
+ int* word_start,
+ int* word_length) {
+ WordIteratorStatus status = SpellcheckWordIterator::IS_SKIPPABLE;
+ while (status == SpellcheckWordIterator::IS_SKIPPABLE)
+ status = iterator->GetNextWord(word_string, word_start, word_length);
Nico 2016/01/06 01:38:26 with a do-while loop you don't need to initialize
groby-ooo-7-16 2016/01/06 01:48:37 True, but it's one more line :) See below: Status
Nico 2016/01/06 02:36:16 <s>More horrible</s>You don't need the parens:
+ return status;
+}
+
} // namespace
// Tests whether or not our SpellcheckWordIterator can extract words used by the
@@ -144,13 +155,13 @@ TEST(SpellcheckWordIteratorTest, SplitWord) {
base::string16(1, ' '), base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
base::string16 actual_word;
- int actual_start, actual_end;
+ int actual_start, actual_len;
size_t index = 0;
for (SpellcheckWordIterator::WordIteratorStatus status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end);
+ iterator.GetNextWord(&actual_word, &actual_start, &actual_len);
status != SpellcheckWordIterator::IS_END_OF_TEXT;
status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end)) {
+ iterator.GetNextWord(&actual_word, &actual_start, &actual_len)) {
if (status == SpellcheckWordIterator::WordIteratorStatus::IS_SKIPPABLE)
continue;
@@ -180,18 +191,13 @@ TEST(SpellcheckWordIteratorTest, RuleSetConsistency) {
// iterator.GetNextWord() calls get stuck in an infinite loop. Therefore, this
// test succeeds if this call returns without timeouts.
base::string16 actual_word;
- int actual_start, actual_end;
- SpellcheckWordIterator::WordIteratorStatus status;
- for (status = iterator.GetNextWord(&actual_word, &actual_start, &actual_end);
- status == SpellcheckWordIterator::IS_SKIPPABLE;
- status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end)) {
- continue;
- }
+ int actual_start, actual_len;
+ WordIteratorStatus status = GetNextNonSkippableWord(
+ &iterator, &actual_word, &actual_start, &actual_len);
EXPECT_EQ(SpellcheckWordIterator::WordIteratorStatus::IS_END_OF_TEXT, status);
EXPECT_EQ(0, actual_start);
- EXPECT_EQ(0, actual_end);
+ EXPECT_EQ(0, actual_len);
}
// Vertify our SpellcheckWordIterator can treat ASCII numbers as word characters
@@ -249,15 +255,9 @@ TEST(SpellcheckWordIteratorTest, TreatNumbersAsWordCharacters) {
EXPECT_TRUE(iterator.SetText(input_word.c_str(), input_word.length()));
base::string16 actual_word;
- int actual_start, actual_end;
- SpellcheckWordIterator::WordIteratorStatus status;
- for (status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end);
- status == SpellcheckWordIterator::IS_SKIPPABLE;
- status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end)) {
- continue;
- }
+ int actual_start, actual_len;
+ WordIteratorStatus status = GetNextNonSkippableWord(
+ &iterator, &actual_word, &actual_start, &actual_len);
EXPECT_EQ(SpellcheckWordIterator::WordIteratorStatus::IS_WORD, status);
if (kTestCases[i].left_to_right)
@@ -267,59 +267,48 @@ TEST(SpellcheckWordIteratorTest, TreatNumbersAsWordCharacters) {
}
}
-// Vertify SpellcheckWordIterator treats typographical apostrophe as a part of
+// Verify SpellcheckWordIterator treats typographical apostrophe as a part of
// the word.
TEST(SpellcheckWordIteratorTest, TypographicalApostropheIsPartOfWord) {
static const struct {
const char* language;
- const wchar_t* word;
+ const wchar_t* input;
+ const wchar_t* expected;
} kTestCases[] = {
- // Typewriter apostrophe:
- {
- "en-AU", L"you're"
- }, {
- "en-CA", L"you're"
- }, {
- "en-GB", L"you're"
- }, {
- "en-US", L"you're"
- },
- // Typographical apostrophe:
- {
- "en-AU", L"you\x2019re"
- }, {
- "en-CA", L"you\x2019re"
- }, {
- "en-GB", L"you\x2019re"
- }, {
- "en-US", L"you\x2019re"
- },
+ // Typewriter apostrophe:
+ {"en-AU", L"you're", L"you're"},
+ {"en-CA", L"you're", L"you're"},
+ {"en-GB", L"you're", L"you're"},
+ {"en-US", L"you're", L"you're"},
+ {"en-US", L"!!!!you're", L"you're"},
+ // Typographical apostrophe:
+ {"en-AU", L"you\x2019re", L"you\x2019re"},
+ {"en-CA", L"you\x2019re", L"you\x2019re"},
+ {"en-GB", L"you\x2019re", L"you\x2019re"},
+ {"en-US", L"you\x2019re", L"you\x2019re"},
+ {"en-US", L"....you\x2019re", L"you\x2019re"},
};
for (size_t i = 0; i < arraysize(kTestCases); ++i) {
SpellcheckCharAttribute attributes;
attributes.SetDefaultLanguage(kTestCases[i].language);
- base::string16 input_word(base::WideToUTF16(kTestCases[i].word));
+ base::string16 input_word(base::WideToUTF16(kTestCases[i].input));
+ base::string16 expected_word(base::WideToUTF16(kTestCases[i].expected));
SpellcheckWordIterator iterator;
EXPECT_TRUE(iterator.Initialize(&attributes, true));
EXPECT_TRUE(iterator.SetText(input_word.c_str(), input_word.length()));
base::string16 actual_word;
- int actual_start, actual_end;
- SpellcheckWordIterator::WordIteratorStatus status;
- for (status =
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end);
- status == SpellcheckWordIterator::IS_SKIPPABLE;
- iterator.GetNextWord(&actual_word, &actual_start, &actual_end)) {
- continue;
- }
+ int actual_start, actual_len;
+ WordIteratorStatus status = GetNextNonSkippableWord(
+ &iterator, &actual_word, &actual_start, &actual_len);
EXPECT_EQ(SpellcheckWordIterator::WordIteratorStatus::IS_WORD, status);
- EXPECT_EQ(input_word, actual_word);
- EXPECT_EQ(0, actual_start);
- EXPECT_EQ(input_word.length(),
- static_cast<base::string16::size_type>(actual_end));
+ EXPECT_EQ(expected_word, actual_word);
+ EXPECT_LE(0, actual_start);
+ EXPECT_EQ(expected_word.length(),
+ static_cast<base::string16::size_type>(actual_len));
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698