15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/safe_browsing/features.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/safe_browsing/test_utils.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace safe_browsing {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PhishingFeaturesTest, TooManyFeatures) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureMap features;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < FeatureMap::kMaxFeatureMapSize; ++i) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(features.AddBooleanFeature(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::StringPrintf("Feature%" PRIuS, i)));
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FeatureMap::kMaxFeatureMapSize, features.features().size());
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Attempting to add more features should fail.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < 3; ++i) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(features.AddBooleanFeature(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::StringPrintf("Extra%" PRIuS, i)));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FeatureMap::kMaxFeatureMapSize, features.features().size());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PhishingFeaturesTest, IllegalFeatureValue) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureMap features;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(features.AddRealFeature("toosmall", -0.1));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(features.AddRealFeature("zero", 0.0));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(features.AddRealFeature("pointfive", 0.5));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(features.AddRealFeature("one", 1.0));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(features.AddRealFeature("toolarge", 1.1));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FeatureMap expected_features;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_features.AddRealFeature("zero", 0.0);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_features.AddRealFeature("pointfive", 0.5);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_features.AddRealFeature("one", 1.0);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectFeatureMapsAreEqual(features, expected_features);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace safe_browsing
46