import { LayerStack } from '../../src/lib'; describe(`LayerStack`, () => { interface T { a: number; b: number } const s1 = { a: 1, b: 2, }; const s2 = { a: 3, b: 4, } const s3 = { a: 5, b: 6, } const s4 = { a: 7, b: 8, } const s5 = { a: 9, b: 10, } const s6 = { a: 11, b: 12, } const s7 = { a: 13, b: 14, } const stack = new LayerStack(); stack.add(s1); // 1, 2 stack.add(s2, 1, 'tag1'); // 3, 4 stack.add(s3, 'low'); // 5, 6 stack.add(s4, 'low'); // 7, 8 stack.add(s5, 'high'); // 9, 10 stack.add(s6, 3, ['tag1', 'tag2']); // 11, 12 stack.add(s7, 1, 'tag2'); // 13, 14 const items = stack.items; it('should sort settings based on priority and sequence', async () => { expect(items[0]).toEqual({ a: 5, b: 6}); // s3 expect(items[1]).toEqual({ a: 7, b: 8}); // s4 expect(items[2]).toEqual({ a: 11, b: 12}); // s6 expect(items[3]).toEqual({ a: 3, b: 4}); // s2 expect(items[4]).toEqual({ a: 13, b: 14}); // s7 expect(items[5]).toEqual({ a: 1, b: 2}); // s1 expect(items[6]).toEqual({ a: 9, b: 10}); // s5 }); it('should return proper entries based on tags from getItemsByTag', async () => { const tag1Entries = stack.getItemsByTag('tag1'); const tag2Entries = stack.getItemsByTag('tag2'); const tag1Or2EntriesDefaultOr = stack.getItemsByTag(['tag1', 'tag2']); const tag1Or2EntriesExplicitOr = stack.getItemsByTag(['tag1', 'tag2'], 'or'); const tag1And2EntriesAnd = stack.getItemsByTag(['tag1', 'tag2'], 'and'); expect(tag1Entries).toHaveLength(2); expect(tag1Entries[0].item).toEqual({ a: 11, b: 12}); expect(tag1Entries[1].item).toEqual({ a: 3, b: 4}); expect(tag2Entries).toHaveLength(2); expect(tag2Entries[0].item).toEqual({ a: 11, b: 12}); expect(tag2Entries[1].item).toEqual({ a: 13, b: 14}); expect(tag1Or2EntriesDefaultOr).toHaveLength(3); expect(tag1Or2EntriesDefaultOr[0].item).toEqual({ a: 11, b: 12}); expect(tag1Or2EntriesDefaultOr[1].item).toEqual({ a: 3, b: 4}); expect(tag1Or2EntriesDefaultOr[2].item).toEqual({ a: 13, b: 14}); expect(tag1Or2EntriesExplicitOr).toHaveLength(3); expect(tag1Or2EntriesExplicitOr[0].item).toEqual({ a: 11, b: 12}); expect(tag1Or2EntriesExplicitOr[1].item).toEqual({ a: 3, b: 4}); expect(tag1Or2EntriesExplicitOr[2].item).toEqual({ a: 13, b: 14}); expect(tag1And2EntriesAnd).toHaveLength(1); expect(tag1And2EntriesAnd[0].item).toEqual({ a: 11, b: 12}); }); });