How to use change method in ng-mocks

Best JavaScript code snippet using ng-mocks

script.js

Source:script.js Github

copy

Full Screen

...29 }30 for (var i = 0; i < month_change.length; i++) {31 month_change[i].value = result.changes.percent.month + '%';32 };33 $('#option_id').change(function(){34 val = select.value;35 36 if (val == "USD"){37 var promise = $.ajax({38 url: 'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'39 }).then(function (result) { 40 precent[0].addEventListener('change', function(){41 switch_in[0].classList.remove('power');42 switch_in[0].classList.add('off');43 toggle[0].style.background = "#3aa5da";44 hour_change[0].value = result.changes.percent.hour + '%';45 day_change[0].value = result.changes.percent.day + '%';46 week_change[0].value = result.changes.percent.week + '%';47 month_change[0].value = result.changes.percent.month + '%';48 });49 dolar[0].addEventListener('change', function(){50 switch_in[0].classList.remove('off');51 switch_in[0].classList.add('power');52 toggle[0].style.background = "#b0b1b2";53 hour_change[0].value = '$' + result.changes.price.hour;54 day_change[0].value = '$' + result.changes.price.day;55 week_change[0].value = '$' + result.changes.price.week;56 month_change[0].value = '$' + result.changes.price.month;57 });58 precent[1].addEventListener('change', function(){59 switch_in[1].classList.add('off');60 switch_in[1].classList.remove('power');61 toggle[1].style.background = "#3aa5da";62 hour_change[1].value = result.changes.percent.hour + '%';63 day_change[1].value = result.changes.percent.day + '%';64 week_change[1].value = result.changes.percent.week + '%';65 month_change[1].value = result.changes.percent.month + '%';66 });67 dolar[1].addEventListener('change', function(){68 switch_in[1].classList.add('power');69 switch_in[1].classList.remove('off');70 toggle[1].style.background = "#b0b1b2";71 hour_change[1].value = '$' + result.changes.price.hour;72 day_change[1].value = '$' + result.changes.price.day;73 week_change[1].value = '$' + result.changes.price.week;74 month_change[1].value = '$' + result.changes.price.month;75 });76 precent[2].addEventListener('change', function(){77 switch_in[2].classList.add('off');78 switch_in[2].classList.remove('power');79 toggle[2].style.background = "#3aa5da";80 hour_change[2].value = result.changes.percent.hour + '%';81 day_change[2].value = result.changes.percent.day + '%';82 week_change[2].value = result.changes.percent.week + '%';83 month_change[2].value = result.changes.percent.month + '%';84 });85 dolar[2].addEventListener('change', function(){86 switch_in[2].classList.add('power');87 switch_in[2].classList.remove('off');88 toggle[2].style.background = "#b0b1b2";89 hour_change[2].value = '$' + result.changes.price.hour;90 day_change[2].value = '$' + result.changes.price.day;91 week_change[2].value = '$' + result.changes.price.week;92 month_change[2].value = '$' + result.changes.price.month;93 });94 95 96 });97 98 };99 if(val == "RUB"){100 var promise = $.ajax({101 url: 'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'102 }).then(function (result) { 103 precent[0].addEventListener('change', function(){104 switch_in[0].classList.remove('power');105 switch_in[0].classList.add('off');106 toggle[0].style.background = "#3aa5da";107 hour_change[0].value = result.changes.percent.hour + '%';108 day_change[0].value = result.changes.percent.day + '%';109 week_change[0].value = result.changes.percent.week + '%';110 month_change[0].value = result.changes.percent.month + '%';111 });112 dolar[0].addEventListener('change', function(){113 switch_in[0].classList.remove('off');114 switch_in[0].classList.add('power');115 toggle[0].style.background = "#b0b1b2";116 hour_change[0].value = '₽' + 67*result.changes.price.hour;117 day_change[0].value = '₽' + 67*result.changes.price.day;118 week_change[0].value = '₽' + 67*result.changes.price.week;119 month_change[0].value = '₽' + 67*result.changes.price.month;120 });121 precent[1].addEventListener('change', function(){122 switch_in[1].classList.add('off');123 switch_in[1].classList.remove('power');124 toggle[1].style.background = "#3aa5da";125 hour_change[1].value = result.changes.percent.hour + '%';126 day_change[1].value = result.changes.percent.day + '%';127 week_change[1].value = result.changes.percent.week + '%';128 month_change[1].value = result.changes.percent.month + '%';129 });130 dolar[1].addEventListener('change', function(){131 switch_in[1].classList.add('power');132 switch_in[1].classList.remove('off');133 toggle[1].style.background = "#b0b1b2";134 hour_change[1].value = '₽' + result.changes.price.hour;135 day_change[1].value = '₽' + result.changes.price.day;136 week_change[1].value = '₽' + result.changes.price.week;137 month_change[1].value = '₽' + result.changes.price.month;138 });139 precent[2].addEventListener('change', function(){140 switch_in[2].classList.add('off');141 switch_in[2].classList.remove('power');142 toggle[2].style.background = "#3aa5da";143 hour_change[2].value = result.changes.percent.hour + '%';144 day_change[2].value = result.changes.percent.day + '%';145 week_change[2].value = result.changes.percent.week + '%';146 month_change[2].value = result.changes.percent.month + '%';147 });148 dolar[2].addEventListener('change', function(){149 switch_in[2].classList.add('power');150 switch_in[2].classList.remove('off');151 toggle[2].style.background = "#b0b1b2";152 hour_change[2].value = '₽' + result.changes.price.hour;153 day_change[2].value = '₽' + result.changes.price.day;154 week_change[2].value = '₽' + result.changes.price.week;155 month_change[2].value = '₽' + result.changes.price.month;156 });157 158 159 });160 };161 if(val == "GBR"){162 var promise = $.ajax({163 url: 'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'164 }).then(function (result) { 165 precent[0].addEventListener('change', function(){166 switch_in[0].classList.remove('power');167 switch_in[0].classList.add('off');168 toggle[0].style.background = "#3aa5da";169 hour_change[0].value = result.changes.percent.hour + '%';170 day_change[0].value = result.changes.percent.day + '%';171 week_change[0].value = result.changes.percent.week + '%';172 month_change[0].value = result.changes.percent.month + '%';173 });174 dolar[0].addEventListener('change', function(){175 switch_in[0].classList.remove('off');176 switch_in[0].classList.add('power');177 toggle[0].style.background = "#b0b1b2";178 hour_change[0].value = '£' + 1.30*67*result.changes.price.hour;179 day_change[0].value = '£' + 1.30*67*result.changes.price.day;180 week_change[0].value = '£' + 1.30*67*result.changes.price.week;181 month_change[0].value = '£' + 1.30*67*result.changes.price.month;182 });183 precent[1].addEventListener('change', function(){184 switch_in[1].classList.add('off');185 switch_in[1].classList.remove('power');186 toggle[1].style.background = "#3aa5da";187 hour_change[1].value = result.changes.percent.hour + '%';188 day_change[1].value = result.changes.percent.day + '%';189 week_change[1].value = result.changes.percent.week + '%';190 month_change[1].value = result.changes.percent.month + '%';191 });192 dolar[1].addEventListener('change', function(){193 switch_in[1].classList.add('power');194 switch_in[1].classList.remove('off');195 toggle[1].style.background = "#b0b1b2";196 hour_change[1].value = '£' + 1.30*result.changes.price.hour;197 day_change[1].value = '£' + 1.30*result.changes.price.day;198 week_change[1].value = '£' + 1.30*result.changes.price.week;199 month_change[1].value = '£' + 1.30*result.changes.price.month;200 });201 precent[2].addEventListener('change', function(){202 switch_in[2].classList.add('off');203 switch_in[2].classList.remove('power');204 toggle[2].style.background = "#3aa5da";205 hour_change[2].value = result.changes.percent.hour + '%';206 day_change[2].value = result.changes.percent.day + '%';207 week_change[2].value = result.changes.percent.week + '%';208 month_change[2].value = result.changes.percent.month + '%';209 });210 dolar[2].addEventListener('change', function(){211 switch_in[2].classList.add('power');212 switch_in[2].classList.remove('off');213 toggle[2].style.background = "#b0b1b2";214 hour_change[2].value = '£' + 1.30*result.changes.price.hour;215 day_change[2].value = '£' + 1.30*result.changes.price.day;216 week_change[2].value = '£' + 1.30*result.changes.price.week;217 month_change[2].value = '£' + 1.30*result.changes.price.month;218 });219 220 221 });222 };223 224 });225 precent[0].addEventListener('change', function(){226 switch_in[0].classList.remove('power');227 switch_in[0].classList.add('off');228 toggle[0].style.background = "#3aa5da";229 hour_change[0].value = result.changes.percent.hour + '%';230 day_change[0].value = result.changes.percent.day + '%';231 week_change[0].value = result.changes.percent.week + '%';232 month_change[0].value = result.changes.percent.month + '%';233 });234 dolar[0].addEventListener('change', function(){235 switch_in[0].classList.remove('off');236 switch_in[0].classList.add('power');237 toggle[0].style.background = "#b0b1b2";238 hour_change[0].value = '$' + result.changes.price.hour;239 day_change[0].value = '$' + result.changes.price.day;240 week_change[0].value = '$' + result.changes.price.week;241 month_change[0].value = '$' + result.changes.price.month;242 });243 precent[1].addEventListener('change', function(){244 switch_in[1].classList.add('off');245 switch_in[1].classList.remove('power');246 toggle[1].style.background = "#3aa5da";247 hour_change[1].value = result.changes.percent.hour + '%';248 day_change[1].value = result.changes.percent.day + '%';249 week_change[1].value = result.changes.percent.week + '%';250 month_change[1].value = result.changes.percent.month + '%';251 });252 dolar[1].addEventListener('change', function(){253 switch_in[1].classList.add('power');254 switch_in[1].classList.remove('off');255 toggle[1].style.background = "#b0b1b2";256 hour_change[1].value = '$' + result.changes.price.hour;257 day_change[1].value = '$' + result.changes.price.day;258 week_change[1].value = '$' + result.changes.price.week;259 month_change[1].value = '$' + result.changes.price.month;260 });261 precent[2].addEventListener('change', function(){262 switch_in[2].classList.add('off');263 switch_in[2].classList.remove('power');264 toggle[2].style.background = "#3aa5da";265 hour_change[2].value = result.changes.percent.hour + '%';266 day_change[2].value = result.changes.percent.day + '%';267 week_change[2].value = result.changes.percent.week + '%';268 month_change[2].value = result.changes.percent.month + '%';269 });270 dolar[2].addEventListener('change', function(){271 switch_in[2].classList.add('power');272 switch_in[2].classList.remove('off');273 toggle[2].style.background = "#b0b1b2";274 hour_change[2].value = '$' + result.changes.price.hour;275 day_change[2].value = '$' + result.changes.price.day;276 week_change[2].value = '$' + result.changes.price.week;277 month_change[2].value = '$' + result.changes.price.month;278 });279 280 }).catch(function (err) {281 console.log('err', err)282 })283 284});285=======286document.addEventListener('DOMContentLoaded', function(){287 let precent = document.getElementsByClassName('precent'),288 dolar = document.getElementsByClassName('dolar'),289 switch_in = document.getElementsByClassName('switch'),290 toggle = document.getElementsByClassName('toggle-bg'),291 input_price = document.getElementsByClassName('input_price'),292 hour_change = document.getElementsByClassName('hour_change'),293 day_change = document.getElementsByClassName('day_change'),294 week_change = document.getElementsByClassName('week_change'),295 month_change = document.getElementsByClassName('month_change'),296 select = document.getElementById('option_id');297 298 var promise = $.ajax({299 url: 'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'300 }).then(function (result) { 301 302 for (var i = 0; i < input_price.length; i++) {303 input_price[i].value = '$' + result.ask;304 };305 for (var i = 0; i < hour_change.length; i++) {306 hour_change[i].value = result.changes.percent.hour + '%';307 }308 for (var i = 0; i < day_change.length; i++) {309 day_change[i].value = result.changes.percent.day + '%';310 }311 for (var i = 0; i < week_change.length; i++) { 312 week_change[i].value = result.changes.percent.week + '%';313 }314 for (var i = 0; i < month_change.length; i++) {315 month_change[i].value = result.changes.percent.month + '%';316 };317 $('#option_id').change(function(){318 val = select.value;319 320 if (val == "USD"){321 var promise = $.ajax({322 url: 'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'323 }).then(function (result) { 324 precent[0].addEventListener('change', function(){325 switch_in[0].classList.remove('power');326 switch_in[0].classList.add('off');327 toggle[0].style.background = "#3aa5da";328 hour_change[0].value = result.changes.percent.hour + '%';329 day_change[0].value = result.changes.percent.day + '%';330 week_change[0].value = result.changes.percent.week + '%';331 month_change[0].value = result.changes.percent.month + '%';...

Full Screen

Full Screen

ChangeRegistry.js

Source:ChangeRegistry.js Github

copy

Full Screen

1/*!2 * ${copyright}3 */4sap.ui.define([5 "sap/ui/fl/Utils",6 "sap/ui/thirdparty/jquery",7 "sap/ui/fl/registry/ChangeRegistryItem",8 "sap/ui/fl/registry/ChangeTypeMetadata",9 "sap/ui/fl/registry/Settings",10 "sap/ui/fl/changeHandler/HideControl",11 "sap/ui/fl/changeHandler/MoveElements",12 "sap/ui/fl/changeHandler/MoveControls",13 "sap/ui/fl/changeHandler/PropertyChange",14 "sap/ui/fl/changeHandler/PropertyBindingChange",15 "sap/ui/fl/changeHandler/UnhideControl",16 "sap/ui/fl/changeHandler/StashControl",17 "sap/ui/fl/changeHandler/UnstashControl",18 "sap/ui/fl/changeHandler/AddXML"19], function(20 Utils,21 jQuery,22 ChangeRegistryItem,23 ChangeTypeMetadata,24 Settings,25 HideControl,26 MoveElements,27 MoveControls,28 PropertyChange,29 PropertyBindingChange,30 UnhideControl,31 StashControl,32 UnstashControl,33 AddXML34) {35 "use strict";36 /**37 * Central registration for available change types on controls38 * @constructor39 * @alias sap.ui.fl.registry.ChangeRegistry40 *41 * @author SAP SE42 * @version ${version}43 * @experimental Since 1.27.044 *45 */46 var ChangeRegistry = function() {47 this._registeredItems = {};48 this.initSettings();49 this.initDeveloperModeChangeHandlers();50 };51 ChangeRegistry._instance = undefined;52 ChangeRegistry.prototype._oDefaultActiveChangeHandlers = {};53 ChangeRegistry.prototype._oDefaultChangeHandlers = {54 "hideControl": HideControl,55 "moveElements": MoveElements,56 "moveControls": MoveControls,57 "unhideControl": UnhideControl,58 "stashControl": StashControl,59 "unstashControl": UnstashControl60 };61 ChangeRegistry.prototype._mDeveloperModeChangeHandlers = {62 "propertyChange": {63 changeHandler: PropertyChange64 },65 "propertyBindingChange": {66 changeHandler: PropertyBindingChange67 },68 "addXML": {69 changeHandler: AddXML70 }71 };72 ChangeRegistry.prototype.initDeveloperModeChangeHandlers = function () {73 Object.keys(this._mDeveloperModeChangeHandlers).forEach(function(sChangeType) {74 var oChangeHandler = this._mDeveloperModeChangeHandlers[sChangeType].changeHandler;75 var oLayers = this._oSettings.getDeveloperModeLayerPermissions();76 var oSimpleChangeObject = {77 changeType: sChangeType,78 changeHandler: oChangeHandler,79 layers: oLayers80 };81 var oChangeRegistryItem = this._createChangeRegistryItemForSimpleChange("defaultActiveForAllControls", oSimpleChangeObject);82 this._oDefaultActiveChangeHandlers[sChangeType] = oChangeRegistryItem;83 }.bind(this));84 };85 ChangeRegistry.getInstance = function() {86 if (!ChangeRegistry._instance) {87 ChangeRegistry._instance = new ChangeRegistry();88 }89 return ChangeRegistry._instance;90 };91 ChangeRegistry.prototype.hasRegisteredChangeHandlersForControl = function (sControlType) {92 var aControlsWithRegistered = Object.keys(this._registeredItems);93 return aControlsWithRegistered.indexOf(sControlType) !== -1;94 };95 ChangeRegistry.prototype.hasChangeHandlerForControlAndChange = function (sControlType, sChangeType) {96 if (!this.hasRegisteredChangeHandlersForControl(sControlType)) {97 return false;98 }99 var oRegisteredChangeHandlersForControl = this._registeredItems[sControlType];100 var aHandlersRegisteredForControl = Object.keys(oRegisteredChangeHandlersForControl);101 return aHandlersRegisteredForControl.indexOf(sChangeType) !== -1;102 };103 ChangeRegistry.prototype.registerControlsForChanges = function(mControlChanges) {104 var that = this;105 jQuery.each(mControlChanges, function (sControlType, changeHandlers) {106 if (Array.isArray(changeHandlers)) {107 var oChangeHandlers = {};108 changeHandlers.forEach(function (oChangeHandler) {109 oChangeHandlers[oChangeHandler.changeType] = oChangeHandler.changeHandler;110 });111 that._registerChangeHandlersForControl(sControlType, oChangeHandlers);112 } else {113 that._registerChangeHandlersForControl(sControlType, changeHandlers);114 }115 });116 };117 ChangeRegistry.prototype._registerChangeHandlersForControl = function (sControlType, oChangeHandlers) {118 var that = this;119 if (typeof oChangeHandlers === "string") {120 try {121 oChangeHandlers = sap.ui.requireSync(oChangeHandlers + ".flexibility");122 } catch (error) {123 Utils.log.error("Flexibility change handler registration failed.\nControlType: " + sControlType + "\n" + error.message);124 return; // continue without a registration125 }126 }127 jQuery.each(oChangeHandlers, function (sChangeType, sChangeHandler) {128 var oChangeHandler = that._getChangeHandlerEntry(sChangeType, sChangeHandler);129 var oSimpleChange = {130 "changeType": sChangeType,131 "changeHandler": oChangeHandler.changeHandler,132 "layers":oChangeHandler.layers133 };134 that.registerControlForSimpleChange(sControlType, oSimpleChange);135 });136 };137 /**138 * Returns the Change Registry Item for a specific control instance (if available)139 * @param {string} sChangeType Change type of a <code>sap.ui.fl.Change</code> change140 * @param {sap.ui.core.Control} oControl The control instance for which the registry item will be retrieved141 * @param {sap.ui.core.util.reflection.BaseTreeModifier} oModifier Control tree modifier142 * @return {sap.ui.fl.registry.ChangeRegistryItem|undefined} Returns the registry item or undefined if not found143 * @private144 */145 ChangeRegistry.prototype._getInstanceSpecificChangeRegistryItem = function (sChangeType, oControl, oModifier) {146 var sChangeHandlerModulePath = oModifier.getChangeHandlerModulePath(oControl);147 var oChangeHandlers = {}, vChangeHandler, oChangeHandler,148 oSimpleChange, sControlType, oChangeRegistryItem;149 if (typeof sChangeHandlerModulePath !== "string") {150 return undefined; // continue without a registration151 }152 try {153 oChangeHandlers = sap.ui.requireSync(sChangeHandlerModulePath);154 } catch (error) {155 Utils.log.error("Flexibility registration for control " + oModifier.getId(oControl) +156 " failed to load module " + sChangeHandlerModulePath + "\n" + error.message);157 return undefined; // continue without a registration158 }159 vChangeHandler = oChangeHandlers[sChangeType];160 if (!vChangeHandler) {161 return undefined;162 }163 oChangeHandler = this._getChangeHandlerEntry(sChangeType, vChangeHandler);164 oSimpleChange = {165 "changeType": sChangeType,166 "changeHandler": oChangeHandler.changeHandler,167 "layers":oChangeHandler.layers168 };169 sControlType = oModifier.getControlType(oControl);170 oChangeRegistryItem = this._createChangeRegistryItemForSimpleChange(sControlType, oSimpleChange);171 return oChangeRegistryItem;172 };173 /**174 * Adds registration for a control and a simple change; if changeHandler is 'default', the default change handler is used.175 * @param {string} sChangeType - Change type of a <code>sap.ui.fl.Change</code> change176 * @param {string | object} vChangeHandler - Can be a string with 'default' or a path to a change handler implementation or an object (see example)177 * @returns {string|object} Returns the passed <code>sChangeHandler</code> or, if 'default', the loaded object of the default change handler178 * @example {179 * "moveControls": {180 * "changeHandler": "default",181 * "layers": {182 * "USER": true183 * }184 * }185 * }186 *187 * @private188 */189 ChangeRegistry.prototype._getChangeHandlerEntry = function (sChangeType, vChangeHandler) {190 var oResult = {};191 var aDeveloperModeChangeHandlers = Object.keys(this._mDeveloperModeChangeHandlers);192 if (!vChangeHandler || !vChangeHandler.changeHandler) {193 oResult.changeHandler = vChangeHandler;194 } else {195 oResult = vChangeHandler;196 }197 if (oResult.changeHandler === "default") {198 oResult.changeHandler = this._oDefaultChangeHandlers[sChangeType];199 } else if (aDeveloperModeChangeHandlers.indexOf(sChangeType) > -1) {200 throw new Error("You can't use a custom change handler for the following Developer Mode change types: " + aDeveloperModeChangeHandlers.toString() + ". Please use 'default' instead.");201 }202 return oResult;203 };204 /**205 * Retrieves the <code>sap.ui.fl.registry.ChangeRegistryItem</code> for the given change and control206 *207 * @param {string} sChangeType The Change type of a <code>sap.ui.fl.Change</code> change208 * @param {string} sControlType The name of the ui5 control type i.e. sap.m.Button209 * @param {string} [sLayer] The Layer to be considered210 * @returns {sap.ui.fl.registry.ChangeRegistryItem} the registry item containing the change handler. Undefined if not found.211 * @private212 */213 ChangeRegistry.prototype._getChangeRegistryItem = function (sChangeType, sControlType, sLayer) {214 var mChangeRegistryItem;215 if (!sChangeType || !sControlType) {216 return undefined;217 }218 mChangeRegistryItem = this.getRegistryItems({219 "changeTypeName": sChangeType,220 "controlType": sControlType,221 "layer": sLayer222 });223 if (mChangeRegistryItem && mChangeRegistryItem[sControlType] && mChangeRegistryItem[sControlType][sChangeType]) {224 return mChangeRegistryItem[sControlType][sChangeType];225 } else if (mChangeRegistryItem && mChangeRegistryItem[sControlType]) {226 return mChangeRegistryItem[sControlType];227 } else {228 return mChangeRegistryItem;229 }230 };231 /**232 * Retrieve the change handler for a certain change type and control233 * @param {string} sChangeType The Change type of a <code>sap.ui.fl.Change</code> change234 * @param {string} sControlType The name of the ui5 control type i.e. sap.m.Button235 * @param {sap.ui.core.Control} oControl The Control instance for which the change handler will be retrieved236 * @param {sap.ui.core.util.reflection.BaseTreeModifier} oModifier Control tree modifier237 * @param {string} sLayer The layer to be considered when getting the change handlers238 * @return {object} Returns the change handler object239 */240 ChangeRegistry.prototype.getChangeHandler = function (sChangeType, sControlType, oControl, oModifier, sLayer) {241 var oSpecificChangeRegistryItem, oChangeRegistryItem;242 oSpecificChangeRegistryItem = this._getInstanceSpecificChangeRegistryItem(sChangeType, oControl, oModifier);243 if (oSpecificChangeRegistryItem && oSpecificChangeRegistryItem.getChangeTypeMetadata) {244 var oSpecificChangeHandler = oSpecificChangeRegistryItem.getChangeTypeMetadata().getChangeHandler();245 if (oSpecificChangeHandler) {246 return oSpecificChangeHandler;247 }248 }249 oChangeRegistryItem = this._getChangeRegistryItem(sChangeType, sControlType, sLayer);250 if (oChangeRegistryItem && oChangeRegistryItem.getChangeTypeMetadata) {251 var oOriginalChangeHandler = oChangeRegistryItem.getChangeTypeMetadata().getChangeHandler();252 if (oOriginalChangeHandler) {253 return oOriginalChangeHandler;254 }255 }256 return undefined;257 };258 /**259 * Adds registration for a control and a simple change260 * @param {String} sControlType - Name of the control261 * @param {sap.ui.fl.registry.SimpleChange.member} oSimpleChange - One of the simple changes262 *263 * @public264 */265 ChangeRegistry.prototype.registerControlForSimpleChange = function(sControlType, oSimpleChange) {266 var oChangeRegistryItem;267 if (!sControlType) {268 return;269 }270 if (!oSimpleChange || !oSimpleChange.changeType || !oSimpleChange.changeHandler) {271 return;272 }273 oChangeRegistryItem = this._createChangeRegistryItemForSimpleChange(sControlType, oSimpleChange);274 if (oChangeRegistryItem) {275 this.addRegistryItem(oChangeRegistryItem);276 }277 };278 /**279 * Adds registration for a control and a simple change280 * @param {String} sControlType - Name of the control281 * @param {sap.ui.fl.registry.SimpleChange.member} oSimpleChange - One of the simple changes282 * @returns {sap.ui.fl.registry.ChangeRegistryItem} the registry item283 *284 * @public285 */286 ChangeRegistry.prototype._createChangeRegistryItemForSimpleChange = function(sControlType, oSimpleChange) {287 var mParam, oChangeTypeMetadata, oChangeRegistryItem, mLayerPermissions;288 mLayerPermissions = Object.assign({}, this._oSettings.getDefaultLayerPermissions());289 var oLayers = oSimpleChange.layers;290 if (oLayers) {291 Object.keys(oLayers).forEach(function (sLayer) {292 if (mLayerPermissions[sLayer] === undefined) {293 throw new Error("The Layer '" + sLayer + "' is not supported. Please only use supported layers");294 }295 mLayerPermissions[sLayer] = oLayers[sLayer];296 });297 }298 //Create change type metadata299 mParam = {300 name: oSimpleChange.changeType,301 changeHandler: oSimpleChange.changeHandler,302 layers : mLayerPermissions303 };304 oChangeTypeMetadata = new ChangeTypeMetadata(mParam);305 //Create change registry item306 mParam = {307 changeTypeMetadata: oChangeTypeMetadata,308 controlType: sControlType309 };310 oChangeRegistryItem = new ChangeRegistryItem(mParam);311 return oChangeRegistryItem;312 };313 /**314 * Add a registry item for the controlType and changeType. If the item already exists, it will be overwritten315 * @param {sap.ui.fl.registry.ChangeRegistryItem} oRegistryItem the registry item316 * @public317 */318 ChangeRegistry.prototype.addRegistryItem = function(oRegistryItem) {319 var sChangeType, sControlType;320 if (!oRegistryItem) {321 return;322 }323 sChangeType = oRegistryItem.getChangeTypeName();324 sControlType = oRegistryItem.getControlType();325 this._registeredItems[sControlType] = this._registeredItems[sControlType] || {};326 this._registeredItems[sControlType][sChangeType] = oRegistryItem;327 };328 /**329 * Remove a registration for:330 * - A single change type (only changeTypeName parameter set)331 * - The complete registration on a certain control (only controlType parameter set)332 * - Or all registrations of a change type on any control (both changeTypeName AND controlType set)333 * @param {Object} mParam Description see below334 * @param {String} [mParam.changeTypeName] Change type name which should be removed335 * @param {String} [mParam.controlType] Control type which should be removed.336 *337 * @public338 */339 ChangeRegistry.prototype.removeRegistryItem = function(mParam) {340 if (!mParam.changeTypeName && !mParam.controlType) {341 Utils.log.error("sap.ui.fl.registry.ChangeRegistry: ChangeType and/or ControlType required");342 return;343 }344 //Either remove a specific changeType from a specific control type345 if (mParam.controlType && mParam.changeTypeName) {346 if (this._registeredItems[mParam.controlType]) {347 if (Object.keys(this._registeredItems[mParam.controlType]).length === 1) { //only one changeType...348 delete this._registeredItems[mParam.controlType];349 } else {350 delete this._registeredItems[mParam.controlType][mParam.changeTypeName];351 }352 }353 //or remove by control type354 } else if (mParam.controlType) {355 if (this._registeredItems[mParam.controlType]) {356 delete this._registeredItems[mParam.controlType];357 }358 //or via changeType on all control types359 } else if (mParam.changeTypeName) {360 for ( var controlTypeKey in this._registeredItems) {361 var controlItem = this._registeredItems[controlTypeKey];362 delete controlItem[mParam.changeTypeName];363 }364 }365 };366 /**367 * Get a registration for:368 * - All registration items with specific change type name on all controls (only changeTypeName parameter set)369 * - The complete registration(s) on a certain control (only controlType parameter set)370 * - Or all registrations of a change type name on any control (both changeTypeName AND controlType set)371 * @param {Object} mParam Description see below372 * @param {String} [mParam.changeTypeName] Change type to find registration(s) for this changeType373 * @param {String} [mParam.controlType] Control type to find registration(s) for this controlType374 * @param {String} [mParam.layer] Layer where changes are currently applied. If not provided no filtering for valid layers is done.375 * @returns {Object} Returns an object in the format376 * @example {377 * "sap.ui.core.SampleControl":{378 * <ChangeRegistryItem> : {379 * _changeTypeMetadata: {380 * _changeHandler: {},381 * _layers: {},382 * _name,383 * _controlType384 * }385 * }386 * }387 * }388 * @public389 */390 ChangeRegistry.prototype.getRegistryItems = function(mParam) {391 if (!mParam) {392 Utils.log.error("sap.ui.fl.registry.ChangeRegistry: no parameters passed for getRegistryItems");393 }394 var sChangeType = mParam.changeTypeName;395 var sControlType = mParam.controlType;396 if (!sChangeType && !sControlType) {397 Utils.log.error("sap.ui.fl.registry.ChangeRegistry: Change Type Name and/or Control Type required");398 }399 var result = null;400 if (sControlType && sChangeType) {401 var oChangeHandler = this._getOrLoadChangeHandler(sControlType, sChangeType);402 if (oChangeHandler) {403 result = {};404 result[sControlType] = {};405 result[sControlType][sChangeType] = oChangeHandler;406 }407 } else if (sControlType) {408 result = {};409 result[sControlType] = {};410 if (this._registeredItems[sControlType]) {411 //keep the actual registry items but clone the control-changetype object structure to not modify the registry during filtering412 var aChangeTypes = Object.keys(this._registeredItems[sControlType]);413 aChangeTypes.forEach(function (sChangeType) {414 result[sControlType][sChangeType] = this._getOrLoadChangeHandler(sControlType, sChangeType);415 }.bind(this));416 }417 for (var sKey in this._oDefaultActiveChangeHandlers) {418 result[sControlType][sKey] = this._oDefaultActiveChangeHandlers[sKey];419 }420 } else if (sChangeType) {421 result = {};422 for ( sControlType in this._registeredItems) {423 if (this._registeredItems[sControlType][sChangeType]) {424 result[sControlType] = {};425 result[sControlType][sChangeType] = this._getOrLoadChangeHandler(sControlType, sChangeType);426 }427 }428 result["defaultActiveForAllControls"] = {};429 for (var key in this._oDefaultActiveChangeHandlers) {430 result["defaultActiveForAllControls"][key] = this._oDefaultActiveChangeHandlers[key];431 }432 }433 //filter out disabled change types434 this._filterChangeTypes(result, mParam.layer);435 return result;436 };437 ChangeRegistry.prototype._getOrLoadChangeHandler = function (sControlType, sChangeType) {438 var oControlRegistrations = this._registeredItems[sControlType];439 if (oControlRegistrations) {440 var oChangeHandler = oControlRegistrations[sChangeType];441 if (oChangeHandler) {442 var oChangeHandlerMetadata = oChangeHandler.getChangeTypeMetadata();443 var oChangeHandlerImplementation = oChangeHandlerMetadata.getChangeHandler();444 if (typeof oChangeHandlerImplementation === "string") {445 // load the module synchronously446 oChangeHandlerImplementation = sap.ui.requireSync(oChangeHandlerImplementation.replace(/\./g,"/"));447 oChangeHandlerMetadata._changeHandler = oChangeHandlerImplementation;448 }449 return oChangeHandler;450 }451 }452 var oDefaultActiveChangeHandler = this._oDefaultActiveChangeHandlers[sChangeType];453 if (oDefaultActiveChangeHandler) {454 return oDefaultActiveChangeHandler;455 }456 return null;457 };458 /**459 * Retrieves settings for SAPUI5 flexibility.460 *461 * @private462 */463 ChangeRegistry.prototype.initSettings = function() {464 this._oSettings = Settings.getInstanceOrUndef();465 if (!this._oSettings) {466 this._oSettings = new Settings({});467 }468 };469 /**470 * Removes registry items that are not enabled for the current writable layer.471 * @param {object} oRegistryItems see example472 * @param {string} sLayer persistency layer, if not provided no filtering is done.473 * @example {474 * "moveControls": {475 * "changeHandler": "default",476 * "layers": {477 * "USER": true478 * }479 * }480 * }481 * @private482 */483 ChangeRegistry.prototype._filterChangeTypes = function(oRegistryItems, sLayer) {484 if (this._oSettings && sLayer && oRegistryItems) {485 var bIsChangeTypeEnabled = false;486 jQuery.each(oRegistryItems, function(sControlType, oControlReg) {487 jQuery.each(oControlReg, function(sChangeType, oRegistryItem) {488 var oLayers = oRegistryItem.getChangeTypeMetadata().getLayers();489 bIsChangeTypeEnabled = oLayers[sLayer];490 if (!bIsChangeTypeEnabled) {491 Utils.log.warning("Change type " + sChangeType + " not enabled for layer " + sLayer);492 delete oControlReg[sChangeType];493 }494 });495 });496 }497 };498 ChangeRegistry.prototype.getDragInfo = function(sControlType) {499 var controlTypeItems = this._registeredItems[sControlType];500 if (controlTypeItems) {501 return controlTypeItems.getDragInfo();502 }503 return null;504 };505 return ChangeRegistry;...

Full Screen

Full Screen

changes.js

Source:changes.js Github

copy

Full Screen

1import { retreatFrontier } from "../line/highlight.js"2import { startWorker } from "../display/highlight_worker.js"3import { operation } from "../display/operations.js"4import { regChange, regLineChange } from "../display/view_tracking.js"5import { clipLine, clipPos, cmp, Pos } from "../line/pos.js"6import { sawReadOnlySpans } from "../line/saw_special_spans.js"7import { lineLength, removeReadOnlyRanges, stretchSpansOverChange, visualLine } from "../line/spans.js"8import { getBetween, getLine, lineNo } from "../line/utils_line.js"9import { estimateHeight } from "../measurement/position_measurement.js"10import { hasHandler, signal, signalCursorActivity } from "../util/event.js"11import { indexOf, lst, map, sel_dontScroll } from "../util/misc.js"12import { signalLater } from "../util/operation_group.js"13import { changeEnd, computeSelAfterChange } from "./change_measurement.js"14import { isWholeLineUpdate, linkedDocs, updateDoc } from "./document_data.js"15import { addChangeToHistory, historyChangeFromChange, mergeOldSpans, pushSelectionToHistory } from "./history.js"16import { Range, Selection } from "./selection.js"17import { setSelection, setSelectionNoUndo, skipAtomic } from "./selection_updates.js"18// UPDATING19// Allow "beforeChange" event handlers to influence a change20function filterChange(doc, change, update) {21 let obj = {22 canceled: false,23 from: change.from,24 to: change.to,25 text: change.text,26 origin: change.origin,27 cancel: () => obj.canceled = true28 }29 if (update) obj.update = (from, to, text, origin) => {30 if (from) obj.from = clipPos(doc, from)31 if (to) obj.to = clipPos(doc, to)32 if (text) obj.text = text33 if (origin !== undefined) obj.origin = origin34 }35 signal(doc, "beforeChange", doc, obj)36 if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj)37 if (obj.canceled) {38 if (doc.cm) doc.cm.curOp.updateInput = 239 return null40 }41 return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}42}43// Apply a change to a document, and add it to the document's44// history, and propagating it to all linked documents.45export function makeChange(doc, change, ignoreReadOnly) {46 if (doc.cm) {47 if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly)48 if (doc.cm.state.suppressEdits) return49 }50 if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {51 change = filterChange(doc, change, true)52 if (!change) return53 }54 // Possibly split or suppress the update based on the presence55 // of read-only spans in its range.56 let split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)57 if (split) {58 for (let i = split.length - 1; i >= 0; --i)59 makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin})60 } else {61 makeChangeInner(doc, change)62 }63}64function makeChangeInner(doc, change) {65 if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return66 let selAfter = computeSelAfterChange(doc, change)67 addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)68 makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))69 let rebased = []70 linkedDocs(doc, (doc, sharedHist) => {71 if (!sharedHist && indexOf(rebased, doc.history) == -1) {72 rebaseHist(doc.history, change)73 rebased.push(doc.history)74 }75 makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))76 })77}78// Revert a change stored in a document's history.79export function makeChangeFromHistory(doc, type, allowSelectionOnly) {80 let suppress = doc.cm && doc.cm.state.suppressEdits81 if (suppress && !allowSelectionOnly) return82 let hist = doc.history, event, selAfter = doc.sel83 let source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done84 // Verify that there is a useable event (so that ctrl-z won't85 // needlessly clear selection events)86 let i = 087 for (; i < source.length; i++) {88 event = source[i]89 if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)90 break91 }92 if (i == source.length) return93 hist.lastOrigin = hist.lastSelOrigin = null94 for (;;) {95 event = source.pop()96 if (event.ranges) {97 pushSelectionToHistory(event, dest)98 if (allowSelectionOnly && !event.equals(doc.sel)) {99 setSelection(doc, event, {clearRedo: false})100 return101 }102 selAfter = event103 } else if (suppress) {104 source.push(event)105 return106 } else break107 }108 // Build up a reverse change object to add to the opposite history109 // stack (redo when undoing, and vice versa).110 let antiChanges = []111 pushSelectionToHistory(selAfter, dest)112 dest.push({changes: antiChanges, generation: hist.generation})113 hist.generation = event.generation || ++hist.maxGeneration114 let filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")115 for (let i = event.changes.length - 1; i >= 0; --i) {116 let change = event.changes[i]117 change.origin = type118 if (filter && !filterChange(doc, change, false)) {119 source.length = 0120 return121 }122 antiChanges.push(historyChangeFromChange(doc, change))123 let after = i ? computeSelAfterChange(doc, change) : lst(source)124 makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))125 if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)})126 let rebased = []127 // Propagate to the linked documents128 linkedDocs(doc, (doc, sharedHist) => {129 if (!sharedHist && indexOf(rebased, doc.history) == -1) {130 rebaseHist(doc.history, change)131 rebased.push(doc.history)132 }133 makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))134 })135 }136}137// Sub-views need their line numbers shifted when text is added138// above or below them in the parent document.139function shiftDoc(doc, distance) {140 if (distance == 0) return141 doc.first += distance142 doc.sel = new Selection(map(doc.sel.ranges, range => new Range(143 Pos(range.anchor.line + distance, range.anchor.ch),144 Pos(range.head.line + distance, range.head.ch)145 )), doc.sel.primIndex)146 if (doc.cm) {147 regChange(doc.cm, doc.first, doc.first - distance, distance)148 for (let d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)149 regLineChange(doc.cm, l, "gutter")150 }151}152// More lower-level change function, handling only a single document153// (not linked ones).154function makeChangeSingleDoc(doc, change, selAfter, spans) {155 if (doc.cm && !doc.cm.curOp)156 return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans)157 if (change.to.line < doc.first) {158 shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))159 return160 }161 if (change.from.line > doc.lastLine()) return162 // Clip the change to the size of this doc163 if (change.from.line < doc.first) {164 let shift = change.text.length - 1 - (doc.first - change.from.line)165 shiftDoc(doc, shift)166 change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),167 text: [lst(change.text)], origin: change.origin}168 }169 let last = doc.lastLine()170 if (change.to.line > last) {171 change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),172 text: [change.text[0]], origin: change.origin}173 }174 change.removed = getBetween(doc, change.from, change.to)175 if (!selAfter) selAfter = computeSelAfterChange(doc, change)176 if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans)177 else updateDoc(doc, change, spans)178 setSelectionNoUndo(doc, selAfter, sel_dontScroll)179 if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))180 doc.cantEdit = false181}182// Handle the interaction of a change to a document with the editor183// that this document is part of.184function makeChangeSingleDocInEditor(cm, change, spans) {185 let doc = cm.doc, display = cm.display, from = change.from, to = change.to186 let recomputeMaxLength = false, checkWidthStart = from.line187 if (!cm.options.lineWrapping) {188 checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))189 doc.iter(checkWidthStart, to.line + 1, line => {190 if (line == display.maxLine) {191 recomputeMaxLength = true192 return true193 }194 })195 }196 if (doc.sel.contains(change.from, change.to) > -1)197 signalCursorActivity(cm)198 updateDoc(doc, change, spans, estimateHeight(cm))199 if (!cm.options.lineWrapping) {200 doc.iter(checkWidthStart, from.line + change.text.length, line => {201 let len = lineLength(line)202 if (len > display.maxLineLength) {203 display.maxLine = line204 display.maxLineLength = len205 display.maxLineChanged = true206 recomputeMaxLength = false207 }208 })209 if (recomputeMaxLength) cm.curOp.updateMaxLine = true210 }211 retreatFrontier(doc, from.line)212 startWorker(cm, 400)213 let lendiff = change.text.length - (to.line - from.line) - 1214 // Remember that these lines changed, for updating the display215 if (change.full)216 regChange(cm)217 else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))218 regLineChange(cm, from.line, "text")219 else220 regChange(cm, from.line, to.line + 1, lendiff)221 let changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change")222 if (changeHandler || changesHandler) {223 let obj = {224 from: from, to: to,225 text: change.text,226 removed: change.removed,227 origin: change.origin228 }229 if (changeHandler) signalLater(cm, "change", cm, obj)230 if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj)231 }232 cm.display.selForContextMenu = null233}234export function replaceRange(doc, code, from, to, origin) {235 if (!to) to = from236 if (cmp(to, from) < 0) [from, to] = [to, from]237 if (typeof code == "string") code = doc.splitLines(code)238 makeChange(doc, {from, to, text: code, origin})239}240// Rebasing/resetting history to deal with externally-sourced changes241function rebaseHistSelSingle(pos, from, to, diff) {242 if (to < pos.line) {243 pos.line += diff244 } else if (from < pos.line) {245 pos.line = from246 pos.ch = 0247 }248}249// Tries to rebase an array of history events given a change in the250// document. If the change touches the same lines as the event, the251// event, and everything 'behind' it, is discarded. If the change is252// before the event, the event's positions are updated. Uses a253// copy-on-write scheme for the positions, to avoid having to254// reallocate them all on every rebase, but also avoid problems with255// shared position objects being unsafely updated.256function rebaseHistArray(array, from, to, diff) {257 for (let i = 0; i < array.length; ++i) {258 let sub = array[i], ok = true259 if (sub.ranges) {260 if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }261 for (let j = 0; j < sub.ranges.length; j++) {262 rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)263 rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)264 }265 continue266 }267 for (let j = 0; j < sub.changes.length; ++j) {268 let cur = sub.changes[j]269 if (to < cur.from.line) {270 cur.from = Pos(cur.from.line + diff, cur.from.ch)271 cur.to = Pos(cur.to.line + diff, cur.to.ch)272 } else if (from <= cur.to.line) {273 ok = false274 break275 }276 }277 if (!ok) {278 array.splice(0, i + 1)279 i = 0280 }281 }282}283function rebaseHist(hist, change) {284 let from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1285 rebaseHistArray(hist.done, from, to, diff)286 rebaseHistArray(hist.undone, from, to, diff)287}288// Utility for applying a change to a line by handle or number,289// returning the number and optionally registering the line as290// changed.291export function changeLine(doc, handle, changeType, op) {292 let no = handle, line = handle293 if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle))294 else no = lineNo(handle)295 if (no == null) return null296 if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType)297 return line...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1import { change } from 'ng-mocks';2import { MyComponent } from './my.component';3import { TestBed } from '@angular/core/testing';4describe('MyComponent', () => {5 let component: MyComponent;6 beforeEach(() => {7 TestBed.configureTestingModule({8 });9 component = TestBed.createComponent(MyComponent).componentInstance;10 });11 it('should change value of input', () => {12 const value = 'new value';13 const input = component.input;14 change(input, value);15 expect(input.value).toEqual(value);16 });17});18import { Component, Input } from '@angular/core';19@Component({20 <input #input [(ngModel)]="value" />21})22export class MyComponent {23 @Input() public value = '';24 public get input(): HTMLInputElement {25 return this.inputRef.nativeElement;26 }27 public constructor(private readonly inputRef: ElementRef) {}28}29import { MyComponent } from './my.component';30describe('MyComponent', () => {31 let component: MyComponent;32 beforeEach(() => {33 TestBed.configureTestingModule({34 });35 component = TestBed.createComponent(MyComponent).componentInstance;36 });37 it('should change value of input', () => {38 const value = 'new value';39 const input = component.input;40 input.value = value;41 input.dispatchEvent(new Event('input'));42 expect(component.value).toEqual(value);43 });44});45<input #input [(ngModel)]="value" />46import { MyComponent } from './my.component';47describe('MyComponent', () => {48 let component: MyComponent;49 beforeEach(() => {50 TestBed.configureTestingModule({51 });52 component = TestBed.createComponent(MyComponent).componentInstance;53 });54 it('should change value of input', () => {55 const value = 'new value';56 const input = component.input;57 input.value = value;58 input.dispatchEvent(new Event('input'));59 expect(component.value).toEqual(value);60 });61});

Full Screen

Using AI Code Generation

copy

Full Screen

1import { change } from 'ng-mocks';2import { ComponentFixture, TestBed } from '@angular/core/testing';3import { Component } from '@angular/core';4import { FormsModule } from '@angular/forms';5@Component({6 <input type="text" [(ngModel)]="model" />7})8class TestComponent {9 public model = '';10}11describe('TestComponent', () => {12 let fixture: ComponentFixture<TestComponent>;13 let component: TestComponent;14 beforeEach(() => {15 TestBed.configureTestingModule({16 imports: [FormsModule],17 });18 fixture = TestBed.createComponent(TestComponent);19 component = fixture.componentInstance;20 });21 it('should change value', () => {22 expect(component.model).toBe('');23 change(fixture, 'input', 'test');24 expect(component.model).toBe('test');25 });26});27change(fixture, 'select', 'test', 0);28change(fixture, 'textarea', 'test', 0);29change(fixture,

Full Screen

Using AI Code Generation

copy

Full Screen

1import { change } from 'ng-mocks';2import { MyComponent } from './my.component';3import { ComponentFixture, TestBed } from '@angular/core/testing';4import { By } from '@angular/platform-browser';5import { DebugElement } from '@angular/core';6describe('MyComponent', () => {7 let component: MyComponent;8 let fixture: ComponentFixture<MyComponent>;9 let de: DebugElement;10 beforeEach(() => {11 TestBed.configureTestingModule({12 });13 fixture = TestBed.createComponent(MyComponent);14 component = fixture.componentInstance;15 de = fixture.debugElement;16 fixture.detectChanges();17 });18 it('should change value', () => {19 const input = de.query(By.css('input'));20 change(input, 'test');21 fixture.detectChanges();22 expect(component.value).toEqual('test');23 });24});

Full Screen

Using AI Code Generation

copy

Full Screen

1var ngMocks = require('ng-mocks');2describe('testing', function() {3 var $scope, $controller;4 beforeEach(angular.mock.module('app'));5 beforeEach(inject(function(_$controller_, _$rootScope_) {6 $scope = _$rootScope_.$new();7 $controller = _$controller_('MyCtrl', {$scope: $scope});8 }));9 it('should change the value', function() {10 $scope.change();11 expect($scope.value).to.equal('TEST');12 });13});14angular.module('app', [])15.controller('MyCtrl', function($scope) {16 $scope.value = 'initial';17 $scope.change = function() {18 $scope.value = 'TEST';19 }20});

Full Screen

Using AI Code Generation

copy

Full Screen

1angular.module('testApp', []).controller('testController', function($scope) {2 $scope.test = "test";3 $scope.change = function() {4 $scope.test = "changed";5 };6});7describe('testController', function() {8 var $scope, $compile, $controller;9 beforeEach(module('testApp'));10 beforeEach(inject(function(_$controller_, _$rootScope_, _$compile_) {11 $controller = _$controller_;12 $scope = _$rootScope_.$new();13 $compile = _$compile_;14 }));15 it('should change the scope variable', function() {16 var controller = $controller('testController', {17 });18 $scope.change();19 expect($scope.test).toBe("changed");20 });21});22I am trying to test a controller that has a function called change()

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run ng-mocks automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful