Blink roll 25b6bd3a7a131ffe68d809546ad1a20707915cdc:3a503f41ae42e5b79cfcd2ff10e65afde...
[chromium-blink-merge.git] / extensions / common / manifest_test.h
blob048306eec975c4de328c10a9b09fef5a1cf9c701
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef EXTENSIONS_COMMON_MANIFEST_TEST_H_
6 #define EXTENSIONS_COMMON_MANIFEST_TEST_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/values.h"
11 #include "extensions/common/extension.h"
12 #include "extensions/common/manifest.h"
13 #include "testing/gtest/include/gtest/gtest.h"
15 namespace base {
16 class FilePath;
19 namespace extensions {
21 // Base class for tests that parse a manifest file.
22 class ManifestTest : public testing::Test {
23 public:
24 ManifestTest();
25 ~ManifestTest() override;
27 protected:
28 // Helper class that simplifies creating methods that take either a filename
29 // to a manifest or the manifest itself.
30 class ManifestData {
31 public:
32 explicit ManifestData(const char* name);
33 ManifestData(base::DictionaryValue* manifest, const char* name);
34 explicit ManifestData(scoped_ptr<base::DictionaryValue> manifest);
35 // C++98 requires the copy constructor for a type to be visible if you
36 // take a const-ref of a temporary for that type. Since Manifest
37 // contains a scoped_ptr, its implicit copy constructor is declared
38 // Manifest(Manifest&) according to spec 12.8.5. This breaks the first
39 // requirement and thus you cannot use it with LoadAndExpectError() or
40 // LoadAndExpectSuccess() easily.
42 // To get around this spec pedantry, we declare the copy constructor
43 // explicitly. It will never get invoked.
44 ManifestData(const ManifestData& m);
46 ~ManifestData();
48 const std::string& name() const { return name_; };
50 base::DictionaryValue* GetManifest(base::FilePath manifest_path,
51 std::string* error) const;
53 private:
54 const std::string name_;
55 mutable base::DictionaryValue* manifest_;
56 mutable scoped_ptr<base::DictionaryValue> manifest_holder_;
59 // Returns the path in which to find test manifest data files, for example
60 // extensions/test/data/manifest_tests.
61 virtual base::FilePath GetTestDataDir();
63 scoped_ptr<base::DictionaryValue> LoadManifest(
64 char const* manifest_name,
65 std::string* error);
67 scoped_refptr<extensions::Extension> LoadExtension(
68 const ManifestData& manifest,
69 std::string* error,
70 extensions::Manifest::Location location =
71 extensions::Manifest::INTERNAL,
72 int flags = extensions::Extension::NO_FLAGS);
74 scoped_refptr<extensions::Extension> LoadAndExpectSuccess(
75 const ManifestData& manifest,
76 extensions::Manifest::Location location =
77 extensions::Manifest::INTERNAL,
78 int flags = extensions::Extension::NO_FLAGS);
80 scoped_refptr<extensions::Extension> LoadAndExpectSuccess(
81 char const* manifest_name,
82 extensions::Manifest::Location location =
83 extensions::Manifest::INTERNAL,
84 int flags = extensions::Extension::NO_FLAGS);
86 scoped_refptr<extensions::Extension> LoadAndExpectWarning(
87 const ManifestData& manifest,
88 const std::string& expected_error,
89 extensions::Manifest::Location location =
90 extensions::Manifest::INTERNAL,
91 int flags = extensions::Extension::NO_FLAGS);
93 scoped_refptr<extensions::Extension> LoadAndExpectWarning(
94 char const* manifest_name,
95 const std::string& expected_error,
96 extensions::Manifest::Location location =
97 extensions::Manifest::INTERNAL,
98 int flags = extensions::Extension::NO_FLAGS);
100 void VerifyExpectedError(extensions::Extension* extension,
101 const std::string& name,
102 const std::string& error,
103 const std::string& expected_error);
105 void LoadAndExpectError(char const* manifest_name,
106 const std::string& expected_error,
107 extensions::Manifest::Location location =
108 extensions::Manifest::INTERNAL,
109 int flags = extensions::Extension::NO_FLAGS);
111 void LoadAndExpectError(const ManifestData& manifest,
112 const std::string& expected_error,
113 extensions::Manifest::Location location =
114 extensions::Manifest::INTERNAL,
115 int flags = extensions::Extension::NO_FLAGS);
117 void AddPattern(extensions::URLPatternSet* extent,
118 const std::string& pattern);
120 // used to differentiate between calls to LoadAndExpectError,
121 // LoadAndExpectWarning and LoadAndExpectSuccess via function RunTestcases.
122 enum ExpectType {
123 EXPECT_TYPE_ERROR,
124 EXPECT_TYPE_WARNING,
125 EXPECT_TYPE_SUCCESS
128 struct Testcase {
129 std::string manifest_filename_;
130 std::string expected_error_; // only used for ExpectedError tests
131 extensions::Manifest::Location location_;
132 int flags_;
134 Testcase(std::string manifest_filename, std::string expected_error,
135 extensions::Manifest::Location location, int flags);
137 Testcase(std::string manifest_filename, std::string expected_error);
139 explicit Testcase(std::string manifest_filename);
141 Testcase(std::string manifest_filename,
142 extensions::Manifest::Location location,
143 int flags);
146 void RunTestcases(const Testcase* testcases,
147 size_t num_testcases,
148 ExpectType type);
150 void RunTestcase(const Testcase& testcase, ExpectType type);
152 bool enable_apps_;
154 private:
155 DISALLOW_COPY_AND_ASSIGN(ManifestTest);
158 } // namespace extensions
160 #endif // EXTENSIONS_COMMON_MANIFEST_TEST_H_