| Index: extensions/common/permissions/manifest_permission_set_unittest.cc
|
| diff --git a/extensions/common/permissions/manifest_permission_set_unittest.cc b/extensions/common/permissions/manifest_permission_set_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a0191c385a072b5484d2f5be8fb727fb5a5ce3ae
|
| --- /dev/null
|
| +++ b/extensions/common/permissions/manifest_permission_set_unittest.cc
|
| @@ -0,0 +1,272 @@
|
| +// Copyright 2013 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 "base/pickle.h"
|
| +#include "base/values.h"
|
| +#include "chrome/common/extensions/extension_messages.h"
|
| +#include "extensions/common/permissions/manifest_permission.h"
|
| +#include "extensions/common/permissions/manifest_permission_set.h"
|
| +#include "ipc/ipc_message.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace extensions {
|
| +
|
| +class MockManifestPermission : public ManifestPermission {
|
| + public:
|
| + MockManifestPermission(const std::string& name)
|
| + : name_(name) {
|
| + }
|
| +
|
| + virtual std::string name() const OVERRIDE {
|
| + return name_;
|
| + }
|
| +
|
| + virtual std::string id() const OVERRIDE {
|
| + return name();
|
| + }
|
| +
|
| + virtual bool HasMessages() const OVERRIDE {
|
| + return false;
|
| + }
|
| +
|
| + virtual PermissionMessages GetMessages() const OVERRIDE {
|
| + return PermissionMessages();
|
| + }
|
| +
|
| + virtual bool FromValue(const base::Value* value) OVERRIDE {
|
| + return false;
|
| + }
|
| +
|
| + virtual scoped_ptr<base::Value> ToValue() const OVERRIDE {
|
| + return scoped_ptr<base::Value>(base::Value::CreateNullValue());
|
| + }
|
| +
|
| + virtual ManifestPermission* Clone() const OVERRIDE {
|
| + return new MockManifestPermission(name_);
|
| + }
|
| +
|
| + virtual ManifestPermission* Diff(const ManifestPermission* rhs)
|
| + const OVERRIDE {
|
| + const MockManifestPermission* other =
|
| + static_cast<const MockManifestPermission*>(rhs);
|
| + EXPECT_EQ(name_, other->name_);
|
| + return NULL;
|
| + }
|
| +
|
| + virtual ManifestPermission* Union(const ManifestPermission* rhs)
|
| + const OVERRIDE {
|
| + const MockManifestPermission* other =
|
| + static_cast<const MockManifestPermission*>(rhs);
|
| + EXPECT_EQ(name_, other->name_);
|
| + return new MockManifestPermission(name_);
|
| + }
|
| +
|
| + virtual ManifestPermission* Intersect(const ManifestPermission* rhs)
|
| + const OVERRIDE {
|
| + const MockManifestPermission* other =
|
| + static_cast<const MockManifestPermission*>(rhs);
|
| + EXPECT_EQ(name_, other->name_);
|
| + return new MockManifestPermission(name_);
|
| + }
|
| +
|
| + virtual bool Contains(const ManifestPermission* rhs) const OVERRIDE {
|
| + const MockManifestPermission* other =
|
| + static_cast<const MockManifestPermission*>(rhs);
|
| + EXPECT_EQ(name_, other->name_);
|
| + return true;
|
| + }
|
| +
|
| + virtual bool Equal(const ManifestPermission* rhs) const OVERRIDE {
|
| + const MockManifestPermission* other =
|
| + static_cast<const MockManifestPermission*>(rhs);
|
| + EXPECT_EQ(name_, other->name_);
|
| + return true;
|
| + }
|
| +
|
| + virtual void Write(IPC::Message* m) const OVERRIDE {
|
| + IPC::WriteParam(m, name_);
|
| + }
|
| +
|
| + virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE {
|
| + std::string read_name;
|
| + bool result = IPC::ReadParam(m, iter, &read_name);
|
| + if (!result)
|
| + return result;
|
| + EXPECT_EQ(read_name, name_);
|
| + return true;
|
| + }
|
| +
|
| + virtual void Log(std::string* log) const OVERRIDE {
|
| + }
|
| +
|
| + private:
|
| + std::string name_;
|
| +};
|
| +
|
| +TEST(ManifestPermissionSetTest, General) {
|
| + ManifestPermissionSet set;
|
| + set.insert(new MockManifestPermission("p1"));
|
| + set.insert(new MockManifestPermission("p2"));
|
| + set.insert(new MockManifestPermission("p3"));
|
| + set.insert(new MockManifestPermission("p4"));
|
| + set.insert(new MockManifestPermission("p5"));
|
| +
|
| + EXPECT_EQ(set.find("p1")->id(), "p1");
|
| + EXPECT_TRUE(set.find("p10") == set.end());
|
| +
|
| + EXPECT_EQ(set.size(), 5u);
|
| +
|
| + EXPECT_EQ(set.erase("p1"), 1u);
|
| + EXPECT_EQ(set.size(), 4u);
|
| +
|
| + EXPECT_EQ(set.erase("p1"), 0u);
|
| + EXPECT_EQ(set.size(), 4u);
|
| +}
|
| +
|
| +TEST(ManifestPermissionSetTest, CreateUnion) {
|
| + ManifestPermissionSet permissions1;
|
| + ManifestPermissionSet permissions2;
|
| + ManifestPermissionSet expected_permissions;
|
| + ManifestPermissionSet result;
|
| +
|
| + ManifestPermission* permission = new MockManifestPermission("p3");
|
| +
|
| + // Union with an empty set.
|
| + permissions1.insert(new MockManifestPermission("p1"));
|
| + permissions1.insert(new MockManifestPermission("p2"));
|
| + permissions1.insert(permission->Clone());
|
| + expected_permissions.insert(new MockManifestPermission("p1"));
|
| + expected_permissions.insert(new MockManifestPermission("p2"));
|
| + expected_permissions.insert(permission);
|
| +
|
| + ManifestPermissionSet::Union(permissions1, permissions2, &result);
|
| +
|
| + EXPECT_TRUE(permissions1.Contains(permissions2));
|
| + EXPECT_TRUE(permissions1.Contains(result));
|
| + EXPECT_FALSE(permissions2.Contains(permissions1));
|
| + EXPECT_FALSE(permissions2.Contains(result));
|
| + EXPECT_TRUE(result.Contains(permissions1));
|
| + EXPECT_TRUE(result.Contains(permissions2));
|
| +
|
| + EXPECT_EQ(expected_permissions, result);
|
| +
|
| + // Now use a real second set.
|
| + permissions2.insert(new MockManifestPermission("p1"));
|
| + permissions2.insert(new MockManifestPermission("p2"));
|
| + permissions2.insert(new MockManifestPermission("p33"));
|
| + permissions2.insert(new MockManifestPermission("p4"));
|
| + permissions2.insert(new MockManifestPermission("p5"));
|
| +
|
| + expected_permissions.insert(new MockManifestPermission("p1"));
|
| + expected_permissions.insert(new MockManifestPermission("p2"));
|
| + expected_permissions.insert(new MockManifestPermission("p3"));
|
| + expected_permissions.insert(new MockManifestPermission("p4"));
|
| + expected_permissions.insert(new MockManifestPermission("p5"));
|
| + expected_permissions.insert(new MockManifestPermission("p33"));
|
| +
|
| + ManifestPermissionSet::Union(permissions1, permissions2, &result);
|
| +
|
| + {
|
| + ManifestPermissionSet set1;
|
| + set1.insert(new MockManifestPermission("p1"));
|
| + set1.insert(new MockManifestPermission("p2"));
|
| + ManifestPermissionSet set2;
|
| + set2.insert(new MockManifestPermission("p3"));
|
| +
|
| + EXPECT_FALSE(set1.Contains(set2));
|
| + EXPECT_FALSE(set2.Contains(set1));
|
| + }
|
| +
|
| + EXPECT_FALSE(permissions1.Contains(permissions2));
|
| + EXPECT_FALSE(permissions1.Contains(result));
|
| + EXPECT_FALSE(permissions2.Contains(permissions1));
|
| + EXPECT_FALSE(permissions2.Contains(result));
|
| + EXPECT_TRUE(result.Contains(permissions1));
|
| + EXPECT_TRUE(result.Contains(permissions2));
|
| +
|
| + EXPECT_EQ(expected_permissions, result);
|
| +}
|
| +
|
| +TEST(ManifestPermissionSetTest, CreateIntersection) {
|
| + ManifestPermissionSet permissions1;
|
| + ManifestPermissionSet permissions2;
|
| + ManifestPermissionSet expected_permissions;
|
| + ManifestPermissionSet result;
|
| +
|
| + // Intersection with an empty set.
|
| + permissions1.insert(new MockManifestPermission("p1"));
|
| + permissions1.insert(new MockManifestPermission("p2"));
|
| + permissions1.insert(new MockManifestPermission("p3"));
|
| +
|
| + ManifestPermissionSet::Intersection(permissions1, permissions2, &result);
|
| + EXPECT_TRUE(permissions1.Contains(result));
|
| + EXPECT_TRUE(permissions2.Contains(result));
|
| + EXPECT_TRUE(permissions1.Contains(permissions2));
|
| + EXPECT_FALSE(permissions2.Contains(permissions1));
|
| + EXPECT_FALSE(result.Contains(permissions1));
|
| + EXPECT_TRUE(result.Contains(permissions2));
|
| +
|
| + EXPECT_TRUE(result.empty());
|
| + EXPECT_EQ(expected_permissions, result);
|
| +
|
| + // Now use a real second set.
|
| + permissions2.insert(new MockManifestPermission("p1"));
|
| + permissions2.insert(new MockManifestPermission("p3"));
|
| + permissions2.insert(new MockManifestPermission("p4"));
|
| + permissions2.insert(new MockManifestPermission("p5"));
|
| +
|
| + expected_permissions.insert(new MockManifestPermission("p1"));
|
| + expected_permissions.insert(new MockManifestPermission("p3"));
|
| +
|
| + ManifestPermissionSet::Intersection(permissions1, permissions2, &result);
|
| +
|
| + EXPECT_TRUE(permissions1.Contains(result));
|
| + EXPECT_TRUE(permissions2.Contains(result));
|
| + EXPECT_FALSE(permissions1.Contains(permissions2));
|
| + EXPECT_FALSE(permissions2.Contains(permissions1));
|
| + EXPECT_FALSE(result.Contains(permissions1));
|
| + EXPECT_FALSE(result.Contains(permissions2));
|
| +
|
| + EXPECT_EQ(expected_permissions, result);
|
| +}
|
| +
|
| +TEST(ManifestPermissionSetTest, CreateDifference) {
|
| + ManifestPermissionSet permissions1;
|
| + ManifestPermissionSet permissions2;
|
| + ManifestPermissionSet expected_permissions;
|
| + ManifestPermissionSet result;
|
| +
|
| + // Difference with an empty set.
|
| + permissions1.insert(new MockManifestPermission("p1"));
|
| + permissions1.insert(new MockManifestPermission("p2"));
|
| + permissions1.insert(new MockManifestPermission("p3"));
|
| +
|
| + ManifestPermissionSet::Difference(permissions1, permissions2, &result);
|
| +
|
| + EXPECT_EQ(permissions1, result);
|
| +
|
| + // Now use a real second set.
|
| + permissions2.insert(new MockManifestPermission("p1"));
|
| + permissions2.insert(new MockManifestPermission("p2"));
|
| + permissions2.insert(new MockManifestPermission("p4"));
|
| + permissions2.insert(new MockManifestPermission("p5"));
|
| + permissions2.insert(new MockManifestPermission("p6"));
|
| +
|
| + expected_permissions.insert(new MockManifestPermission("p3"));
|
| +
|
| + ManifestPermissionSet::Difference(permissions1, permissions2, &result);
|
| +
|
| + EXPECT_TRUE(permissions1.Contains(result));
|
| + EXPECT_FALSE(permissions2.Contains(result));
|
| +
|
| + EXPECT_EQ(expected_permissions, result);
|
| +
|
| + // |result| = |permissions1| - |permissions2| -->
|
| + // |result| intersect |permissions2| == empty_set
|
| + ManifestPermissionSet result2;
|
| + ManifestPermissionSet::Intersection(result, permissions2, &result2);
|
| + EXPECT_TRUE(result2.empty());
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|