249 lines
12 KiB
JavaScript
249 lines
12 KiB
JavaScript
// Copyright (C) CVAT.ai Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
/// <reference types="cypress" />
|
|
|
|
context('Customizable Shortcuts', () => {
|
|
const taskName = 'A task with markdown';
|
|
const serverFiles = ['images/image_1.jpg'];
|
|
const createRectangleShape2Points = {
|
|
points: 'By 2 Points',
|
|
type: 'Shape',
|
|
labelName: 'label 1',
|
|
firstX: 250,
|
|
firstY: 350,
|
|
secondX: 350,
|
|
secondY: 450,
|
|
};
|
|
let taskID = null;
|
|
let jobID = null;
|
|
|
|
const task = {
|
|
labels: [
|
|
{
|
|
name: 'label 1',
|
|
attributes: [
|
|
{
|
|
name: 'attribute 1',
|
|
mutable: true,
|
|
input_type: 'checkbox',
|
|
default_value: 'false',
|
|
values: ['false'],
|
|
},
|
|
],
|
|
type: 'any',
|
|
}, {
|
|
name: 'label 2',
|
|
attributes: [],
|
|
type: 'any',
|
|
}, {
|
|
name: 'label 3',
|
|
attributes: [],
|
|
type: 'any',
|
|
},
|
|
],
|
|
name: taskName,
|
|
project_id: null,
|
|
source_storage: { location: 'local' },
|
|
target_storage: { location: 'local' },
|
|
};
|
|
const storage = {
|
|
server_files: serverFiles,
|
|
image_quality: 70,
|
|
use_zip_chunks: true,
|
|
use_cache: true,
|
|
sorting_method: 'lexicographical',
|
|
};
|
|
|
|
before(() => {
|
|
cy.visit('/auth/login');
|
|
cy.login();
|
|
cy.get('.cvat-tasks-page').should('exist').and('be.visible');
|
|
cy.url().should('contain', '/tasks');
|
|
cy.headlessCreateTask(task, storage).then((response) => {
|
|
taskID = response.taskID;
|
|
[jobID] = response.jobIDs;
|
|
});
|
|
});
|
|
|
|
function testSearchShortcuts(search) {
|
|
const searchShortcuts = [
|
|
{
|
|
title: 'Save the job',
|
|
description: 'Submit unsaved changes of annotations to the server',
|
|
},
|
|
{
|
|
title: 'Switch automatic bordering',
|
|
description: 'Switch automatic bordering for polygons and polylines during drawing/editing',
|
|
},
|
|
];
|
|
const searchItemClass = search === 'description' ? '.cvat-shortcuts-settings-item-title' : '.cvat-shortcuts-settings-item-description';
|
|
const randomSearchItem = search === 'description' ? 'random description shortcut' : 'random title shortcut';
|
|
cy.get('.cvat-shortcuts-settings-search input').focus();
|
|
for (const searchShortcut of searchShortcuts) {
|
|
cy.get('.cvat-shortcuts-settings-search input').type(search === 'description' ? searchShortcut.description : searchShortcut.title);
|
|
cy.get(searchItemClass).should('have.length', 1);
|
|
cy.get(searchItemClass).contains(search === 'description' ? searchShortcut.title : searchShortcut.description);
|
|
cy.get('.cvat-shortcuts-settings-search input').clear();
|
|
}
|
|
cy.get('.cvat-shortcuts-settings-search input').type(randomSearchItem);
|
|
cy.get(searchItemClass).should('not.exist');
|
|
cy.get('.cvat-shortcuts-settings-search input').clear();
|
|
cy.get('.cvat-shortcuts-settings-search input').blur();
|
|
}
|
|
|
|
function checkShortcutsMounted(label) {
|
|
cy.get('.cvat-shortcuts-modal-window-table').should('exist').and('be.visible');
|
|
for (let i = 1; i < 3; i++) {
|
|
cy.get('.cvat-shortcuts-modal-window-table').contains(label(i));
|
|
}
|
|
}
|
|
|
|
function registerF2(shouldExist) {
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().click();
|
|
cy.realPress(['F2']);
|
|
cy.get('.ant-modal-content').contains('Conflicting shortcuts detected');
|
|
cy.get(
|
|
shouldExist ?
|
|
'.ant-modal-content .ant-modal-confirm-btns .ant-btn-primary' :
|
|
'.ant-modal-content .ant-modal-confirm-btns .ant-btn-default',
|
|
).click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().within(() => {
|
|
cy.get('.ant-select-selection-overflow-item').contains('f2').should(shouldExist ? 'exist' : 'not.exist');
|
|
});
|
|
if (shouldExist) {
|
|
cy.closeSettings();
|
|
cy.realPress(['F2']);
|
|
cy.get('.cvat-shortcuts-modal-window').should('exist').and('be.visible');
|
|
cy.realPress(['F2']);
|
|
}
|
|
}
|
|
|
|
after(() => {
|
|
cy.logout();
|
|
});
|
|
|
|
describe('Searching for a shortcut', () => {
|
|
it('Search a shortcut by its description', () => {
|
|
cy.openSettings();
|
|
cy.contains('Shortcuts').click();
|
|
cy.get('.cvat-shortcuts-settings-search input').should('exist').and('be.visible');
|
|
testSearchShortcuts('description');
|
|
});
|
|
it('Search a shortcut by its title', () => {
|
|
testSearchShortcuts('title');
|
|
});
|
|
});
|
|
|
|
describe('Registration and testing of new shortcuts', () => {
|
|
it('Registering a combination shortcut and testing if it works or not', () => {
|
|
cy.get('.cvat-shortcuts-settings-collapse').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-settings-label').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().click();
|
|
cy.realPress(['Control', 'Space']);
|
|
cy.closeSettings();
|
|
cy.realPress(['Control', 'Space']);
|
|
cy.get('.cvat-shortcuts-modal-window').should('exist').and('be.visible');
|
|
cy.realPress(['Control', 'Space']);
|
|
cy.openSettings();
|
|
registerF2(false);
|
|
registerF2(true);
|
|
cy.reload();
|
|
cy.openSettings();
|
|
cy.contains('Shortcuts').click();
|
|
cy.get('.cvat-shortcuts-settings-collapse').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-settings-label').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().within(() => {
|
|
cy.get('.ant-select-selection-overflow-item').contains('ctrl+space').should('exist');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Saving, Clearing and Restoring to Default', () => {
|
|
it('Cleaning Shortcuts', () => {
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select .ant-select-selection-item-remove').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().within(() => {
|
|
cy.get('.ant-select-selection-overflow-item').contains('f1').should('not.exist');
|
|
});
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select .ant-select-clear').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select').first().within(() => {
|
|
cy.get('.ant-select-selection-overflow-item').should('not.have.text');
|
|
});
|
|
});
|
|
it('Modifying a shortcut via local storage and testing if its conflict is resolved', () => {
|
|
cy.window().then((window) => {
|
|
const { localStorage } = window;
|
|
const clientSettings = JSON.parse(localStorage.getItem('clientSettings'));
|
|
clientSettings.shortcuts.keyMap.SWITCH_SHORTCUTS.sequences = ['f2'];
|
|
localStorage.setItem('clientSettings', JSON.stringify(clientSettings));
|
|
});
|
|
cy.reload();
|
|
cy.openSettings();
|
|
cy.contains('Shortcuts').click();
|
|
cy.get('.cvat-shortcuts-settings-collapse').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-settings-label').first().click();
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select')
|
|
.first().find('span.ant-select-selection-item').should('have.text', 'f2');
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select')
|
|
.eq(1).find('span.ant-select-selection-item').should('not.exist');
|
|
cy.get('.cvat-shortcuts-settings-restore').click();
|
|
cy.get('.cvat-shortcuts-settings-restore-modal .ant-btn-primary').click();
|
|
});
|
|
it('Restoring Defaults', () => {
|
|
cy.get('.cvat-shortcuts-settings-restore').click();
|
|
cy.get('.cvat-shortcuts-settings-restore-modal .ant-btn-primary').click();
|
|
cy.get(
|
|
'.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select .ant-select-selection-overflow-item').first().should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-settings-collapse-item .cvat-shortcuts-settings-select .ant-select-selection-overflow-item').first().contains('f1');
|
|
cy.closeSettings();
|
|
cy.window().then((window) => {
|
|
const { localStorage } = window;
|
|
cy.wrap(localStorage.getItem('clientSettings')).should('exist').and('not.be.null');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Tag Annotation, Attribute Annotation and Labels', () => {
|
|
it('Tag Annotation Mode, Dynamic Titles and Description', () => {
|
|
cy.visit(`/tasks/${taskID}/jobs/${jobID}`);
|
|
cy.get('.cvat-canvas-container').should('exist').and('be.visible');
|
|
cy.createRectangle(createRectangleShape2Points);
|
|
cy.changeWorkspace('Tag annotation');
|
|
cy.get('.cvat-canvas-container').click();
|
|
cy.realPress(['F1']);
|
|
cy.get('.cvat-shortcuts-modal-window').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-modal-window .ant-pagination-item-2').click();
|
|
checkShortcutsMounted((i) => `Create a new tag "label ${i}"`);
|
|
cy.realPress(['F1']);
|
|
});
|
|
it('Attribute Annotation Mode, Dynamic Titles and Description', () => {
|
|
cy.changeWorkspace('Attribute annotation');
|
|
cy.get('.cvat-canvas-container').click();
|
|
cy.realPress(['F1']);
|
|
cy.get('.cvat-shortcuts-modal-window').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-modal-window .ant-pagination-item-3').click();
|
|
cy.get('.cvat-shortcuts-modal-window-table').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-modal-window-table').contains('Assign attribute value false');
|
|
cy.get('.cvat-shortcuts-modal-window-table').contains('Assign attribute value true');
|
|
cy.realPress(['F1']);
|
|
});
|
|
it('Labels, Dynamic Titles and Description', () => {
|
|
cy.changeWorkspace('Standard');
|
|
cy.get('.cvat-canvas-container').click();
|
|
cy.realPress(['F1']);
|
|
cy.get('.cvat-shortcuts-modal-window').should('exist').and('be.visible');
|
|
cy.get('.cvat-shortcuts-modal-window .ant-pagination-options-size-changer').click();
|
|
cy.get('.ant-select-dropdown')
|
|
.not('.ant-select-dropdown-hidden')
|
|
.within(() => {
|
|
cy.contains('100 / page').click();
|
|
});
|
|
checkShortcutsMounted((i) => `Switch label to label ${i}`);
|
|
cy.contains('.cvat-shortcuts-modal-window [type="button"]', 'OK').click();
|
|
});
|
|
});
|
|
});
|