UNPKG

@livekit/components-core

Version:
154 lines (149 loc) 5.23 kB
import { describe, test, expect } from 'vitest'; import { GRID_LAYOUTS, expandAndSortLayoutDefinitions, selectGridLayout } from './grid-layouts'; describe.concurrent('Test correct layout for participant count with no screen size limits:', () => { test.each([{ participantCount: 1, expected: '1x1' }])( 'Layout for $participantCount should be -> $expected', ({ participantCount, expected }) => { const layout = selectGridLayout(GRID_LAYOUTS, participantCount, 9999, 9999); expect(layout.name).toBe(expected); }, ); test.each([ { participantCount: 2, expected: '1x2', width: 720 }, { participantCount: 2, expected: '2x1', width: 1920 }, ])( 'Layout for $participantCount for $width x 720 should be -> $expected', ({ participantCount, expected, width }) => { const layout = selectGridLayout(GRID_LAYOUTS, participantCount, width, 1080); expect(layout.name).toBe(expected); }, ); test.each([ { participantCount: 3, expected: '2x2' }, { participantCount: 4, expected: '2x2' }, ])('Layout for $participantCount should be -> $expected', ({ participantCount, expected }) => { const layout = selectGridLayout(GRID_LAYOUTS, participantCount, 9999, 9999); expect(layout.name).toBe(expected); }); test.each([ { participantCount: 5, expected: '3x3' }, { participantCount: 6, expected: '3x3' }, { participantCount: 7, expected: '3x3' }, { participantCount: 8, expected: '3x3' }, { participantCount: 9, expected: '3x3' }, ])('Layout for $participantCount should be -> $expected', ({ participantCount, expected }) => { const layout = selectGridLayout(GRID_LAYOUTS, participantCount, 9999, 9999); expect(layout.name).toBe(expected); }); test.each([ { participantCount: 10, expected: '4x4' }, { participantCount: 11, expected: '4x4' }, { participantCount: 12, expected: '4x4' }, { participantCount: 13, expected: '4x4' }, { participantCount: 14, expected: '4x4' }, { participantCount: 15, expected: '4x4' }, { participantCount: 16, expected: '4x4' }, ])('Layout for $participantCount should be -> $expected', ({ participantCount, expected }) => { const layout = selectGridLayout(GRID_LAYOUTS, participantCount, 9999, 9999); expect(layout.name).toBe(expected); }); }); describe('Test defined GRID_LAYOUTS array is valid', () => { test('GRID_LAYOUTS should be ordered by layout.maxParticipants', () => { const layouts = expandAndSortLayoutDefinitions(GRID_LAYOUTS); expect(layouts).toMatchInlineSnapshot(` [ { "columns": 1, "maxTiles": 1, "minHeight": 0, "minWidth": 0, "name": "1x1", "orientation": undefined, "rows": 1, }, { "columns": 1, "maxTiles": 2, "minHeight": 0, "minWidth": 0, "name": "1x2", "orientation": "portrait", "rows": 2, }, { "columns": 2, "maxTiles": 2, "minHeight": 0, "minWidth": 0, "name": "2x1", "orientation": "landscape", "rows": 1, }, { "columns": 2, "maxTiles": 4, "minHeight": 0, "minWidth": 560, "name": "2x2", "orientation": undefined, "rows": 2, }, { "columns": 3, "maxTiles": 9, "minHeight": 0, "minWidth": 700, "name": "3x3", "orientation": undefined, "rows": 3, }, { "columns": 4, "maxTiles": 16, "minHeight": 0, "minWidth": 960, "name": "4x4", "orientation": undefined, "rows": 4, }, { "columns": 5, "maxTiles": 25, "minHeight": 0, "minWidth": 1100, "name": "5x5", "orientation": undefined, "rows": 5, }, ] `); }); }); describe.concurrent( 'Test switch to smaller grid layout if screen width limit is not satisfied.', () => { test.each([ { desiredGrid: { columns: 4, rows: 4 }, expected: { columns: 3, rows: 3 } }, { desiredGrid: { columns: 5, rows: 5 }, expected: { columns: 4, rows: 4 } }, { desiredGrid: { columns: 3, rows: 3 }, expected: { columns: 2, rows: 2 } }, ])( 'If the minimum width for the $desiredGrid layout is not satisfied, switch to smaller layout ($expected).', ({ desiredGrid, expected }) => { const desiredLayout = expandAndSortLayoutDefinitions(GRID_LAYOUTS).find( (layout_) => layout_.columns === desiredGrid.columns && layout_.rows === desiredGrid.rows, ); if (desiredLayout === undefined) throw new Error('Could not find the desired layout.'); const widthToSmallForDesiredLayout = desiredLayout.minWidth - 1; const layout = selectGridLayout( GRID_LAYOUTS, desiredLayout.maxTiles, widthToSmallForDesiredLayout, 9999, ); expect(layout.columns).toBe(expected.columns); expect(layout.rows).toBe(expected.rows); }, ); }, );