Index: content/renderer/manifest/manifest_parser_unittest.cc |
diff --git a/content/renderer/manifest/manifest_parser_unittest.cc b/content/renderer/manifest/manifest_parser_unittest.cc |
index 12ea5d61f365365b62a49a08dbaf561893852863..c2ce8da7ef982c7fb7f672eacd9d040446ac7907 100644 |
--- a/content/renderer/manifest/manifest_parser_unittest.cc |
+++ b/content/renderer/manifest/manifest_parser_unittest.cc |
@@ -325,4 +325,171 @@ TEST_F(ManifestParserTest, OrientationParserRules) { |
} |
} |
+TEST_F(ManifestParserTest, IconsParseRules) { |
+ // Smoke test: if no icon, empty list. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [] }"); |
+ EXPECT_EQ(manifest.icons.size(), 0u); |
+ EXPECT_TRUE(manifest.IsEmpty()); |
+ } |
+ |
+ // Smoke test: if empty icon, empty list. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ {} ] }"); |
+ EXPECT_EQ(manifest.icons.size(), 0u); |
+ EXPECT_TRUE(manifest.IsEmpty()); |
+ } |
+ |
+ // Smoke test: icon with invalid src, empty list. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ { \"icons\": [] } ] }"); |
+ EXPECT_EQ(manifest.icons.size(), 0u); |
+ EXPECT_TRUE(manifest.IsEmpty()); |
+ } |
+ |
+ // Smoke test: if icon with empty src, it will be present in the list. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ { \"src\": \"\" } ] }"); |
+ EXPECT_EQ(manifest.icons.size(), 1u); |
+ EXPECT_EQ(manifest.icons[0].src.spec(), "http://foo.com/index.html"); |
+ EXPECT_FALSE(manifest.IsEmpty()); |
+ } |
+ |
+ // Smoke test: if one icons with valid src, it will be present in the list. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [{ \"src\": \"foo.jpg\" }] }"); |
+ EXPECT_EQ(manifest.icons.size(), 1u); |
+ EXPECT_EQ(manifest.icons[0].src.spec(), "http://foo.com/foo.jpg"); |
+ EXPECT_FALSE(manifest.IsEmpty()); |
+ } |
+} |
+ |
+TEST_F(ManifestParserTest, IconSrcParseRules) { |
+ // Smoke test. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"foo.png\" } ] }"); |
+ EXPECT_EQ(manifest.icons[0].src.spec(), |
+ default_document_url.Resolve("foo.png").spec()); |
+ } |
+ |
+ // Whitespaces. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \" foo.png \" } ] }"); |
+ EXPECT_EQ(manifest.icons[0].src.spec(), |
+ default_document_url.Resolve("foo.png").spec()); |
+ } |
+ |
+ // Don't parse if property isn't a string. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": {} } ] }"); |
+ EXPECT_TRUE(manifest.icons.empty()); |
+ } |
+ |
+ // Don't parse if property isn't a string. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": 42 } ] }"); |
+ EXPECT_TRUE(manifest.icons.empty()); |
+ } |
+ |
+ // Resolving has to happen based on the document_url. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"icons/foo.png\" } ] }", |
+ GURL("http://foo.com/landing/index.html")); |
+ EXPECT_EQ(manifest.icons[0].src.spec(), |
+ "http://foo.com/landing/icons/foo.png"); |
+ } |
+} |
+ |
+TEST_F(ManifestParserTest, IconTypeParseRules) { |
+ // Smoke test. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": \"foo\" } ] }"); |
+ EXPECT_TRUE(EqualsASCII(manifest.icons[0].type.string(), "foo")); |
+ } |
+ |
+ // Trim whitespaces. |
+ { |
+ Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": \"\"," |
+ " \"type\": \" foo \" } ] }"); |
+ EXPECT_TRUE(EqualsASCII(manifest.icons[0].type.string(), "foo")); |
+ } |
+ |
+ // Don't parse if property isn't a string. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": {} } ] }"); |
+ EXPECT_TRUE(manifest.icons[0].type.is_null()); |
+ } |
+ |
+ // Don't parse if property isn't a string. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": 42 } ] }"); |
+ EXPECT_TRUE(manifest.icons[0].type.is_null()); |
+ } |
+} |
+ |
+TEST_F(ManifestParserTest, IconDensityParseRules) { |
+ // Smoke test. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 42 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, 42); |
+ } |
+ |
+ // Decimal value. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 2.5 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, 2.5); |
+ } |
+ |
+ // Parse fail if it isn't a float. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": {} } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
+ } |
+ |
+ // Parse fail if it isn't a float. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\":\"2\" } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
+ } |
+ |
+ // Edge case: 1.0. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 1.00 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, 1); |
+ } |
+ |
+ // Edge case: values between 0.0 and 1.0 are allowed. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 0.42 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, 0.42); |
+ } |
+ |
+ // 0 is an invalid value. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 0.0 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
+ } |
+ |
+ // Negative values are invalid. |
+ { |
+ Manifest manifest = |
+ ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": -2.5 } ] }"); |
+ EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
+ } |
+} |
+ |
} // namespace content |