import * as assert from 'power-assert' import { delay, minify } from './utils' import { atto } from '../src/atto' import { x } from '../src/x' import { Component } from '../src/Component'; beforeEach(() => { document.body.innerHTML = '' }) describe('Basic use case', () => { test('Display "foo"', async () => { const view = (props, children) => (
foo
) const mutate = atto(view, document.body) mutate({}) await delay(10) assert(document.body.innerHTML == `
foo
`) }) test('Mutate by context', async () => { const view = ((props, children, context) => (
)) as Component const mutate = atto(view, document.body) mutate({ clazz: 'foo' }) await delay(10) assert(document.body.innerHTML == `
`) }) test('Multi mutate', async () => { const view = ((props, children, context) => (
)) as Component const mutate = atto(view, document.body) for (const data of [ { context: { clazz: null }, html: `
` }, { context: { clazz: '' }, html: `
` }, { context: { clazz: 'foo' }, html: `
` }, { context: { clazz: false }, html: `
` } ]) { mutate(data.context) await delay(10) assert(document.body.innerHTML == data.html) } }) test('Mutate by click event', async () => { const view = ((props, children, context) => (
{context.count}
)) as Component let eventArgs const onClick = (context, detail, props, event) => { eventArgs = { context, detail, props, event } return { count: context.count + 1 } } const mutate = atto(view, document.body) mutate({ count: 0 }) await delay(10) assert(document.body.innerHTML == `
0
`) document.body.children[0].dispatchEvent(new Event('click')) await delay(10) assert(document.body.innerHTML == `
1
`) assert('object' == typeof eventArgs.context) assert(0 === eventArgs.context.count) assert('object' == typeof eventArgs.detail) assert('object' == typeof eventArgs.props) assert(onClick === eventArgs.props.onclick) assert(eventArgs.event instanceof Event) document.body.children[0].dispatchEvent(new Event('click')) await delay(10) assert(document.body.innerHTML == `
2
`) }) })