|  | <!DOCTYPE html> | 
|  | <title>Tests parsing of the anchor() function</title> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-anchor-1/#anchor-pos"> | 
|  | <link rel="author" href="mailto:xiaochengh@chromium.org"> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  | <script src="/css/support/parsing-testcommon.js"></script> | 
|  |  | 
|  | <script> | 
|  | const anchorNames = [ | 
|  | '', | 
|  | '--foo', | 
|  | ]; | 
|  |  | 
|  | const insetProperties = [ | 
|  | 'left', | 
|  | 'right', | 
|  | 'top', | 
|  | 'bottom', | 
|  | 'inset-block-start', | 
|  | 'inset-block-end', | 
|  | 'inset-inline-start', | 
|  | 'inset-inline-end', | 
|  | ]; | 
|  |  | 
|  | const anchorSides = [ | 
|  | 'inside', | 
|  | 'outside', | 
|  | 'left', | 
|  | 'right', | 
|  | 'top', | 
|  | 'bottom', | 
|  | 'start', | 
|  | 'end', | 
|  | 'self-start', | 
|  | 'self-end', | 
|  | 'center', | 
|  | '50%', | 
|  | 'calc(50%)', | 
|  | 'min(50%, 100%)', | 
|  | ]; | 
|  |  | 
|  | const fallbacks = [ | 
|  | null, | 
|  | '1px', | 
|  | '50%', | 
|  | 'calc(50% + 1px)', | 
|  | 'anchor(left)', | 
|  | 'anchor(--bar left)', | 
|  | 'anchor(--bar left, anchor(--baz right))', | 
|  | ]; | 
|  |  | 
|  | // Tests basic combinations | 
|  | for (let property of insetProperties) { | 
|  | // Using a wrong anchor-side (e.g., `top: anchor(--foo left)`) doesn't cause a | 
|  | // parse error, but triggers the fallback when resolved. | 
|  | for (let name of anchorNames) { | 
|  | for (let side of anchorSides) { | 
|  | for (let fallback of fallbacks) { | 
|  | let value = `anchor(${name ? name + ' ' : ''}${side}${fallback ? ', ' + fallback : ''})`; | 
|  | test_valid_value(property, value); | 
|  | if (name) { | 
|  | // The <anchor-element> is allowed to appear after the <anchor-side> | 
|  | let value_flip_order = `anchor(${side} ${name}${fallback ? ', ' + fallback : ''})`; | 
|  | test_valid_value(property, value_flip_order, value); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // Tests that anchor() can be used in a calc tree | 
|  | // Still follow the simplification process as outlined in https://drafts.csswg.org/css-values-4/#calc-simplification | 
|  | test_valid_value('top', 'calc((anchor(--foo top) + anchor(--bar bottom)) / 2)', 'calc(0.5 * (anchor(--foo top) + anchor(--bar bottom)))'); | 
|  | test_valid_value('top', 'calc(0.5 * (anchor(--foo top) + anchor(--bar bottom)))'); | 
|  | test_valid_value('top', 'anchor(--foo top, calc(0.5 * anchor(--bar bottom)))'); | 
|  | test_valid_value('top', 'min(100px, 10%, anchor(--foo top), anchor(--bar bottom))'); | 
|  | </script> |