From 04d53042ee39972b7e2b78f337edb6e325918033 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 21 Mar 2024 15:16:10 +0200 Subject: [PATCH] refactor: Tests --- .../src/main/js/library.js | 30 +------- .../rules/NoDeprecatedApi/old_library.js | 36 +++++++++ .../rules/snapshots/NoDeprecatedApi.ts.md | 72 ++++++++++++++++++ test/lib/linter/snapshots/linter.ts.md | 60 +-------------- test/lib/linter/snapshots/linter.ts.snap | Bin 7838 -> 7509 bytes 5 files changed, 112 insertions(+), 86 deletions(-) create mode 100644 test/fixtures/linter/rules/NoDeprecatedApi/old_library.js diff --git a/test/fixtures/linter/projects/library.with.custom.paths/src/main/js/library.js b/test/fixtures/linter/projects/library.with.custom.paths/src/main/js/library.js index 83159d231..d31c50a39 100644 --- a/test/fixtures/linter/projects/library.with.custom.paths/src/main/js/library.js +++ b/test/fixtures/linter/projects/library.with.custom.paths/src/main/js/library.js @@ -6,36 +6,10 @@ * Initialization Code and shared classes of library library.with.custom.paths. */ sap.ui.define([ - "sap/ui/core/library", - "sap/ui/core/Lib", -], function (coreLib, Library) { + "sap/ui/core/library" +], function () { "use strict"; - Library.init(); - Library.init("a"); - Library.init({}); - Library.init({ - test: 12 - }); - Library.init({ - apiVersion: "23" - }); - Library.init({ - apiVersion: 11 - }); - Library.init({ - apiVersion: "2" - }); - Library.init({ - apiVersion: 2 - }); - - // Should be ignored - Library.load({ - apiVersion: 23 - }) - - // delegate further initialization of this library to the Core // Hint: sap.ui.getCore() must still be used to support preload with sync bootstrap! sap.ui.getCore().initLibrary({ diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/old_library.js b/test/fixtures/linter/rules/NoDeprecatedApi/old_library.js new file mode 100644 index 000000000..f2f74903f --- /dev/null +++ b/test/fixtures/linter/rules/NoDeprecatedApi/old_library.js @@ -0,0 +1,36 @@ +/*! + * ${copyright} + */ + +/** + * Initialization Code and shared classes of library library.with.custom.paths. + */ +sap.ui.define([ + "sap/ui/core/Lib", +], function (Library) { + "use strict"; + + Library.init(); + Library.init("a"); + Library.init({}); + Library.init({ + test: 12 + }); + Library.init({ + apiVersion: "23" + }); + Library.init({ + apiVersion: 11 + }); + Library.init({ + apiVersion: "2" + }); + Library.init({ + apiVersion: 2 + }); + + // Should be ignored + Library.load({ + apiVersion: 23 + }); +}); diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md index 12c97140b..c403e3c8c 100644 --- a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md +++ b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md @@ -1018,6 +1018,78 @@ Generated by [AVA](https://avajs.dev). }, ] +## General: old_library.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 7, + fatalErrorCount: 0, + filePath: 'old_library.js', + messages: [ + { + column: 2, + fatal: undefined, + line: 13, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 2, + fatal: undefined, + line: 14, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 2, + fatal: undefined, + line: 15, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 2, + fatal: undefined, + line: 16, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 15, + fatal: undefined, + line: 20, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 15, + fatal: undefined, + line: 23, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + { + column: 15, + fatal: undefined, + line: 26, + message: 'Call to Library.init() must be declared with property {apiVersion: 2}', + ruleId: 'ui5-linter-no-partially-deprecated-api', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + ## General: sap.ui.jsview.js > Snapshot 1 diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index cdbc22a70..e9240493e 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -900,7 +900,7 @@ Generated by [AVA](https://avajs.dev). }, { coverageInfo: [], - errorCount: 9, + errorCount: 2, fatalErrorCount: 0, filePath: 'src/main/js/library.js', messages: [ @@ -908,62 +908,6 @@ Generated by [AVA](https://avajs.dev). column: 2, fatal: undefined, line: 14, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 2, - fatal: undefined, - line: 15, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 2, - fatal: undefined, - line: 16, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 2, - fatal: undefined, - line: 17, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 15, - fatal: undefined, - line: 21, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 15, - fatal: undefined, - line: 24, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 15, - fatal: undefined, - line: 27, - message: 'Call to Library.init() must be declared with property {apiVersion: 2}', - ruleId: 'ui5-linter-no-partially-deprecated-api', - severity: 2, - }, - { - column: 2, - fatal: undefined, - line: 41, message: 'Call to deprecated function \'initLibrary\' of class \'Core\'', messageDetails: 'Deprecated test message', ruleId: 'ui5-linter-no-deprecated-api', @@ -972,7 +916,7 @@ Generated by [AVA](https://avajs.dev). { column: 2, fatal: undefined, - line: 41, + line: 14, message: 'Call to deprecated function \'getCore\' (sap.ui.getCore)', messageDetails: 'Deprecated test message', ruleId: 'ui5-linter-no-deprecated-api', diff --git a/test/lib/linter/snapshots/linter.ts.snap b/test/lib/linter/snapshots/linter.ts.snap index 8a4ca01c983f535ad0984c2248a5b1c3cab795ec..bfa35bfa06e50ffec1020832073db00effed4399 100644 GIT binary patch literal 7509 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