1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/mock_grammar_check.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <algorithm> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/logging.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/shell/renderer/test_runner/test_common.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebCString.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebTextCheckingResult.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content { 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool MockGrammarCheck::CheckGrammarOfString( 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const blink::WebString& text, 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<blink::WebTextCheckingResult>* results) { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(results); 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::string16 string_text = text; 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (std::find_if(string_text.begin(), string_text.end(), IsASCIIAlpha) == 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) string_text.end()) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Find matching grammatical errors from known ones. This function has to 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // check all errors because the given text may consist of two or more 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // sentences that have grammatical errors. 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const struct { 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char* text; 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int location; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int length; 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } kGrammarErrors[] = { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"I have a issue.", 7, 1}, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"I have an grape.", 7, 2}, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"I have an kiwi.", 7, 2}, 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"I have an muscat.", 7, 2}, 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"You has the right.", 4, 3}, 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"apple orange zz.", 0, 16}, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"apple zz orange.", 0, 16}, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"apple,zz,orange.", 0, 16}, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"orange,zz,apple.", 0, 16}, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"the the adlj adaasj sdklj. there there", 4, 3}, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"the the adlj adaasj sdklj. there there", 33, 5}, 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {"zz apple orange.", 0, 16}, 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kGrammarErrors); ++i) { 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t offset = 0; 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::string16 error( 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kGrammarErrors[i].text, 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kGrammarErrors[i].text + strlen(kGrammarErrors[i].text)); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) while ((offset = string_text.find(error, offset)) != base::string16::npos) { 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) results->push_back( 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebTextCheckingResult(blink::WebTextDecorationTypeGrammar, 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) offset + kGrammarErrors[i].location, 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kGrammarErrors[i].length)); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) offset += kGrammarErrors[i].length; 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace content 64