@@ -1212,40 +1212,80 @@ public void calcCalc() throws Exception {
1212
1212
1213
1213
@ Test
1214
1214
public void calcExpressions () throws Exception {
1215
- calc ( "#c { top: calc() }" , 1 , 0 , 0 );
1215
+ expression ( "h1 { top: calc() }" , 1 , 0 , 0 );
1216
1216
1217
- calc ( "#c { top: calc(14px) }" );
1217
+ expression ( "h1 { top: calc(14px) }" );
1218
1218
1219
- calc ( "#c { top: calc(0.875em + 0.1875em) }" );
1220
- calc ( "#c { top: calc(0.875em + -0.1875em) }" );
1221
- calc ( "#c { top: calc(-0.875em + 0.1875em) }" );
1222
- calc ( "#c { top: calc(0.875em - -0.1875em) }" );
1219
+ expression ( "h1 { top: calc(0.875em + 0.1875em) }" );
1220
+ expression ( "h1 { top: calc(0.875em + -0.1875em) }" );
1221
+ expression ( "h1 { top: calc(-0.875em + 0.1875em) }" );
1222
+ expression ( "h1 { top: calc(0.875em - -0.1875em) }" );
1223
1223
1224
- calc ( "#c { top: calc(1px + 2px) }" );
1225
- calc ( "#c { top: calc(((1px + 2px) + 3px) + 4px) }" );
1224
+ expression ( "h1 { top: calc(1px + 2px) }" );
1225
+ expression ( "h1 { top: calc(((1px + 2px) + 3px) + 4px) }" );
1226
1226
1227
- calc ( "#c { top: calc(1px * 2px) }" );
1228
- calc ( "#c { top: calc(((1px * 2px) * 3px) * 4px) }" );
1227
+ expression ( "h1 { top: calc(1px * 2px) }" );
1228
+ expression ( "h1 { top: calc(((1px * 2px) * 3px) * 4px) }" );
1229
1229
1230
- calc ( "#c { top: calc(1px / 2px) }" , 1 , 0 , 0 );
1231
- calc ( "#c { top: calc(1px / (1 + 2px)) }" , 1 , 0 , 0 );
1232
- calc ( "#c { top: calc(1px / (1px + 2)) }" , 1 , 0 , 0 );
1233
- calc ( "#c { top: calc(1px / (1 + 2)) }" );
1230
+ expression ( "h1 { top: calc(1px / 2px) }" , 1 , 0 , 0 );
1231
+ expression ( "h1 { top: calc(1px / (1 + 2px)) }" , 1 , 0 , 0 );
1232
+ expression ( "h1 { top: calc(1px / (1px + 2)) }" , 1 , 0 , 0 );
1233
+ expression ( "h1 { top: calc(1px / (1 + 2)) }" );
1234
1234
1235
- calc ( "#c { top: calc(1px / calc(1 + 2) * (7em * 3)) }" );
1235
+ expression ( "h1 { top: calc(1px / calc(1 + 2) * (7em * 3)) }" );
1236
1236
1237
- calc ( "#c { top: calc(14) }" );
1238
- calc ( "#c { top: calc(14; }" , 1 , 0 , 0 );
1239
- calc ( "#c { top: calc(14 + (7)) }" );
1240
- calc ( "#c { top: calc(14 + (7); }" , 1 , 0 , 0 );
1241
- calc ( "#c { top: calc(14 + (7 + 3) - 1) }" );
1237
+ expression ( "h1 { top: calc(14) }" );
1238
+ expression ( "h1 { top: calc(14; }" , 1 , 0 , 0 );
1239
+ expression ( "h1 { top: calc(14 + (7)) }" );
1240
+ expression ( "h1 { top: calc(14 + (7); }" , 1 , 0 , 0 );
1241
+ expression ( "h1 { top: calc(14 + (7 + 3) - 1) }" );
1242
1242
}
1243
1243
1244
- private void calc (String cssText ) throws Exception {
1245
- calc (cssText , 0 , 0 , 0 );
1244
+ public void varExpressions () throws Exception {
1245
+ // test cases for successful parsing
1246
+ expression ("#v { --my-var: 3 }" );
1247
+ expression ("#v { --my-var: 2px }" );
1248
+ expression ("#v { --my-var: 10pt }" );
1249
+ expression ("#v { --my-var: 11% }" );
1250
+ expression ("#v { --my-var: rgb(255, 255, 255) }" );
1251
+ expression ("#v { --my-var: rgba(255, 255, 255, 0) }" );
1252
+ expression ("#v { --my-var: var(--test) }" );
1253
+ expression ("#v { --my-var: \" test\" }" );
1254
+ expression ("#v { --my-var: 3 }" );
1255
+ expression ("#v { --my-var: 3; top: var(--my-var, 10) }" );
1256
+ expression ("#v { --my-var: -2; top: var(--my-var, 10) }" );
1257
+ expression ("#v { --my-var: -2; top: var(--my-var, 10, 11) }" );
1258
+ expression ("#v { --my-var: -2; top: var(--my-var, 10, 11, 12, \" test\" ) }" );
1259
+ expression ("#v { --my-var: -2; top: var(--my-var, 10, 11, 12, rgb(12, 24, 35)) }" );
1260
+
1261
+ // special test cases with different expected result
1262
+ expression ("#v { --my-var: +11; top: var(--my-var, 10) }" ,
1263
+ "#v { --my-var: 11; top: var(--my-var, 10) }" );
1264
+ expression ("#v { --my-var: -2; top: var(--my-var, 10, 11, 12, 'test') }" ,
1265
+ "#v { --my-var: -2; top: var(--my-var, 10, 11, 12, \" test\" ) }" );
1266
+ expression ("#v { --my-var: 'test' }" ,
1267
+ "#v { --my-var: \" test\" }" );
1268
+
1269
+ // test cases for unsuccessful parsing
1270
+ expression ("#v { --my-var: var(test) }" , 1 , 0 , 0 );
1271
+ expression ("#v { --my-var: var() }" , 1 , 0 , 0 );
1272
+ expression ("#v { --my-var: var(-test) }" , 1 , 0 , 0 );
1273
+ expression ("#v { --my-var: var(---test) }" , 1 , 0 , 0 );
1246
1274
}
1247
1275
1248
- private void calc (String cssText , final int err , final int fatal , final int warn ) throws Exception {
1276
+ private void expression (String cssText ) throws Exception {
1277
+ expression (cssText , 0 , 0 , 0 , cssText );
1278
+ }
1279
+
1280
+ private void expression (String cssText , String expected ) throws Exception {
1281
+ expression (cssText , 0 , 0 , 0 , expected );
1282
+ }
1283
+
1284
+ private void expression (String cssText , final int err , final int fatal , final int warn ) throws Exception {
1285
+ expression (cssText , err , fatal , warn , cssText );
1286
+ }
1287
+
1288
+ private void expression (String cssText , final int err , final int fatal , final int warn , String expected ) throws Exception {
1249
1289
final CSSStyleSheetImpl sheet = parse (cssText , err , fatal , warn );
1250
1290
1251
1291
if (err == 0 ) {
@@ -1254,7 +1294,7 @@ private void calc(String cssText, final int err, final int fatal, final int warn
1254
1294
Assert .assertEquals (1 , rules .getLength ());
1255
1295
1256
1296
final CSSStyleRuleImpl rule = (CSSStyleRuleImpl ) rules .getRules ().get (0 );
1257
- Assert .assertEquals ("*" + cssText , rule .getCssText ());
1297
+ Assert .assertEquals (expected , rule .getCssText ());
1258
1298
}
1259
1299
}
1260
1300
@@ -1488,13 +1528,13 @@ public void malformedDeclaration() throws Exception {
1488
1528
+ "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
1489
1529
+ "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
1490
1530
+ "<TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, "
1491
- + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION>, \" progid:\" .)"
1531
+ + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION_VAR>, < FUNCTION>, \" progid:\" .)"
1492
1532
+ " Error in expression. (Invalid token \" ;\" . Was expecting one of: <S>, <NUMBER>, \" inherit\" , "
1493
1533
+ "<IDENT>, <STRING>, \" -\" , <PLUS>, <HASH>, <EMS>, <REM>, <EXS>, "
1494
1534
+ "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
1495
1535
+ "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
1496
1536
+ "<TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, "
1497
- + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION>, \" progid:\" .)"
1537
+ + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION_VAR>, < FUNCTION>, \" progid:\" .)"
1498
1538
+ " Error in declaration. (Invalid token \" {\" . Was expecting one of: <S>, \" :\" .)"
1499
1539
+ " Error in style rule. (Invalid token \" \" . Was expecting one of: <EOF>, \" }\" , \" ;\" .)"
1500
1540
+ " Error in declaration. (Invalid token \" {\" . Was expecting one of: <S>, \" :\" .)" ;
@@ -1740,7 +1780,7 @@ public void unexpectedEndOfPageRule() throws Exception {
1740
1780
1741
1781
Assert .assertEquals (1 , errorHandler .getErrorCount ());
1742
1782
final String expected = "Error in @page rule. "
1743
- + "(Invalid token \" <EOF>\" . Was expecting one of: <S>, <IDENT>, \" }\" , \" ;\" , \" *\" .)" ;
1783
+ + "(Invalid token \" <EOF>\" . Was expecting one of: <S>, <IDENT>, \" }\" , \" ;\" , \" *\" , <CUSTOM_PROPERTY_NAME> .)" ;
1744
1784
Assert .assertEquals (expected , errorHandler .getErrorMessage ());
1745
1785
Assert .assertEquals ("1" , errorHandler .getErrorLines ());
1746
1786
Assert .assertEquals ("39" , errorHandler .getErrorColumns ());
@@ -1789,7 +1829,7 @@ public void unexpectedEndOfString() throws Exception {
1789
1829
+ "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
1790
1830
+ "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
1791
1831
+ "<TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, "
1792
- + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION>, \" progid:\" .)" ;
1832
+ + "<DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION_CALC>, <FUNCTION_VAR>, < FUNCTION>, \" progid:\" .)" ;
1793
1833
Assert .assertEquals (expected , errorHandler .getErrorMessage ());
1794
1834
Assert .assertEquals ("3" , errorHandler .getErrorLines ());
1795
1835
Assert .assertEquals ("16" , errorHandler .getErrorColumns ());
@@ -3597,8 +3637,8 @@ public void realWorldBootstrap400() throws Exception {
3597
3637
+ "all and (min-width: 768px);"
3598
3638
+ "all and (min-width: 992px);"
3599
3639
+ "print;" ;
3600
- realWorld ("realworld/bootstrap_4_0_0.css" , 1033 , 2442 , media , 1 , 1 );
3601
- realWorld ("realworld/bootstrap_4_0_0_min.css" , 1033 , 2442 , media , 1 , 1 );
3640
+ realWorld ("realworld/bootstrap_4_0_0.css" , 1033 , 2470 , media , 0 , 0 );
3641
+ realWorld ("realworld/bootstrap_4_0_0_min.css" , 1033 , 2470 , media , 0 , 0 );
3602
3642
}
3603
3643
3604
3644
/**
0 commit comments