Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / chain-able-chain   js

Repository URL to install this package:

Version: 1.3.2 

/ __test__ / compose.ts

const log = require('fliplog')
const {compose} = require('../src')
// const ChainedMap = require('../ChainedMap')
// const compose = require('../compose')

const PreComposed = compose()

class Composed extends PreComposed { }

test('composable', () => {
  const map = new Composed({isParent: true})
  expect(map.parent).toEqual({isParent: true})
})

test('compose custom extensions', () => {
  class CustomTarget {
    constructor(parent) {
      this.ok = true
    }
  }
  const CustomComposer = SuperClass => {
    class Customed extends SuperClass {

    }
    return Customed
  }
  const CustomComposed = compose(CustomTarget, [CustomComposer])
  const map = new CustomComposed()
  expect(map.ok).toBe(true)
  expect(map instanceof CustomTarget).toBe(true)
})

test('clearable', () => {
  const map = new Composed({isParent: true}).set('eh', 'eh!')

  expect(map.entries()).toEqual({
    eh: 'eh!',
  })

  map.clear()
  expect(map.store).toEqual(new Map())
})

test('mergeable', () => {
  const map = new Composed({isParent: true})
    .extend(['igloo'])
    .set('eh', 'eh!')
    .set('eh2', 'eh2!')
    .merge({dis: 1, eh: ['string-to-arr'], igloo: 0, neuw: Boolean})

  expect(map.entries()).toEqual({
    eh: ['string-to-arr'],
    eh2: 'eh2!',
    dis: 1,
    igloo: 0,
    neuw: Boolean,
  })
})

test('.className', () => {
  expect.assertions(1)
  const chain = new Composed()
  expect(typeof chain.className === 'string').toBe(true)
})

test('extend class as decorator', () => {
  class CustomTarget { }
  const CustomComposer = SuperClass => {
    class Customed extends SuperClass { }
    return Customed
  }
  const CustomComposed = compose(CustomTarget, [CustomComposer])

  class Target {
    get extended() {
      return true
    }
  }
  class Target2 {
    eh() { }
    get extended2() {
      return true
    }
  }
  const CT = compose(Target, undefined)
  class ComposedTarget extends CT { }
  class ComposedTarget2 extends compose(Target2) { }
  const map = new ComposedTarget({isParent: true})
  const map2 = new ComposedTarget2({isParent: true})
  // log.prettyformat(new CustomComposed()).echo()
  // log.prettyformat(map).echo()
  // log.prettyformat(new ComposedTarget2()).echo()
  // log.data(new ComposedTarget2() instanceof ComposedTarget2).echo()
  // log.data(map instanceof Target).echo()

  expect(map.parent).toEqual({isParent: true})
  expect(map.extended).toBe(true)
})