| <!DOCTYPE html> |
| <script src="../resources/js-test.js"></script> |
| <script> |
| description('IDL union types unittests'); |
| |
| var element = document.createElement('div'); |
| var nodeList = document.querySelectorAll('script'); |
| |
| if (window.internals) { |
| // The conversion rule prefers string over double, hence a value which |
| // is neither double nor string will be converted using ToString(). |
| |
| var unionTypesTest = internals.unionTypesTest(); |
| |
| debug('Tests for attributes'); |
| shouldBe('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '0'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = 3.14; |
| shouldBe('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '3.14'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = "foo"; |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'foo'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = undefined; |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'undefined'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = null; |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', 'null'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = {}; |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceAttribute', '[object Object]'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = []; |
| shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute)', '[]'); |
| unionTypesTest.doubleOrStringOrStringSequenceAttribute = ['a', 3.14]; |
| shouldBeEqualToString('JSON.stringify(unionTypesTest.doubleOrStringOrStringSequenceAttribute)', '["a","3.14"]'); |
| debug(''); |
| |
| debug('Tests for method arguments'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg(3.14)', 'double is passed: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg("foo")', 'string is passed: foo'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg(undefined)', 'string is passed: undefined'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg(null)', 'string is passed: null'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg({})', 'string is passed: [object Object]'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringArg([])', 'string is passed: '); |
| // ToString(Date) can contain timezone, so we can't specify the expectation. |
| // Just check that doubleOrStringArg() doesn't throw an exception. |
| shouldBeEqualToString('typeof unionTypesTest.doubleOrStringArg(new Date)', 'string'); |
| shouldThrow('unionTypesTest.doubleOrStringArg()'); |
| debug(''); |
| |
| shouldBeEqualToString('unionTypesTest.doubleOrInternalEnumArg(3.14)', 'double is passed: 3.14'); |
| // "foo" is a valid InternalEnum value. |
| shouldBeEqualToString('unionTypesTest.doubleOrInternalEnumArg("foo")', 'InternalEnum is passed: foo'); |
| shouldThrow('unionTypesTest.doubleOrInternalEnumArg("invalid")'); |
| // Implicit string conversion will occur for non-double or non-string values |
| // and they result in invalid InternalEnum values, so exceptions should be |
| // thrown. |
| shouldThrow('unionTypesTest.doubleOrInternalEnumArg(null)'); |
| shouldThrow('unionTypesTest.doubleOrInternalEnumArg({})'); |
| shouldThrow('unionTypesTest.doubleOrInternalEnumArg([])'); |
| debug(''); |
| |
| shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([])', ''); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([3.14, "foo"])', 'double: 3.14, string: foo'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([1, "foo", "bar", 2])', 'double: 1, string: foo, string: bar, double: 2'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringSequenceArg([null, undefined, {}, []])', 'string: null, string: undefined, string: [object Object], string: '); |
| shouldThrow('unionTypesTest.doubleOrStringSequenceArg(null)'); |
| shouldThrow('unionTypesTest.doubleOrStringSequenceArg(undefined)'); |
| shouldThrow('unionTypesTest.doubleOrStringSequenceArg({})'); |
| debug(''); |
| |
| debug('Tests for method arguments with defaults'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultDoubleArg()', 'double is passed: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultDoubleArg(undefined)', 'double is passed: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultDoubleArg("foo")', 'string is passed: foo'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultStringArg()', 'string is passed: foo'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultStringArg(undefined)', 'string is passed: foo'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultStringArg(3.14)', 'double is passed: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultNullArg()', 'null is passed'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultNullArg(undefined)', 'null is passed'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultNullArg(null)', 'null is passed'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultNullArg(3.14)', 'double is passed: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringDefaultNullArg("foo")', 'string is passed: foo'); |
| debug(''); |
| |
| debug('Tests for nullable method arguments'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementOrNullArg(undefined)', 'null or undefined is passed'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementOrNullArg(null)', 'null or undefined is passed'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementOrNullArg(nodeList)', 'nodelist is passed'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementOrNullArg(element)', 'element is passed'); |
| shouldThrow('unionTypesTest.nodeListOrElementOrNullArg(3.14)'); |
| shouldThrow('unionTypesTest.nodeListOrElementOrNullArg("foo")'); |
| shouldThrow('unionTypesTest.nodeListOrElementOrNullArg({})'); |
| shouldThrow('unionTypesTest.nodeListOrElementOrNullArg([])'); |
| |
| shouldThrow('unionTypesTest.nodeListOrElementArg(undefined)'); |
| shouldThrow('unionTypesTest.nodeListOrElementArg(null)'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementArg(nodeList)', 'nodelist is passed'); |
| shouldBeEqualToString('unionTypesTest.nodeListOrElementArg(element)', 'element is passed'); |
| debug(''); |
| |
| debug('Tests for method arguments with sequence members'); |
| shouldThrow('unionTypesTest.doubleOrStringOrStringSequenceArg()'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg("abc")', 'string: abc'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(3.14)', 'double: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(true)', 'string: true'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(null)', 'string: null'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(undefined)', 'string: undefined'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg([])', 'sequence: []'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(["a", 3.14])', 'sequence: [a, 3.14]'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceArg(new Array(3))', 'sequence: [undefined, undefined, undefined]'); |
| debug(''); |
| |
| debug('Tests for nullable method arguments with sequence members'); |
| shouldThrow('unionTypesTest.doubleOrStringOrStringSequenceNullableArg()'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg("abc")', 'string: abc'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(3.14)', 'double: 3.14'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(true)', 'string: true'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(null)', 'null'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(undefined)', 'null'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg([])', 'sequence: []'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(["a", 3.14])', 'sequence: [a, 3.14]'); |
| shouldBeEqualToString('unionTypesTest.doubleOrStringOrStringSequenceNullableArg(new Array(3))', 'sequence: [undefined, undefined, undefined]'); |
| } |
| </script> |