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) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/manifest_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_file_value_serializer.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/extension_l10n_util.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension_paths.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/common/test_util.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace extensions { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// |manifest_path| is an absolute path to a manifest file. 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::DictionaryValue* LoadManifestFile(const base::FilePath& manifest_path, 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string* error) { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath extension_path = manifest_path.DirName(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(manifest_path)) << 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Couldn't find " << manifest_path.value(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JSONFileValueSerializer serializer(manifest_path); 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* manifest = 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static_cast<base::DictionaryValue*>(serializer.Deserialize(NULL, error)); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Most unit tests don't need localization, and they'll fail if we try to 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // localize them, since their manifests don't have a default_locale key. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only localize manifests that indicate they want to be localized. 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Calling LocalizeExtension at this point mirrors file_util::LoadExtension. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (manifest && 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manifest_path.value().find(FILE_PATH_LITERAL("localized")) != 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string::npos) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_l10n_util::LocalizeExtension(extension_path, manifest, error); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestTest() 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : enable_apps_(true) { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::~ManifestTest() { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper class that simplifies creating methods that take either a filename 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to a manifest or the manifest itself. 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestData::ManifestData(const char* name) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : name_(name), manifest_(NULL) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestData::ManifestData(base::DictionaryValue* manifest, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : name_(name), manifest_(manifest) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(manifest_) << "Manifest NULL"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestData::ManifestData( 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::DictionaryValue> manifest) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : manifest_(manifest.get()), manifest_holder_(manifest.Pass()) { 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(manifest_) << "Manifest NULL"; 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestData::ManifestData(const ManifestData& m) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::ManifestData::~ManifestData() { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::DictionaryValue* ManifestTest::ManifestData::GetManifest( 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath test_data_dir, std::string* error) const { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manifest_) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath manifest_path = test_data_dir.AppendASCII(name_); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manifest_ = LoadManifestFile(manifest_path, error); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest_holder_.reset(manifest_); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manifest_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::FilePath ManifestTest::GetTestDataDir() { 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PathService::Get(DIR_TEST_DATA, &path); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return path.AppendASCII("manifest_tests"); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<base::DictionaryValue> ManifestTest::LoadManifest( 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char const* manifest_name, std::string* error) { 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath manifest_path = GetTestDataDir().AppendASCII(manifest_name); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_ptr(LoadManifestFile(manifest_path, error)); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<Extension> ManifestTest::LoadExtension( 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ManifestData& manifest, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath test_data_dir = GetTestDataDir(); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* value = manifest.GetManifest(test_data_dir, error); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!value) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Extension::Create( 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_data_dir.DirName(), location, *value, flags, error); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<Extension> ManifestTest::LoadAndExpectSuccess( 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ManifestData& manifest, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension = 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags); 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(extension.get()) << manifest.name(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", error) << manifest.name(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<Extension> ManifestTest::LoadAndExpectSuccess( 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return LoadAndExpectSuccess(ManifestData(manifest_name), location, flags); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<Extension> ManifestTest::LoadAndExpectWarning( 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ManifestData& manifest, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_warning, 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension = 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags); 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(extension.get()) << manifest.name(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", error) << manifest.name(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, extension->install_warnings().size()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_warning, extension->install_warnings()[0].message); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<Extension> ManifestTest::LoadAndExpectWarning( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_warning, 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LoadAndExpectWarning( 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ManifestData(manifest_name), expected_warning, location, flags); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::VerifyExpectedError( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension* extension, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(extension) << 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Expected failure loading extension '" << name << 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "', but didn't get one."; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(MatchPattern(error, expected_error)) << name << 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " expected '" << expected_error << "' but got '" << error << "'"; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::LoadAndExpectError( 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ManifestData& manifest, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error, 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension(manifest, &error, location, flags)); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyExpectedError(extension.get(), manifest.name(), error, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::LoadAndExpectError( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char const* manifest_name, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_error, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LoadAndExpectError( 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ManifestData(manifest_name), expected_error, location, flags); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::AddPattern(extensions::URLPatternSet* extent, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pattern) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int schemes = URLPattern::SCHEME_ALL; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extent->AddPattern(URLPattern(schemes, pattern)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::Testcase::Testcase( 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string manifest_filename, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string expected_error, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int flags) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error_(expected_error), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_(location), flags_(flags) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::Testcase::Testcase(std::string manifest_filename, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expected_error) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_error_(expected_error), 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_(extensions::Manifest::INTERNAL), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flags_(Extension::NO_FLAGS) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::Testcase::Testcase(std::string manifest_filename) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_(extensions::Manifest::INTERNAL), 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) flags_(Extension::NO_FLAGS) {} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestTest::Testcase::Testcase( 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string manifest_filename, 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::Location location, 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int flags) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manifest_filename_(manifest_filename), 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_(location), 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) flags_(flags) {} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::RunTestcases(const Testcase* testcases, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_testcases, 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectType type) { 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < num_testcases; ++i) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunTestcase(testcases[i], type); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestTest::RunTestcase(const Testcase& testcase, 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectType type) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_ERROR: 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectError(testcase.manifest_filename_.c_str(), 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.expected_error_, 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_WARNING: 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectWarning(testcase.manifest_filename_.c_str(), 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.expected_error_, 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_TYPE_SUCCESS: 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess(testcase.manifest_filename_.c_str(), 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.location_, 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) testcase.flags_); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace extensions 259