// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/autocomplete/autocomplete_match.h" #include "base/basictypes.h" #include "testing/gtest/include/gtest/gtest.h" TEST(AutocompleteMatchTest, MoreRelevant) { struct RelevantCases { int r1; int r2; bool expected_result; } cases[] = { { 10, 0, true }, { 10, -5, true }, { -5, 10, false }, { 0, 10, false }, { -10, -5, false }, { -5, -10, true }, }; AutocompleteMatch m1(NULL, 0, false, AutocompleteMatchType::URL_WHAT_YOU_TYPED); AutocompleteMatch m2(NULL, 0, false, AutocompleteMatchType::URL_WHAT_YOU_TYPED); for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { m1.relevance = cases[i].r1; m2.relevance = cases[i].r2; EXPECT_EQ(cases[i].expected_result, AutocompleteMatch::MoreRelevant(m1, m2)); } } TEST(AutocompleteMatchTest, MergeClassifications) { // Merging two empty vectors should result in an empty vector. EXPECT_EQ(std::string(), AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ACMatchClassifications(), AutocompleteMatch::ACMatchClassifications()))); // If one vector is empty and the other is "trivial" but non-empty (i.e. (0, // NONE)), the non-empty vector should be returned. EXPECT_EQ("0,0", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,0"), AutocompleteMatch::ACMatchClassifications()))); EXPECT_EQ("0,0", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ACMatchClassifications(), AutocompleteMatch::ClassificationsFromString("0,0")))); // Ditto if the one-entry vector is non-trivial. EXPECT_EQ("0,1", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,1"), AutocompleteMatch::ACMatchClassifications()))); EXPECT_EQ("0,1", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ACMatchClassifications(), AutocompleteMatch::ClassificationsFromString("0,1")))); // Merge an unstyled one-entry vector with a styled one-entry vector. EXPECT_EQ("0,1", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,0"), AutocompleteMatch::ClassificationsFromString("0,1")))); // Test simple cases of overlap. EXPECT_EQ("0,3," "1,2", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,1," "1,0"), AutocompleteMatch::ClassificationsFromString("0,2")))); EXPECT_EQ("0,3," "1,2", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,2"), AutocompleteMatch::ClassificationsFromString("0,1," "1,0")))); // Test the case where both vectors have classifications at the same // positions. EXPECT_EQ("0,3", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString("0,1," "1,2"), AutocompleteMatch::ClassificationsFromString("0,2," "1,1")))); // Test an arbitrary complicated case. EXPECT_EQ("0,2," "1,0," "2,1," "4,3," "5,7," "6,3," "7,7," "15,1," "17,0", AutocompleteMatch::ClassificationsToString( AutocompleteMatch::MergeClassifications( AutocompleteMatch::ClassificationsFromString( "0,0," "2,1," "4,3," "7,7," "10,6," "15,0"), AutocompleteMatch::ClassificationsFromString( "0,2," "1,0," "5,7," "6,1," "17,0")))); }