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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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));
        }
Esempio n. 13
0
        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
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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));
        }
Esempio n. 19
0
        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]);
        }
Esempio n. 20
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]);
        }
Esempio n. 21
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]);
        }
Esempio n. 22
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]);
        }
Esempio n. 23
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]);
        }
Esempio n. 24
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]);
        }