- Two files: Test file + Reference file
- Test file uses the feature you're testing
- Reference file is an exact visual match without using the feature you're testing
- Self-describing (works both manually and with automation)
- Cross-browser & cross-platform
Basic test for the transform property described in the CSS3 Transforms spec using the translate()
function
Spec Links:
http://www.w3.org/TR/css3-transforms/#transform-property
http://www.w3.org/TR/css3-transforms/#two-d-transform-functions
Test file
<!DOCTYPE html>
<html>
<head>
<title>CSS Transforms Test: transform property with translate function</title>
. . .
Reference file
<!DOCTYPE html>
<html>
<head>
<title>CSS Transforms Reference file</title>
. . .
Test file
<!DOCTYPE html>
<html>
<head>
. . .
<link rel="author" title="Your Name" href="mailto:youremail@address.com">
. . .
Reference file
<!DOCTYPE html>
<html>
<head>
. . .
<link rel="author" title="Your Name" href="mailto:youremail@address.com">
. . .
Test file only
<!DOCTYPE html>
<html>
<head>
. . .
<link rel="help" href="http://www.w3.org/TR/css3-transforms/#transform-property">
<link rel="help" href="http://www.w3.org/TR/css3-transforms/#two-d-transform-functions">
. . .
Test file only
<!DOCTYPE html>
<html>
<head>
. . .
<link rel="match" href="reference/ttwf-reftest-tutorial-ref.html">
. . .
Test file only
<!DOCTYPE html>
<html>
<head>
. . .
<meta name="assert"
content="This transform moves the element by 100 pixels in both the X and Y directions.">
. . .
Test element with the transform applied
<style type="text/css">
.greenSquare {
position: absolute;
background: green;
top: 0;
left: 0;
width: 100px;
height: 100px;
transform: translate(100px,100px);
}
. . .
</style>
Reference element
<style type="text/css">
.greenSquare {
position: absolute;
background: green;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
}
</style>
Element is only visible when the test fails
<style type="text/css">
. . .
.redSquare {
position: absolute;
background: red;
top: 101px;
left: 101px;
width: 98px;
height: 98px;
}
</style>
Failing test example
Simple statement of how the page renders when the test passes
Test file & Reference file
<body>
<p>The test passes if there is a green square and no red.</p>
. . .
</body>
Test file
<body>
. . .
<div class="redSquare"></div>
<div class="greenSquare"></div>
</body>
Reference file
<body>
. . .
<div class="greenSquare"></div>
</body>
- You may need to add a vendor prefix to the CSS property you're testing
- If the prefix is necessary, your test will appear to fail without it
- However, do not include vendor prefixes when pushing tests to the W3C
.greenSquare {
position: absolute;
background: green;
top: 0;
left: 0;
width: 100px;
height: 100px;
-webkit-transform: translate(100px,100px);
-moz-transform: translate(100px,100px);
-ms-transform: translate(100px,100px);
-o-transform: translate(100px,100px);
}
We recommend a script to use during test development:
http://leaverou.github.com/prefixfree
The prefixfree.jsapi.js extension can be used for unprefixed JS APIs tests:
https://github.com/LeaVerou/prefixfree/tree/gh-pages/plugins
. . .
<-- Remember to remove before pushing to W3C test suite -->
<script src="prefixfree.js"></script>
<script src="plugins/prefixfree.jsapi.js"></script>
. . .
testharness.js and testharnessreport.js
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
id="log"
should exist in test file
test(test_function, name, properties)
async_test()
is also provided by testharness for asychronous testingtest()
test()
test(test_function, name, properties)
test_function
must be an object, not a function calltest_function
will typically be one of the assert methods supplied by testharness
test(function() {assert_true(true)}, name, properties)
test(test_function, name, properties)
name
is a string that identifies the testname
should be short, unique, and must not changename
will be displayed in the test results table
test(function() {assert_true(true)}, "test_name", properties)
test(test_function, name, properties)
properties
is an object that overrides defaultstimeout
and metadata
test(function() { assert_true(true) }, "test_name",
{timeout:1000,
help: 'http://www.w3.org/TR/spec#section',
author: ['Bill Gates <bgates@msn.com>', 'Steve Jobs http://apple.com/sjobs'],
assert: 'This test something.', 'This also tests something else.'})
test_function
for test()
description
argument that is only output if the assertion fails
test()
assert_equals(actual, expected, description)
actual
: The actual value from the functionality being testedexpected
: The expected valuedescription
(optional): Output only if the assertion fails
assert_equals(getActualData("myElement"), 100, "Expected value for myElement is 100")
API test for the transform property described in the CSS3 Transforms spec using the translate()
function
Spec Links:
http://www.w3.org/TR/css3-transforms/#transform-property
http://www.w3.org/TR/css3-transforms/#two-d-transform-functions
<head>
<title>CSS Transforms API Test: transform translate</title>
<link rel="author" title="Your Name" href="mailto:youremail@address.com">
<link rel="help" href="http://www.w3.org/TR/css3-transforms/#transform-property">
<link rel="help"
href="http://www.w3.org/TR/css3-transforms/#two-d-transform-functions">
<meta name="flags" content="dom">
<meta name="assert" content="The transform should be translate(100px,100px)">
...
</head>
dom
token in flags
metadata specifies that JavaScript is required
<head>
...
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
/resources
directory at root level
<body>
<div id="myDiv"></div>
<div id="log"></div>
<script>
// Set the transform
document.getElementById("myDiv").style.transform = "translate(100px,100px)";
// Verify that the transform was set as expected
test(function() {assert_equals(
document.getElementById("myDiv").style.getPropertyCSSValue("transform").cssText, //Actual
"translate(100px, 100px)", //Expected
"transform should be translate(100px,100px)")}, //Description
"Transform_Translate_100px_100px"); //name
</script>
</body>
myDiv
div used as test element - translate applied in JSlog
div used as container for test resultstest()
uses assert_equals
as test_function
PASS
FAIL