UNPKG

@motorcycle/mostly-dom

Version:

Motorcycle.ts adapter for mostly-dom. Built on @motorcycle/dom.

109 lines (83 loc) 3.08 kB
import { DomSinks, DomSources, isolate } from './' import { Test, describe, given, it } from '@typed/test' import { empty, now } from '@motorcycle/stream' import { Component } from '@motorcycle/types' import { collectEventsFor } from '@motorcycle/test' import { createDomSource } from '@motorcycle/dom' import { div } from 'mostly-dom' export const test: Test = describe(`isolate`, [ given(`a component and an isolation key`, [ it(`returns an isolated component`, ({ equal }) => { const component = function(sources: Readonly<Record<string, any>>) { const {} = sources return { view$: now(div({ className: `bar` })), } } const isolationKey = `foo` const sut = isolate(component, isolationKey) const dom = createDomSource(empty()) const { view$ } = sut({ dom }) equal(`function`, typeof sut) return collectEventsFor(1, view$).then(view => { const { props: { className } } = view[0] equal(`bar __isolation__foo`, className) }) }), it(`appends isolation key to DomSource cssSelectors`, ({ equal }, done) => { const component = function(sources: Readonly<Record<string, any>>) { const { dom } = sources equal(['.__isolation__foo'], dom.cssSelectors()) done() return { view$: now(div({ className: `bar` })), } } const isolationKey = `foo` const sut = isolate(component, isolationKey) const dom = createDomSource(empty()) sut({ dom }) }), ]), given(`a component`, [ it(`returns a function that accepts an isolation key and returns an isolated component`, ({ equal, }) => { const component = function(sources: Readonly<Record<string, any>>) { const {} = sources return { view$: now(div({ className: `bar` })), } } const sut: <Sources extends DomSources, Sinks extends DomSinks>( key: string ) => Component<Sources, Sinks> = isolate(component) equal(`function`, typeof sut) const isolatedComponent = sut(`foo`) const dom = createDomSource(empty()) const { view$ } = isolatedComponent({ dom }) equal('function', typeof isolatedComponent) return collectEventsFor(1, view$).then(view => { const { props: { className } } = view[0] equal(`bar __isolation__foo`, className) }) }), ]), given(`a component, an isolation and sources`, [ it(`returns sinks from the isolated component`, ({ equal }) => { const component = function(sources: Readonly<Record<string, any>>) { const {} = sources return { view$: now(div({ className: `bar` })), } } const sources = { dom: createDomSource(empty()) } const sut: DomSinks = isolate(component, `foo`, sources) const { view$ } = sut return collectEventsFor(1, view$).then(view => { const { props: { className } } = view[0] equal(`bar __isolation__foo`, className) }) }), ]), ])