summaryrefslogtreecommitdiff
path: root/packages/webapi/test/basic.js
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2022-03-07 15:36:22 -0600
committerGravatar GitHub <noreply@github.com> 2022-03-07 15:36:22 -0600
commitf18ee36dc0abdc5c8ec87734de7962966d16fe65 (patch)
treec01a7034186cb0bbe5e1d042f4a5dd09bad21ed5 /packages/webapi/test/basic.js
parent10a9c3412b4f6e8607687a74eafdb150d3222047 (diff)
downloadastro-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.js156
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)
+ },
+ },
+ ]
+})