tests for proximity events spec
authorMarcos Caceres <w3c@marcosc.com>
Wed, 13 Jun 2012 21:05:55 +0100
changeset 110 cb2a822ab782
parent 109 e7f3f334b369
child 111 6eefe972691c
tests for proximity events spec
proximity/tests/.DS_Store
proximity/tests/submissions/.DS_Store
proximity/tests/submissions/marcos/DeviceProximityEvent_tests.js
proximity/tests/submissions/marcos/UserProximityEvent_tests.js
proximity/tests/submissions/marcos/index.html
Binary file proximity/tests/.DS_Store has changed
Binary file proximity/tests/submissions/.DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proximity/tests/submissions/marcos/DeviceProximityEvent_tests.js	Wed Jun 13 21:05:55 2012 +0100
@@ -0,0 +1,333 @@
+/**
+* W3C 3-clause BSD License
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* o Redistributions of works must retain the original copyright notice,
+*     this list of conditions and the following disclaimer.
+*
+* o Redistributions in binary form must reproduce the original copyright
+*     notice, this list of conditions and the following disclaimer in the
+*     documentation and/or other materials provided with the distribution.
+*
+* o Neither the name of the W3C nor the names of its contributors may be
+*     used to endorse or promote products derived from this work without
+*     specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+**/
+
+(function() {
+    //inheritance tests
+    test(function() {
+        var event = new DeviceProximityEvent('');
+        assert_true(event instanceof window.DeviceProximityEvent);
+    }, 'the event is an instance of DeviceProximityEvent');
+
+    test(function() {
+        var event = new DeviceProximityEvent('');
+        assert_true(event instanceof window.Event);
+    }, 'the event inherits from Event');
+
+    //Type attribute tests
+    test(function() {
+        assert_throws(TypeError(), function() {
+            new DeviceProximityEvent();
+        }, 'First argument is required, so was expecting a TypeError.');
+    }, 'Missing type argument');
+
+    test(function() {
+        var event = new DeviceProximityEvent(undefined);
+        assert_equals(event.type, 'undefined');
+    }, 'Event type set to undefined');
+
+    test(function() {
+        var event = new DeviceProximityEvent(null);
+        assert_equals(event.type, 'null');
+    }, 'type argument is null');
+
+    test(function() {
+        var event = new DeviceProximityEvent(123);
+        assert_equals(event.type, '123');
+    }, 'type argument is number');
+
+    test(function() {
+        var event = new DeviceProximityEvent(new Number(123));
+        assert_equals(event.type, '123');
+    }, 'type argument is Number');
+
+    test(function() {
+        var event = new DeviceProximityEvent([]);
+        assert_equals(event.type, '');
+    }, 'type argument is array');
+
+    test(function() {
+        var event = new DeviceProximityEvent(new Array());
+        assert_equals(event.type, '');
+    }, 'type argument is instance of Array');
+
+    test(function() {
+        var event = new DeviceProximityEvent(['t', ['e', ['s', ['t']]]]);
+        assert_equals(event.type, 't,e,s,t');
+    }, 'type argument is nested array');
+
+    test(function() {
+        var event = new DeviceProximityEvent(Math);
+        assert_equals(event.type, '[object Math]');
+    }, 'type argument is host object');
+
+    test(function() {
+        var event = new DeviceProximityEvent(true);
+        assert_equals(event.type, 'true');
+    }, 'type argument is boolean (true)');
+
+    test(function() {
+        var event = new DeviceProximityEvent(new Boolean(true));
+        assert_equals(event.type, 'true');
+    }, 'type argument is instance of boolean');
+
+    test(function() {
+        var event = new DeviceProximityEvent(false);
+        assert_equals(event.type, 'false');
+    }, 'type argument is boolean (false)');
+
+    test(function() {
+        var event = new DeviceProximityEvent(new Boolean(false));
+        assert_equals(event.type, 'false');
+    }, '');
+
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_equals(event.type, 'test');
+    }, 'type argument is instance of boolean (false)');
+
+    test(function() {
+        var event = new DeviceProximityEvent(new String('test'));
+        assert_equals(event.type, 'test');
+    }, 'type argument is string');
+
+    test(function() {
+        var event = new DeviceProximityEvent(function test() {});
+        assert_equals(event.type, 'function test() {}');
+    }, 'type argument is function');
+
+    test(function() {
+        var event = new DeviceProximityEvent({
+            toString: function() {
+                return '123';
+            }
+        });
+        assert_equals(event.type, '123');
+    }, 'type argument is complext object, with toString method');
+
+    test(function() {
+        assert_throws(TypeError(), function() {
+            new DeviceProximityEvent({
+                toString: function() {
+                    return function() {}
+                }
+            });
+        });
+    }, 'toString is of type function');
+
+    //test the attributes exist
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_own_property(event, 'value', 'must have attribute value');
+    }, 'value attribute exist');
+
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_own_property(event, 'min', 'must have attribute min');
+    }, 'min attribute exist');
+
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_own_property(event, 'max', 'must have attribute max');
+    }, 'max attribute exist');
+
+    //test readonly attribute double value;
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_readonly(event, 'value', 'readonly attribute value');
+    }, 'value attribute is readonly');
+
+    //test readonly attribute double min
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_readonly(event, 'min', 'readonly attribute min');
+    }, 'min attribute is readonly');
+
+    //readonly attribute double max;
+    test(function() {
+        var event = new DeviceProximityEvent('test');
+        assert_readonly(event, 'max', 'readonly attribute max');
+    }, 'max attribute is readonly');
+
+
+    test(function() {
+        var dic = {
+            min: 3,
+            max: 7,
+            value: 13
+        },
+            event = new DeviceProximityEvent('test', dic),
+            props = {
+                writable: false,
+                enumerable: true,
+                configurable: true
+            },
+            eProps = Object.getOwnPropertyDescriptor(event, 'max'),
+            writable = eProps.writable === props.writable,
+            enumerable = eProps.enumerable === props.enumerable,
+            config = eProps.configurable === props.configurable;
+        assert_true(writable && enumerable && config);
+    }, 'min props check');
+
+    test(function() {
+        //the max attribute
+        var dic = {
+            min: 3,
+            max: 7,
+            value: 13
+        },
+            event = new DeviceProximityEvent('test', dic),
+            props = {
+                writable: false,
+                enumerable: true,
+                configurable: true
+            },
+            eProps = Object.getOwnPropertyDescriptor(event, 'max'),
+            writable = eProps.writable === props.writable,
+            enumerable = eProps.enumerable === props.enumerable,
+            config = eProps.configurable === props.configurable;
+
+        assert_true(writable && enumerable && config);
+
+    }, 'max props check');
+
+    test(function() {
+        var dic = {
+            min: 3,
+            max: 7,
+            value: 13
+        },
+            event = new DeviceProximityEvent('test', dic),
+            props = {
+                writable: false,
+                enumerable: true,
+                configurable: true
+            },
+            eProps = Object.getOwnPropertyDescriptor(event, 'value'),
+            writable = eProps.writable === props.writable,
+            enumerable = eProps.enumerable === props.enumerable,
+            config = eProps.configurable === props.configurable;
+
+        assert_true(writable && enumerable && config);
+    }, 'value props check');
+    test(function() {
+        var desc = 'Expected to find ondeviceproximity attribute on window object';
+        assert_own_property(window, 'ondeviceproximity', desc);
+    }, 'ondeviceproximity exists');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity must be null';
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'ondeviceproximity is null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not accept callable object',
+            func = function() {};
+        window.ondeviceproximity = func;
+        assert_equals(window.ondeviceproximity, func, desc);
+    }, 'ondeviceproximity is set to function');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = {};
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat object as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = {
+            call: 'test'
+        };
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat object with non-callable call property as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable as null',
+            test = function() {};
+        test.call = 'test';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = test;
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat object with non-callable call property as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable (string) as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = 'string';
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat string as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable (number) as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = 123;
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat number as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable (undefined) as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = undefined;
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat undefined as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable (array) as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = [];
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat array as null');
+
+    test(function() {
+        var desc = 'window.ondeviceproximity did not treat noncallable host object as null';
+        window.ondeviceproximity = function() {};
+        window.ondeviceproximity = Node;
+        assert_equals(window.ondeviceproximity, null, desc);
+    }, 'treat non-callable host object as null');
+
+    //Async tests
+    var t = async_test('test if device proximity event recieved');
+    window.addEventListener('deviceproximity', function(e) {
+        t.step(function() {
+            var msg = 'expected instance of DeviceProximityEvent: ';
+            assert_true(e instanceof window.DeviceProximityEvent, msg);
+        });
+        t.done();
+    });
+
+    var t2 = async_test('test if user proximity event recieved');
+    window.ondeviceproximity = function(e) {
+        t2.step(function() {
+            var msg = 'expected instance of DeviceProximityEvent: ';
+            assert_true(e instanceof window.DeviceProximityEvent, msg);
+        });
+        t2.done();
+    };
+})();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proximity/tests/submissions/marcos/UserProximityEvent_tests.js	Wed Jun 13 21:05:55 2012 +0100
@@ -0,0 +1,325 @@
+/**
+* W3C 3-clause BSD License
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* o Redistributions of works must retain the original copyright notice,
+*     this list of conditions and the following disclaimer.
+*
+* o Redistributions in binary form must reproduce the original copyright
+*     notice, this list of conditions and the following disclaimer in the
+*     documentation and/or other materials provided with the distribution.
+*
+* o Neither the name of the W3C nor the names of its contributors may be
+*     used to endorse or promote products derived from this work without
+*     specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+**/
+(function() {
+    //inheritance tests
+    test(function() {
+        var event = new UserProximityEvent('');
+        assert_true(event instanceof window.UserProximityEvent);
+    }, 'the event is an instance of UserProximityEvent');
+
+    test(function() {
+        var event = new UserProximityEvent('');
+        assert_true(event instanceof window.Event);
+    }, 'the event inherits from Event');
+
+    //Type attribute tests
+    test(function() {
+        assert_throws(TypeError(), function() {
+            new UserProximityEvent();
+        }, 'First argument is required, so was expecting a TypeError.');
+    }, 'Missing type argument');
+
+    test(function() {
+        var event = new UserProximityEvent(undefined);
+        assert_equals(event.type, 'undefined');
+    }, 'Event type set to undefined');
+
+    test(function() {
+        var event = new UserProximityEvent(null);
+        assert_equals(event.type, 'null');
+    }, 'type argument is null');
+
+    test(function() {
+        var event = new UserProximityEvent(123);
+        assert_equals(event.type, '123');
+    }, 'type argument is number');
+
+    test(function() {
+        var event = new UserProximityEvent(new Number(123));
+        assert_equals(event.type, '123');
+    }, 'type argument is Number');
+
+    test(function() {
+        var event = new UserProximityEvent([]);
+        assert_equals(event.type, '');
+    }, 'type argument is array');
+
+    test(function() {
+        var event = new UserProximityEvent(new Array());
+        assert_equals(event.type, '');
+    }, 'type argument is instance of Array');
+
+    test(function() {
+        var event = new UserProximityEvent(['t', ['e', ['s', ['t']]]]);
+        assert_equals(event.type, 't,e,s,t');
+    }, 'type argument is nested array');
+
+    test(function() {
+        var event = new UserProximityEvent(Math);
+        assert_equals(event.type, '[object Math]');
+    }, 'type argument is host object');
+
+    test(function() {
+        var event = new UserProximityEvent(true);
+        assert_equals(event.type, 'true');
+    }, 'type argument is boolean (true)');
+
+    test(function() {
+        var event = new UserProximityEvent(new Boolean(true));
+        assert_equals(event.type, 'true');
+    }, 'type argument is instance of boolean');
+
+    test(function() {
+        var event = new UserProximityEvent(false);
+        assert_equals(event.type, 'false');
+    }, 'type argument is boolean (false)');
+
+    test(function() {
+        var event = new UserProximityEvent(new Boolean(false));
+        assert_equals(event.type, 'false');
+    }, '');
+
+    test(function() {
+        var event = new UserProximityEvent('test');
+        assert_equals(event.type, 'test');
+    }, 'type argument is instance of boolean (false)');
+
+    test(function() {
+        var event = new UserProximityEvent(new String('test'));
+        assert_equals(event.type, 'test');
+    }, 'type argument is string');
+
+    test(function() {
+        var event = new UserProximityEvent(function test() {});
+        assert_equals(event.type, 'function test() {}');
+    }, 'type argument is function');
+
+    test(function() {
+        var event = new UserProximityEvent({
+            toString: function() {
+                return '123';
+            }
+        });
+        assert_equals(event.type, '123');
+    }, 'type argument is complext object, with toString method');
+
+    test(function() {
+        assert_throws(TypeError(), function() {
+            new UserProximityEvent({
+                toString: function() {
+                    return function() {}
+                }
+            });
+        });
+    }, 'toString is of type function');
+
+    //test readonly attribute boolean near;
+    test(function() {
+        var event = new UserProximityEvent('test');
+        assert_readonly(event, 'near', 'readonly attribute near');
+    }, 'near is readonly');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: false
+        });
+        assert_equals(event.near, false, 'near set to false');
+    }, 'near set to false');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: true
+        });
+        assert_equals(event.near, true, 'near set to true');
+    }, 'near set to true');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: undefined
+        });
+        assert_equals(event.near, false, 'argument is truthy');
+    }, 'near set to a falsy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: null
+        });
+        assert_equals(event.near, false, 'argument is flasy');
+    }, 'near set to a falsy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: 0
+        });
+        assert_equals(event.near, false, 'argument is flasy');
+    }, 'near set to a falsy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: ''
+        });
+        assert_equals(event.near, false, 'argument is flasy');
+    }, 'near set to a falsy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: '\u0020'
+        });
+        assert_equals(event.near, true, 'argument is truthy');
+    }, 'near set to a truthy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: 1
+        });
+        assert_equals(event.near, true, 'argument is truthy');
+    }, 'near set to a truthy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: []
+        });
+        assert_equals(event.near, true, 'argument is truthy');
+    }, 'near set to a truthy object');
+
+    test(function() {
+        var event = new UserProximityEvent('test', {
+            near: {}
+        });
+        assert_equals(event.near, true, 'argument is truthy');
+    }, 'near set to a truthy object');
+
+    test(function() {
+        var dict = {
+            get test() {
+                return false;
+            }
+        };
+        var event = new UserProximityEvent('test', {
+            near: dict.test
+        });
+        assert_equals(event.near, false, 'explict false');
+    }, 'near set to object that resolves to false');
+
+    test(function() {
+        var desc = 'Expected to find onuserproximity attribute on window object';
+        assert_own_property(window, 'onuserproximity', desc);
+    }, 'onuserproximity exists');
+
+    test(function() {
+        var desc = 'window.onuserproximity must be null';
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'onuserproximity is null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not accept callable object',
+            func = function() {}
+        window.onuserproximity = func;
+        assert_equals(window.onuserproximity, func, desc);
+    }, 'onuserproximity is set to function');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = {};
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat object as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = {
+            call: 'test'
+        };
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat object with non-callable call property as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable as null',
+            test = function() {};
+        test.call = 'test';
+        window.onuserproximity = function() {};
+        window.onuserproximity = test;
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat object with non-callable call property as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable (string) as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = 'string';
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat string as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable (number) as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = 123;
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat number as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable (undefined) as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = undefined;
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat undefined as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable (array) as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = [];
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat array as null');
+
+    test(function() {
+        var desc = 'window.onuserproximity did not treat noncallable host object as null';
+        window.onuserproximity = function() {};
+        window.onuserproximity = Node;
+        assert_equals(window.onuserproximity, null, desc);
+    }, 'treat non-callable host object as null');
+
+    //Async tests
+    var t = async_test('test if user proximity event recieved');
+    window.addEventListener('userproximity', function(e) {
+        t.step(function() {
+            var msg = 'expected instance of UserProximityEvent: ';
+            assert_true(e instanceof window.UserProximityEvent, msg);
+        });
+        t.done();
+    });
+
+    var t2 = async_test('test if user proximity event recieved');
+    window.onuserproximity = function(e) {
+        t2.step(function() {
+            var msg = 'expected instance of UserProximityEvent: ';
+            assert_true(e instanceof window.UserProximityEvent, msg);
+        });
+        t2.done();
+    };
+})();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proximity/tests/submissions/marcos/index.html	Wed Jun 13 21:05:55 2012 +0100
@@ -0,0 +1,11 @@
+<!doctype html>
+<head>
+<title>Proximity Events Test Suite</title>
+<body> 
+<h1>Test Suite for Proximity Events</h1>
+<div id="log"></div>
+<hr>
+<p><small>Distributed under both the <a href="http://www.w3.org/Consortium/Legal/2008/04-testsuite-license">W3C Test Suite License</a> and the <a href="http://www.w3.org/Consortium/Legal/2008/03-bsd-license">W3C 3-clause BSD License</a>. To contribute to a W3C Test Suite, see the <a href="http://www.w3.org/2004/10/27-testcases">policies and contribution forms</a>.</small></p>
+<script src="http://www.w3c-test.org/resources/testharness.js"></script>
+<script src="DeviceProximityEvent_tests.js"></script>
+<script src="UserProximityEvent_tests.js"></script>
\ No newline at end of file