| Index: chrome/browser/extensions/api/declarative/deduping_factory_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/declarative/deduping_factory_unittest.cc b/chrome/browser/extensions/api/declarative/deduping_factory_unittest.cc
|
| deleted file mode 100644
|
| index 0d424f8f0ea9cfef896178957e474421346e89f9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/declarative/deduping_factory_unittest.cc
|
| +++ /dev/null
|
| @@ -1,199 +0,0 @@
|
| -// 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/extensions/api/declarative/deduping_factory.h"
|
| -
|
| -#include "base/values.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace {
|
| -
|
| -const char kTypeName[] = "Foo";
|
| -const char kTypeName2[] = "Foo2";
|
| -
|
| -// This serves as an example how to use the DedupingFactory.
|
| -class BaseClass : public base::RefCounted<BaseClass> {
|
| - public:
|
| - // The type is introduced so that we can compare derived classes even though
|
| - // Equals takes a parameter of type BaseClass. Each derived class gets an
|
| - // entry in Type.
|
| - enum Type { FOO };
|
| -
|
| - explicit BaseClass(Type type) : type_(type) {}
|
| -
|
| - Type type() const { return type_; }
|
| -
|
| - // For BaseClassT template:
|
| - virtual bool Equals(const BaseClass* other) const = 0;
|
| -
|
| - protected:
|
| - friend class base::RefCounted<BaseClass>;
|
| - virtual ~BaseClass() {}
|
| -
|
| - private:
|
| - const Type type_;
|
| -};
|
| -
|
| -class Foo : public BaseClass {
|
| - public:
|
| - explicit Foo(int parameter) : BaseClass(FOO), parameter_(parameter) {}
|
| - virtual bool Equals(const BaseClass* other) const OVERRIDE {
|
| - return other->type() == type() &&
|
| - static_cast<const Foo*>(other)->parameter_ == parameter_;
|
| - }
|
| - int parameter() const {
|
| - return parameter_;
|
| - }
|
| -
|
| - private:
|
| - friend class base::RefCounted<BaseClass>;
|
| - virtual ~Foo() {}
|
| -
|
| - // Note that this class must be immutable.
|
| - const int parameter_;
|
| - DISALLOW_COPY_AND_ASSIGN(Foo);
|
| -};
|
| -
|
| -scoped_refptr<const BaseClass> CreateFoo(const std::string& /*instance_type*/,
|
| - const base::Value* value,
|
| - std::string* error,
|
| - bool* bad_message) {
|
| - const base::DictionaryValue* dict = NULL;
|
| - CHECK(value->GetAsDictionary(&dict));
|
| - int parameter = 0;
|
| - if (!dict->GetInteger("parameter", ¶meter)) {
|
| - *error = "No parameter";
|
| - *bad_message = true;
|
| - return scoped_refptr<const BaseClass>(NULL);
|
| - }
|
| - return scoped_refptr<const BaseClass>(new Foo(parameter));
|
| -}
|
| -
|
| -scoped_ptr<base::DictionaryValue> CreateDictWithParameter(int parameter) {
|
| - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
|
| - dict->SetInteger("parameter", parameter);
|
| - return dict.Pass();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace extensions {
|
| -
|
| -TEST(DedupingFactoryTest, InstantiationParameterized) {
|
| - DedupingFactory<BaseClass> factory(2);
|
| - factory.RegisterFactoryMethod(
|
| - kTypeName, DedupingFactory<BaseClass>::IS_PARAMETERIZED, &CreateFoo);
|
| -
|
| - scoped_ptr<base::DictionaryValue> d1(CreateDictWithParameter(1));
|
| - scoped_ptr<base::DictionaryValue> d2(CreateDictWithParameter(2));
|
| - scoped_ptr<base::DictionaryValue> d3(CreateDictWithParameter(3));
|
| - scoped_ptr<base::DictionaryValue> d4(CreateDictWithParameter(4));
|
| -
|
| - std::string error;
|
| - bool bad_message = false;
|
| -
|
| - // Fill factory with 2 different types.
|
| - scoped_refptr<const BaseClass> c1(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| - scoped_refptr<const BaseClass> c2(
|
| - factory.Instantiate(kTypeName, d2.get(), &error, &bad_message));
|
| - ASSERT_TRUE(c1.get());
|
| - ASSERT_TRUE(c2.get());
|
| - EXPECT_EQ(1, static_cast<const Foo*>(c1.get())->parameter());
|
| - EXPECT_EQ(2, static_cast<const Foo*>(c2.get())->parameter());
|
| -
|
| - // This one produces an overflow, now the cache contains [2, 3]
|
| - scoped_refptr<const BaseClass> c3(
|
| - factory.Instantiate(kTypeName, d3.get(), &error, &bad_message));
|
| - ASSERT_TRUE(c3.get());
|
| - EXPECT_EQ(3, static_cast<const Foo*>(c3.get())->parameter());
|
| -
|
| - // Reuse 2, this should give the same instance as c2.
|
| - scoped_refptr<const BaseClass> c2_b(
|
| - factory.Instantiate(kTypeName, d2.get(), &error, &bad_message));
|
| - EXPECT_EQ(2, static_cast<const Foo*>(c2_b.get())->parameter());
|
| - EXPECT_EQ(c2, c2_b);
|
| -
|
| - // Also check that the reuse of 2 moved it to the end, so that the cache is
|
| - // now [3, 2] and 3 is discarded before 2.
|
| - // This discards 3, so the cache becomes [2, 1]
|
| - scoped_refptr<const BaseClass> c1_b(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| -
|
| - scoped_refptr<const BaseClass> c2_c(
|
| - factory.Instantiate(kTypeName, d2.get(), &error, &bad_message));
|
| - EXPECT_EQ(2, static_cast<const Foo*>(c2_c.get())->parameter());
|
| - EXPECT_EQ(c2, c2_c);
|
| -}
|
| -
|
| -TEST(DedupingFactoryTest, InstantiationNonParameterized) {
|
| - DedupingFactory<BaseClass> factory(2);
|
| - factory.RegisterFactoryMethod(
|
| - kTypeName, DedupingFactory<BaseClass>::IS_NOT_PARAMETERIZED, &CreateFoo);
|
| -
|
| - scoped_ptr<base::DictionaryValue> d1(CreateDictWithParameter(1));
|
| - scoped_ptr<base::DictionaryValue> d2(CreateDictWithParameter(2));
|
| -
|
| - std::string error;
|
| - bool bad_message = false;
|
| -
|
| - // We create two instances with different dictionaries but because the type is
|
| - // declared to be not parameterized, we should get the same instance.
|
| - scoped_refptr<const BaseClass> c1(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| - scoped_refptr<const BaseClass> c2(
|
| - factory.Instantiate(kTypeName, d2.get(), &error, &bad_message));
|
| - ASSERT_TRUE(c1.get());
|
| - ASSERT_TRUE(c2.get());
|
| - EXPECT_EQ(1, static_cast<const Foo*>(c1.get())->parameter());
|
| - EXPECT_EQ(1, static_cast<const Foo*>(c2.get())->parameter());
|
| - EXPECT_EQ(c1, c2);
|
| -}
|
| -
|
| -TEST(DedupingFactoryTest, TypeNames) {
|
| - DedupingFactory<BaseClass> factory(2);
|
| - factory.RegisterFactoryMethod(
|
| - kTypeName, DedupingFactory<BaseClass>::IS_PARAMETERIZED, &CreateFoo);
|
| - factory.RegisterFactoryMethod(
|
| - kTypeName2, DedupingFactory<BaseClass>::IS_PARAMETERIZED, &CreateFoo);
|
| -
|
| - scoped_ptr<base::DictionaryValue> d1(CreateDictWithParameter(1));
|
| -
|
| - std::string error;
|
| - bool bad_message = false;
|
| -
|
| - scoped_refptr<const BaseClass> c1_a(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| - scoped_refptr<const BaseClass> c1_b(
|
| - factory.Instantiate(kTypeName2, d1.get(), &error, &bad_message));
|
| -
|
| - ASSERT_TRUE(c1_a.get());
|
| - ASSERT_TRUE(c1_b.get());
|
| - EXPECT_NE(c1_a, c1_b);
|
| -}
|
| -
|
| -TEST(DedupingFactoryTest, Clear) {
|
| - DedupingFactory<BaseClass> factory(2);
|
| - factory.RegisterFactoryMethod(
|
| - kTypeName, DedupingFactory<BaseClass>::IS_PARAMETERIZED, &CreateFoo);
|
| -
|
| - scoped_ptr<base::DictionaryValue> d1(CreateDictWithParameter(1));
|
| -
|
| - std::string error;
|
| - bool bad_message = false;
|
| -
|
| - scoped_refptr<const BaseClass> c1_a(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| -
|
| - factory.ClearPrototypes();
|
| -
|
| - scoped_refptr<const BaseClass> c1_b(
|
| - factory.Instantiate(kTypeName, d1.get(), &error, &bad_message));
|
| -
|
| - ASSERT_TRUE(c1_a.get());
|
| - ASSERT_TRUE(c1_b.get());
|
| - EXPECT_NE(c1_a, c1_b);
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|