|  | <!DOCTYPE html> | 
|  | <html> | 
|  | <head> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-env-1/"> | 
|  | <title>Test env() and var() throw syntax errors if used with invalid functions</title> | 
|  | <script src="../resources/testharness.js"></script> | 
|  | <script src="../resources/testharnessreport.js"></script> | 
|  | <style> | 
|  | div { | 
|  | --a: 0px; | 
|  | margin-left: 10px; | 
|  | } | 
|  | </style> | 
|  | </head> | 
|  | <body> | 
|  | <script> | 
|  | // This value is expected if the syntax is valid. | 
|  | const workingValue = "0px"; | 
|  |  | 
|  | // This value is expected if the syntax is invalid. | 
|  | const pageDefaultValue = "10px"; | 
|  |  | 
|  | // This value is expected if the calc() syntax is valid. | 
|  | const workingCalcValue = "20px"; | 
|  |  | 
|  | const testCases = [ | 
|  | { style: "", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: env(safe-area-inset-left)", expectedPropertyValue: workingValue }, | 
|  |  | 
|  | // min and max() are not supported. | 
|  | { style: "margin-left: min(env(safe-area-inset-left))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(safe-area-inset-left), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(safe-area-inset-left, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(safe-area-inset-left, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(test))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(test), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(test, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(env(test, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(safe-area-inset-left))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(safe-area-inset-left), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(safe-area-inset-left, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(safe-area-inset-left, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(test))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(test), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(test, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(env(test, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  |  | 
|  | // calc() should work. | 
|  | { style: "margin-left: calc(env(safe-area-inset-left) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(env(safe-area-inset-left, 0px) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(env(safe-area-inset-left, 0) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(env(test) + 20px)", expectedPropertyValue: "0px" }, | 
|  | { style: "margin-left: calc(env(test, 1px) + 20px)", expectedPropertyValue: "21px" }, | 
|  |  | 
|  | // min and max() are not supported. | 
|  | { style: "margin-left: min(var(--a))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--a), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--a, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--a, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--b))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--b), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--b, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: min(var(--b, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--a))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--a), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--a, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--a, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--b))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--b), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--b, 1px))", expectedPropertyValue: pageDefaultValue }, | 
|  | { style: "margin-left: max(var(--b, 1px), 1px)", expectedPropertyValue: pageDefaultValue }, | 
|  |  | 
|  | // calc() should work. | 
|  | { style: "margin-left: calc(var(--a) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(var(--a, 0px) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(var(--a, 0) + 20px)", expectedPropertyValue: workingCalcValue }, | 
|  | { style: "margin-left: calc(var(--b) + 20px)", expectedPropertyValue: "0px" }, | 
|  | { style: "margin-left: calc(var(--b, 1px) + 20px)", expectedPropertyValue: "21px" }, | 
|  | ]; | 
|  |  | 
|  | testCases.forEach((testcase) => { | 
|  | test(() => { | 
|  | const elem = document.createElement("div"); | 
|  | const style = window.getComputedStyle(elem); | 
|  |  | 
|  | document.body.appendChild(elem); | 
|  | elem.style.cssText = testcase.style; | 
|  |  | 
|  | assert_equals(style.getPropertyValue("margin-left"), testcase.expectedPropertyValue); | 
|  | }, testcase.style + " " + testcase.expectedPropertyValue); | 
|  | }); | 
|  | </script> | 
|  | </body> | 
|  | </html> |