@sapui5/sap.fe.test 1.97.0 → 1.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -2
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/BaseActions.js +3 -2
- package/src/sap/fe/test/BaseArrangements.js +3 -2
- package/src/sap/fe/test/BaseAssertions.js +3 -2
- package/src/sap/fe/test/ConfirmDialog.js +3 -2
- package/src/sap/fe/test/FCLView.js +3 -2
- package/src/sap/fe/test/FeMocks.js +66 -0
- package/src/sap/fe/test/FeMocks.ts +77 -0
- package/src/sap/fe/test/Flexibility.js +3 -2
- package/src/sap/fe/test/FlexibleColumnLayout.js +3 -2
- package/src/sap/fe/test/JestTemplatingHelper.js +78 -22
- package/src/sap/fe/test/JestTemplatingHelper.ts +66 -22
- package/src/sap/fe/test/JourneyRunner.js +11 -5
- package/src/sap/fe/test/ListReport.js +11 -5
- package/src/sap/fe/test/LocationUtil.js +3 -2
- package/src/sap/fe/test/ObjectPage.js +28 -17
- package/src/sap/fe/test/Shell.js +3 -2
- package/src/sap/fe/test/Stubs.js +3 -2
- package/src/sap/fe/test/TemplatePage.js +3 -2
- package/src/sap/fe/test/TemplatingTestUtils.js +4 -3
- package/src/sap/fe/test/UI5MockHelper.js +234 -45
- package/src/sap/fe/test/UI5MockHelper.ts +127 -12
- package/src/sap/fe/test/Utils.js +3 -14
- package/src/sap/fe/test/api/APIHelper.js +3 -2
- package/src/sap/fe/test/api/BaseAPI.js +5 -9
- package/src/sap/fe/test/api/ChartActions.js +3 -2
- package/src/sap/fe/test/api/ChartAssertions.js +7 -6
- package/src/sap/fe/test/api/DialogAPI.js +17 -4
- package/src/sap/fe/test/api/DialogActions.js +3 -2
- package/src/sap/fe/test/api/DialogAssertions.js +3 -2
- package/src/sap/fe/test/api/DialogCreateActions.js +4 -3
- package/src/sap/fe/test/api/DialogCreateAssertions.js +4 -3
- package/src/sap/fe/test/api/DialogMessageActions.js +19 -3
- package/src/sap/fe/test/api/DialogMessageAssertions.js +4 -3
- package/src/sap/fe/test/api/DialogType.js +3 -2
- package/src/sap/fe/test/api/DialogValueHelpActions.js +4 -3
- package/src/sap/fe/test/api/DialogValueHelpAssertions.js +4 -3
- package/src/sap/fe/test/api/EditState.js +3 -2
- package/src/sap/fe/test/api/FilterBarAPI.js +3 -2
- package/src/sap/fe/test/api/FilterBarActions.js +3 -2
- package/src/sap/fe/test/api/FilterBarAssertions.js +3 -2
- package/src/sap/fe/test/api/FooterAPI.js +3 -2
- package/src/sap/fe/test/api/FooterActionsBase.js +3 -2
- package/src/sap/fe/test/api/FooterActionsOP.js +3 -2
- package/src/sap/fe/test/api/FooterAssertionsBase.js +3 -2
- package/src/sap/fe/test/api/FooterAssertionsOP.js +3 -2
- package/src/sap/fe/test/api/FormAPI.js +3 -2
- package/src/sap/fe/test/api/FormActions.js +3 -2
- package/src/sap/fe/test/api/FormAssertions.js +3 -2
- package/src/sap/fe/test/api/HeaderAPI.js +3 -2
- package/src/sap/fe/test/api/HeaderActions.js +3 -2
- package/src/sap/fe/test/api/HeaderActionsLR.js +3 -2
- package/src/sap/fe/test/api/HeaderAssertions.js +3 -2
- package/src/sap/fe/test/api/HeaderAssertionsLR.js +3 -2
- package/src/sap/fe/test/api/HeaderLR.js +3 -2
- package/src/sap/fe/test/api/KPICardAPI.js +3 -2
- package/src/sap/fe/test/api/KPICardActions.js +43 -0
- package/src/sap/fe/test/api/KPICardAssertions.js +22 -17
- package/src/sap/fe/test/api/TableAPI.js +3 -2
- package/src/sap/fe/test/api/TableActions.js +3 -21
- package/src/sap/fe/test/api/TableAssertions.js +17 -6
- package/src/sap/fe/test/builder/DialogBuilder.js +3 -2
- package/src/sap/fe/test/builder/FEBuilder.js +3 -2
- package/src/sap/fe/test/builder/KPIBuilder.js +14 -4
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +3 -2
- package/src/sap/fe/test/builder/MdcFieldBuilder.js +3 -2
- package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +3 -2
- package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +3 -2
- package/src/sap/fe/test/builder/MdcTableBuilder.js +29 -2
- package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +3 -2
- package/src/sap/fe/test/builder/VMBuilder.js +3 -2
- package/src/sap/fe/test/internal/FEArrangements.js +3 -2
- package/src/sap/fe/test/internal/FEJourneyRunner.js +9 -5
- package/src/sap/fe/test/library.js +4 -3
- package/src/sap/fe/test/massEdit.js +3 -2
- package/ui5.yaml +0 -3
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
import { PhantomUtil } from "sap/fe/macros";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
import _MetadataRequestor from "sap/ui/model/odata/v4/lib/_MetadataRequestor";
|
|
3
|
+
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
4
|
+
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
5
|
+
import Log from "sap/base/Log";
|
|
6
6
|
import xpath from "xpath";
|
|
7
7
|
import * as fs from "fs";
|
|
8
8
|
import { compileSources, to } from "@sap/cds-compiler";
|
|
9
9
|
import { format } from "prettier";
|
|
10
|
-
import
|
|
10
|
+
import BindingParser from "sap/ui/base/BindingParser";
|
|
11
11
|
import { AnyAnnotation, ConverterOutput, EntitySet, Property } from "@sap-ux/annotation-converter";
|
|
12
12
|
import { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
13
|
-
import
|
|
14
|
-
import
|
|
13
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
14
|
+
import InvisibleText from "sap/ui/core/InvisibleText";
|
|
15
15
|
import { ListReportManifestSettings, ObjectPageManifestSettings } from "sap/fe/core/converters/ManifestSettings";
|
|
16
16
|
import { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
|
|
17
17
|
import { IDiagnostics } from "sap/fe/core/converters/TemplateConverter";
|
|
18
|
-
import
|
|
18
|
+
import merge from "sap/base/util/merge";
|
|
19
19
|
import * as path from "path";
|
|
20
20
|
import ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
21
21
|
import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
22
|
+
import TemplateModel from "sap/fe/core/TemplateModel";
|
|
22
23
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
23
24
|
const formatXml = require("xml-formatter");
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
import * as TemplateModel from "sap/fe/core/TemplateModel";
|
|
27
25
|
|
|
28
26
|
Log.setLevel(1 as any, "sap.ui.core.util.XMLPreprocessor");
|
|
29
27
|
jest.setTimeout(40000);
|
|
@@ -38,8 +36,10 @@ const nameSpaceMap = {
|
|
|
38
36
|
"core": "sap.ui.core",
|
|
39
37
|
"m": "sap.m",
|
|
40
38
|
"f": "sap.ui.layout.form",
|
|
39
|
+
"internalMacro": "sap.fe.macros.internal",
|
|
41
40
|
"mdc": "sap.ui.mdc",
|
|
42
41
|
"mdcField": "sap.ui.mdc.field",
|
|
42
|
+
"mdcTable": "sap.ui.mdc.table",
|
|
43
43
|
"u": "sap.ui.unified",
|
|
44
44
|
"macroMicroChart": "sap.fe.macros.microchart",
|
|
45
45
|
"microChart": "sap.suite.ui.microchart"
|
|
@@ -105,8 +105,7 @@ export const serializeXML = function(xmlDom: Node) {
|
|
|
105
105
|
*/
|
|
106
106
|
export const compileCDS = function(sCDSUrl: string) {
|
|
107
107
|
const cdsString = fs.readFileSync(sCDSUrl, "utf-8");
|
|
108
|
-
const
|
|
109
|
-
const edmxContent = to.edmx(csn, { service: "sap.fe.test.JestService" });
|
|
108
|
+
const edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService");
|
|
110
109
|
const dir = path.resolve(sCDSUrl, "..", "gen");
|
|
111
110
|
const edmxUrl = path.resolve(dir, path.basename(sCDSUrl).replace(".cds", ".xml"));
|
|
112
111
|
|
|
@@ -118,6 +117,22 @@ export const compileCDS = function(sCDSUrl: string) {
|
|
|
118
117
|
return edmxUrl;
|
|
119
118
|
};
|
|
120
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Compile CDS to EDMX.
|
|
122
|
+
*
|
|
123
|
+
* @param cds The CDS model. It must define at least one service.
|
|
124
|
+
* @param service The fully-qualified name of the service to compile. Defaults to "sap.fe.test.JestService".
|
|
125
|
+
* @returns The compiled service model as EDMX.
|
|
126
|
+
*/
|
|
127
|
+
export function cds2edmx(cds: string, service: string = "sap.fe.test.JestService") {
|
|
128
|
+
const csn = compileSources({ "string.cds": cds }, {});
|
|
129
|
+
const edmx = to.edmx(csn, { service: service, odataForeignKeys: true, odataFormat: "structured", odataContainment: false });
|
|
130
|
+
if (!edmx) {
|
|
131
|
+
throw new Error(`Compilation failed. Hint: Make sure that the CDS model defines service ${service}.`);
|
|
132
|
+
}
|
|
133
|
+
return edmx;
|
|
134
|
+
}
|
|
135
|
+
|
|
121
136
|
export const getFakeSideEffectsService = async function(oMetaModel: ODataMetaModel): Promise<any> {
|
|
122
137
|
const oServiceContext = { scopeObject: {}, scopeType: "", settings: {} };
|
|
123
138
|
return new SideEffectsFactory().createInstance(oServiceContext).then(function(oServiceInstance: any) {
|
|
@@ -200,15 +215,41 @@ export const evaluateBinding = function(bindingString: string, ...args: any[]) {
|
|
|
200
215
|
return bindingElement.formatter.apply(undefined, args);
|
|
201
216
|
};
|
|
202
217
|
|
|
203
|
-
|
|
218
|
+
type ModelContent = {
|
|
219
|
+
[name: string]: any;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Evaluate a binding against a model.
|
|
224
|
+
*
|
|
225
|
+
* @param bindingString The binding string.
|
|
226
|
+
* @param modelContent Content of the default model to use for evaluation.
|
|
227
|
+
* @param namedModelsContent Contents of additional, named models to use.
|
|
228
|
+
* @returns The evaluated binding.
|
|
229
|
+
*/
|
|
230
|
+
export function evaluateBindingWithModel(
|
|
231
|
+
bindingString: string | undefined,
|
|
232
|
+
modelContent: ModelContent,
|
|
233
|
+
namedModelsContent?: { [modelName: string]: ModelContent }
|
|
234
|
+
): string {
|
|
204
235
|
const bindingElement = BindingParser.complexParser(bindingString);
|
|
205
|
-
const jsonModel = new JSONModel(modelContent);
|
|
206
236
|
const text = new InvisibleText();
|
|
207
237
|
text.bindProperty("text", bindingElement);
|
|
208
|
-
|
|
209
|
-
|
|
238
|
+
|
|
239
|
+
const defaultModel = new JSONModel(modelContent);
|
|
240
|
+
text.setModel(defaultModel);
|
|
241
|
+
text.setBindingContext(defaultModel.createBindingContext("/"));
|
|
242
|
+
|
|
243
|
+
if (namedModelsContent) {
|
|
244
|
+
for (const [name, content] of Object.entries(namedModelsContent)) {
|
|
245
|
+
const model = new JSONModel(content);
|
|
246
|
+
text.setModel(model, name);
|
|
247
|
+
text.setBindingContext(model.createBindingContext("/"), name);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
210
251
|
return text.getText();
|
|
211
|
-
}
|
|
252
|
+
}
|
|
212
253
|
|
|
213
254
|
export const getTemplatingResult = async function(
|
|
214
255
|
xmlInput: string,
|
|
@@ -275,7 +316,7 @@ export const getTemplatedXML = async function(
|
|
|
275
316
|
*
|
|
276
317
|
* @param {string} name Fully qualified name of the fragment to be tested.
|
|
277
318
|
* @param {object} testData Test data consisting
|
|
278
|
-
* @returns
|
|
319
|
+
* @returns Templated fragment as string
|
|
279
320
|
*/
|
|
280
321
|
export async function processFragment(name: string, testData: { [model: string]: object }): Promise<string> {
|
|
281
322
|
const inputXml = `<root><core:Fragment fragmentName="${name}" type="XML" xmlns:core="sap.ui.core" /></root>`;
|
|
@@ -284,11 +325,11 @@ export async function processFragment(name: string, testData: { [model: string]:
|
|
|
284
325
|
|
|
285
326
|
// build model and bindings for given test data
|
|
286
327
|
const settings = {
|
|
287
|
-
models: {} as { [name: string]: JSONModel
|
|
328
|
+
models: {} as { [name: string]: JSONModel },
|
|
288
329
|
bindingContexts: {} as { [name: string]: object }
|
|
289
330
|
};
|
|
290
331
|
for (const model in testData) {
|
|
291
|
-
const jsonModel = new JSONModel
|
|
332
|
+
const jsonModel = new JSONModel();
|
|
292
333
|
jsonModel.setData(testData[model]);
|
|
293
334
|
settings.models[model] = jsonModel;
|
|
294
335
|
settings.bindingContexts[model] = settings.models[model].createBindingContext("/");
|
|
@@ -305,7 +346,10 @@ export async function processFragment(name: string, testData: { [model: string]:
|
|
|
305
346
|
}
|
|
306
347
|
}
|
|
307
348
|
|
|
308
|
-
|
|
349
|
+
// Keep the fragment result as child of root node when fragment generates multiple root controls
|
|
350
|
+
const xmlResult = resultDoc.children.length > 1 ? resultDoc.outerHTML : resultDoc.innerHTML;
|
|
351
|
+
|
|
352
|
+
return formatXml(xmlResult, {
|
|
309
353
|
filter: (node: any) => node.type !== "Comment"
|
|
310
354
|
});
|
|
311
355
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
/* global QUnit */
|
|
6
7
|
sap.ui.define(
|
|
@@ -70,7 +71,9 @@ sap.ui.define(
|
|
|
70
71
|
* @param {object} [mSettings.launchParameters] The URL launch parameters
|
|
71
72
|
* @param {boolean} [mSettings.async] If false (default), only one JourneyRunner is executed at a time
|
|
72
73
|
* @param {Function[] | string[]} vJourneys The journeys to be executed. If a journey is represented as a string, it will be interpreted
|
|
73
|
-
* as a module path to the file that should be loaded. Else it is expected to be a function
|
|
74
|
+
* as a module path to the file that should be loaded. Else it is expected to be a function.
|
|
75
|
+
* Alternatively, instead of being wrapped in an array, the journeys can also be given as separate parameters:
|
|
76
|
+
* <pre>.run(mSettings, Journey1, Journey2, ...)</pre>
|
|
74
77
|
* @returns {object} A <code>Promise</code> that is resolved after all tests have been executed
|
|
75
78
|
*
|
|
76
79
|
* @function
|
|
@@ -86,8 +89,11 @@ sap.ui.define(
|
|
|
86
89
|
mSettings = Utils.mergeObjects(this._mInstanceSettings, mSettings);
|
|
87
90
|
}
|
|
88
91
|
|
|
89
|
-
var aJourneys =
|
|
90
|
-
|
|
92
|
+
var aJourneys = Array.prototype.slice.call(arguments, iJourneyParameterIndex); // journey-related parameter(s) as array
|
|
93
|
+
if (aJourneys && aJourneys.length && Array.isArray(aJourneys[0])) { // if the first journey parameter is an array...
|
|
94
|
+
aJourneys = aJourneys[0]; // ...then unwrap it, to use this array itself
|
|
95
|
+
}
|
|
96
|
+
var bAsync = mSettings.async,
|
|
91
97
|
pSyncPromise;
|
|
92
98
|
|
|
93
99
|
if (bAsync) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(
|
|
6
7
|
[
|
|
@@ -17,7 +18,8 @@ sap.ui.define(
|
|
|
17
18
|
"sap/fe/test/api/FooterAssertionsBase",
|
|
18
19
|
"sap/fe/test/api/HeaderActionsLR",
|
|
19
20
|
"sap/fe/test/api/HeaderAssertionsLR",
|
|
20
|
-
"sap/fe/test/api/KPICardAssertions"
|
|
21
|
+
"sap/fe/test/api/KPICardAssertions",
|
|
22
|
+
"sap/fe/test/api/KPICardActions"
|
|
21
23
|
],
|
|
22
24
|
function(
|
|
23
25
|
Utils,
|
|
@@ -33,7 +35,8 @@ sap.ui.define(
|
|
|
33
35
|
FooterAssertionsBase,
|
|
34
36
|
HeaderActionsLR,
|
|
35
37
|
HeaderAssertionsLR,
|
|
36
|
-
KPICardAssertions
|
|
38
|
+
KPICardAssertions,
|
|
39
|
+
KPICardActions
|
|
37
40
|
) {
|
|
38
41
|
"use strict";
|
|
39
42
|
|
|
@@ -131,6 +134,9 @@ sap.ui.define(
|
|
|
131
134
|
id: sChartId
|
|
132
135
|
});
|
|
133
136
|
},
|
|
137
|
+
onKPICard: function() {
|
|
138
|
+
return new KPICardActions(KPIBuilder.create(this));
|
|
139
|
+
},
|
|
134
140
|
/**
|
|
135
141
|
* Returns a {@link sap.fe.test.api.FilterBarActions} instance.
|
|
136
142
|
*
|
|
@@ -350,7 +356,7 @@ sap.ui.define(
|
|
|
350
356
|
},
|
|
351
357
|
iSeeFlpLink: function(sDescription) {
|
|
352
358
|
return OpaBuilder.create(this)
|
|
353
|
-
.hasType("sap.
|
|
359
|
+
.hasType("sap.m.Link")
|
|
354
360
|
.isDialogElement(true)
|
|
355
361
|
.hasProperties({ text: sDescription })
|
|
356
362
|
.description("FLP link with text '" + sDescription + "' is present")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"], function(OpaBuilder, Opa5, Utils) {
|
|
6
7
|
"use strict";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(
|
|
6
7
|
[
|
|
@@ -39,8 +40,10 @@ sap.ui.define(
|
|
|
39
40
|
) {
|
|
40
41
|
"use strict";
|
|
41
42
|
|
|
42
|
-
function getTableId(sNavProperty) {
|
|
43
|
-
return
|
|
43
|
+
function getTableId(sNavProperty, sQualifier) {
|
|
44
|
+
return sQualifier
|
|
45
|
+
? "fe::table::" + sNavProperty.split("/").join("::") + "::LineItem::" + sQualifier
|
|
46
|
+
: "fe::table::" + sNavProperty.split("/").join("::") + "::LineItem";
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
function getChartId(sEntityType) {
|
|
@@ -182,7 +185,7 @@ sap.ui.define(
|
|
|
182
185
|
*/
|
|
183
186
|
onTable: function(vTableIdentifier) {
|
|
184
187
|
if (!Utils.isOfType(vTableIdentifier, String)) {
|
|
185
|
-
vTableIdentifier = { id: getTableId(vTableIdentifier.property) };
|
|
188
|
+
vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
|
|
186
189
|
}
|
|
187
190
|
return this._onTable(vTableIdentifier);
|
|
188
191
|
},
|
|
@@ -297,13 +300,15 @@ sap.ui.define(
|
|
|
297
300
|
.execute();
|
|
298
301
|
},
|
|
299
302
|
iEnableLink: function(sText) {
|
|
300
|
-
return
|
|
301
|
-
.
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
303
|
+
return (
|
|
304
|
+
OpaBuilder.create(this)
|
|
305
|
+
.hasType("sap.m.ColumnListItem")
|
|
306
|
+
//.hasAggregationProperties("cells", { text: sText })
|
|
307
|
+
.isDialogElement()
|
|
308
|
+
.doPress("selectMulti")
|
|
309
|
+
.description("The CheckBox for link " + sText + " is selected")
|
|
310
|
+
.execute()
|
|
311
|
+
);
|
|
307
312
|
},
|
|
308
313
|
iPressKeyboardShortcutOnSection: function(sShortcut, mProperties) {
|
|
309
314
|
return this._iPressKeyboardShortcut(undefined, sShortcut, mProperties, "sap.uxap.ObjectPageSection");
|
|
@@ -463,7 +468,7 @@ sap.ui.define(
|
|
|
463
468
|
*/
|
|
464
469
|
onTable: function(vTableIdentifier) {
|
|
465
470
|
if (!Utils.isOfType(vTableIdentifier, String)) {
|
|
466
|
-
vTableIdentifier = { id: getTableId(vTableIdentifier.property) };
|
|
471
|
+
vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
|
|
467
472
|
}
|
|
468
473
|
return this._onTable(vTableIdentifier);
|
|
469
474
|
},
|
|
@@ -641,7 +646,7 @@ sap.ui.define(
|
|
|
641
646
|
},
|
|
642
647
|
iSeeFlpLink: function(sDescription) {
|
|
643
648
|
return OpaBuilder.create(this)
|
|
644
|
-
.hasType("sap.
|
|
649
|
+
.hasType("sap.m.Link")
|
|
645
650
|
.isDialogElement(true)
|
|
646
651
|
.hasProperties({ text: sDescription })
|
|
647
652
|
.description("FLP link with text '" + sDescription + "' is present")
|
|
@@ -814,12 +819,18 @@ sap.ui.define(
|
|
|
814
819
|
.hasType("sap.m.MessageView")
|
|
815
820
|
.check(function(oMessageView) {
|
|
816
821
|
var messages = oMessageView[0].getItems();
|
|
817
|
-
|
|
822
|
+
var bMessageObjectHasExpectedValues =
|
|
818
823
|
messages[iMessagePosition].getGroupName() === oBoundMessageInfo.GroupLabel &&
|
|
819
824
|
messages[iMessagePosition].getTitle() === oBoundMessageInfo.MessageText &&
|
|
820
825
|
messages[iMessagePosition].getSubtitle() === oBoundMessageInfo.SubTitle &&
|
|
821
|
-
messages[iMessagePosition].getActiveTitle() === oBoundMessageInfo.ActiveTitle
|
|
822
|
-
)
|
|
826
|
+
messages[iMessagePosition].getActiveTitle() === oBoundMessageInfo.ActiveTitle;
|
|
827
|
+
if (oBoundMessageInfo.Description) {
|
|
828
|
+
return (
|
|
829
|
+
bMessageObjectHasExpectedValues &&
|
|
830
|
+
messages[iMessagePosition].getGroupName() === oBoundMessageInfo.GroupLabel
|
|
831
|
+
);
|
|
832
|
+
}
|
|
833
|
+
return bMessageObjectHasExpectedValues;
|
|
823
834
|
}, true)
|
|
824
835
|
.isDialogElement(true)
|
|
825
836
|
.description("MessageItem is correctly displayed")
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"], function(OpaBuilder, Opa5, Utils) {
|
|
6
7
|
"use strict";
|
package/src/sap/fe/test/Stubs.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* ! SAPUI5
|
|
3
|
-
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(
|
|
6
7
|
[
|
|
@@ -131,7 +132,7 @@ sap.ui.define(
|
|
|
131
132
|
if (sKey === "T_NEW_OBJECT") {
|
|
132
133
|
return "New Object";
|
|
133
134
|
} else {
|
|
134
|
-
return "
|
|
135
|
+
return "Unnamed Object";
|
|
135
136
|
}
|
|
136
137
|
});
|
|
137
138
|
}
|