@@ -1212,40 +1212,80 @@ public void calcCalc() throws Exception {
12121212
12131213 @ Test
12141214 public void calcExpressions () throws Exception {
1215- calc ( "#c { top: calc() }" , 1 , 0 , 0 );
1215+ expression ( "h1 { top: calc() }" , 1 , 0 , 0 );
12161216
1217- calc ( "#c { top: calc(14px) }" );
1217+ expression ( "h1 { top: calc(14px) }" );
12181218
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) }" );
12231223
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) }" );
12261226
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) }" );
12291229
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)) }" );
12341234
1235- calc ( "#c { top: calc(1px / calc(1 + 2) * (7em * 3)) }" );
1235+ expression ( "h1 { top: calc(1px / calc(1 + 2) * (7em * 3)) }" );
12361236
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) }" );
12421242 }
12431243
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 );
12461274 }
12471275
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 {
12491289 final CSSStyleSheetImpl sheet = parse (cssText , err , fatal , warn );
12501290
12511291 if (err == 0 ) {
@@ -1254,7 +1294,7 @@ private void calc(String cssText, final int err, final int fatal, final int warn
12541294 Assert .assertEquals (1 , rules .getLength ());
12551295
12561296 final CSSStyleRuleImpl rule = (CSSStyleRuleImpl ) rules .getRules ().get (0 );
1257- Assert .assertEquals ("*" + cssText , rule .getCssText ());
1297+ Assert .assertEquals (expected , rule .getCssText ());
12581298 }
12591299 }
12601300
@@ -1488,13 +1528,13 @@ public void malformedDeclaration() throws Exception {
14881528 + "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
14891529 + "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
14901530 + "<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:\" .)"
14921532 + " Error in expression. (Invalid token \" ;\" . Was expecting one of: <S>, <NUMBER>, \" inherit\" , "
14931533 + "<IDENT>, <STRING>, \" -\" , <PLUS>, <HASH>, <EMS>, <REM>, <EXS>, "
14941534 + "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
14951535 + "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
14961536 + "<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:\" .)"
14981538 + " Error in declaration. (Invalid token \" {\" . Was expecting one of: <S>, \" :\" .)"
14991539 + " Error in style rule. (Invalid token \" \" . Was expecting one of: <EOF>, \" }\" , \" ;\" .)"
15001540 + " Error in declaration. (Invalid token \" {\" . Was expecting one of: <S>, \" :\" .)" ;
@@ -1740,7 +1780,7 @@ public void unexpectedEndOfPageRule() throws Exception {
17401780
17411781 Assert .assertEquals (1 , errorHandler .getErrorCount ());
17421782 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> .)" ;
17441784 Assert .assertEquals (expected , errorHandler .getErrorMessage ());
17451785 Assert .assertEquals ("1" , errorHandler .getErrorLines ());
17461786 Assert .assertEquals ("39" , errorHandler .getErrorColumns ());
@@ -1789,7 +1829,7 @@ public void unexpectedEndOfString() throws Exception {
17891829 + "<LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, "
17901830 + "<LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, "
17911831 + "<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:\" .)" ;
17931833 Assert .assertEquals (expected , errorHandler .getErrorMessage ());
17941834 Assert .assertEquals ("3" , errorHandler .getErrorLines ());
17951835 Assert .assertEquals ("16" , errorHandler .getErrorColumns ());
@@ -3597,8 +3637,8 @@ public void realWorldBootstrap400() throws Exception {
35973637 + "all and (min-width: 768px);"
35983638 + "all and (min-width: 992px);"
35993639 + "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 );
36023642 }
36033643
36043644 /**
0 commit comments