diff options
author | 2022-03-07 15:36:22 -0600 | |
---|---|---|
committer | 2022-03-07 15:36:22 -0600 | |
commit | f18ee36dc0abdc5c8ec87734de7962966d16fe65 (patch) | |
tree | c01a7034186cb0bbe5e1d042f4a5dd09bad21ed5 /packages/webapi/test/basic.js | |
parent | 10a9c3412b4f6e8607687a74eafdb150d3222047 (diff) | |
download | astro-f18ee36dc0abdc5c8ec87734de7962966d16fe65.tar.gz astro-f18ee36dc0abdc5c8ec87734de7962966d16fe65.tar.zst astro-f18ee36dc0abdc5c8ec87734de7962966d16fe65.zip |
Add `@astrojs/webapi` package (#2729)@astrojs/webapi@0.11.0
* chore: add @astrojs/webapi
* chore: update package.json
* fix: update file case
* fix: remove lowercase file
* chore: update tests to use mocha
* chore: update LICENSE
Diffstat (limited to 'packages/webapi/test/basic.js')
-rw-r--r-- | packages/webapi/test/basic.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/packages/webapi/test/basic.js b/packages/webapi/test/basic.js new file mode 100644 index 000000000..02284233c --- /dev/null +++ b/packages/webapi/test/basic.js @@ -0,0 +1,156 @@ +import { assert, test } from '../run/test.setup.js' +import { polyfill } from '../mod.js' + +test(() => { + polyfill(globalThis) + + return [ + { + name: 'Globals exist', + test() { + const webAPIs = [ 'AbortController', 'AbortSignal', 'Blob', 'ByteLengthQueuingStrategy', 'CSSStyleSheet', 'CountQueuingStrategy', 'CustomElementRegistry', 'CustomEvent', 'DOMException', 'Document', 'DocumentFragment', 'Element', 'Event', 'EventTarget', 'File', 'FormData', 'HTMLDocument', 'HTMLElement', 'HTMLDivElement', 'HTMLHeadElement', 'HTMLHtmlElement', 'HTMLImageElement', 'HTMLStyleElement', 'HTMLTemplateElement', 'HTMLUnknownElement', 'Headers', 'IntersectionObserver', 'Image', 'MediaQueryList', 'MutationObserver', 'Node', 'ReadableByteStreamController', 'ReadableStream', 'ReadableStreamBYOBReader', 'ReadableStreamBYOBRequest', 'ReadableStreamDefaultController', 'ReadableStreamDefaultReader', 'Request', 'Response', 'ShadowRoot', 'StyleSheet', 'TransformStream', 'WritableStream', 'WritableStreamDefaultController', 'WritableStreamDefaultWriter', 'Window', 'cancelAnimationFrame', 'cancelIdleCallback', 'clearTimeout', 'fetch', 'requestAnimationFrame', 'requestIdleCallback', 'setTimeout' ] + + for (const name of webAPIs) { + assert.equal(typeof globalThis[name], 'function') + } + }, + }, + { + name: 'Constructs an Event', + test() { + const e = new Event('test') + + assert.equal(e.type, 'test') + }, + }, + { + name: 'Constructs an EventTarget', + test() { + const t = new EventTarget() + }, + }, + { + name: 'Dispatches an Event on an EventTarget', + test() { + const t = new EventTarget() + + let pass = false + + t.addEventListener('test', (event) => { + pass = true + }) + + const e = new Event('test') + + t.dispatchEvent(e) + + assert.equal(pass, true) + }, + }, + { + name: 'Classes extend as expected', + test() { + assert.equal(HTMLElement.prototype instanceof Element, true) + assert.equal(Element.prototype instanceof Node, true) + assert.equal(Node.prototype instanceof EventTarget, true) + }, + }, + { + name: 'DOM Methods have no effect', + test() { + const element = document.createElement('div') + + assert.equal(element.innerHTML, '') + element.innerHTML = 'frozen' + assert.equal(element.innerHTML, '') + + assert.equal(element.textContent, '') + element.textContent = 'frozen' + assert.equal(element.textContent, '') + }, + }, + { + name: 'globalThis.window === globalThis', + test() { + assert.equal(globalThis.window, globalThis) + }, + }, + { + name: 'Relative Indexing Method (String#at)', + test() { + assert.equal(typeof String.prototype.at, 'function') + assert.equal(String.prototype.at.length, 1) + + const example = 'The quick brown fox jumps over the lazy dog.' + + assert.equal(example.at(2), 'e') + assert.equal(example.at(-2), 'g') + }, + }, + { + name: 'Relative Indexing Method (Array#at)', + test() { + assert.equal(typeof Array.prototype.at, 'function') + assert.equal(Array.prototype.at.length, 1) + + const example = [1, 3, 5, 7, 9] + + assert.equal(example.at(1), 3) + assert.equal(example.at(-1), 9) + }, + }, + { + name: 'Relative Indexing Method (TypedArray#at)', + test() { + assert.equal(typeof Int8Array.prototype.at, 'function') + assert.equal(Int8Array.prototype.at.length, 1) + + const example = new Int8Array([1, 3, 5, 7, 9]) + + assert.equal(example.at(1), 3) + assert.equal(example.at(-1), 9) + }, + }, + { + name: 'Object.hasOwn', + test() { + assert.equal(typeof Object.hasOwn, 'function') + assert.equal(Object.hasOwn.length, 2) + + const example = {} + + assert.equal(Object.hasOwn(example, 'prop'), false) + + example.prop = 'exists' + + assert.equal(Object.hasOwn(example, 'prop'), true) + }, + }, + { + name: 'Promise.any', + test() { + assert.equal(typeof Promise.any, 'function') + assert.equal(Promise.any.length, 1) + + Promise.any([Promise.resolve(42), Promise.reject(-1), Promise.reject(Infinity)]).then( + result => { + assert.equal(result, 42) + } + ) + }, + }, + { + name: 'String#replaceAll', + test() { + assert.equal(typeof String.prototype.replaceAll, 'function') + assert.equal(String.prototype.replaceAll.length, 2) + + const t1 = 'Of all the sorcerers in Harry Potter, Halo is my favorite sorcerer.' + const t2 = t1.replaceAll('sorcerer', 'philosopher') + const t3 = 'Of all the philosophers in Harry Potter, Halo is my favorite philosopher.' + + assert.equal(t2, t3) + }, + }, + ] +}) |