@sapui5/sap.fe.test 1.109.0 → 1.110.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.
Files changed (84) hide show
  1. package/README.md +5 -1
  2. package/package.json +8 -6
  3. package/src/sap/fe/test/.library +17 -18
  4. package/src/sap/fe/test/BaseActions.js +3 -2
  5. package/src/sap/fe/test/BaseArrangements.js +3 -2
  6. package/src/sap/fe/test/BaseAssertions.js +3 -2
  7. package/src/sap/fe/test/CollaborationClient.js +12 -5
  8. package/src/sap/fe/test/CollaborationClient.ts +12 -1
  9. package/src/sap/fe/test/ConfirmDialog.js +12 -11
  10. package/src/sap/fe/test/FCLView.js +16 -15
  11. package/src/sap/fe/test/FeMocks.js +1 -11
  12. package/src/sap/fe/test/Flexibility.js +12 -7
  13. package/src/sap/fe/test/FlexibleColumnLayout.js +12 -11
  14. package/src/sap/fe/test/JestFlexibilityHelper.js +113 -102
  15. package/src/sap/fe/test/JestFlexibilityHelper.ts +112 -99
  16. package/src/sap/fe/test/JestTemplatingHelper.js +73 -170
  17. package/src/sap/fe/test/JestTemplatingHelper.ts +53 -39
  18. package/src/sap/fe/test/JourneyRunner.js +3 -2
  19. package/src/sap/fe/test/ListReport.js +3 -2
  20. package/src/sap/fe/test/LocationUtil.js +3 -2
  21. package/src/sap/fe/test/ObjectPage.js +121 -17
  22. package/src/sap/fe/test/Shell.js +9 -4
  23. package/src/sap/fe/test/Stubs.js +18 -17
  24. package/src/sap/fe/test/TemplatePage.js +3 -2
  25. package/src/sap/fe/test/TemplatingTestUtils.js +3 -2
  26. package/src/sap/fe/test/UI5MockHelper.js +39 -72
  27. package/src/sap/fe/test/UI5MockHelper.ts +3 -0
  28. package/src/sap/fe/test/Utils.js +4 -3
  29. package/src/sap/fe/test/api/APIHelper.js +3 -2
  30. package/src/sap/fe/test/api/BaseAPI.js +3 -2
  31. package/src/sap/fe/test/api/ChartActions.js +3 -2
  32. package/src/sap/fe/test/api/ChartAssertions.js +3 -2
  33. package/src/sap/fe/test/api/CollaborationAPI.js +2 -30
  34. package/src/sap/fe/test/api/DialogAPI.js +3 -2
  35. package/src/sap/fe/test/api/DialogActions.js +3 -2
  36. package/src/sap/fe/test/api/DialogAssertions.js +4 -3
  37. package/src/sap/fe/test/api/DialogCreateActions.js +6 -5
  38. package/src/sap/fe/test/api/DialogCreateAssertions.js +48 -49
  39. package/src/sap/fe/test/api/DialogHelper.js +4 -3
  40. package/src/sap/fe/test/api/DialogMassEditActions.js +3 -2
  41. package/src/sap/fe/test/api/DialogMassEditAssertions.js +3 -2
  42. package/src/sap/fe/test/api/DialogMessageActions.js +3 -2
  43. package/src/sap/fe/test/api/DialogMessageAssertions.js +82 -79
  44. package/src/sap/fe/test/api/DialogType.js +3 -2
  45. package/src/sap/fe/test/api/DialogValueHelpActions.js +3 -2
  46. package/src/sap/fe/test/api/DialogValueHelpAssertions.js +3 -2
  47. package/src/sap/fe/test/api/EditState.js +4 -3
  48. package/src/sap/fe/test/api/FilterBarAPI.js +3 -2
  49. package/src/sap/fe/test/api/FilterBarActions.js +3 -2
  50. package/src/sap/fe/test/api/FilterBarAssertions.js +3 -2
  51. package/src/sap/fe/test/api/FooterAPI.js +5 -4
  52. package/src/sap/fe/test/api/FooterActionsBase.js +3 -2
  53. package/src/sap/fe/test/api/FooterActionsOP.js +3 -2
  54. package/src/sap/fe/test/api/FooterAssertionsBase.js +3 -2
  55. package/src/sap/fe/test/api/FooterAssertionsOP.js +3 -2
  56. package/src/sap/fe/test/api/FormAPI.js +3 -2
  57. package/src/sap/fe/test/api/FormActions.js +3 -2
  58. package/src/sap/fe/test/api/FormAssertions.js +3 -2
  59. package/src/sap/fe/test/api/HeaderAPI.js +3 -2
  60. package/src/sap/fe/test/api/HeaderActions.js +3 -2
  61. package/src/sap/fe/test/api/HeaderActionsLR.js +3 -2
  62. package/src/sap/fe/test/api/HeaderAssertions.js +3 -2
  63. package/src/sap/fe/test/api/HeaderAssertionsLR.js +3 -2
  64. package/src/sap/fe/test/api/HeaderLR.js +3 -2
  65. package/src/sap/fe/test/api/KPICardAPI.js +5 -4
  66. package/src/sap/fe/test/api/KPICardActions.js +7 -11
  67. package/src/sap/fe/test/api/KPICardAssertions.js +3 -2
  68. package/src/sap/fe/test/api/TableAPI.js +5 -4
  69. package/src/sap/fe/test/api/TableActions.js +16 -9
  70. package/src/sap/fe/test/api/TableAssertions.js +8 -7
  71. package/src/sap/fe/test/builder/DialogBuilder.js +99 -102
  72. package/src/sap/fe/test/builder/FEBuilder.js +3 -2
  73. package/src/sap/fe/test/builder/KPIBuilder.js +16 -25
  74. package/src/sap/fe/test/builder/MacroFieldBuilder.js +4 -2
  75. package/src/sap/fe/test/builder/MdcFieldBuilder.js +3 -2
  76. package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +3 -2
  77. package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +3 -2
  78. package/src/sap/fe/test/builder/MdcTableBuilder.js +186 -95
  79. package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +3 -2
  80. package/src/sap/fe/test/builder/VMBuilder.js +3 -2
  81. package/src/sap/fe/test/internal/ConsoleErrorChecker.js +13 -48
  82. package/src/sap/fe/test/internal/FEArrangements.js +3 -2
  83. package/src/sap/fe/test/internal/FEJourneyRunner.js +5 -3
  84. package/src/sap/fe/test/library.js +3 -2
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  [
@@ -15,7 +16,8 @@ sap.ui.define(
15
16
  "sap/fe/test/api/APIHelper",
16
17
  "sap/ui/test/matchers/Interactable",
17
18
  "sap/ui/core/SortOrder",
18
- "sap/ui/test/actions/EnterText"
19
+ "sap/ui/test/actions/EnterText",
20
+ "sap/ui/core/Core"
19
21
  ],
20
22
  function (
21
23
  Opa5,
@@ -28,10 +30,13 @@ sap.ui.define(
28
30
  APIHelper,
29
31
  Interactable,
30
32
  SortOrder,
31
- EnterText
33
+ EnterText,
34
+ Core
32
35
  ) {
33
36
  "use strict";
34
37
 
38
+ var oSAPMResourceBundle = Core.getLibraryResourceBundle("sap.m");
39
+
35
40
  // depending on the sap.ui.table creates now extra request which are not optimal for test execution
36
41
  var RowActionType = {
37
42
  /**
@@ -272,6 +277,15 @@ sap.ui.define(
272
277
  );
273
278
  }
274
279
 
280
+ function _getColumnContextToggleBuilder(ToggleButtonLabel, ToggleType) {
281
+ return OpaBuilder.create()
282
+ .isDialogElement()
283
+ .hasType("sap.m.ToggleButton")
284
+ .hasProperties({ text: ToggleButtonLabel })
285
+ .doPress()
286
+ .description(Utils.formatMessage(ToggleType + " column '{0}'", ToggleButtonLabel));
287
+ }
288
+
275
289
  TableBuilder.create = function (oOpaInstance) {
276
290
  return new TableBuilder(oOpaInstance);
277
291
  };
@@ -432,35 +446,126 @@ sap.ui.define(
432
446
  return this.has(TableBuilder.Matchers.columnControl(vColumn)).has(FEBuilder.Matchers.singleElement()).doPress();
433
447
  };
434
448
 
435
- TableBuilder.prototype.doColumnHeaderAction = function (vColumn, sActionIconName, sFieldName) {
436
- var oSortPopoverBuilder = OpaBuilder.create()
449
+ TableBuilder.prototype.doColumnHeaderSorting = function (vColumn, sFieldName, sSortOrder, sIcon, bClearFirst) {
450
+ var SortingIcon = sSortOrder === SortOrder.Ascending ? "sap-icon://sort-ascending" : "sap-icon://sort-descending";
451
+
452
+ var TriggerSortOK = OpaBuilder.create()
437
453
  .isDialogElement()
438
- .hasType(sFieldName ? "sap.m.ToggleButton" : "sap.m.Button")
439
- .hasProperties({ icon: sActionIconName })
440
- .doPress();
454
+ .hasType("sap.m.Button")
455
+ .hasProperties({ text: "OK" })
456
+ .doPress()
457
+ .description("Confirming the Sorting dialog");
441
458
 
442
- if (sFieldName) {
443
- oSortPopoverBuilder.success(
444
- OpaBuilder.create().isDialogElement().hasType("sap.m.StandardListItem").hasProperties({ title: sFieldName }).doPress()
445
- );
446
- }
447
- return this.doPressColumnHeader(vColumn).success(oSortPopoverBuilder);
448
- };
459
+ // Builder to clear existing sorting entries
460
+ var DeclineSortingBuilder = OpaBuilder.create()
461
+ .isDialogElement()
462
+ .hasType("sap.m.Button")
463
+ .hasProperties({ icon: "sap-icon://decline" })
464
+ .doPress()
465
+ .description("Removing all previous sortings");
449
466
 
450
- TableBuilder.prototype.doSortByColumn = function (vColumn, sFieldName, bDescending) {
451
- var sIcon = "sap-icon://sort-ascending";
452
- if (bDescending) {
453
- sIcon = "sap-icon://sort-descending";
454
- }
455
- return this.doColumnHeaderAction(vColumn, sIcon, sFieldName);
467
+ // Builder to check for a specific sorting entry
468
+ var CheckSortingFieldBuilder = OpaBuilder.create(this)
469
+ .isDialogElement()
470
+ .hasType("sap.m.ComboBox")
471
+ .hasProperties({ value: sFieldName });
472
+
473
+ // Builder for changing existing sorting entries
474
+ var ExistingSortingFieldBuilder = OpaBuilder.create(this)
475
+ .isDialogElement()
476
+ .hasType("sap.m.CustomListItem")
477
+ .hasChildren(OpaBuilder.create(this).hasType("sap.m.ComboBox").hasProperties({ value: sFieldName }))
478
+ .doOnChildren(OpaBuilder.create(this).hasType("sap.m.Button").hasProperties({ icon: SortingIcon }).doPress())
479
+ .description(Utils.formatMessage("Change existing sorting field '{0}': {1}", sFieldName, sSortOrder))
480
+ .success(TriggerSortOK);
481
+
482
+ // Builder for new sorting entries
483
+ var NewSortingFieldBuilder = OpaBuilder.create(this)
484
+ .isDialogElement()
485
+ .hasType("sap.m.CustomListItem")
486
+ .hasChildren(
487
+ OpaBuilder.create(this).hasType("sap.m.ComboBox").hasProperties({ placeholder: "Sort by" }).hasProperties({ value: "" })
488
+ )
489
+ .doOnChildren(
490
+ OpaBuilder.create(this)
491
+ .hasType("sap.m.ComboBox")
492
+ .hasProperties({ placeholder: "Sort by" })
493
+ .hasProperties({ value: "" })
494
+ .doEnterText(sFieldName, true, false, true)
495
+ )
496
+ .doOnChildren(OpaBuilder.create(this).hasType("sap.m.Button").hasProperties({ icon: SortingIcon }).doPress())
497
+ .description(Utils.formatMessage("Insert new sorting field '{0}': {1}", sFieldName, sSortOrder))
498
+ .success(TriggerSortOK);
499
+
500
+ // Builder to distinguish between inserting a new entry or changing an existing entry
501
+ var CheckSortingPanelBuilder = OpaBuilder.create()
502
+ .isDialogElement()
503
+ .hasType("sap.m.p13n.SortPanel")
504
+ .do(function () {
505
+ if (bClearFirst) {
506
+ DeclineSortingBuilder.execute();
507
+ }
508
+ if (!FEBuilder.controlsExist(CheckSortingFieldBuilder) || bClearFirst) {
509
+ return NewSortingFieldBuilder.execute();
510
+ } else {
511
+ return ExistingSortingFieldBuilder.execute();
512
+ }
513
+ });
514
+
515
+ // Opens the Sorting panel within the table column header context menu
516
+ var TriggerSortingPanelBuilder = OpaBuilder.create()
517
+ .isDialogElement()
518
+ .hasType("sap.m.StandardListItem")
519
+ .hasProperties({ icon: sIcon })
520
+ .doPress()
521
+ .description("Opening the Sorting dialog")
522
+ .success(CheckSortingPanelBuilder);
523
+
524
+ // Triggers the sorting by using the toggle buttons on the context menu
525
+ var TriggerToggleBuilder = OpaBuilder.create()
526
+ .isDialogElement()
527
+ .hasType("sap.m.ToggleButton")
528
+ .hasProperties({ text: sSortOrder })
529
+ .has(function (oButton) {
530
+ if (typeof oButton.getParent().getLabel === "function") {
531
+ return (
532
+ oButton.getParent().getLabel() ===
533
+ Utils.formatMessage(oSAPMResourceBundle.getText("table.COLUMNMENU_QUICK_SORT"), sFieldName)
534
+ );
535
+ }
536
+ return false;
537
+ })
538
+ .doPress()
539
+ .description(Utils.formatMessage("Sorting column '{0}': {1}", vColumn, sSortOrder));
540
+
541
+ // return this.doPressColumnHeader(vColumn).success(!sFieldName ? TriggerToggleBuilder : TriggerSortingPanelBuilder);
542
+ return this.doPressColumnHeader(vColumn).success(bClearFirst ? TriggerToggleBuilder : TriggerSortingPanelBuilder);
456
543
  };
544
+ TableBuilder.prototype.doSortByColumn = function (vColumn, sFieldName, sSortOrder, bClearFirst) {
545
+ var sIcon = "sap-icon://sort";
546
+ return this.doColumnHeaderSorting(vColumn, sFieldName, sSortOrder, sIcon, bClearFirst);
547
+ };
548
+
549
+ TableBuilder.prototype.doColumnHeaderGrouping = function (vColumn, sFieldName) {
550
+ var sGroupingField = !sFieldName ? vColumn : sFieldName,
551
+ // Triggers the grouping by using the toggle buttons on the context menu
552
+ TriggerToggleBuilder = _getColumnContextToggleBuilder(sGroupingField, "Grouping");
457
553
 
554
+ return this.doPressColumnHeader(vColumn).success(TriggerToggleBuilder);
555
+ };
458
556
  TableBuilder.prototype.doGroupByColumn = function (vColumn, sFieldName) {
459
- return this.doColumnHeaderAction(vColumn, "sap-icon://group-2", sFieldName);
557
+ return this.doColumnHeaderGrouping(vColumn, sFieldName);
460
558
  };
461
559
 
560
+ TableBuilder.prototype.doColumnHeaderAggregating = function (vColumn, sFieldName) {
561
+ var sAggregationField = !sFieldName ? vColumn : sFieldName,
562
+ // Triggers the grouping by using the toggle buttons on the context menu
563
+ TriggerToggleBuilder = _getColumnContextToggleBuilder(sAggregationField, "Aggregating");
564
+
565
+ return this.doPressColumnHeader(vColumn).success(TriggerToggleBuilder);
566
+ };
462
567
  TableBuilder.prototype.doAggregateByColumn = function (vColumn, sFieldName) {
463
- return this.doColumnHeaderAction(vColumn, "sap-icon://sum", sFieldName);
568
+ return this.doColumnHeaderAggregating(vColumn, sFieldName);
464
569
  };
465
570
 
466
571
  TableBuilder.prototype.doChangeSearch = function (sSearchText) {
@@ -483,81 +588,67 @@ sap.ui.define(
483
588
  return this.doOpenOverflow().success(oSuccessBuilder);
484
589
  };
485
590
 
486
- TableBuilder.prototype.checkColumnHeaderAction = function (vColumn, sActionIconName, sFieldName, iExpectedNumber) {
487
- var oHeaderPopoverBuilder;
488
-
489
- if (!sFieldName) {
490
- if (iExpectedNumber === undefined) {
491
- // We just check if there's a button for the action in the header
492
- oHeaderPopoverBuilder = OpaBuilder.create()
493
- .isDialogElement()
494
- .hasProperties({ icon: sActionIconName })
495
- .checkNumberOfMatches(1);
496
- } else if (iExpectedNumber === 1) {
497
- // Only 1 action expected --> we check that this is a simple button (no sub-menu)
498
- oHeaderPopoverBuilder = OpaBuilder.create()
499
- .isDialogElement()
500
- .hasType("sap.m.Button")
501
- .hasProperties({ icon: sActionIconName })
502
- .checkNumberOfMatches(1);
503
- } else {
504
- // More than 1 action --> check the number of items in the sub-menu
505
- oHeaderPopoverBuilder = OpaBuilder.create()
506
- .isDialogElement()
507
- .hasType("sap.m.ToggleButton")
508
- .hasProperties({ icon: sActionIconName })
509
- .doPress();
510
-
511
- oHeaderPopoverBuilder.success(
512
- OpaBuilder.create()
513
- .isDialogElement()
514
- .hasType("sap.m.StandardListItem")
515
- .checkNumberOfMatches(iExpectedNumber)
516
- .success(
517
- OpaBuilder.create()
518
- .isDialogElement()
519
- .hasType("sap.m.Button")
520
- .hasProperties({ icon: "sap-icon://decline" })
521
- .doPress()
522
- )
523
- );
524
- }
525
- } else {
526
- if (iExpectedNumber === undefined) {
527
- iExpectedNumber = 1;
528
- }
591
+ TableBuilder.prototype.checkColumnHeaderAction = function (vColumn, sActionIconName, sFieldName, iExpectedNumber, sGroupTotals) {
592
+ var TriggerGroupingCancel = OpaBuilder.create()
593
+ .isDialogElement()
594
+ .hasType("sap.m.Button")
595
+ .hasProperties({ text: "Cancel" })
596
+ .doPress()
597
+ .description("Cancelling the dialog");
529
598
 
530
- oHeaderPopoverBuilder = OpaBuilder.create()
531
- .isDialogElement()
532
- .hasType("sap.m.ToggleButton")
533
- .hasProperties({ icon: sActionIconName })
534
- .doPress();
535
-
536
- oHeaderPopoverBuilder.success(
537
- OpaBuilder.create()
538
- .isDialogElement()
539
- .hasType("sap.m.StandardListItem")
540
- .hasProperties({ title: sFieldName })
541
- .checkNumberOfMatches(iExpectedNumber)
542
- .success(
543
- OpaBuilder.create()
544
- .isDialogElement()
545
- .hasType("sap.m.Button")
546
- .hasProperties({ icon: "sap-icon://decline" })
547
- .doPress()
548
- )
549
- );
550
- }
599
+ // Opens the Grouping panel within the table column header context menu to successfully leave the context dialog with cancel button
600
+ var TriggerGroupingPanelBuilder = OpaBuilder.create()
601
+ .isDialogElement()
602
+ .hasType("sap.m.StandardListItem")
603
+ .hasProperties({ icon: sActionIconName })
604
+ .doPress()
605
+ .success(TriggerGroupingCancel);
551
606
 
552
- return this.doPressColumnHeader(vColumn).success(oHeaderPopoverBuilder);
553
- };
607
+ var CheckMultipleGroupingBuilder = OpaBuilder.create()
608
+ .isDialogElement()
609
+ .hasType("sap.m.ToggleButton")
610
+ .has(function (oButton) {
611
+ if (typeof oButton.getParent().getLabel === "function") {
612
+ return oButton.getParent().getLabel() === sGroupTotals;
613
+ }
614
+ return false;
615
+ })
616
+ .checkNumberOfMatches(iExpectedNumber)
617
+ .success(TriggerGroupingPanelBuilder);
554
618
 
619
+ var CheckSingleGroupingBuilder = OpaBuilder.create()
620
+ .isDialogElement()
621
+ .hasType("sap.m.ToggleButton")
622
+ .hasProperties({ text: sFieldName })
623
+ .has(function (oButton) {
624
+ if (typeof oButton.getParent().getLabel === "function") {
625
+ return oButton.getParent().getLabel() === sGroupTotals;
626
+ }
627
+ return false;
628
+ })
629
+ .checkNumberOfMatches(iExpectedNumber)
630
+ .success(TriggerGroupingPanelBuilder);
631
+
632
+ return this.doPressColumnHeader(vColumn).success(sFieldName ? CheckSingleGroupingBuilder : CheckMultipleGroupingBuilder);
633
+ };
555
634
  TableBuilder.prototype.hasGroupByColumn = function (vColumn, sFieldName, iExpectedNumber) {
556
- return this.checkColumnHeaderAction(vColumn, "sap-icon://group-2", sFieldName, iExpectedNumber);
635
+ return this.checkColumnHeaderAction(
636
+ vColumn,
637
+ "sap-icon://group-2",
638
+ sFieldName,
639
+ iExpectedNumber,
640
+ oSAPMResourceBundle.getText("table.COLUMNMENU_QUICK_GROUP")
641
+ );
557
642
  };
558
643
 
559
644
  TableBuilder.prototype.hasAggregationColumn = function (vColumn, sFieldName, iExpectedNumber) {
560
- return this.checkColumnHeaderAction(vColumn, "sap-icon://sum", sFieldName, iExpectedNumber);
645
+ return this.checkColumnHeaderAction(
646
+ vColumn,
647
+ "sap-icon://table-column",
648
+ sFieldName,
649
+ iExpectedNumber,
650
+ oSAPMResourceBundle.getText("table.COLUMNMENU_QUICK_TOTAL")
651
+ );
561
652
  };
562
653
 
563
654
  TableBuilder.prototype.doExpand = function (vRowMatcher) {
@@ -927,7 +1018,7 @@ sap.ui.define(
927
1018
  })
928
1019
  );
929
1020
  },
930
- emptyCell: function (sColumnName) {
1021
+ hiddenCell: function (sColumnName) {
931
1022
  return function (oRow) {
932
1023
  var oCellField = TableBuilder.Row.Matchers.cell(sColumnName)(oRow);
933
1024
  while (oCellField.isA("sap.fe.macros.MacroAPI")) {
@@ -937,13 +1028,13 @@ sap.ui.define(
937
1028
  return MacroFieldBuilder.Matchers.empty(oCellField);
938
1029
  };
939
1030
  },
940
- emptyCells: function (vColumn) {
1031
+ hiddenCells: function (vColumn) {
941
1032
  if (!vColumn || vColumn.length === 0) {
942
1033
  return OpaBuilder.Matchers.TRUE;
943
1034
  }
944
1035
  return FEBuilder.Matchers.match(
945
1036
  vColumn.map(function (sColumnName) {
946
- return TableBuilder.Row.Matchers.emptyCell(sColumnName);
1037
+ return TableBuilder.Row.Matchers.hiddenCell(sColumnName);
947
1038
  })
948
1039
  );
949
1040
  },
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  ["sap/ui/test/OpaBuilder", "./FEBuilder", "sap/fe/test/Utils", "sap/ui/test/matchers/Interactable"],
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(["./FEBuilder", "sap/ui/test/OpaBuilder", "sap/fe/test/Utils"], function (FEBuilder, OpaBuilder, Utils) {
7
8
  "use strict";