| import { |
| testElement, |
| writingModes, |
| testCSSValues, |
| testComputedValues, |
| makeDeclaration |
| } from "./test-shared.js"; |
| |
| /** |
| * Tests flow-relative values for a CSS property in different writing modes. |
| * |
| * @param {string} property |
| * The CSS property to be tested. |
| * @param {string[]} values |
| * An array with the flow-relative values to be tested. |
| */ |
| export function runTests(property, values) { |
| for (const value of values) { |
| test(function() { |
| const {style} = testElement; |
| style.cssText = ""; |
| style.setProperty(property, value); |
| testCSSValues("logical values in inline style", style, [[property, value]]); |
| }, `Test that '${property}: ${value}' is supported.`); |
| |
| const camelCase = value.replace(/-(.)/g, (match, $1) => $1.toUpperCase()); |
| for (const writingMode of writingModes) { |
| for (const style of writingMode.styles) { |
| const writingModeDecl = makeDeclaration(style); |
| test(function() { |
| const physicalSide = writingMode[camelCase]; |
| let expected; |
| if (physicalSide === writingMode.lineLeft) { |
| expected = "left"; |
| } else if (physicalSide === writingMode.lineRight) { |
| expected = "right"; |
| } else { |
| expected = physicalSide; |
| } |
| testComputedValues(`computed value`, |
| `.test { ${writingModeDecl} }`, |
| [[property, expected]]); |
| }, `Test '${property}: ${value}' with '${writingModeDecl}'.`); |
| } |
| } |
| } |
| } |