123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /* eslint-env jest */
- import monitorLayoutReducer from '../../../src/reducers/monitor-layout';
- import {addMonitorRect, moveMonitorRect} from '../../../src/reducers/monitor-layout';
- import {resizeMonitorRect, removeMonitorRect} from '../../../src/reducers/monitor-layout';
- import {getInitialPosition, PADDING, SCREEN_WIDTH, SCREEN_HEIGHT} from '../../../src/reducers/monitor-layout';
- test('initialState', () => {
- let defaultState;
- expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */)).toBeDefined();
- expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */).monitors).toBeDefined();
- expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */).savedMonitorPositions)
- .toBeDefined();
- });
- test('addMonitorRect', () => {
- let defaultState;
- const monitorId = 1;
- const monitorId2 = 2;
- const upperStart = {x: 100, y: 100};
- const lowerEnd = {x: 200, y: 200};
- // Add a monitor rect
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd));
- expect(reduxState.monitors[monitorId]).toBeDefined();
- expect(reduxState.monitors[monitorId].upperStart).toEqual(upperStart);
- expect(reduxState.monitors[monitorId].lowerEnd).toEqual(lowerEnd);
- // Add monitor rect doesn't save position
- expect(reduxState.savedMonitorPositions[monitorId]).toBeUndefined();
- const reduxState2 = monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 0, 0));
- // Add a second monitor rect
- const reduxState3 = monitorLayoutReducer(reduxState2, addMonitorRect(monitorId2, upperStart, lowerEnd));
- expect(reduxState3.monitors[monitorId]).toBeDefined();
- expect(reduxState3.monitors[monitorId2]).toBeDefined();
- expect(reduxState3.monitors[monitorId2].upperStart).toEqual(upperStart);
- expect(reduxState3.monitors[monitorId2].lowerEnd).toEqual(lowerEnd);
- // Saved positions aren't changed by adding monitor
- expect(reduxState3.savedMonitorPositions).toEqual(reduxState2.savedMonitorPositions);
- });
- test('addMonitorRectWithSavedPosition', () => {
- let defaultState;
- const monitorId = 1;
- const upperStart = {x: 100, y: 100};
- const lowerEnd = {x: 200, y: 200};
- // Add a monitor rect
- const reduxState = monitorLayoutReducer(defaultState,
- addMonitorRect(monitorId, upperStart, lowerEnd, true /* savePosition */));
- expect(reduxState.monitors[monitorId]).toBeDefined();
- expect(reduxState.monitors[monitorId].upperStart).toEqual(upperStart);
- expect(reduxState.monitors[monitorId].lowerEnd).toEqual(lowerEnd);
- // Save position
- expect(reduxState.savedMonitorPositions[monitorId].x).toEqual(upperStart.x);
- expect(reduxState.savedMonitorPositions[monitorId].y).toEqual(upperStart.y);
- });
- test('invalidRect', () => {
- let defaultState;
- const reduxState = monitorLayoutReducer(defaultState /* state */, {type: 'initialize'} /* action */);
- // Problem: x end is before x start
- expect(
- monitorLayoutReducer(reduxState,
- addMonitorRect(1, {x: 100, y: 100}, {x: 10, y: 200})))
- .toEqual(reduxState);
- // Problem: y end is before y start
- expect(
- monitorLayoutReducer(reduxState,
- addMonitorRect(1, {x: 100, y: 100}, {x: 200, y: 10})))
- .toEqual(reduxState);
- });
- test('invalidAddMonitorRect', () => {
- let defaultState;
- const monitorId = 1;
- const upperStart = {x: 100, y: 100};
- const lowerEnd = {x: 200, y: 200};
- // Add a monitor rect
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd));
- // Try to add the same one
- expect(monitorLayoutReducer(reduxState, addMonitorRect(monitorId, upperStart, lowerEnd)))
- .toEqual(reduxState);
- });
- test('moveMonitorRect', () => {
- let defaultState;
- const monitorId = 1;
- const monitorId2 = 2;
- const width = 102;
- const height = 101;
- const upperStart = {x: 100, y: 100};
- const lowerEnd = {x: upperStart.x + width, y: upperStart.y + height};
- const movedToPosition = {x: 0, y: 0};
- const movedToPosition2 = {x: 543, y: 2};
- // Add a monitor rect and move it. Expect it to be in monitors state and saved positions.
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd));
- const reduxState2 = monitorLayoutReducer(reduxState,
- moveMonitorRect(monitorId, movedToPosition.x, movedToPosition.y));
- expect(reduxState2.monitors[monitorId]).toBeDefined();
- expect(reduxState2.monitors[monitorId].upperStart).toEqual(movedToPosition);
- expect(reduxState2.monitors[monitorId].lowerEnd.x).toEqual(movedToPosition.x + width);
- expect(reduxState2.monitors[monitorId].lowerEnd.y).toEqual(movedToPosition.y + height);
- expect(reduxState2.savedMonitorPositions[monitorId]).toBeDefined();
- expect(reduxState2.savedMonitorPositions[monitorId].x).toEqual(movedToPosition.x);
- expect(reduxState2.savedMonitorPositions[monitorId].y).toEqual(movedToPosition.y);
- // Add a second monitor rect and move it. Expect there to now be 2 saved positions.
- const reduxState3 = monitorLayoutReducer(reduxState2, addMonitorRect(monitorId2, upperStart, lowerEnd));
- const reduxState4 = monitorLayoutReducer(reduxState3,
- moveMonitorRect(monitorId2, movedToPosition2.x, movedToPosition2.y));
- expect(reduxState4.savedMonitorPositions[monitorId]).toEqual(reduxState2.savedMonitorPositions[monitorId]);
- expect(reduxState4.savedMonitorPositions[monitorId2].x).toEqual(movedToPosition2.x);
- expect(reduxState4.savedMonitorPositions[monitorId2].y).toEqual(movedToPosition2.y);
- });
- test('invalidMoveMonitorRect', () => {
- let defaultState;
- let reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */);
- const monitorId = 1;
- // Try to move a monitor rect that doesn't exist
- expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newX */, 1 /* newY */)))
- .toEqual(reduxState);
- // Add the monitor to move
- reduxState = monitorLayoutReducer(reduxState, addMonitorRect(monitorId, {x: 100, y: 100}, {x: 200, y: 200}));
- // Invalid newX
- expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 'Oregon' /* newX */, 1 /* newY */)))
- .toEqual(reduxState);
- // Invalid newY
- expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newX */)))
- .toEqual(reduxState);
- });
- test('resizeMonitorRect', () => {
- let defaultState;
- const monitorId = 1;
- const upperStart = {x: 100, y: 100};
- const newWidth = 10;
- const newHeight = 20;
- // Add a monitor rect and resize it
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, {x: 200, y: 200}));
- const reduxState2 = monitorLayoutReducer(reduxState,
- resizeMonitorRect(monitorId, newWidth, newHeight));
- expect(reduxState2.monitors[monitorId]).toBeDefined();
- expect(reduxState2.monitors[monitorId].upperStart).toEqual(upperStart);
- expect(reduxState2.monitors[monitorId].lowerEnd.x).toEqual(upperStart.x + newWidth);
- expect(reduxState2.monitors[monitorId].lowerEnd.y).toEqual(upperStart.y + newHeight);
- // Saved positions aren't changed by resizing monitor
- expect(reduxState2.savedMonitorPositions).toEqual(reduxState.savedMonitorPositions);
- });
- test('invalidResizeMonitorRect', () => {
- let defaultState;
- let reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */);
- const monitorId = 1;
- // Try to resize a monitor rect that doesn't exist
- expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 1 /* newWidth */, 1 /* newHeight */)))
- .toEqual(reduxState);
- // Add the monitor to resize
- reduxState = monitorLayoutReducer(reduxState, addMonitorRect(monitorId, {x: 100, y: 100}, {x: 200, y: 200}));
- // Invalid newWidth
- expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 'Oregon' /* newWidth */, 1 /* newHeight */)))
- .toEqual(reduxState);
- // Invalid newHeight
- expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newWidth */)))
- .toEqual(reduxState);
- // newWidth < 0
- expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, -1 /* newWidth */, 1 /* newHeight */)))
- .toEqual(reduxState);
- // newHeight < 0
- expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 1 /* newWidth */, -1 /* newHeight */)))
- .toEqual(reduxState);
- });
- test('removeMonitorRect', () => {
- let defaultState;
- const monitorId = 1;
- // Add a monitor rect, move it, and remove it
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId,
- {x: 100, y: 100},
- {x: 200, y: 200}
- ));
- const reduxState2 = monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 0, 0));
- const reduxState3 = monitorLayoutReducer(reduxState2, removeMonitorRect(monitorId));
- expect(reduxState3.monitors[monitorId]).toBeUndefined();
- // Check that saved positions aren't changed by removing monitor
- expect(reduxState3.savedMonitorPositions).toEqual(reduxState2.savedMonitorPositions);
- });
- test('invalidRemoveMonitorRect', () => {
- let defaultState;
- const reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */);
- // Try to remove a monitor rect that doesn't exist
- expect(monitorLayoutReducer(reduxState, resizeMonitorRect(1)))
- .toEqual(reduxState);
- });
- test('getInitialPosition_lineUpTopLeft', () => {
- let defaultState;
- const width = 100;
- const height = 200;
- // Add monitors to right and bottom, but there is a space in the top left
- let reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1,
- {x: width + PADDING, y: 0},
- {x: 100, y: height}
- ));
- reduxState = monitorLayoutReducer(defaultState, addMonitorRect(2,
- {x: 0, y: height + PADDING},
- {x: width, y: 100}
- ));
- // Check that the added monitor appears in the space
- const rect = getInitialPosition(reduxState, 3, width, height);
- expect(rect.upperStart).toBeDefined();
- expect(rect.lowerEnd).toBeDefined();
- expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width);
- expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height);
- expect(rect.upperStart.x).toEqual(PADDING);
- expect(rect.upperStart.y).toEqual(PADDING);
- });
- test('getInitialPosition_savedPosition', () => {
- const monitorId = 1;
- const savedX = 100;
- const savedY = 200;
- const width = 7;
- const height = 8;
- const reduxState = {
- monitors: {},
- savedMonitorPositions: {[monitorId]: {x: savedX, y: savedY}}
- };
- // Check that initial position uses saved state
- const rect = getInitialPosition(reduxState, monitorId, width, height);
- expect(rect.upperStart).toBeDefined();
- expect(rect.lowerEnd).toBeDefined();
- expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width);
- expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height);
- expect(rect.upperStart.x).toEqual(savedX);
- expect(rect.upperStart.y).toEqual(savedY);
- });
- test('getInitialPosition_lineUpLeft', () => {
- let defaultState;
- const monitor1EndY = 60;
- // Add a monitor that takes up the upper left corner
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1, {x: 0, y: 0}, {x: 100, y: monitor1EndY}));
- // Check that added monitor is under it and lines up left
- const rect = getInitialPosition(reduxState, 2, 20 /* width */, 20 /* height */);
- expect(rect.upperStart.y >= monitor1EndY + PADDING).toBeTruthy();
- });
- test('getInitialPosition_lineUpTop', () => {
- let defaultState;
- const monitor1EndX = 100;
- // Add a monitor that takes up the whole left side
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1,
- {x: 0, y: 0},
- {x: monitor1EndX, y: SCREEN_HEIGHT}
- ));
- // Check that added monitor is to the right of it and lines up top
- const rect = getInitialPosition(reduxState, 2, 20 /* width */, 20 /* height */);
- expect(rect.upperStart.y).toEqual(PADDING);
- expect(rect.upperStart.x >= monitor1EndX + PADDING).toBeTruthy();
- });
- test('getInitialPosition_noRoom', () => {
- let defaultState;
- const width = 7;
- const height = 8;
- // Add a monitor that takes up the whole screen
- const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1,
- {x: 0, y: 0},
- {x: SCREEN_WIDTH, y: SCREEN_HEIGHT}
- ));
- // Check that added monitor exists somewhere (we don't care where)
- const rect = getInitialPosition(reduxState, 2, width, height);
- expect(rect.upperStart).toBeDefined();
- expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width);
- expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height);
- });
|