1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "gtest/gtest.h"
8 #include "mozilla/ImportScanner.h"
9 
10 using namespace mozilla;
11 
Scan(const char * aCssCode)12 static nsTArray<nsString> Scan(const char* aCssCode) {
13   nsTArray<nsString> urls;
14   ImportScanner scanner;
15   scanner.Start();
16   urls.AppendElements(scanner.Scan(NS_ConvertUTF8toUTF16(aCssCode)));
17   urls.AppendElements(scanner.Stop());
18   return urls;
19 }
20 
TEST(ImportScanner,Simple)21 TEST(ImportScanner, Simple)
22 {
23   auto urls = Scan(
24       "/* Something something */ "
25       "@charset \"utf-8\";"
26       "@import url(bar);"
27       "@import uRL( baz );"
28       "@import \"bazz)\"");
29 
30   ASSERT_EQ(urls.Length(), 3u);
31   ASSERT_EQ(urls[0], u"bar"_ns);
32   ASSERT_EQ(urls[1], u"baz"_ns);
33   ASSERT_EQ(urls[2], u"bazz)"_ns);
34 }
35 
TEST(ImportScanner,UrlWithQuotes)36 TEST(ImportScanner, UrlWithQuotes)
37 {
38   auto urls = Scan(
39       "/* Something something */ "
40       "@import url(\"bar\");"
41       "@import\tuRL( \"baz\" );"
42       "@imPort\turL( 'bazz' );"
43       "something else {}"
44       "@import\turL( 'bazz' ); ");
45 
46   ASSERT_EQ(urls.Length(), 3u);
47   ASSERT_EQ(urls[0], u"bar"_ns);
48   ASSERT_EQ(urls[1], u"baz"_ns);
49   ASSERT_EQ(urls[2], u"bazz"_ns);
50 }
51 
TEST(ImportScanner,MediaIsIgnored)52 TEST(ImportScanner, MediaIsIgnored)
53 {
54   auto urls = Scan(
55       "@chArset \"utf-8\";"
56       "@import url(\"bar\") print;"
57       "/* Something something */ "
58       "@import\tuRL( \"baz\" ) (min-width: 100px);"
59       "@import\turL( bazz ) (max-width: 100px);");
60 
61   ASSERT_EQ(urls.Length(), 3u);
62   ASSERT_EQ(urls[0], u"bar"_ns);
63   ASSERT_EQ(urls[1], u"baz"_ns);
64   ASSERT_EQ(urls[2], u"bazz"_ns);
65 }
66 
TEST(ImportScanner,Layers)67 TEST(ImportScanner, Layers)
68 {
69   auto urls = Scan(
70       "@layer foo, bar;\n"
71       "@import url(\"bar\") layer(foo);"
72       "@import url(\"baz\");"
73       "@import url(bazz);"
74       "@layer block {}"
75       // This one below is invalid now and shouldn't be scanned.
76       "@import\turL( 'bazzz' ); ");
77 
78   ASSERT_EQ(urls.Length(), 3u);
79   ASSERT_EQ(urls[0], u"bar"_ns);
80   ASSERT_EQ(urls[1], u"baz"_ns);
81   ASSERT_EQ(urls[2], u"bazz"_ns);
82 }
83