blob: f9b62b2431c0b20a0edd79761776785966c803c9 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../../resources/js-test-pre.js"></script>
<div id="testDiv"></div>
<script>
description("Tests that using angle, time and frequency units in calc() is working as intended.");
var testDiv = document.getElementById("testDiv");
// Angle units.
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(300deg/2))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(150deg))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(150deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(300rad/2))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(150rad))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(8594.366926962348deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(300grad/2))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(150grad))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(135deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(3turn/2))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(1.5turn))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(540deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(1turn + 10deg))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(370deg))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(370deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(300deg + 30deg))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(330deg))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(330deg)");
evalAndLog("testDiv.style['-webkit-filter'] = 'hue-rotate(calc(2turn + 1turn))'");
shouldBeEqualToString("testDiv.style['-webkit-filter']", "hue-rotate(calc(3turn))");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('-webkit-filter')", "hue-rotate(1080deg)");
// Time units.
evalAndLog("testDiv.style['transition-delay'] = 'calc(300ms/2)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(150ms)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "0.15s");
evalAndLog("testDiv.style['transition-delay'] = 'calc(300s/2)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(150s)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "150s");
evalAndLog("testDiv.style['transition-delay'] = 'calc(10s + 100ms)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(10100ms)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "10.1s");
evalAndLog("testDiv.style['transition-delay'] = 'calc(100ms + 10s)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(10100ms)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "10.1s");
evalAndLog("testDiv.style['transition-delay'] = 'calc(4s + 1s)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(5s)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "5s");
evalAndLog("testDiv.style['transition-delay'] = 'calc(4ms + 1ms)'");
shouldBeEqualToString("testDiv.style['transition-delay']", "calc(5ms)");
shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('transition-delay')", "0.005s");
// Frequency units.
// NOTE: Since there is no CSS property that uses frequency at the moment we only test the parsing.
evalAndLog("testDiv.style['width'] = 'calc(300Hz/2)'");
shouldBeEqualToString("testDiv.style['width']", "");
evalAndLog("testDiv.style['width'] = 'calc(300kHz/2)'");
shouldBeEqualToString("testDiv.style['width']", "");
evalAndLog("testDiv.style['width'] = 'calc(10Hz + 20Hz)'");
shouldBeEqualToString("testDiv.style['width']", "");
evalAndLog("testDiv.style['width'] = 'calc(10kHz + 20kHz)'");
shouldBeEqualToString("testDiv.style['width']", "");
evalAndLog("testDiv.style['width'] = 'calc(10kHz + 200Hz)'");
shouldBeEqualToString("testDiv.style['width']", "");
evalAndLog("testDiv.style['width'] = 'calc(200Hz + 10kHz)'");
shouldBeEqualToString("testDiv.style['width']", "");
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>