@@ -103,8 +103,7 @@ describe("CSSLanguage", () => {
103103 } , / E x p e c t e d a n o b j e c t v a l u e f o r ' c u s t o m S y n t a x ' o p t i o n / u) ;
104104 } ) ;
105105
106- // https://github.com/csstree/csstree/issues/301
107- it . skip ( "should return an error when EOF is discovered before block close" , ( ) => {
106+ it ( "should return an error when EOF is discovered before block close" , ( ) => {
108107 const language = new CSSLanguage ( ) ;
109108 const result = language . parse ( {
110109 body : "a {" ,
@@ -114,7 +113,123 @@ describe("CSSLanguage", () => {
114113 assert . strictEqual ( result . ok , false ) ;
115114 assert . strictEqual ( result . ast , undefined ) ;
116115 assert . strictEqual ( result . errors . length , 1 ) ;
117- assert . strictEqual ( result . errors [ 0 ] . message , "Colon is expected" ) ;
116+ assert . strictEqual ( result . errors [ 0 ] . message , "Missing closing }" ) ;
117+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
118+ assert . strictEqual ( result . errors [ 0 ] . column , 3 ) ;
119+ assert . strictEqual ( result . errors [ 0 ] . offset , 2 ) ;
120+ } ) ;
121+
122+ it ( "should return an error when a CSS bad string is found" , ( ) => {
123+ const language = new CSSLanguage ( ) ;
124+ const result = language . parse ( {
125+ body : "a { content: 'this\nstring is not properly closed' }" ,
126+ path : "test.css" ,
127+ } ) ;
128+
129+ assert . strictEqual ( result . ok , false ) ;
130+ assert . strictEqual ( result . ast , undefined ) ;
131+ assert . strictEqual ( result . errors . length , 2 ) ;
132+ assert . strictEqual ( result . errors [ 0 ] . message , "Missing closing }" ) ;
133+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
134+ assert . strictEqual ( result . errors [ 0 ] . column , 3 ) ;
135+ assert . strictEqual ( result . errors [ 0 ] . offset , 2 ) ;
136+ assert . strictEqual ( result . errors [ 1 ] . message , "Unexpected input" ) ;
137+ assert . strictEqual ( result . errors [ 1 ] . line , 1 ) ;
138+ assert . strictEqual ( result . errors [ 1 ] . column , 14 ) ;
139+ assert . strictEqual ( result . errors [ 1 ] . offset , 13 ) ;
140+ } ) ;
141+
142+ it ( "should return an error when a CSS bad URL is found" , ( ) => {
143+ const language = new CSSLanguage ( ) ;
144+ const result = language . parse ( {
145+ body : "a { background: url(foo bar.png) }" ,
146+ path : "test.css" ,
147+ } ) ;
148+
149+ assert . strictEqual ( result . ok , false ) ;
150+ assert . strictEqual ( result . ast , undefined ) ;
151+ assert . strictEqual ( result . errors . length , 1 ) ;
152+ assert . strictEqual ( result . errors [ 0 ] . message , "Unexpected input" ) ;
153+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
154+ assert . strictEqual ( result . errors [ 0 ] . column , 17 ) ;
155+ assert . strictEqual ( result . errors [ 0 ] . offset , 16 ) ;
156+ } ) ;
157+
158+ it ( "should return an error when braces are unclosed" , ( ) => {
159+ const language = new CSSLanguage ( ) ;
160+ const result = language . parse ( {
161+ body : "a { color: red;" ,
162+ path : "test.css" ,
163+ } ) ;
164+
165+ assert . strictEqual ( result . ok , false ) ;
166+ assert . strictEqual ( result . ast , undefined ) ;
167+ assert . strictEqual ( result . errors . length , 1 ) ;
168+ assert . strictEqual ( result . errors [ 0 ] . message , "Missing closing }" ) ;
169+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
170+ assert . strictEqual ( result . errors [ 0 ] . column , 3 ) ;
171+ assert . strictEqual ( result . errors [ 0 ] . offset , 2 ) ;
172+ } ) ;
173+
174+ it ( "should return an error when square brackets are unclosed" , ( ) => {
175+ const language = new CSSLanguage ( ) ;
176+ const result = language . parse ( {
177+ body : "a[foo { color: red; }" ,
178+ path : "test.css" ,
179+ } ) ;
180+
181+ assert . strictEqual ( result . ok , false ) ;
182+ assert . strictEqual ( result . ast , undefined ) ;
183+ assert . strictEqual ( result . errors . length , 3 ) ; // other errors caused by the first one
184+ assert . strictEqual ( result . errors [ 0 ] . message , "Missing closing ]" ) ;
185+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
186+ assert . strictEqual ( result . errors [ 0 ] . column , 2 ) ;
187+ assert . strictEqual ( result . errors [ 0 ] . offset , 1 ) ;
188+ } ) ;
189+
190+ it ( "should return an error when parentheses are unclosed" , ( ) => {
191+ const language = new CSSLanguage ( ) ;
192+ const result = language . parse ( {
193+ body : "@supports (color: red {}" ,
194+ path : "test.css" ,
195+ } ) ;
196+
197+ assert . strictEqual ( result . ok , false ) ;
198+ assert . strictEqual ( result . ast , undefined ) ;
199+ assert . strictEqual ( result . errors . length , 2 ) ; // other errors caused by the first one
200+ assert . strictEqual ( result . errors [ 0 ] . message , "Missing closing )" ) ;
201+ assert . strictEqual ( result . errors [ 0 ] . line , 1 ) ;
202+ assert . strictEqual ( result . errors [ 0 ] . column , 11 ) ;
203+ assert . strictEqual ( result . errors [ 0 ] . offset , 10 ) ;
204+ } ) ;
205+
206+ it ( "should return an error when function parentheses is unclosed" , ( ) => {
207+ const language = new CSSLanguage ( ) ;
208+ const result = language . parse ( {
209+ body : "a { width: min(40%, 400px; }" ,
210+ path : "test.css" ,
211+ } ) ;
212+
213+ assert . strictEqual ( result . ok , false ) ;
214+ assert . strictEqual ( result . ast , undefined ) ;
215+ assert . strictEqual ( result . errors . length , 4 ) ; // other errors caused by the first one
216+ assert . strictEqual ( result . errors [ 1 ] . message , "Missing closing )" ) ;
217+ assert . strictEqual ( result . errors [ 1 ] . line , 1 ) ;
218+ assert . strictEqual ( result . errors [ 1 ] . column , 12 ) ;
219+ assert . strictEqual ( result . errors [ 1 ] . offset , 11 ) ;
220+ } ) ;
221+
222+ it ( "should not return an error when braces are unclosed and tolerant: true is used" , ( ) => {
223+ const language = new CSSLanguage ( ) ;
224+ const result = language . parse (
225+ {
226+ body : "a { color: red;" ,
227+ path : "test.css" ,
228+ } ,
229+ { languageOptions : { tolerant : true } } ,
230+ ) ;
231+
232+ assert . strictEqual ( result . ok , true ) ;
118233 } ) ;
119234 } ) ;
120235
0 commit comments