From d35f472dbfe9465fa76f9db722ca4f86bb5bb3e3 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinin Date: Tue, 27 Oct 2020 12:19:13 +0300 Subject: [PATCH 01/12] Added usage npm ci --- CONTRIBUTING.md | 6 +++--- Dockerfile.ui | 8 ++++---- cvat-ui/package-lock.json | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb17d973..277d2bc5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,9 +67,9 @@ patches and features. - Install npm packages for UI and start UI debug server (run the following command from CVAT root directory): ```sh - npm install && \ - cd cvat-core && npm install && \ - cd ../cvat-ui && npm install && npm start + npm ci && \ + cd cvat-core && npm ci && \ + cd ../cvat-ui && npm ci && npm start ``` > Note for Mac users diff --git a/Dockerfile.ui b/Dockerfile.ui index 6af7763c..a12b60d8 100644 --- a/Dockerfile.ui +++ b/Dockerfile.ui @@ -25,19 +25,19 @@ RUN npm config set loglevel info # Install cvat-data dependencies WORKDIR /tmp/cvat-data/ -RUN npm install +RUN npm ci # Install cvat-core dependencies WORKDIR /tmp/cvat-core/ -RUN npm install +RUN npm ci # Install cvat-canvas dependencies WORKDIR /tmp/cvat-canvas/ -RUN npm install +RUN npm ci # Install cvat-ui dependencies WORKDIR /tmp/cvat-ui/ -RUN npm install +RUN npm ci # Build source code COPY cvat-data/ /tmp/cvat-data/ diff --git a/cvat-ui/package-lock.json b/cvat-ui/package-lock.json index 4ed13697..eb1ae134 100644 --- a/cvat-ui/package-lock.json +++ b/cvat-ui/package-lock.json @@ -12874,7 +12874,6 @@ "requires": { "axios": "^0.20.0", "browser-or-node": "^1.2.1", - "cvat-data": "file:../cvat-data", "detect-browser": "^5.0.0", "error-stack-parser": "^2.0.2", "form-data": "^2.5.0", From 617f171d63b8d8bd6a62c5537b8be0aca2ed91f2 Mon Sep 17 00:00:00 2001 From: Kruchinin Date: Tue, 27 Oct 2020 13:37:29 +0300 Subject: [PATCH 02/12] Cypress test. Split/merge features. --- .../case_13_merge_split_features.js | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js diff --git a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js new file mode 100644 index 00000000..3d8913c2 --- /dev/null +++ b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + */ + +/// + +import { taskName } from '../../support/const'; + +context('Merge/split features', () => { + const caseId = '13'; + const createRectangleShape2Points = { + points: 'By 2 Points', + type: 'Shape', + switchLabel: false, + firstX: 250, + firstY: 350, + secondX: 350, + secondY: 450, + }; + const createRectangleShape2PointsSecond = { + points: 'By 2 Points', + type: 'Shape', + switchLabel: false, + firstX: createRectangleShape2Points.firstX + 300, + firstY: createRectangleShape2Points.firstY, + secondX: createRectangleShape2Points.secondX + 300, + secondY: createRectangleShape2Points.secondY, + }; + let iconStarCss = ''; + const frameNum = 0; + + before(() => { + cy.openTaskJob(taskName); + }); + + function checkFrameNumber(frameNum) { + cy.get('.cvat-player-frame-selector').within(() => { + cy.get('input[role="spinbutton"]').should('have.value', frameNum); + }); + } + + describe(`Testing case "${caseId}"`, () => { + it('Create rectangle shape on first frame', () => { + cy.createRectangle(createRectangleShape2Points); + checkFrameNumber(frameNum) + }); + it('Create rectangle shape on third frame with another position', () => { + cy.get('.cvat-player-next-button').click().click(); + checkFrameNumber(frameNum + 2) + cy.createRectangle(createRectangleShape2PointsSecond); + }); + it('Merge the objects with "Merge button"', () => { + cy.get('.cvat-merge-control').click(); + cy.get('#cvat_canvas_shape_2').click(); + cy.get('.cvat-player-previous-button').click().click(); + checkFrameNumber(frameNum) + cy.get('#cvat_canvas_shape_1').click(); + cy.get('.cvat-merge-control').click(); + }); + it('Get a track with keyframes on first and third frame', () => { + cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK'); + cy.get('#cvat-objects-sidebar-state-item-3').within(() => { + cy.get('.ant-row-flex').within(() => { + cy.get('.anticon-star').should('have.css', 'color').then($iconStarCss => { + iconStarCss = $iconStarCss + expect(iconStarCss).to.be.eq('rgb(36, 36, 36)') + }); + }); + }); + cy.get('.cvat-player-next-button').click().click(); + checkFrameNumber(frameNum + 2) + cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK'); + cy.get('#cvat-objects-sidebar-state-item-3').within(() => { + cy.get('.ant-row-flex').within(() => { + cy.get('.anticon-star').should('have.css', 'color', iconStarCss) + }); + }); + }); + it('On the second frame and on the fourth frame the track is invisible', () => { + cy.get('.cvat-player-previous-button').click(); + checkFrameNumber(frameNum + 1) + cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); + cy.get('.cvat-player-next-button').click().click(); + checkFrameNumber(frameNum + 3) + cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); + }); + }); +}); From 343e4e551506dc76556bb55fd3398a360e67e758 Mon Sep 17 00:00:00 2001 From: Kruchinin Date: Tue, 27 Oct 2020 17:19:27 +0300 Subject: [PATCH 03/12] Continue writing the test. Try to fix "Cypress failed to make a connection to the Chrome DevTools Protocol" Adding selection lable name when goint to AAM to cypress command. Fix some test for avid fail when the label order is reversed --- .../case_13_merge_split_features.js | 34 ++++++++++++------- ...d_attribute_correspond_chosen_attribute.js | 15 +++----- .../issue_1750_err_aam_switch_frames.js | 18 +++++----- tests/cypress/plugins/index.js | 8 +++++ tests/cypress/support/commands.js | 27 +++++++++------ 5 files changed, 59 insertions(+), 43 deletions(-) diff --git a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js index 3d8913c2..21e64c1d 100644 --- a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js +++ b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js @@ -1,8 +1,6 @@ -/* - * Copyright (C) 2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - */ +// Copyright (C) 2020 Intel Corporation +// +// SPDX-License-Identifier: MIT /// @@ -43,19 +41,19 @@ context('Merge/split features', () => { describe(`Testing case "${caseId}"`, () => { it('Create rectangle shape on first frame', () => { + checkFrameNumber(frameNum); cy.createRectangle(createRectangleShape2Points); - checkFrameNumber(frameNum) }); it('Create rectangle shape on third frame with another position', () => { cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 2) + checkFrameNumber(frameNum + 2); cy.createRectangle(createRectangleShape2PointsSecond); }); it('Merge the objects with "Merge button"', () => { cy.get('.cvat-merge-control').click(); cy.get('#cvat_canvas_shape_2').click(); cy.get('.cvat-player-previous-button').click().click(); - checkFrameNumber(frameNum) + checkFrameNumber(frameNum); cy.get('#cvat_canvas_shape_1').click(); cy.get('.cvat-merge-control').click(); }); @@ -65,18 +63,18 @@ context('Merge/split features', () => { cy.get('#cvat-objects-sidebar-state-item-3').within(() => { cy.get('.ant-row-flex').within(() => { cy.get('.anticon-star').should('have.css', 'color').then($iconStarCss => { - iconStarCss = $iconStarCss - expect(iconStarCss).to.be.eq('rgb(36, 36, 36)') + iconStarCss = $iconStarCss; + expect(iconStarCss).to.be.eq('rgb(36, 36, 36)'); }); }); }); cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 2) + checkFrameNumber(frameNum + 2); cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK'); cy.get('#cvat-objects-sidebar-state-item-3').within(() => { cy.get('.ant-row-flex').within(() => { - cy.get('.anticon-star').should('have.css', 'color', iconStarCss) + cy.get('.anticon-star').should('have.css', 'color', iconStarCss); }); }); }); @@ -88,5 +86,17 @@ context('Merge/split features', () => { checkFrameNumber(frameNum + 3) cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); }); + // it('Go to the second frame and remove "outside" flag from the track. The track now visible.', () => { + // cy.get('.cvat-player-previous-button').click().click(); + // checkFrameNumber(frameNum + 1) + // cy.get('#cvat-objects-sidebar-state-item-3').within(() => { + // cy.get('.ant-row-flex').within(() => { + // cy.get('.anticon-star').should('have.css', 'color').then($iconStarCss => { + // iconStarCss = $iconStarCss + // expect(iconStarCss).to.be.eq('rgb(36, 36, 36)') + // }); + // }); + // }); + // }); }); }); diff --git a/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js b/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js index 13926213..34458402 100644 --- a/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js +++ b/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js @@ -1,8 +1,6 @@ -/* - * Copyright (C) 2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - */ +// Copyright (C) 2020 Intel Corporation +// +// SPDX-License-Identifier: MIT /// @@ -30,12 +28,7 @@ context('The highlighted attribute in AAM should correspond to the chosen attrib cy.createRectangle(createRectangleShape2Points); }); it('Go to AAM', () => { - cy.changeAnnotationMode('Attribute annotation'); - // Select the necessary label in any case - cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { - cy.get('.ant-select-selection').click(); - }); - cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); + cy.changeAnnotationMode('Attribute annotation', labelName); }); it('Check if highlighted attribute correspond to the chosen attribute in right panel', () => { cy.get('.cvat_canvas_text').within(() => { diff --git a/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js b/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js index ee7652cd..ea972d23 100644 --- a/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js +++ b/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js @@ -1,8 +1,6 @@ -/* - * Copyright (C) 2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - */ +// Copyright (C) 2020 Intel Corporation +// +// SPDX-License-Identifier: MIT /// @@ -39,11 +37,7 @@ context('An error occurs in AAM when switching to 2 frames, if the frames have o cy.createRectangle(createRectangleShape2PointsSecond); }); it('Go to AAM', () => { - cy.get('.cvat-workspace-selector').click(); - cy.get('.ant-select-dropdown-menu-item') - .contains('Attribute annotation') - .click() - .should('contain.text', 'Attribute annotation'); + cy.changeAnnotationMode('Attribute annotation', labelName); }); it('Go to next frame', () => { cy.get('.cvat-player-next-button').click(); @@ -65,6 +59,10 @@ context('An error occurs in AAM when switching to 2 frames, if the frames have o }); it('Page with the error is missing', () => { cy.contains('Oops, something went wrong').should('not.exist'); + cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { + cy.get('.ant-select-selection').click(); + }); + cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); cy.get('.attribute-annotation-sidebar-object-switcher').should('contain', `${labelName} 2 [2/2]`); }); }); diff --git a/tests/cypress/plugins/index.js b/tests/cypress/plugins/index.js index 00a306e2..f1af3f8c 100644 --- a/tests/cypress/plugins/index.js +++ b/tests/cypress/plugins/index.js @@ -16,5 +16,13 @@ module.exports = (on, config) => { return null; }, }); + // Try to resolve "Cypress failed to make a connection to the Chrome DevTools Protocol" + // https://github.com/cypress-io/cypress/issues/7450 + on('before:browser:launch', (browser, launchOptions) => { + if (browser.name === 'chrome' && browser.isHeadless) { + launchOptions.args.push('--disable-gpu'); + return launchOptions + } + }); return config; }; diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index 889551c4..076c246d 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -1,8 +1,6 @@ -/* - * Copyright (C) 2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - */ +// Copyright (C) 2020 Intel Corporation +// +// SPDX-License-Identifier: MIT /// @@ -124,10 +122,12 @@ Cypress.Commands.add('switchLabel', (labelName) => { }); Cypress.Commands.add('checkObjectParameters', (objectParameters, objectType) => { - cy.get('.cvat-objects-sidebar-state-item').then((objectSidebar) => { - cy.get(`#cvat_canvas_shape_${objectSidebar.length}`).should('exist').and('be.visible'); - cy.get(`#cvat-objects-sidebar-state-item-${objectSidebar.length}`) - .should('contain', objectSidebar.length).and('contain', `${objectType} ${objectParameters.type.toUpperCase()}`).within(() => { + cy.get('.cvat_canvas_shape').last().should('have.attr', 'id').then(($cvatCanvasShapeId) => { + const arrCvatCanvasShapeId = $cvatCanvasShapeId.split('_') + const idNumCanvasShape = arrCvatCanvasShapeId[arrCvatCanvasShapeId.length - 1] + cy.get(`#cvat_canvas_shape_${idNumCanvasShape}`).should('exist').and('be.visible'); + cy.get(`#cvat-objects-sidebar-state-item-${idNumCanvasShape}`) + .should('contain', idNumCanvasShape).and('contain', `${objectType} ${objectParameters.type.toUpperCase()}`).within(() => { cy.get('.ant-select-selection-selected-value').should('have.text', selectedValueGlobal); }); }); @@ -217,10 +217,17 @@ Cypress.Commands.add('closeSettings', () => { }); }); -Cypress.Commands.add('changeAnnotationMode', (mode) => { +Cypress.Commands.add('changeAnnotationMode', (mode, labelName) => { cy.get('.cvat-workspace-selector').click(); cy.get('.ant-select-dropdown-menu-item').contains(mode).click(); cy.get('.cvat-workspace-selector').should('contain.text', mode); + if (mode === 'Attribute annotation') { + // Select the necessary label in any case + cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { + cy.get('.ant-select-selection').click(); + }); + cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); + } }); Cypress.Commands.add('createCuboid', (createCuboidParams) => { From c9de0b98798062bbeebfd5405fe10649e91df429 Mon Sep 17 00:00:00 2001 From: Kruchinin Date: Wed, 28 Oct 2020 15:09:41 +0300 Subject: [PATCH 04/12] Finish writing the test. --- .../case_13_merge_split_features.js | 86 +++++++++++++------ 1 file changed, 58 insertions(+), 28 deletions(-) diff --git a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js index 21e64c1d..d67ec05b 100644 --- a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js +++ b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js @@ -26,8 +26,10 @@ context('Merge/split features', () => { secondX: createRectangleShape2Points.secondX + 300, secondY: createRectangleShape2Points.secondY, }; - let iconStarCss = ''; const frameNum = 0; + // Check the 'X' coordinate. 'Y' coordinate is the same. + let xCoordinatesObjectFirstFrame = 0; + let xCoordinatesObjectThirdFrame = 0; before(() => { cy.openTaskJob(taskName); @@ -43,11 +45,17 @@ context('Merge/split features', () => { it('Create rectangle shape on first frame', () => { checkFrameNumber(frameNum); cy.createRectangle(createRectangleShape2Points); + cy.get('#cvat_canvas_shape_1').should('have.attr', 'x').then(xCoords => { + xCoordinatesObjectFirstFrame = Math.floor(xCoords); + }); }); it('Create rectangle shape on third frame with another position', () => { cy.get('.cvat-player-next-button').click().click(); checkFrameNumber(frameNum + 2); cy.createRectangle(createRectangleShape2PointsSecond); + cy.get('#cvat_canvas_shape_2').should('have.attr', 'x').then(xCoords => { + xCoordinatesObjectThirdFrame = Math.floor(xCoords); + }); }); it('Merge the objects with "Merge button"', () => { cy.get('.cvat-merge-control').click(); @@ -59,44 +67,66 @@ context('Merge/split features', () => { }); it('Get a track with keyframes on first and third frame', () => { cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); - cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK'); - cy.get('#cvat-objects-sidebar-state-item-3').within(() => { - cy.get('.ant-row-flex').within(() => { - cy.get('.anticon-star').should('have.css', 'color').then($iconStarCss => { - iconStarCss = $iconStarCss; - expect(iconStarCss).to.be.eq('rgb(36, 36, 36)'); - }); - }); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-keyframe-enabled').should('exist'); }); cy.get('.cvat-player-next-button').click().click(); checkFrameNumber(frameNum + 2); cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); - cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK'); - cy.get('#cvat-objects-sidebar-state-item-3').within(() => { - cy.get('.ant-row-flex').within(() => { - cy.get('.anticon-star').should('have.css', 'color', iconStarCss); - }); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-keyframe-enabled').should('exist'); }); }); it('On the second frame and on the fourth frame the track is invisible', () => { cy.get('.cvat-player-previous-button').click(); - checkFrameNumber(frameNum + 1) + checkFrameNumber(frameNum + 1); cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 3) + checkFrameNumber(frameNum + 3); cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); }); - // it('Go to the second frame and remove "outside" flag from the track. The track now visible.', () => { - // cy.get('.cvat-player-previous-button').click().click(); - // checkFrameNumber(frameNum + 1) - // cy.get('#cvat-objects-sidebar-state-item-3').within(() => { - // cy.get('.ant-row-flex').within(() => { - // cy.get('.anticon-star').should('have.css', 'color').then($iconStarCss => { - // iconStarCss = $iconStarCss - // expect(iconStarCss).to.be.eq('rgb(36, 36, 36)') - // }); - // }); - // }); - // }); + it('Go to the second frame and remove "outside" flag from the track. The track now visible.', () => { + cy.get('.cvat-player-previous-button').click().click(); + checkFrameNumber(frameNum + 1); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-outside').click(); + cy.get('.cvat-object-item-button-outside-enabled').should('not.exist'); + }); + cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); + }); + it('Remove "keyframe" flag from the track. Track now interpolated between position on the first and the third frames.', () => { + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-keyframe').click(); + cy.get('.cvat-object-item-button-keyframe-enabled').should('not.exist'); + }); + cy.get('#cvat_canvas_shape_3').should('have.attr', 'x').then(xCoords => { + // expected 9785 to be within 9642..9928 + expect(Math.floor(xCoords)).to.be.within(xCoordinatesObjectFirstFrame, xCoordinatesObjectThirdFrame); + }); + }); + it('On the fourth frame remove "keyframe" flag from the track. The track now visible and "outside" flag is disabled.', () => { + cy.get('.cvat-player-next-button').click().click(); + checkFrameNumber(frameNum + 3); + cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-keyframe').click(); + cy.get('.cvat-object-item-button-keyframe-enabled').should('not.exist'); + cy.get('.cvat-object-item-button-outside-enabled').should('not.exist'); + }); + cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); + }); + it('Split a track with "split" button. Previous track became invisible (has "outside" flag). One more track and it is visible.', () => { + cy.get('.cvat-split-track-control').click(); + // A single click does not reproduce the split a track scenario in cypress test. + cy.get('#cvat_canvas_shape_3').click().click(); + cy.get('#cvat_canvas_shape_4').should('exist').and('be.hidden'); + cy.get('#cvat-objects-sidebar-state-item-4').should('contain', '4').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-outside-enabled').should('exist'); + }); + cy.get('#cvat_canvas_shape_5').should('exist').and('be.visible'); + cy.get('#cvat-objects-sidebar-state-item-5').should('contain', '5').and('contain', 'RECTANGLE TRACK').within(() => { + cy.get('.cvat-object-item-button-outside-enabled').should('not.exist'); + cy.get('.cvat-object-item-button-keyframe-enabled').should('exist'); + }); + }); }); }); From 0baeee7e03a6fc0a5ae0030181f8147ac097847c Mon Sep 17 00:00:00 2001 From: Dmitry Kalinin Date: Wed, 28 Oct 2020 17:42:02 +0300 Subject: [PATCH 05/12] Added CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49d49d3b..fd6157ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated `docker-compose` file version from `2.3` to `3.3`() - Added auto inference of url schema from host in CLI, if provided () - Track frames in skips between annotation is presented in MOT and MOTS formats are marked `outside` () +- UI packages installation with `npm ci` instead of `npm install` () ### Deprecated From b4b1971c3e8ad7e93c26ccdf17c906259da44578 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinin Date: Wed, 28 Oct 2020 17:45:00 +0300 Subject: [PATCH 06/12] Fixed README --- cvat-core/README.md | 2 +- cvat-ui/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat-core/README.md b/cvat-core/README.md index 487de911..22d8faa9 100644 --- a/cvat-core/README.md +++ b/cvat-core/README.md @@ -18,7 +18,7 @@ If you make changes in this package, please do following: - Dependencies installation ```bash -npm install +npm ci ``` - Building the module from sources in the `dist` directory: diff --git a/cvat-ui/README.md b/cvat-ui/README.md index d020214a..c32879e6 100644 --- a/cvat-ui/README.md +++ b/cvat-ui/README.md @@ -20,7 +20,7 @@ you also need to do `npm install` to update `package-lock.json` - Installing dependencies: ```bash -cd ../cvat-core && npm install && cd - && npm install +cd ../cvat-core && npm ci && cd - && npm ci ``` - Running development UI server with autorebuild on change From 611f332238d7b0a6f84c53e508ad6979c0530cab Mon Sep 17 00:00:00 2001 From: Zhiltsov Max Date: Wed, 28 Oct 2020 17:57:01 +0300 Subject: [PATCH 07/12] update datumaro to 0.1.3 --- cvat/requirements/base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/requirements/base.txt b/cvat/requirements/base.txt index 60613b43..4d9dabf1 100644 --- a/cvat/requirements/base.txt +++ b/cvat/requirements/base.txt @@ -44,4 +44,4 @@ tensorflow==2.2.1 # Optional requirement of Datumaro # archives. Don't use as a python module because it has GPL license. patool==1.12 diskcache==5.0.2 -git+https://github.com/openvinotoolkit/datumaro@v0.1.2 \ No newline at end of file +git+https://github.com/openvinotoolkit/datumaro@v0.1.3 \ No newline at end of file From 1cb0fabd39dafcd8b5845df1ca86c65dd7cdca8b Mon Sep 17 00:00:00 2001 From: Zhiltsov Max Date: Wed, 28 Oct 2020 17:57:16 +0300 Subject: [PATCH 08/12] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49d49d3b..b13c3526 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Exception: Cannot read property "each" of undefined after drawing a single point () - Cannot read property 'label' of undefined (Fixed?) () - Excluded track frames marked `outside` in `CVAT for Images` export () +- An error on exporting not `jpg` or `png` images in TF Detection API format () ### Security From bac7c7c24b6d5cdb51a102ae67e8cb2a8c99e07a Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Thu, 29 Oct 2020 22:02:53 +0000 Subject: [PATCH 09/12] fix: upgrade detect-browser from 5.1.1 to 5.2.0 Snyk has created this PR to upgrade detect-browser from 5.1.1 to 5.2.0. See this package in npm: https://www.npmjs.com/package/detect-browser See this project in Snyk: https://app.snyk.io/org/cvat/project/6ec290d2-fdd9-480b-aeef-3552213525dd?utm_source=github&utm_medium=upgrade-pr --- cvat-core/package-lock.json | 10 +++------- cvat-core/package.json | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/cvat-core/package-lock.json b/cvat-core/package-lock.json index 0b31ce41..6128b1d4 100644 --- a/cvat-core/package-lock.json +++ b/cvat-core/package-lock.json @@ -2822,10 +2822,6 @@ }, "cvat-data": { "version": "file:../cvat-data", - "requires": { - "async-mutex": "^0.2.4", - "jszip": "3.5.0" - }, "dependencies": { "@babel/cli": { "version": "7.6.4", @@ -9637,9 +9633,9 @@ } }, "detect-browser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.1.1.tgz", - "integrity": "sha512-5n2aWI57qC3kZaK4j2zYsG6L1LrxgLptGCNhMQgdKhVn6cSdcq43pp6xHPfTHG3TYM6myF4tIPWiZtfdVDgb9w==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz", + "integrity": "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==" }, "detect-file": { "version": "1.0.0", diff --git a/cvat-core/package.json b/cvat-core/package.json index ece057ac..0227549f 100644 --- a/cvat-core/package.json +++ b/cvat-core/package.json @@ -36,7 +36,7 @@ "axios": "^0.20.0", "browser-or-node": "^1.2.1", "cvat-data": "../cvat-data", - "detect-browser": "^5.0.0", + "detect-browser": "^5.2.0", "error-stack-parser": "^2.0.2", "form-data": "^2.5.0", "jest-config": "^24.8.0", From 8028d46f029c1290d189a946174bfced599851a0 Mon Sep 17 00:00:00 2001 From: Kruchinin Date: Fri, 30 Oct 2020 15:56:12 +0300 Subject: [PATCH 10/12] Applying comments. --- .../case_13_merge_split_features.js | 26 +++++-------- ...d_attribute_correspond_chosen_attribute.js | 2 +- .../issue_1540_add_remove_tag.js | 4 +- .../issue_1750_err_aam_switch_frames.js | 7 +--- tests/cypress/support/commands.js | 38 ++++++++++++------- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js index d67ec05b..4db92a6a 100644 --- a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js +++ b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js @@ -35,23 +35,22 @@ context('Merge/split features', () => { cy.openTaskJob(taskName); }); - function checkFrameNumber(frameNum) { + function goCheckFrameNumber(frameNum) { cy.get('.cvat-player-frame-selector').within(() => { - cy.get('input[role="spinbutton"]').should('have.value', frameNum); + cy.get('input[role="spinbutton"]').clear().type(`${frameNum}{Enter}`).should('have.value', frameNum); }); } describe(`Testing case "${caseId}"`, () => { it('Create rectangle shape on first frame', () => { - checkFrameNumber(frameNum); + goCheckFrameNumber(frameNum); cy.createRectangle(createRectangleShape2Points); cy.get('#cvat_canvas_shape_1').should('have.attr', 'x').then(xCoords => { xCoordinatesObjectFirstFrame = Math.floor(xCoords); }); }); it('Create rectangle shape on third frame with another position', () => { - cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 2); + goCheckFrameNumber(frameNum + 2); cy.createRectangle(createRectangleShape2PointsSecond); cy.get('#cvat_canvas_shape_2').should('have.attr', 'x').then(xCoords => { xCoordinatesObjectThirdFrame = Math.floor(xCoords); @@ -60,8 +59,7 @@ context('Merge/split features', () => { it('Merge the objects with "Merge button"', () => { cy.get('.cvat-merge-control').click(); cy.get('#cvat_canvas_shape_2').click(); - cy.get('.cvat-player-previous-button').click().click(); - checkFrameNumber(frameNum); + goCheckFrameNumber(frameNum); cy.get('#cvat_canvas_shape_1').click(); cy.get('.cvat-merge-control').click(); }); @@ -70,24 +68,20 @@ context('Merge/split features', () => { cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { cy.get('.cvat-object-item-button-keyframe-enabled').should('exist'); }); - cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 2); + goCheckFrameNumber(frameNum + 2); cy.get('#cvat_canvas_shape_3').should('exist').and('be.visible'); cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { cy.get('.cvat-object-item-button-keyframe-enabled').should('exist'); }); }); it('On the second frame and on the fourth frame the track is invisible', () => { - cy.get('.cvat-player-previous-button').click(); - checkFrameNumber(frameNum + 1); + goCheckFrameNumber(frameNum + 1); cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); - cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 3); + goCheckFrameNumber(frameNum + 3); cy.get('#cvat_canvas_shape_3').should('exist').and('be.hidden'); }); it('Go to the second frame and remove "outside" flag from the track. The track now visible.', () => { - cy.get('.cvat-player-previous-button').click().click(); - checkFrameNumber(frameNum + 1); + goCheckFrameNumber(frameNum + 1); cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { cy.get('.cvat-object-item-button-outside').click(); cy.get('.cvat-object-item-button-outside-enabled').should('not.exist'); @@ -106,7 +100,7 @@ context('Merge/split features', () => { }); it('On the fourth frame remove "keyframe" flag from the track. The track now visible and "outside" flag is disabled.', () => { cy.get('.cvat-player-next-button').click().click(); - checkFrameNumber(frameNum + 3); + goCheckFrameNumber(frameNum + 3); cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { cy.get('.cvat-object-item-button-keyframe').click(); cy.get('.cvat-object-item-button-keyframe-enabled').should('not.exist'); diff --git a/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js b/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js index 34458402..991f91d6 100644 --- a/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js +++ b/tests/cypress/integration/actions_tasks_objects/issue_1425_highlighted_attribute_correspond_chosen_attribute.js @@ -28,7 +28,7 @@ context('The highlighted attribute in AAM should correspond to the chosen attrib cy.createRectangle(createRectangleShape2Points); }); it('Go to AAM', () => { - cy.changeAnnotationMode('Attribute annotation', labelName); + cy.changeWorkspace('Attribute annotation', labelName); }); it('Check if highlighted attribute correspond to the chosen attribute in right panel', () => { cy.get('.cvat_canvas_text').within(() => { diff --git a/tests/cypress/integration/actions_tasks_objects/issue_1540_add_remove_tag.js b/tests/cypress/integration/actions_tasks_objects/issue_1540_add_remove_tag.js index 3f5d83be..f5a402ad 100644 --- a/tests/cypress/integration/actions_tasks_objects/issue_1540_add_remove_tag.js +++ b/tests/cypress/integration/actions_tasks_objects/issue_1540_add_remove_tag.js @@ -17,11 +17,11 @@ context('Check if the UI not to crash after remove a tag', () => { describe(`Testing issue "${issueId}"`, () => { it('Add a tag', () => { - cy.changeAnnotationMode('Tag annotation'); + cy.changeWorkspace('Tag annotation'); cy.get('.cvat-tag-annotation-sidebar-buttons').within(() => { cy.get('button').contains('Add tag').click({ force: true }); }); - cy.changeAnnotationMode('Standard'); + cy.changeWorkspace('Standard'); }); it('Remove the tag', () => { cy.get('#cvat-objects-sidebar-state-item-1') diff --git a/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js b/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js index ea972d23..150911ba 100644 --- a/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js +++ b/tests/cypress/integration/actions_tasks_objects/issue_1750_err_aam_switch_frames.js @@ -37,7 +37,7 @@ context('An error occurs in AAM when switching to 2 frames, if the frames have o cy.createRectangle(createRectangleShape2PointsSecond); }); it('Go to AAM', () => { - cy.changeAnnotationMode('Attribute annotation', labelName); + cy.changeWorkspace('Attribute annotation', labelName); }); it('Go to next frame', () => { cy.get('.cvat-player-next-button').click(); @@ -59,10 +59,7 @@ context('An error occurs in AAM when switching to 2 frames, if the frames have o }); it('Page with the error is missing', () => { cy.contains('Oops, something went wrong').should('not.exist'); - cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { - cy.get('.ant-select-selection').click(); - }); - cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); + cy.changeLabelAAM(labelName); cy.get('.attribute-annotation-sidebar-object-switcher').should('contain', `${labelName} 2 [2/2]`); }); }); diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index 076c246d..b81bfe72 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -122,12 +122,16 @@ Cypress.Commands.add('switchLabel', (labelName) => { }); Cypress.Commands.add('checkObjectParameters', (objectParameters, objectType) => { - cy.get('.cvat_canvas_shape').last().should('have.attr', 'id').then(($cvatCanvasShapeId) => { - const arrCvatCanvasShapeId = $cvatCanvasShapeId.split('_') - const idNumCanvasShape = arrCvatCanvasShapeId[arrCvatCanvasShapeId.length - 1] - cy.get(`#cvat_canvas_shape_${idNumCanvasShape}`).should('exist').and('be.visible'); - cy.get(`#cvat-objects-sidebar-state-item-${idNumCanvasShape}`) - .should('contain', idNumCanvasShape).and('contain', `${objectType} ${objectParameters.type.toUpperCase()}`).within(() => { + let listCanvasShapeId = []; + cy.document().then((doc) => { + const listCanvasShape = Array.from(doc.querySelectorAll('.cvat_canvas_shape')); + for (let i = 0; i < listCanvasShape.length; i++) { + listCanvasShapeId.push(listCanvasShape[i].id.match(/\d+$/)); + } + const maxId = Math.max(...listCanvasShapeId); + cy.get(`#cvat_canvas_shape_${maxId}`).should('exist').and('be.visible'); + cy.get(`#cvat-objects-sidebar-state-item-${maxId}`) + .should('contain', maxId).and('contain', `${objectType} ${objectParameters.type.toUpperCase()}`).within(() => { cy.get('.ant-select-selection-selected-value').should('have.text', selectedValueGlobal); }); }); @@ -217,17 +221,23 @@ Cypress.Commands.add('closeSettings', () => { }); }); -Cypress.Commands.add('changeAnnotationMode', (mode, labelName) => { +Cypress.Commands.add('changeWorkspace', (mode, labelName) => { cy.get('.cvat-workspace-selector').click(); cy.get('.ant-select-dropdown-menu-item').contains(mode).click(); cy.get('.cvat-workspace-selector').should('contain.text', mode); - if (mode === 'Attribute annotation') { - // Select the necessary label in any case - cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { - cy.get('.ant-select-selection').click(); - }); - cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); - } + cy.changeLabelAAM(labelName); +}); + +Cypress.Commands.add('changeLabelAAM', (labelName) => { + cy.get('.cvat-workspace-selector').then((value) => { + const cvatWorkspaceSelectorValue = value.text(); + if (cvatWorkspaceSelectorValue === 'Attribute annotation') { + cy.get('.attribute-annotation-sidebar-basics-editor').within(() => { + cy.get('.ant-select-selection').click(); + }); + cy.get('.ant-select-dropdown-menu-item').contains(labelName).click(); + } + }); }); Cypress.Commands.add('createCuboid', (createCuboidParams) => { From 1600340a65df3ba0d5f5fb378f6fdc80c1e16b2d Mon Sep 17 00:00:00 2001 From: Kruchinin Date: Fri, 30 Oct 2020 17:59:31 +0300 Subject: [PATCH 11/12] Deleted unnecessary code. --- .../actions_tasks_objects/case_13_merge_split_features.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js index 4db92a6a..3ef65781 100644 --- a/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js +++ b/tests/cypress/integration/actions_tasks_objects/case_13_merge_split_features.js @@ -99,7 +99,6 @@ context('Merge/split features', () => { }); }); it('On the fourth frame remove "keyframe" flag from the track. The track now visible and "outside" flag is disabled.', () => { - cy.get('.cvat-player-next-button').click().click(); goCheckFrameNumber(frameNum + 3); cy.get('#cvat-objects-sidebar-state-item-3').should('contain', '3').and('contain', 'RECTANGLE TRACK').within(() => { cy.get('.cvat-object-item-button-keyframe').click(); From b9bc4e908963758c4a4c6707176677afca0c3905 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Mon, 2 Nov 2020 02:41:20 +0000 Subject: [PATCH 12/12] fix: upgrade @types/react from 16.9.51 to 16.9.52 Snyk has created this PR to upgrade @types/react from 16.9.51 to 16.9.52. See this package in npm: https://www.npmjs.com/package/@types/react See this project in Snyk: https://app.snyk.io/org/cvat/project/c1f463ee-3776-44c4-b0fa-cd2254d0a094?utm_source=github&utm_medium=upgrade-pr --- cvat-ui/package-lock.json | 6 +++--- cvat-ui/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cvat-ui/package-lock.json b/cvat-ui/package-lock.json index 05cec51c..a78e8173 100644 --- a/cvat-ui/package-lock.json +++ b/cvat-ui/package-lock.json @@ -1208,9 +1208,9 @@ "dev": true }, "@types/react": { - "version": "16.9.51", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.51.tgz", - "integrity": "sha512-lQa12IyO+DMlnSZ3+AGHRUiUcpK47aakMMoBG8f7HGxJT8Yfe+WE128HIXaHOHVPReAW0oDS3KAI0JI2DDe1PQ==", + "version": "16.9.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.52.tgz", + "integrity": "sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/cvat-ui/package.json b/cvat-ui/package.json index 1e70e6e0..581b927b 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@types/platform": "^1.3.3", - "@types/react": "^16.9.51", + "@types/react": "^16.9.52", "@types/react-color": "^3.0.4", "@types/react-dom": "^16.9.0", "@types/react-redux": "^7.1.2",