2022-04-11 01:29:46 +00:00
|
|
|
import { expect } from 'chai'
|
2022-03-07 21:36:22 +00:00
|
|
|
import { polyfill } from '../mod.js'
|
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
describe('Basic', () => {
|
|
|
|
before(() => polyfill(globalThis))
|
|
|
|
|
|
|
|
it('Globals exist', () => {
|
|
|
|
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) {
|
|
|
|
expect(globalThis[name]).to.be.a('function')
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Constructs an Event', () => {
|
|
|
|
const e = new Event('test')
|
|
|
|
|
|
|
|
expect(e.type).to.equal('test')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Constructs an EventTarget', () => {
|
|
|
|
const _t = new EventTarget()
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Dispatches an Event on an EventTarget', () => {
|
|
|
|
const t = new EventTarget()
|
|
|
|
|
|
|
|
let pass = false
|
|
|
|
|
|
|
|
t.addEventListener('test', (event) => {
|
|
|
|
pass = true
|
|
|
|
})
|
|
|
|
|
|
|
|
const e = new Event('test')
|
|
|
|
|
|
|
|
t.dispatchEvent(e)
|
|
|
|
|
|
|
|
expect(pass).to.equal(true)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Classes extend as expected', () => {
|
|
|
|
expect(HTMLElement.prototype).to.be.an.instanceof(Element)
|
|
|
|
expect(Element.prototype).to.be.an.instanceof(Node)
|
|
|
|
expect(Node.prototype).to.be.an.instanceof(EventTarget)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('DOM Methods have no effect', () => {
|
|
|
|
const element = document.createElement('div')
|
|
|
|
|
|
|
|
expect(element.innerHTML).to.be.empty
|
|
|
|
element.innerHTML = 'frozen'
|
|
|
|
expect(element.innerHTML).to.be.empty
|
|
|
|
|
|
|
|
expect(element.textContent).to.be.empty
|
|
|
|
element.textContent = 'frozen'
|
|
|
|
expect(element.textContent).to.be.empty
|
|
|
|
})
|
|
|
|
|
|
|
|
it('globalThis.window === globalThis', () => {
|
|
|
|
expect(globalThis.window).to.equal(globalThis)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Relative Indexing Method (String#at)', () => {
|
|
|
|
expect(String.prototype.at).to.be.a('function')
|
|
|
|
expect(String.prototype.at.length).to.equal(1)
|
|
|
|
|
|
|
|
const example = 'The quick brown fox jumps over the lazy dog.'
|
|
|
|
|
|
|
|
expect(example.at(2)).to.equal('e')
|
|
|
|
expect(example.at(-2)).to.equal('g')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Relative Indexing Method (Array#at)', () => {
|
|
|
|
expect(Array.prototype.at).to.be.a('function')
|
|
|
|
expect(Array.prototype.at.length).to.equal(1)
|
|
|
|
|
|
|
|
const example = [1, 3, 5, 7, 9]
|
|
|
|
|
|
|
|
expect(example.at(1)).to.equal(3)
|
|
|
|
expect(example.at(-1)).to.equal(9)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Relative Indexing Method (TypedArray#at)', () => {
|
|
|
|
expect(Int8Array.prototype.at).to.be.a('function')
|
|
|
|
expect(Int8Array.prototype.at.length).to.equal(1)
|
|
|
|
|
|
|
|
const example = new Int8Array([1, 3, 5, 7, 9])
|
|
|
|
|
|
|
|
expect(example.at(1)).to.equal(3)
|
|
|
|
expect(example.at(-1)).to.equal(9)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Object.hasOwn', () => {
|
|
|
|
expect(Object.hasOwn).to.be.a('function')
|
|
|
|
expect(Object.hasOwn.length).to.equal(2)
|
|
|
|
|
|
|
|
const example = {}
|
|
|
|
|
|
|
|
expect(Object.hasOwn(example, 'prop')).to.equal(false)
|
|
|
|
|
|
|
|
example.prop = 'exists'
|
|
|
|
|
|
|
|
expect(Object.hasOwn(example, 'prop')).to.equal(true)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Promise.any', () => {
|
|
|
|
expect(Promise.any).to.be.a('function')
|
|
|
|
expect(Promise.any.length).to.equal(1)
|
|
|
|
|
|
|
|
Promise.any([
|
|
|
|
Promise.resolve(42),
|
|
|
|
Promise.reject(-1),
|
|
|
|
Promise.reject(Infinity),
|
|
|
|
]).then((result) => {
|
|
|
|
expect(result).to.equal(42)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('String#replaceAll', () => {
|
|
|
|
expect(String.prototype.replaceAll).to.be.a('function')
|
|
|
|
expect(String.prototype.replaceAll.length).to.equal(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.'
|
|
|
|
|
|
|
|
expect(t2).to.equal(t3)
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
})
|