summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/resources/examples/apisample.htm
blob: 504a343acdbbc87ea5ca21d785c51b0ba53b31df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<!DOCTYPE HTML>
<html>
<head>
<title>Sample HTML5 API Tests</title>
<meta name="timeout" content="6000">
</head>
<body onload="load_test_attr.done()">
<h1>Sample HTML5 API Tests</h1>
<div id="log"></div>
<script src="../testharness.js"></script>
<script src="../testharnessreport.js"></script>
<script>
    setup_run = false;
    setup(function() {
            setup_run = true;
          });
    test(function() {assert_true(setup_run)}, "Setup function ran");

    // Two examples for testing events from handler and attributes
    var load_test_event = async_test("window onload event fires when set from the handler");

    function windowLoad()
    {
        load_test_event.done();
    }
    on_event(window, "load", windowLoad);

    // see the body onload below
    var load_test_attr = async_test("body element fires the onload event set from the attribute");
</script>
<script>
    function bodyElement()
    {
        assert_equals(document.body, document.getElementsByTagName("body")[0]);
    }
    test(bodyElement, "document.body should be the first body element in the document");

    test(function() {
        assert_equals(1,1);
        assert_equals(NaN, NaN, "NaN case");
        assert_equals(0, 0, "Zero case");
    }, "assert_equals tests")

    test(function() {
        assert_equals(-0, 0, "Zero case");
    }, "assert_equals tests expected to fail")

    test(function() {
        assert_not_equals({}, {}, "object case");
        assert_not_equals(-0, 0, "Zero case");
    }, "assert_not_equals tests")

    function testAssertPass()
    {
        assert_true(true);
    }
    test(testAssertPass, "assert_true expected to pass");

    function testAssertFalse()
    {
        assert_true(false, "false should not be true");
    }
    test(testAssertFalse, "assert_true expected to fail");

    function basicAssertArrayEquals()
    {
        assert_array_equals([1, NaN], [1, NaN], "[1, NaN] is equal to [1, NaN]");
    }
    test(basicAssertArrayEquals, "basic assert_array_equals test");

    function basicAssertObjectEquals()
    {
        assert_object_equals([1, 2, [1, 2]], { 0: 1, 1: 2, 2: { 0: 1, 1: 2} }, "array is equal to object")
    }
    test(basicAssertObjectEquals, "basic assert_object_equals test");

    function basicAssertApproxEquals()
    {
        assert_approx_equals(10, 11, 1, "10 is approximately (+/- 1) 11")
    }
    test(basicAssertApproxEquals, "basic assert_approx_equals test");

    function basicAssertLessThan()
    {
        assert_less_than(10, 11, "10 is less than 11")
    }
    test(basicAssertApproxEquals, "basic assert_less_than test");

    function basicAssertGreaterThan()
    {
        assert_greater_than(10, 11, "10 is not greater than 11");
    }
    test(basicAssertGreaterThan, "assert_greater_than expected to fail");

    function basicAssertGreaterThanEqual()
    {
        assert_greater_than_equal(10, 10, "10 is greater than or equal to 10")
    }
    test(basicAssertGreaterThanEqual, "basic assert_greater_than_equal test");

    function basicAssertLessThanEqual()
    {
        assert_greater_than_equal('10', 10, "'10' is not a number")
    }
    test(basicAssertLessThanEqual, "assert_less_than_equal expected to fail");

    function testAssertInherits() {
        var A = function(){this.a = "a"}
        A.prototype = {b:"b"}
        var a = new A();
        assert_exists(a, "a");
        assert_not_exists(a, "b");
        assert_inherits(a, "b");
    }
    test(testAssertInherits, "test for assert[_not]_exists and insert_inherits")

    test(function()
    {
        var a = document.createElement("a")
        var b = document.createElement("b")
        assert_throws("NOT_FOUND_ERR", function(){a.removeChild(b)});
    }, "Test throw DOM exception")

    test(function()
    {
        var a = document.createTextNode("a")
        var b = document.createElement("b")
        assert_throws("NOT_FOUND_ERR", function(){a.appendChild(b)});
    }, "Test throw DOM exception expected to fail")

    test(function()
    {
        var e = {code:0, name:"TEST_ERR", TEST_ERR:0}
        assert_throws("TEST_ERR", function() {throw e});
    }, "Test assert_throws with non-DOM-exception expected to Fail");

    var t = async_test("Test step_func")
    setTimeout(
      t.step_func(
        function () {
          assert_true(true); t.done();
        }), 0);

    async_test(function(t) {
        setTimeout(t.step_func(function (){assert_true(true); t.done();}), 0);
    }, "Test async test with callback");

    async_test(function() {
        setTimeout(this.step_func(function (){assert_true(true); this.done();}), 0);
    }, "Test async test with callback and `this` obj.");

    async_test("test should timeout (fail) with the default of 2 seconds").step(function(){});

    async_test("test should timeout (fail) with a custom set timeout value of 1 second",
               {timeout:1000}).step(function(){});

    async_test("async test that is never started, should have status Not Run", {timeout:1000});


    test(function(t) {
             window.global = 1;
             t.add_cleanup(function() {delete window.global});
             assert_equals(window.global, 1);
         },
         "Test that defines a global and cleans it up");

    test(function() {assert_equals(window.global, undefined)},
         "Test that cleanup handlers from previous test ran");

</script>
</body>
</html>