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/common/extensions/manifest_tests/extension_manifest_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_file_value_serializer.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_l10n_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// If filename is a relative path, LoadManifestFile will treat it relative to 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the appropriate test directory. 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::DictionaryValue* LoadManifestFile(const base::FilePath& filename_path, 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string* error) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath extension_path; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath manifest_path; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::DIR_TEST_DATA, &manifest_path); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest_path = manifest_path.Append(filename_path); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_path = manifest_path.DirName(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(manifest_path)) << 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Couldn't find " << manifest_path.value(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JSONFileValueSerializer serializer(manifest_path); 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* manifest = 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static_cast<base::DictionaryValue*>(serializer.Deserialize(NULL, error)); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Most unit tests don't need localization, and they'll fail if we try to 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // localize them, since their manifests don't have a default_locale key. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only localize manifests that indicate they want to be localized. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calling LocalizeExtension at this point mirrors 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension_file_util::LoadExtension. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (manifest && 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filename_path.value().find(FILE_PATH_LITERAL("localized")) != 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_l10n_util::LocalizeExtension(extension_path, manifest, error); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionManifestTest::ExtensionManifestTest() 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : enable_apps_(true), 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // UNKNOWN == trunk. 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN) {} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper class that simplifies creating methods that take either a filename 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to a manifest or the manifest itself. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionManifestTest::Manifest::Manifest(const char* name) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : name_(name), manifest_(NULL) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ExtensionManifestTest::Manifest::Manifest(base::DictionaryValue* manifest, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : name_(name), manifest_(manifest) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(manifest_) << "Manifest NULL"; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionManifestTest::Manifest::Manifest(const Manifest& m) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionManifestTest::Manifest::~Manifest() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)base::DictionaryValue* ExtensionManifestTest::Manifest::GetManifest( 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char const* test_data_dir, std::string* error) const { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manifest_) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath filename_path; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filename_path = filename_path.AppendASCII("extensions") 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .AppendASCII(test_data_dir) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .AppendASCII(name_); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest_ = LoadManifestFile(filename_path, error); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest_holder_.reset(manifest_); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)char const* ExtensionManifestTest::test_data_dir() { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "manifest_tests"; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)scoped_ptr<base::DictionaryValue> ExtensionManifestTest::LoadManifest( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char const* manifest_name, std::string* error) { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath filename_path; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filename_path = filename_path.AppendASCII("extensions") 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .AppendASCII(test_data_dir()) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .AppendASCII(manifest_name); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(LoadManifestFile(filename_path, error)); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> ExtensionManifestTest::LoadExtension( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Manifest& manifest, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* value = manifest.GetManifest(test_data_dir(), error); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!value) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(chrome::DIR_TEST_DATA, &path); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = path.AppendASCII("extensions").AppendASCII(test_data_dir()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Extension::Create(path.DirName(), location, *value, flags, error); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectSuccess( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Manifest& manifest, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension = 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags); 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(extension.get()) << manifest.name(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", error) << manifest.name(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectSuccess( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LoadAndExpectSuccess(Manifest(manifest_name), location, flags); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectWarning( 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Manifest& manifest, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_warning, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension = 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags); 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(extension.get()) << manifest.name(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", error) << manifest.name(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, extension->install_warnings().size()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_warning, extension->install_warnings()[0].message); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectWarning( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_warning, 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LoadAndExpectWarning( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Manifest(manifest_name), expected_warning, location, flags); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionManifestTest::VerifyExpectedError( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension* extension, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(extension) << 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Expected failure loading extension '" << name << 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "', but didn't get one."; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(MatchPattern(error, expected_error)) << name << 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expected '" << expected_error << "' but got '" << error << "'"; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionManifestTest::LoadAndExpectError( 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Manifest& manifest, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error, 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyExpectedError(extension.get(), manifest.name(), error, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionManifestTest::LoadAndExpectError( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error, 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LoadAndExpectError( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Manifest(manifest_name), expected_error, location, flags); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ExtensionManifestTest::AddPattern(extensions::URLPatternSet* extent, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pattern) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int schemes = URLPattern::SCHEME_ALL; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extent->AddPattern(URLPattern(schemes, pattern)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionManifestTest::Testcase::Testcase( 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string manifest_filename, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string expected_error, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int flags) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error_(expected_error), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_(location), flags_(flags) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionManifestTest::Testcase::Testcase(std::string manifest_filename, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expected_error) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error_(expected_error), 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_(extensions::Manifest::INTERNAL), 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flags_(Extension::NO_FLAGS) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionManifestTest::Testcase::Testcase(std::string manifest_filename) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_(extensions::Manifest::INTERNAL), 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) flags_(Extension::NO_FLAGS) {} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionManifestTest::Testcase::Testcase( 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string manifest_filename, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int flags) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_(location), 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) flags_(flags) {} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionManifestTest::RunTestcases(const Testcase* testcases, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_testcases, 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectType type) { 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < num_testcases; ++i) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunTestcase(testcases[i], type); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ExtensionManifestTest::RunTestcase(const Testcase& testcase, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectType type) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_ERROR: 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectError(testcase.manifest_filename_.c_str(), 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.expected_error_, 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_WARNING: 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectWarning(testcase.manifest_filename_.c_str(), 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.expected_error_, 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_SUCCESS: 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess(testcase.manifest_filename_.c_str(), 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 260