@@ -144,6 +144,82 @@ public static function provideCompileTests(): iterable
144144 } ' ,
145145 'expectedDependencies ' => ['images/foo.png ' ],
146146 ];
147+
148+ yield 'import_without_url_double_quotes ' => [
149+ 'input ' => '@import "more-styles.css" ' ,
150+ 'expectedOutput ' => '@import "more-styles.abcd123.css" ' ,
151+ 'expectedDependencies ' => ['more-styles.css ' ],
152+ ];
153+
154+ yield 'import_without_url_single_quotes ' => [
155+ 'input ' => "@import 'more-styles.css' " ,
156+ 'expectedOutput ' => '@import "more-styles.abcd123.css" ' ,
157+ 'expectedDependencies ' => ['more-styles.css ' ],
158+ ];
159+
160+ yield 'import_without_url_with_media_query ' => [
161+ 'input ' => '@import "more-styles.css" screen ' ,
162+ 'expectedOutput ' => '@import "more-styles.abcd123.css" screen ' ,
163+ 'expectedDependencies ' => ['more-styles.css ' ],
164+ ];
165+
166+ yield 'import_without_url_with_media_query_single_quotes ' => [
167+ 'input ' => "@import 'more-styles.css' screen and (max-width: 600px) " ,
168+ 'expectedOutput ' => '@import "more-styles.abcd123.css" screen and (max-width: 600px) ' ,
169+ 'expectedDependencies ' => ['more-styles.css ' ],
170+ ];
171+
172+ yield 'import_without_url_with_dot_slash ' => [
173+ 'input ' => '@import "./more-styles.css" ' ,
174+ 'expectedOutput ' => '@import "more-styles.abcd123.css" ' ,
175+ 'expectedDependencies ' => ['more-styles.css ' ],
176+ ];
177+
178+ yield 'import_without_url_with_dot_dot_slash ' => [
179+ 'input ' => '@import "../assets/more-styles.css" ' ,
180+ 'expectedOutput ' => '@import "more-styles.abcd123.css" ' ,
181+ 'expectedDependencies ' => ['more-styles.css ' ],
182+ ];
183+
184+ yield 'import_without_url_absolute_path_ignored ' => [
185+ 'input ' => '@import "/path/to/more-styles.css" ' ,
186+ 'expectedOutput ' => '@import "/path/to/more-styles.css" ' ,
187+ 'expectedDependencies ' => [],
188+ ];
189+
190+ yield 'import_without_url_http_url_ignored ' => [
191+ 'input ' => '@import "https://cdn.io/more-styles.css" ' ,
192+ 'expectedOutput ' => '@import "https://cdn.io/more-styles.css" ' ,
193+ 'expectedDependencies ' => [],
194+ ];
195+
196+ yield 'import_without_url_data_uri_ignored ' => [
197+ 'input ' => '@import "data:text/css;base64,LmJvZHkgeyBiYWNrZ3JvdW5kOiByZWQ7IH0=" ' ,
198+ 'expectedOutput ' => '@import "data:text/css;base64,LmJvZHkgeyBiYWNrZ3JvdW5kOiByZWQ7IH0=" ' ,
199+ 'expectedDependencies ' => [],
200+ ];
201+
202+ yield 'import_without_url_in_comments_ignored ' => [
203+ 'input ' => 'body { background: url("images/foo.png"); } /* @import "more-styles.css" */ ' ,
204+ 'expectedOutput ' => 'body { background: url("images/foo.123456.png"); } /* @import "more-styles.css" */ ' ,
205+ 'expectedDependencies ' => ['images/foo.png ' ],
206+ ];
207+
208+ yield 'mixed_url_and_import_without_url ' => [
209+ 'input ' => <<<EOF
210+ @import "more-styles.css";
211+ body { background: url("images/foo.png"); }
212+ @import url(./more-styles.css);
213+ EOF
214+ ,
215+ 'expectedOutput ' => <<<EOF
216+ @import "more-styles.abcd123.css";
217+ body { background: url("images/foo.123456.png"); }
218+ @import url("more-styles.abcd123.css");
219+ EOF
220+ ,
221+ 'expectedDependencies ' => ['more-styles.css ' , 'images/foo.png ' , 'more-styles.css ' ],
222+ ];
147223 }
148224
149225 public function testCompileFindsRelativeFilesViaSourcePath ()
@@ -223,5 +299,23 @@ public static function provideStrictModeTests(): iterable
223299 'input ' => "background-image: url(\'data:image/png;base64,iVBORw0KG\') " ,
224300 'expectedExceptionMessage ' => null ,
225301 ];
302+
303+ yield 'importing_non_existent_file_without_url_throws_exception ' => [
304+ 'sourceLogicalName ' => 'styles.css ' ,
305+ 'input ' => '@import "non-existent.css" ' ,
306+ 'expectedExceptionMessage ' => 'Unable to find asset "non-existent.css" referenced in "/path/to/styles.css". ' ,
307+ ];
308+
309+ yield 'importing_absolute_file_path_without_url_is_ignored ' => [
310+ 'sourceLogicalName ' => 'styles.css ' ,
311+ 'input ' => '@import "/path/to/non-existent.css" ' ,
312+ 'expectedExceptionMessage ' => null ,
313+ ];
314+
315+ yield 'importing_a_url_without_url_is_ignored ' => [
316+ 'sourceLogicalName ' => 'styles.css ' ,
317+ 'input ' => '@import "https://cdn.io/non-existent.css" ' ,
318+ 'expectedExceptionMessage ' => null ,
319+ ];
226320 }
227321}
0 commit comments