@openui5/sap.ui.core 1.112.2 → 1.114.0
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/.dtsgenrc +102 -1
- package/THIRDPARTY.txt +1 -1
- package/package.json +1 -1
- package/src/jquery.sap.global.js +10 -4
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +7 -7
- package/src/jquery.sap.trace.js +14 -14
- package/src/sap/base/Log.js +92 -8
- package/src/sap/base/assert.js +1 -1
- package/src/sap/base/config/MemoryConfigurationProvider.js +22 -0
- package/src/sap/base/config.js +54 -0
- package/src/sap/base/security/URLWhitelist.js +1 -1
- package/src/sap/base/util/Deferred.js +3 -2
- package/src/sap/base/util/restricted/_CancelablePromise.js +2 -2
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +8 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/BindingParser.js +79 -18
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/ExpressionParser.js +15 -5
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +16 -13
- package/src/sap/ui/base/ManagedObjectMetadata.js +35 -35
- package/src/sap/ui/base/Metadata.js +23 -12
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +1 -1
- package/src/sap/ui/core/BusyIndicator.js +4 -4
- package/src/sap/ui/core/Component.js +10 -7
- package/src/sap/ui/core/ComponentContainer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +3 -1
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +104 -45
- package/src/sap/ui/core/Control.js +23 -6
- package/src/sap/ui/core/Core.js +36 -15
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/CustomStyleClassSupport.js +5 -2
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +1 -1
- package/src/sap/ui/core/ElementMetadata.js +19 -4
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +4 -4
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -1
- package/src/sap/ui/core/IconPool.js +17 -2
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +10 -2
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/Lib.js +28 -2
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +2 -2
- package/src/sap/ui/core/LocaleData.js +87 -19
- package/src/sap/ui/core/Manifest.js +5 -5
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Popup.js +34 -36
- package/src/sap/ui/core/RenderManager.js +8 -2
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/Rendering.js +2 -3
- package/src/sap/ui/core/ResizeHandler.js +2 -2
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +9 -2
- package/src/sap/ui/core/UIComponent.js +16 -13
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +30 -6
- package/src/sap/ui/core/cache/CacheManager.js +1 -1
- package/src/sap/ui/core/cache/LRUPersistentCache.js +1 -1
- package/src/sap/ui/core/date/CalendarUtils.js +14 -26
- package/src/sap/ui/core/date/CalendarWeekNumbering.js +32 -0
- package/src/sap/ui/core/date/UI5Date.js +14 -8
- package/src/sap/ui/core/date/UniversalDate.js +15 -53
- package/src/sap/ui/core/date/UniversalDateUtils.js +4 -4
- package/src/sap/ui/core/date/_Calendars.js +1 -1
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/DateFormat.js +166 -59
- package/src/sap/ui/core/format/NumberFormat.js +40 -5
- package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +3 -3
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +1 -1
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle.properties +2 -0
- package/src/sap/ui/core/messagebundle_ar.properties +2 -1
- package/src/sap/ui/core/messagebundle_bg.properties +1 -0
- package/src/sap/ui/core/messagebundle_ca.properties +1 -0
- package/src/sap/ui/core/messagebundle_cs.properties +2 -1
- package/src/sap/ui/core/messagebundle_cy.properties +2 -1
- package/src/sap/ui/core/messagebundle_da.properties +2 -1
- package/src/sap/ui/core/messagebundle_de.properties +2 -1
- package/src/sap/ui/core/messagebundle_el.properties +2 -1
- package/src/sap/ui/core/messagebundle_en.properties +2 -1
- package/src/sap/ui/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
- package/src/sap/ui/core/messagebundle_es.properties +5 -4
- package/src/sap/ui/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/ui/core/messagebundle_et.properties +2 -1
- package/src/sap/ui/core/messagebundle_fi.properties +2 -1
- package/src/sap/ui/core/messagebundle_fr.properties +2 -1
- package/src/sap/ui/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/ui/core/messagebundle_hi.properties +2 -1
- package/src/sap/ui/core/messagebundle_hr.properties +2 -1
- package/src/sap/ui/core/messagebundle_hu.properties +2 -1
- package/src/sap/ui/core/messagebundle_id.properties +2 -1
- package/src/sap/ui/core/messagebundle_it.properties +2 -1
- package/src/sap/ui/core/messagebundle_iw.properties +2 -1
- package/src/sap/ui/core/messagebundle_ja.properties +1 -0
- package/src/sap/ui/core/messagebundle_kk.properties +2 -1
- package/src/sap/ui/core/messagebundle_ko.properties +2 -1
- package/src/sap/ui/core/messagebundle_lt.properties +2 -1
- package/src/sap/ui/core/messagebundle_lv.properties +2 -1
- package/src/sap/ui/core/messagebundle_ms.properties +2 -1
- package/src/sap/ui/core/messagebundle_nl.properties +2 -1
- package/src/sap/ui/core/messagebundle_no.properties +2 -1
- package/src/sap/ui/core/messagebundle_pl.properties +2 -1
- package/src/sap/ui/core/messagebundle_pt.properties +2 -1
- package/src/sap/ui/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/ui/core/messagebundle_ro.properties +2 -1
- package/src/sap/ui/core/messagebundle_ru.properties +3 -2
- package/src/sap/ui/core/messagebundle_sh.properties +2 -1
- package/src/sap/ui/core/messagebundle_sk.properties +2 -1
- package/src/sap/ui/core/messagebundle_sl.properties +2 -1
- package/src/sap/ui/core/messagebundle_sv.properties +2 -1
- package/src/sap/ui/core/messagebundle_th.properties +2 -1
- package/src/sap/ui/core/messagebundle_tr.properties +2 -1
- package/src/sap/ui/core/messagebundle_uk.properties +2 -1
- package/src/sap/ui/core/messagebundle_vi.properties +2 -1
- package/src/sap/ui/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/ui/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/ui/core/mvc/Controller.js +2 -3
- package/src/sap/ui/core/mvc/ControllerExtension.js +1 -1
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +24 -17
- package/src/sap/ui/core/mvc/XMLView.js +2 -2
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/Route.js +30 -22
- package/src/sap/ui/core/routing/Router.js +5 -3
- package/src/sap/ui/core/routing/Target.js +170 -3
- package/src/sap/ui/core/routing/Targets.js +5 -214
- package/src/sap/ui/core/routing/Views.js +1 -1
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +1 -1
- package/src/sap/ui/core/support/controls/InteractionTree.js +5 -3
- package/src/sap/ui/core/support/plugins/Breakpoint.js +2 -2
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +6 -4
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +4 -3
- package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
- package/src/sap/ui/core/themes/base/base.less +4358 -78
- package/src/sap/ui/core/themes/base/global.less +114 -8
- package/src/sap/ui/core/themes/sap_hcb/global.less +114 -8
- package/src/sap/ui/core/theming/Parameters.js +10 -2
- package/src/sap/ui/core/theming/ThemeManager.js +16 -12
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/dom/includeScript.js +3 -3
- package/src/sap/ui/dom/includeStylesheet.js +3 -3
- package/src/sap/ui/events/ControlEvents.js +2 -2
- package/src/sap/ui/events/PseudoEvents.js +4 -2
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeBinding.js +1 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/ManagedObjectBindingSupport.js +19 -2
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +7 -3
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/base/ManagedObjectModel.js +12 -4
- package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +2 -0
- package/src/sap/ui/model/json/JSONModel.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +1 -1
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +67 -21
- package/src/sap/ui/model/odata/type/DateTime.js +51 -8
- package/src/sap/ui/model/odata/type/DateTimeBase.js +55 -26
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +42 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +37 -21
- package/src/sap/ui/model/odata/type/Decimal.js +28 -33
- package/src/sap/ui/model/odata/type/Double.js +21 -26
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +15 -20
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +16 -21
- package/src/sap/ui/model/odata/type/ODataType.js +33 -6
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +20 -25
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +91 -21
- package/src/sap/ui/model/odata/type/TimeOfDay.js +70 -24
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +72 -28
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +5 -4
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +29 -10
- package/src/sap/ui/model/odata/v2/ODataModel.js +92 -36
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +8 -1
- package/src/sap/ui/model/odata/v4/Context.js +36 -21
- package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -21
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +7 -25
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +208 -74
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +4 -1
- package/src/sap/ui/model/odata/v4/ODataModel.js +4 -3
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +42 -28
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +100 -21
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +1 -1
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +99 -64
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +75 -2
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +6 -0
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +3 -0
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +15 -1
- package/src/sap/ui/model/type/DateInterval.js +15 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/performance/Measurement.js +9 -9
- package/src/sap/ui/performance/trace/Interaction.js +50 -4
- package/src/sap/ui/performance/trace/initTraces.js +20 -14
- package/src/sap/ui/qunit/qunit-coverage-istanbul.js +180 -0
- package/src/sap/ui/qunit/qunit-coverage.js +9 -4
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/Opa.js +54 -21
- package/src/sap/ui/test/Opa5.js +181 -131
- package/src/sap/ui/test/OpaBuilder.js +106 -73
- package/src/sap/ui/test/OpaPlugin.js +27 -28
- package/src/sap/ui/test/PageObjectFactory.js +17 -7
- package/src/sap/ui/test/RecordReplay.js +7 -3
- package/src/sap/ui/test/_ParameterValidator.js +3 -3
- package/src/sap/ui/test/_UsageReport.js +3 -3
- package/src/sap/ui/test/_ValidationParameters.js +8 -10
- package/src/sap/ui/test/actions/Action.js +3 -3
- package/src/sap/ui/test/actions/EnterText.js +3 -2
- package/src/sap/ui/test/actions/Press.js +4 -4
- package/src/sap/ui/test/autowaiter/WaiterBase.js +5 -3
- package/src/sap/ui/test/autowaiter/_autoWaiter.js +6 -3
- package/src/sap/ui/test/autowaiter/_cssAnimationWaiter.js +3 -3
- package/src/sap/ui/test/autowaiter/_cssTransitionWaiter.js +3 -3
- package/src/sap/ui/test/autowaiter/_fetchWaiter.js +73 -0
- package/src/sap/ui/test/autowaiter/_moduleWaiter.js +2 -2
- package/src/sap/ui/test/autowaiter/_promiseWaiter.js +4 -4
- package/src/sap/ui/test/autowaiter/_resourceWaiter.js +2 -2
- package/src/sap/ui/test/autowaiter/_timeoutWaiter.js +4 -4
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +3 -1
- package/src/sap/ui/test/gherkin/GherkinTestGenerator.js +424 -423
- package/src/sap/ui/test/gherkin/StepDefinitions.js +160 -158
- package/src/sap/ui/test/gherkin/dataTableUtils.js +387 -385
- package/src/sap/ui/test/gherkin/opa5TestHarness.js +188 -189
- package/src/sap/ui/test/gherkin/qUnitTestHarness.js +74 -71
- package/src/sap/ui/test/gherkin/simpleGherkinParser.js +195 -193
- package/src/sap/ui/test/launchers/componentLauncher.js +11 -9
- package/src/sap/ui/test/launchers/iFrameLauncher.js +34 -20
- package/src/sap/ui/test/matchers/Descendant.js +1 -1
- package/src/sap/ui/test/matchers/Interactable.js +2 -2
- package/src/sap/ui/test/matchers/LabelFor.js +2 -2
- package/src/sap/ui/test/matchers/MatcherFactory.js +10 -9
- package/src/sap/ui/test/matchers/Properties.js +5 -4
- package/src/sap/ui/test/matchers/Sibling.js +1 -1
- package/src/sap/ui/test/matchers/matchers.js +35 -3
- package/src/sap/ui/test/pipelines/PipelineFactory.js +2 -2
- package/src/sap/ui/test/qunitPause.js +3 -2
- package/src/sap/ui/test/starter/_configureLoader.js +7 -5
- package/src/sap/ui/test/starter/_setupAndStart.js +113 -27
- package/src/sap/ui/test/starter/_utils.js +4 -1
- package/src/sap/ui/util/Mobile.js +8 -1
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/ui5loader-autoconfig.js +661 -49
- package/src/ui5loader.js +18 -5
|
@@ -10,197 +10,196 @@
|
|
|
10
10
|
// Load synchronously to avoid QUnit issue where tests run before QUnit is loaded
|
|
11
11
|
// Only load QUnit if it has not been loaded via script tag
|
|
12
12
|
if (!window.QUnit || !window.QUnit.test) {
|
|
13
|
-
|
|
13
|
+
jQuery.sap.require("sap.ui.thirdparty.qunit");
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// put qunit-coverage last so library files don't get measured
|
|
17
17
|
sap.ui.define([
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return opa5TestHarness;
|
|
18
|
+
"sap/base/Log",
|
|
19
|
+
"sap/base/util/ObjectPath",
|
|
20
|
+
"sap/ui/test/opaQunit",
|
|
21
|
+
"sap/ui/test/Opa5",
|
|
22
|
+
"sap/ui/test/gherkin/GherkinTestGenerator",
|
|
23
|
+
"sap/ui/test/gherkin/dataTableUtils",
|
|
24
|
+
"sap/ui/test/gherkin/StepDefinitions",
|
|
25
|
+
"sap/ui/test/launchers/componentLauncher",
|
|
26
|
+
"sap/ui/test/launchers/iFrameLauncher",
|
|
27
|
+
"sap/ui/qunit/qunit-css",
|
|
28
|
+
"sap/ui/qunit/qunit-junit",
|
|
29
|
+
"sap/ui/qunit/qunit-coverage"
|
|
30
|
+
], function(Log, ObjectPath, opaTest, Opa5, GherkinTestGenerator, dataTableUtils, StepDefinitions, componentLauncher,
|
|
31
|
+
iFrameLauncher) {
|
|
32
|
+
"use strict";
|
|
33
|
+
|
|
34
|
+
QUnit.config.urlConfig.splice(0, 0, {
|
|
35
|
+
id: "closeFrame",
|
|
36
|
+
label: "Close Frame",
|
|
37
|
+
tooltip: "Closes the application-under-test's frame after all tests have executed",
|
|
38
|
+
value: "true"
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
QUnit.done(function() {
|
|
42
|
+
if (new URLSearchParams(window.location.search).has("closeFrame")) {
|
|
43
|
+
Opa5.emptyQueue();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Dynamically generates and executes Opa5 tests based on a Gherkin feature file and step definitions.
|
|
49
|
+
*
|
|
50
|
+
* Logs activity to Opa5, and some debug information to the console with the prefix "[GHERKIN]"
|
|
51
|
+
*
|
|
52
|
+
* @author Jonathan Benn
|
|
53
|
+
* @alias sap.ui.test.gherkin.opa5TestHarness
|
|
54
|
+
* @namespace
|
|
55
|
+
* @static
|
|
56
|
+
* @since 1.40
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
var opa5TestHarness = {
|
|
60
|
+
|
|
61
|
+
// for testability these need to be accessible outside of public 'test' function's scope
|
|
62
|
+
_oOpa5: new Opa5(),
|
|
63
|
+
_opaTest: opaTest,
|
|
64
|
+
_fnAlternateTestStepGenerator: function(oStep) {
|
|
65
|
+
// Automatically generates test steps from Opa Page Objects, only used when args.generateMissingSteps is true
|
|
66
|
+
|
|
67
|
+
var sContext = oStep.keyword;
|
|
68
|
+
var sFinalFunction = oStep.text;
|
|
69
|
+
var aMatch = oStep.text.match(/(.*?)\s*:\s*(.*)/);
|
|
70
|
+
if (aMatch) {
|
|
71
|
+
sContext += "." + dataTableUtils.normalization.camelCase(aMatch[1]);
|
|
72
|
+
sFinalFunction = aMatch[2];
|
|
73
|
+
}
|
|
74
|
+
sFinalFunction = dataTableUtils.normalization.camelCase(sFinalFunction);
|
|
75
|
+
var sToEval = sContext + "." + sFinalFunction + "();";
|
|
76
|
+
var func;
|
|
77
|
+
if ( /^(Given|When|Then)(\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(sContext) && /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(sFinalFunction) ) {
|
|
78
|
+
func = function(Given, When, Then) {
|
|
79
|
+
Log.info("[GHERKIN] Generated Step: " + sToEval);
|
|
80
|
+
var oContext = ObjectPath.get(sContext, {Given: Given, When: When, Then: Then});
|
|
81
|
+
if ( oContext && typeof oContext[sFinalFunction] === "function" ) {
|
|
82
|
+
oContext[sFinalFunction]();
|
|
83
|
+
} else {
|
|
84
|
+
throw new TypeError(sContext + "." + sFinalFunction + " is not a function");
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
} else {
|
|
88
|
+
func = function(Given, When, Then) {
|
|
89
|
+
Log.info("[GHERKIN] Generated Step (eval): " + sToEval);
|
|
90
|
+
eval(sToEval);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
isMatch: true,
|
|
96
|
+
text: oStep.text,
|
|
97
|
+
regex: /Generated Step/,
|
|
98
|
+
parameters: [],
|
|
99
|
+
func: func,
|
|
100
|
+
_sToEval: sToEval // exposing this for testability
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Dynamically generates Opa5 tests
|
|
106
|
+
*
|
|
107
|
+
* If a test step is missing and args.generateMissingSteps is true then the Gherkin step will be converted into Opa
|
|
108
|
+
* Page Object code and executed. The text will be converted to camelCase and have any non-alphanumeric character
|
|
109
|
+
* removed. Here are two pertinent examples:
|
|
110
|
+
*
|
|
111
|
+
* (1) The simple step "Given I start my app" will be converted into the call "Given.iStartMyApp();"
|
|
112
|
+
*
|
|
113
|
+
* (2) The step "Then on page 1: I should see the page 1 text" will become the call
|
|
114
|
+
* "Then.onPage1.iShouldSeeThePage1Text();"
|
|
115
|
+
*
|
|
116
|
+
* Chaining function calls, such as "Then.iStartMyApp().and.iCloseMyApp()" is not possible at this time.
|
|
117
|
+
*
|
|
118
|
+
* @param {object} args - the arguments to the function
|
|
119
|
+
* @param {string} args.featurePath - the path to the Gherkin feature file to parse, as an SAPUI5 module path. The
|
|
120
|
+
* ".feature" extension is assumed and should not be included. See
|
|
121
|
+
* {@link jQuery.sap.registerModulePath}
|
|
122
|
+
* @param {function} [args.steps] - the constructor function of type {@link sap.ui.test.gherkin.StepDefinitions}.
|
|
123
|
+
* If this parameter is ommitted then args.generateMissingSteps must be explicitly
|
|
124
|
+
* set to true.
|
|
125
|
+
* @param {boolean} [args.generateMissingSteps=false] - When true: if a Gherkin step cannot be matched to a step
|
|
126
|
+
* definition then it will be assumed that the user wants to
|
|
127
|
+
* convert the step into an Opa Page Object call.
|
|
128
|
+
* @public
|
|
129
|
+
* @throws {Error} if any parameters are invalid
|
|
130
|
+
* @function
|
|
131
|
+
* @static
|
|
132
|
+
*/
|
|
133
|
+
test: function(args) {
|
|
134
|
+
|
|
135
|
+
// args is mandatory
|
|
136
|
+
if (!args || typeof args !== "object") {
|
|
137
|
+
throw new Error("opa5TestHarness.test: input all arguments via a single object");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (typeof args.featurePath !== "string" && !(args.featurePath instanceof String)) {
|
|
141
|
+
throw new Error("opa5TestHarness.test: parameter 'featurePath' must be a valid string");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (args.steps && ((typeof args.steps !== "function") || !((new args.steps())._generateTestStep))) {
|
|
145
|
+
throw new Error("opa5TestHarness.test: if specified, parameter 'steps' must be a valid StepDefinitions constructor");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!args.steps && (args.generateMissingSteps !== true)) {
|
|
149
|
+
throw new Error("opa5TestHarness.test: if parameter 'generateMissingSteps' is not true then parameter 'steps' must be a valid StepDefinitions constructor");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (args.generateMissingSteps && (typeof args.generateMissingSteps !== "boolean")) {
|
|
153
|
+
throw new Error("opa5TestHarness.test: if specified, parameter 'generateMissingSteps' must be a valid boolean");
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// if the user did not input a StepDefinitions constructor
|
|
157
|
+
if (!args.steps) {
|
|
158
|
+
// then use a default StepDefinitions constructor
|
|
159
|
+
args.steps = StepDefinitions;
|
|
160
|
+
}
|
|
161
|
+
var fnTestStepGenerator = (args.generateMissingSteps) ? this._fnAlternateTestStepGenerator : null;
|
|
162
|
+
|
|
163
|
+
var oTestGenerator = new GherkinTestGenerator(args.featurePath, args.steps, fnTestStepGenerator);
|
|
164
|
+
var oFeatureTest = oTestGenerator.generate();
|
|
165
|
+
|
|
166
|
+
QUnit.module(oFeatureTest.name, {
|
|
167
|
+
beforeEach: function() {
|
|
168
|
+
oTestGenerator.setUp();
|
|
169
|
+
},
|
|
170
|
+
afterEach: function() {
|
|
171
|
+
if (this._oOpa5.hasAppStarted()) {
|
|
172
|
+
this._oOpa5.iTeardownMyApp();
|
|
173
|
+
}
|
|
174
|
+
oTestGenerator.tearDown();
|
|
175
|
+
}.bind(this)
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
Log.info("[GHERKIN] Running feature: '" + oFeatureTest.name + "'");
|
|
179
|
+
oFeatureTest.testScenarios.forEach(function(oTestScenario) {
|
|
180
|
+
var fnTestFunction = (!oFeatureTest.skip && !oTestScenario.skip) ? this._opaTest : QUnit.skip;
|
|
181
|
+
fnTestFunction(oTestScenario.name, function(Given, When, Then) {
|
|
182
|
+
Log.info("[GHERKIN] Running scenario: '" + oTestScenario.name + "'");
|
|
183
|
+
oTestScenario.testSteps.forEach(function(oTestStep) {
|
|
184
|
+
// Put test execution inside a waitFor so that they are executed in order, even if the user fails to put
|
|
185
|
+
// a waitFor statement in one of the test steps
|
|
186
|
+
this._oOpa5.waitFor({
|
|
187
|
+
viewName: "",
|
|
188
|
+
success: function() {
|
|
189
|
+
Log.info("[GHERKIN] Running step: text='" + oTestStep.text + "' regex='" + oTestStep.regex + "'");
|
|
190
|
+
Opa5.assert.ok(oTestStep.isMatch, oTestStep.text);
|
|
191
|
+
if (oTestStep.isMatch) {
|
|
192
|
+
QUnit.config.current.assertions.pop(); // don't break QUnit expect() behaviour
|
|
193
|
+
}
|
|
194
|
+
oTestStep.parameters = (oTestStep.parameters || []).concat([Given, When, Then]);
|
|
195
|
+
oTestGenerator.execute(oTestStep, Opa5.assert);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}.bind(this));
|
|
199
|
+
}.bind(this));
|
|
200
|
+
}.bind(this));
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
return opa5TestHarness;
|
|
206
205
|
}, /* bExport= */ true);
|
|
@@ -9,89 +9,92 @@
|
|
|
9
9
|
// Load synchronously to avoid QUnit issue where tests run before QUnit is loaded
|
|
10
10
|
// Only load QUnit if it has not been loaded via script tag
|
|
11
11
|
if (!window.QUnit || !window.QUnit.test) {
|
|
12
|
-
|
|
12
|
+
jQuery.sap.require("sap.ui.thirdparty.qunit");
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
// put qunit-coverage last so library files don't get measured (we load StepDefinitions, even though we don't have to,
|
|
16
16
|
// so that it doesn't appear in the code coverage list, knowing that the user will need to load it)
|
|
17
17
|
sap.ui.define([
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
"sap/base/Log",
|
|
19
|
+
"sap/ui/test/gherkin/GherkinTestGenerator",
|
|
20
|
+
"sap/ui/test/gherkin/StepDefinitions",
|
|
21
|
+
"sap/ui/qunit/qunit-css",
|
|
22
|
+
"sap/ui/qunit/qunit-junit",
|
|
23
|
+
"sap/ui/qunit/qunit-coverage"
|
|
24
|
+
], function(Log, GherkinTestGenerator) {
|
|
25
|
+
'use strict';
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Dynamically generates and executes QUnit tests based on a Gherkin feature file and step definitions
|
|
29
|
+
*
|
|
30
|
+
* Logs activity to QUnit, and some debug information to the console with the prefix "[GHERKIN]"
|
|
31
|
+
*
|
|
32
|
+
* @author Jonathan Benn
|
|
33
|
+
* @alias sap.ui.test.gherkin.qUnitTestHarness
|
|
34
|
+
* @namespace
|
|
35
|
+
* @since 1.40
|
|
36
|
+
* @public
|
|
37
|
+
* @static
|
|
38
|
+
*/
|
|
39
|
+
var qUnitTestHarness = {
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Dynamically generates and executes QUnit tests
|
|
43
|
+
*
|
|
44
|
+
* @param {object} args - the arguments to the function
|
|
45
|
+
* @param {string} args.featurePath - the path to the Gherkin feature file to parse, as an SAPUI5 module path. The
|
|
46
|
+
* ".feature" extension is assumed and should not be included. See
|
|
47
|
+
* {@link jQuery.sap.registerModulePath}
|
|
48
|
+
* @param {function} args.steps - the constructor function of type {@link sap.ui.test.gherkin.StepDefinitions}
|
|
49
|
+
* @public
|
|
50
|
+
* @throws {Error} if any parameters are invalid
|
|
51
|
+
* @function
|
|
52
|
+
* @static
|
|
53
|
+
*/
|
|
54
|
+
test: function(args) {
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
// args is mandatory
|
|
57
|
+
if (!args || typeof args !== "object") {
|
|
58
|
+
throw new Error("qUnitTestHarness.test: input all arguments via a single object");
|
|
59
|
+
}
|
|
57
60
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
if (typeof args.featurePath !== "string" && !(args.featurePath instanceof String)) {
|
|
62
|
+
throw new Error("qUnitTestHarness.test: parameter 'featurePath' must be a valid string");
|
|
63
|
+
}
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
if ((typeof args.steps !== "function") || !((new args.steps())._generateTestStep)) {
|
|
66
|
+
throw new Error("qUnitTestHarness.test: parameter 'steps' must be a valid StepDefinitions constructor");
|
|
67
|
+
}
|
|
65
68
|
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
var oTestGenerator = new GherkinTestGenerator(args.featurePath, args.steps);
|
|
70
|
+
var oFeatureTest = oTestGenerator.generate();
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
QUnit.module(oFeatureTest.name, {
|
|
73
|
+
beforeEach: function() {
|
|
74
|
+
oTestGenerator.setUp();
|
|
75
|
+
},
|
|
76
|
+
afterEach: function() {
|
|
77
|
+
oTestGenerator.tearDown();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
77
80
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
81
|
+
Log.info("[GHERKIN] Running feature: '" + oFeatureTest.name + "'");
|
|
82
|
+
oFeatureTest.testScenarios.forEach(function(oTestScenario) {
|
|
83
|
+
var fnTestFunction = (!oFeatureTest.skip && !oTestScenario.skip) ? QUnit.test : QUnit.skip;
|
|
84
|
+
fnTestFunction(oTestScenario.name, function(assert) {
|
|
85
|
+
Log.info("[GHERKIN] Running scenario: '" + oTestScenario.name + "'");
|
|
86
|
+
oTestScenario.testSteps.forEach(function(oTestStep) {
|
|
87
|
+
Log.info("[GHERKIN] Running step: text='" + oTestStep.text + "' regex='" + oTestStep.regex + "'");
|
|
88
|
+
assert.ok(oTestStep.isMatch, oTestStep.text);
|
|
89
|
+
if (oTestStep.isMatch) {
|
|
90
|
+
QUnit.config.current.assertions.pop(); // don't break QUnit expect() behaviour
|
|
91
|
+
}
|
|
92
|
+
oTestGenerator.execute(oTestStep, assert);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
95
98
|
|
|
96
|
-
|
|
99
|
+
return qUnitTestHarness;
|
|
97
100
|
}, /* bExport= */ true);
|