public void Scan_AllResources_FindAll() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <meta rel='manifest' href='/manifest.json'> <meta name='msapplication-config' content='browserconfig.xml'> <link rel=icon href='favicon.png'> </head><body>Fake content.</body></html>"); source.AddTextResource(new Uri(uri, "/manifest.json"), @" {'icons': [ {'src': '/android-chrome-36x36.png', 'sizes': '36x36', 'type': 'image/png', 'density': 0.75}, {'src': '/android-chrome-48x48.png', 'sizes': '48x48', 'type': 'image/png', 'density': 1}, {'src': '/android-chrome-72x72.png', 'sizes': '72x72', 'type': 'image/png', 'density': 1.5}, {'src': '/android-chrome-96x96.png', 'sizes': '96x96', 'type': 'image/png', 'density': 2}, {'src': '/android-chrome-144x144.png', 'sizes': '144x144', 'type': 'image/png', 'density': 3}, {'src': '/android-chrome-192x192.png', 'sizes': '192x192', 'type': 'image/png', 'density': 4} ]}".Replace('\'', '"')); source.AddTextResource(new Uri(uri, "/browserconfig.xml"), @"<?xml version='1.0' encoding='utf-8'?> <browserconfig><msapplication><tile> <square70x70logo src='/mstile-70x70.png' /> <square150x150logo src='/mstile-150x150.png' /> <square310x310logo src='/mstile-310x310.png' /> <wide310x150logo src='/mstile-310x150.png' /> <TileColor>#29aaff</TileColor> </tile></msapplication></browserconfig>"); var scanner = new Scanner(source); var results = scanner.Scan(uri).ToArray(); Assert.AreEqual(12, results.Length); }
public void Start_ContainsInvalidUri_Skip() { var uri = new Uri("http://www.example.com/browserconfig.xml"); var source = new MockSource(); source.AddTextResource(uri, @" <?xml version='1.0' encoding='utf-8'?> <browserconfig> <msapplication> <tile> <square70x70logo src='///invalid.png' /> <square150x150logo src='/mstile-150x150.png' /> <square310x310logo src='/mstile-310x310.png' /> <wide310x150logo src='/mstile-310x150.png' /> <TileColor>#29aaff</TileColor> </tile> </msapplication> </browserconfig>"); var scanner = new BrowserconfigXmlScanner(source, uri); scanner.Start(); Assert.AreEqual(3, scanner.Results.Count); }
public void Results_LinkHasSizes_UseSizes() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='icon' href='favicons.ico' sizes='16x16 32x32'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicons.ico"), ExpectedSize = new Size(16, 16) }, scanner.Results[0]); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicons.ico"), ExpectedSize = new Size(32, 32) }, scanner.Results[1]); }
public void Fetcher_NoLinks_MakeTwoRequests() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, "Fake content."); var fetcher = new Fetcher(source); fetcher.FetchClosest(uri, new Size(16, 16)); Assert.AreEqual(2, source.RequestCount); }
public void Start_InvalidXml_Skip() { var uri = new Uri("http://www.example.com/browserconfig.xml"); var source = new MockSource(); source.AddTextResource(uri, @" <browserconfig>>"); var scanner = new BrowserconfigXmlScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); }
public void SuggestedScanners_HtmlEndsAtTag_SuggestFaviconIco() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, "<html><head><link"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); Assert.AreEqual(1, scanner.SuggestedScanners.Count); Assert.IsInstanceOfType(scanner.SuggestedScanners[0], typeof(FaviconIcoScanner)); }
public void Results_HtmlInCaps_ParseIt() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <HTML><HEAD> <link rel='SHORTCUT ICON' href='favicon.png'> </HEAD><BODY>Fake content.</BODY></HTML>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(1, scanner.Results.Count); }
public void Fetcher_NonexistentLink_MakeThreeRequests() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='shortcut icon' href='nonexistent.png'> </head></html>"); var fetcher = new Fetcher(source); fetcher.FetchClosest(uri, new Size(16, 16)); Assert.AreEqual(3, source.RequestCount); }
public void Fetcher_MultipleIconsInFile_UseBest() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, "Fake content."); source.AddImageResource(new Uri(uri, "/favicon.ico"), new Size(16, 16)); source.AddImageResource(new Uri(uri, "/favicon.ico"), new Size(32, 32)); source.AddImageResource(new Uri(uri, "/favicon.ico"), new Size(48, 48)); var fetcher = new Fetcher(source); var image = fetcher.FetchClosest(uri, new Size(32, 32)); Assert.AreEqual(2, source.RequestCount); Assert.AreEqual(new Size(32, 32), image.Size); }
public void Results_LinkInBody_Ignored() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><body> <link rel=icon href='favicon.png'> </body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); }
public void Results_MultipleLinks_FindAll() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='icon' href='favicon1.png'> <link rel='icon' href='favicon2.png'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(2, scanner.Results.Count); }
public void SuggestedScanners_BrowserconfigXmlLinked_SuggestIt() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <meta name='msapplication-config' content='browserconfig.xml'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); Assert.AreEqual(2, scanner.SuggestedScanners.Count); // plus FaviconIcoScanner Assert.IsInstanceOfType(scanner.SuggestedScanners[0], typeof(BrowserconfigXmlScanner)); }
public void SuggestedScanners_InvalidManifestJsonUri_Skip() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <meta rel='manifest' href='///manifest.json'> <link rel=icon href='favicon.ico'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(1, scanner.Results.Count); Assert.AreEqual(1, scanner.SuggestedScanners.Count); // just FaviconIcoScanner }
public void SuggestedScanners_ManifestJsonLinked_SuggestIt() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <meta rel='manifest' href='/manifest.json'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); Assert.AreEqual(2, scanner.SuggestedScanners.Count); // plus FaviconIcoScanner Assert.IsInstanceOfType(scanner.SuggestedScanners[0], typeof(ManifestJsonScanner)); }
public void SuggestedScanners_InvalidBrowserconfigXmlUri_Skip() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <meta name='msapplication-config' content='///browserconfig.xml'> <link rel=icon href='favicon.ico'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(1, scanner.Results.Count); Assert.AreEqual(1, scanner.SuggestedScanners.Count); // just FaviconIcoScanner }
public void Start_ContainsInvalidUri_Skip() { var uri = new Uri("http://www.example.com/manifest.json"); var source = new MockSource(); source.AddTextResource(uri, @" {'name': 'Favicon', 'icons': [ {'src': '///invalid.png', 'sizes': '36x36'}, {'src': '/android-chrome-48x48.png', 'sizes': '48x48'} ]}".Replace('\'', '"')); var scanner = new ManifestJsonScanner(source, uri); scanner.Start(); Assert.AreEqual(1, scanner.Results.Count); }
public void Fetcher_PerfectIsLastLink_MakeTwoRequests() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='shortcut icon' href='favicon_32.png' sizes='32x32'> <link rel='shortcut icon' href='favicon_16.png' sizes='16x16'> </head></html>"); source.AddImageResource(new Uri(uri, "/favicon_32.png"), new Size(32, 32)); source.AddImageResource(new Uri(uri, "/favicon_16.png"), new Size(16, 16)); var fetcher = new Fetcher(source); fetcher.FetchClosest(uri, new Size(16, 16)); Assert.AreEqual(2, source.RequestCount); }
public void SuggestedScanners_InvalidLinks_SuggestFaviconIco() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='icon' src='favicon1.png'> <link href='favicon1.png'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(0, scanner.Results.Count); Assert.AreEqual(1, scanner.SuggestedScanners.Count); Assert.IsInstanceOfType(scanner.SuggestedScanners[0], typeof(FaviconIcoScanner)); }
public void Results_SizedAppleLink_UseSpecifiedSize() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel=apple-touch-icon-precomposed href='apple_icon.png' sizes='48x48'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/apple_icon.png"), ExpectedSize = new Size(48, 48) }, scanner.Results[0]); }
public void Results_BigNumberInUri_Accepted() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel=icon href='icon_21474836470_48.png'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/icon_21474836470_48.png"), ExpectedSize = new Size(48, 48) }, scanner.Results[0]); }
public void Results_QuoteInUri_Accepted() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel=icon href=""favicon's.png""> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicon's.png"), ExpectedSize = new Size(16, 16) }, scanner.Results[0]); }
public void Results_LinkRelInCaps_FindIt() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel='SHORTCUT ICON' href='favicon.png'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicon.png"), ExpectedSize = new Size(16, 16) }, scanner.Results[0]); }
public void Results_SizeInNameAndAttribute_UseAttributeSize() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel=icon href='favicon_48x48.png' sizes='16x16'> </head><body>Fake content.</body></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicon_48x48.png"), ExpectedSize = new Size(16, 16) }, scanner.Results[0]); }
public void Results_InvalidUri_Skip() { var uri = new Uri("http://www.example.com"); var source = new MockSource(); source.AddTextResource(uri, @" <html><head> <link rel=icon href='///invalid'> <link rel=icon href='favicon.ico'> </head></html>"); var scanner = new DefaultScanner(source, uri); scanner.Start(); Assert.AreEqual(new ScanResult { Location = new Uri("http://www.example.com/favicon.ico"), ExpectedSize = new Size(16, 16) }, scanner.Results[0]); }