82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { ArrayFlagSet } from '@module'
|
|
|
|
|
|
test('Normalise to minimum', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagA = flags.flag('A')
|
|
const flagB = flags.flag('B', flagA)
|
|
const flagC = flags.flag('C', flagA)
|
|
const flagD = flags.flag('D', flagC)
|
|
|
|
expect(flags.minimum([])).toEqual([])
|
|
expect(flags.minimum(['A'])).toEqual(['A'])
|
|
expect(flags.minimum(['B'])).toEqual([])
|
|
expect(flags.minimum(['A', 'B'])).toEqual(['A', 'B'])
|
|
expect(flags.minimum(['A', 'B', 'D'])).toEqual(['A', 'B'])
|
|
expect(flags.minimum(['A', 'C', 'D'])).toEqual(['A', 'C', 'D'])
|
|
expect(flags.minimum(['A', 'E'])).toEqual(['A'])
|
|
})
|
|
|
|
test('Normalise to maximum', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagA = flags.flag('A')
|
|
const flagB = flags.flag('B', flagA)
|
|
const flagC = flags.flag('C', flagA)
|
|
const flagD = flags.flag('D', flagC)
|
|
|
|
expect(flags.maximum([])).toEqual([])
|
|
expect(flags.maximum(['A'])).toEqual(['A'])
|
|
expect(flags.maximum(['B'])).toEqual(['B', 'A'])
|
|
expect(flags.maximum(['A', 'B'])).toEqual(['A', 'B'])
|
|
expect(flags.maximum(['A', 'B', 'D'])).toEqual(['A', 'B', 'D', 'C'])
|
|
expect(flags.maximum(['A', 'C', 'D'])).toEqual(['A', 'C', 'D'])
|
|
expect(flags.maximum(['A', 'E'])).toEqual(['A'])
|
|
})
|
|
|
|
test('Add to array', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagB = flags.flag('B')
|
|
const flagC = flags.flag('C')
|
|
const flagsBAndC = flags.flag(flagB, flagC)
|
|
|
|
expect(flagB.addTo(['A'])).toEqual(['A', 'B'])
|
|
expect(flagC.addTo(['A'])).toEqual(['A', 'C'])
|
|
expect(flagsBAndC.addTo(['A'])).toEqual(['A', 'B', 'C'])
|
|
})
|
|
|
|
test('Remove from array', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagA = flags.flag('A')
|
|
const flagB = flags.flag('B')
|
|
const flagC = flags.flag('C', flagA)
|
|
|
|
expect(flagA.removeFrom(['A', 'B', 'C'])).toEqual(['B'])
|
|
expect(flagB.removeFrom(['A', 'B', 'C'])).toEqual(['A', 'C'])
|
|
expect(flagC.removeFrom(['A', 'B', 'C'])).toEqual(['A', 'B'])
|
|
})
|
|
|
|
test('Is in array', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagA = flags.flag('A')
|
|
const flagB = flags.flag('B')
|
|
const flagC = flags.flag('C', flagA)
|
|
|
|
expect(flagA.isIn(['A'])).toBe(true)
|
|
expect(flagB.isIn(['A', 'B'])).toBe(true)
|
|
expect(flagC.isIn(['C'])).toBe(false)
|
|
expect(flagC.isIn(['A', 'C'])).toBe(true)
|
|
})
|
|
|
|
test('Is abstract', () => {
|
|
const flags = new ArrayFlagSet<string>()
|
|
const flagA = flags.flag('A')
|
|
const flagB = flags.flag('B')
|
|
const flagsAAndB = flags.flag(flagA, flagB)
|
|
const flagC = flags.flag('C', flagsAAndB)
|
|
|
|
expect(flagA.isAbstract).toBe(false)
|
|
expect(flagB.isAbstract).toBe(false)
|
|
expect(flagsAAndB.isAbstract).toBe(true)
|
|
expect(flagC.isAbstract).toBe(false)
|
|
})
|