You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
snabbdom/test/unit/dataset.ts

58 lines
2.0 KiB
TypeScript

import { assert } from 'chai'
import { datasetModule, init, h } from '../../src/index';
const patch = init([
datasetModule
])
describe('dataset', function () {
before(function () {
if (!Object.hasOwnProperty.call(HTMLElement.prototype, 'dataset')) {
this.skip()
}
})
let elm: any, vnode0: any
beforeEach(function () {
elm = document.createElement('div')
vnode0 = elm
})
it('is set on initial element creation', function () {
elm = patch(vnode0, h('div', { dataset: { foo: 'foo' } })).elm
assert.strictEqual(elm.dataset.foo, 'foo')
})
it('updates dataset', function () {
const vnode1 = h('i', { dataset: { foo: 'foo', bar: 'bar' } })
const vnode2 = h('i', { dataset: { baz: 'baz' } })
elm = patch(vnode0, vnode1).elm
assert.strictEqual(elm.dataset.foo, 'foo')
assert.strictEqual(elm.dataset.bar, 'bar')
elm = patch(vnode1, vnode2).elm
assert.strictEqual(elm.dataset.baz, 'baz')
assert.strictEqual(elm.dataset.foo, undefined)
})
it('can be memoized', function () {
const cachedDataset = { foo: 'foo', bar: 'bar' }
const vnode1 = h('i', { dataset: cachedDataset })
const vnode2 = h('i', { dataset: cachedDataset })
elm = patch(vnode0, vnode1).elm
assert.strictEqual(elm.dataset.foo, 'foo')
assert.strictEqual(elm.dataset.bar, 'bar')
elm = patch(vnode1, vnode2).elm
assert.strictEqual(elm.dataset.foo, 'foo')
assert.strictEqual(elm.dataset.bar, 'bar')
})
it('handles string conversions', function () {
const vnode1 = h('i', { dataset: { empty: '', dash: '-', dashed: 'foo-bar', camel: 'fooBar', integer: 0 as any, float: 0.1 as any } })
elm = patch(vnode0, vnode1).elm
assert.strictEqual(elm.dataset.empty, '')
assert.strictEqual(elm.dataset.dash, '-')
assert.strictEqual(elm.dataset.dashed, 'foo-bar')
assert.strictEqual(elm.dataset.camel, 'fooBar')
assert.strictEqual(elm.dataset.integer, '0')
assert.strictEqual(elm.dataset.float, '0.1')
})
})