UNPKG

@genialis/resolwe

Version:
111 lines (109 loc) 15.2 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); var _ = require("lodash"); var base_1 = require("./base"); var component_1 = require("../../tests/component"); component_1.describeComponent('base component', [], function (tester) { var DummyComponent = /** @class */ (function (_super) { __extends(DummyComponent, _super); // @ngInject DummyComponent.$inject = ["$scope"]; function DummyComponent($scope) { var _this = _super.call(this, $scope) || this; _this.array = []; _this.strObservable = _this.createWatchObservable(function () { return _this.str; }); _this.arrayObservable = _this.createWatchObservable(function () { return _this.array; }, true); return _this; } DummyComponent = __decorate([ base_1.component({ module: tester.module, directive: 'gen-watch-observable', }) ], DummyComponent); return DummyComponent; }(base_1.ComponentBase)); it('should reactively update on shallow component changes', function () { var dummyComponent = tester.createComponent(DummyComponent.asView().template); // Test this.str var strSpy = jasmine.createSpy('strSpy'); dummyComponent.ctrl.strObservable .distinctUntilChanged() .subscribe(function (value) { return strSpy(_.cloneDeep(value)); }); dummyComponent.ctrl.str = 'some value'; tester.digest(); expect(strSpy.calls.count()).toBe(2); expect(strSpy.calls.first().args[0]).toBeUndefined(); expect(strSpy.calls.mostRecent().args[0]).toBe('some value'); }); it('should reactively update on deep component changes', function () { var dummyComponent = tester.createComponent(DummyComponent.asView().template); // Test this.array var arraySpy = jasmine.createSpy('arraySpy'); dummyComponent.ctrl.arrayObservable .filter(function (value) { return !_.isEmpty(value); }) .subscribe(function (value) { return arraySpy(_.cloneDeep(value)); }); dummyComponent.ctrl.array.push('some value'); tester.digest(); dummyComponent.ctrl.array.push('some other value'); tester.digest(); expect(arraySpy.calls.all()[0].args[0]).toEqual(['some value']); expect(arraySpy.calls.all()[1].args[0]).toEqual(['some value', 'some other value']); }); it('should support watch', function () { var dummyComponent = tester.createComponent(DummyComponent.asView().template); // No watch should be created if computation is immediately unsubscribed. var expression = 0; var executed = 0; var watchComputation = dummyComponent.ctrl.watch(function () { return expression; }, function (computation) { executed++; expect(computation.isDone()).toBeFalsy(); computation.unsubscribe(); }); expect(watchComputation.isDone()).toBeTruthy(); expression = 1; tester.digest(); expect(executed).toBe(1); // Check that watching works correctly. expression = 0; executed = 0; watchComputation = dummyComponent.ctrl.watch(function () { return expression; }, function (computation) { executed++; if (executed > 2) computation.unsubscribe(); }); expect(watchComputation.isDone()).toBeFalsy(); expression = 1; tester.digest(); // Just to check that watch is only evaluated when the expression changes. tester.digest(); expect(executed).toBe(2); expression = 2; tester.digest(); expect(executed).toBe(3); // Check that unsubscribe actually stops the watch. expression = 3; tester.digest(); expect(executed).toBe(3); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NvbXBvbmVudHMvYmFzZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUE0QjtBQUk1QiwrQkFBZ0Q7QUFDaEQsbURBQXdEO0FBRXhELDZCQUFpQixDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxVQUFDLE1BQU07SUFLM0M7UUFBNkIsa0NBQWE7UUFPdEMsWUFBWTtRQUNaLHdCQUFZLE1BQXNCO1lBQWxDLFlBQ0ksa0JBQU0sTUFBTSxDQUFDLFNBSWhCO1lBVE0sV0FBSyxHQUFhLEVBQUUsQ0FBQztZQU94QixLQUFJLENBQUMsYUFBYSxHQUFHLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEdBQUcsRUFBUixDQUFRLENBQUMsQ0FBQztZQUNoRSxLQUFJLENBQUMsZUFBZSxHQUFHLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEtBQUssRUFBVixDQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzlFLENBQUM7UUFiQyxjQUFjO1lBSm5CLGdCQUFTLENBQUM7Z0JBQ1AsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixTQUFTLEVBQUUsc0JBQXNCO2FBQ3BDLENBQUM7V0FDSSxjQUFjLENBY25CO1FBQUQscUJBQUM7S0FkRCxBQWNDLENBZDRCLG9CQUFhLEdBY3pDO0lBRUQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1FBQ3hELElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQ3pDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQ25DLENBQUM7UUFFRixnQkFBZ0I7UUFDaEIsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWE7YUFDNUIsb0JBQW9CLEVBQUU7YUFDdEIsU0FBUyxDQUFDLFVB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L2Jhc2Uuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFJ4IGZyb20gJ3J4JztcbmltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSAnYW5ndWxhcic7XG5cbmltcG9ydCB7Q29tcG9uZW50QmFzZSwgY29tcG9uZW50fSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtkZXNjcmliZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vdGVzdHMvY29tcG9uZW50JztcblxuZGVzY3JpYmVDb21wb25lbnQoJ2Jhc2UgY29tcG9uZW50JywgW10sICh0ZXN0ZXIpID0+IHtcbiAgICBAY29tcG9uZW50KHtcbiAgICAgICAgbW9kdWxlOiB0ZXN0ZXIubW9kdWxlLFxuICAgICAgICBkaXJlY3RpdmU6ICdnZW4td2F0Y2gtb2JzZXJ2YWJsZScsXG4gICAgfSlcbiAgICBjbGFzcyBEdW1teUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAgICAgICBwdWJsaWMgc3RyOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYyBzdHJPYnNlcnZhYmxlOiBSeC5PYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgICAgICAgcHVibGljIGFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBwdWJsaWMgYXJyYXlPYnNlcnZhYmxlOiBSeC5PYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICAgICAgICAvLyBAbmdJbmplY3RcbiAgICAgICAgY29uc3RydWN0b3IoJHNjb3BlOiBhbmd1bGFyLklTY29wZSkge1xuICAgICAgICAgICAgc3VwZXIoJHNjb3BlKTtcblxuICAgICAgICAgICAgdGhpcy5zdHJPYnNlcnZhYmxlID0gdGhpcy5jcmVhdGVXYXRjaE9ic2VydmFibGUoKCkgPT4gdGhpcy5zdHIpO1xuICAgICAgICAgICAgdGhpcy5hcnJheU9ic2VydmFibGUgPSB0aGlzLmNyZWF0ZVdhdGNoT2JzZXJ2YWJsZSgoKSA9PiB0aGlzLmFycmF5LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGl0KCdzaG91bGQgcmVhY3RpdmVseSB1cGRhdGUgb24gc2hhbGxvdyBjb21wb25lbnQgY2hhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZHVtbXlDb21wb25lbnQgPSB0ZXN0ZXIuY3JlYXRlQ29tcG9uZW50PER1bW15Q29tcG9uZW50PihcbiAgICAgICAgICAgIER1bW15Q29tcG9uZW50LmFzVmlldygpLnRlbXBsYXRlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVGVzdCB0aGlzLnN0clxuICAgICAgICBjb25zdCBzdHJTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3RyU3B5Jyk7XG4gICAgICAgIGR1bW15Q29tcG9uZW50LmN0cmwuc3RyT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBzdHJTcHkoXy5jbG9uZURlZXAodmFsdWUpKSk7XG5cbiAgICAgICAgZHVtbXlDb21wb25lbnQuY3RybC5zdHIgPSAnc29tZSB2YWx1ZSc7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcblxuICAgICAgICBleHBlY3Qoc3RyU3B5LmNhbGxzLmNvdW50KCkpLnRvQmUoMik7XG4gICAgICAgIGV4cGVjdChzdHJTcHkuY2FsbHMuZmlyc3QoKS5hcmdzWzBdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChzdHJTcHkuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUoJ3NvbWUgdmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVhY3RpdmVseSB1cGRhdGUgb24gZGVlcCBjb21wb25lbnQgY2hhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZHVtbXlDb21wb25lbnQgPSB0ZXN0ZXIuY3JlYXRlQ29tcG9uZW50PER1bW15Q29tcG9uZW50PihcbiAgICAgICAgICAgIER1bW15Q29tcG9uZW50LmFzVmlldygpLnRlbXBsYXRlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVGVzdCB0aGlzLmFycmF5XG4gICAgICAgIGNvbnN0IGFycmF5U3B5ID0gamFzbWluZS5jcmVhdGVTcHkoJ2FycmF5U3B5Jyk7XG4gICAgICAgIGR1bW15Q29tcG9uZW50LmN0cmwuYXJyYXlPYnNlcnZhYmxlXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gIV8uaXNFbXB0eSh2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gYXJyYXlTcHkoXy5jbG9uZURlZXAodmFsdWUpKSk7XG5cbiAgICAgICAgZHVtbXlDb21wb25lbnQuY3RybC5hcnJheS5wdXNoKCdzb21lIHZhbHVlJyk7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgZHVtbXlDb21wb25lbnQuY3RybC5hcnJheS5wdXNoKCdzb21lIG90aGVyIHZhbHVlJyk7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcblxuICAgICAgICBleHBlY3QoYXJyYXlTcHkuY2FsbHMuYWxsKClbMF0uYXJnc1swXSkudG9FcXVhbChbJ3NvbWUgdmFsdWUnXSk7XG4gICAgICAgIGV4cGVjdChhcnJheVNweS5jYWxscy5hbGwoKVsxXS5hcmdzWzBdKS50b0VxdWFsKFsnc29tZSB2YWx1ZScsICdzb21lIG90aGVyIHZhbHVlJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IHdhdGNoJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBkdW1teUNvbXBvbmVudCA9IHRlc3Rlci5jcmVhdGVDb21wb25lbnQ8RHVtbXlDb21wb25lbnQ+KFxuICAgICAgICAgICAgRHVtbXlDb21wb25lbnQuYXNWaWV3KCkudGVtcGxhdGVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBObyB3YXRjaCBzaG91bGQgYmUgY3JlYXRlZCBpZiBjb21wdXRhdGlvbiBpcyBpbW1lZGlhdGVseSB1bnN1YnNjcmliZWQuXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gMDtcbiAgICAgICAgbGV0IGV4ZWN1dGVkID0gMDtcbiAgICAgICAgbGV0IHdhdGNoQ29tcHV0YXRpb24gPSBkdW1teUNvbXBvbmVudC5jdHJsLndhdGNoKCgpID0+IGV4cHJlc3Npb24sIChjb21wdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgZXhlY3V0ZWQrKztcbiAgICAgICAgICAgIGV4cGVjdChjb21wdXRhdGlvbi5pc0RvbmUoKSkudG9CZUZhbHN5KCk7XG4gICAgICAgICAgICBjb21wdXRhdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHdhdGNoQ29tcHV0YXRpb24uaXNEb25lKCkpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBleHByZXNzaW9uID0gMTtcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICBleHBlY3QoZXhlY3V0ZWQpLnRvQmUoMSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB3YXRjaGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gICAgICAgIGV4cHJlc3Npb24gPSAwO1xuICAgICAgICBleGVjdXRlZCA9IDA7XG4gICAgICAgIHdhdGNoQ29tcHV0YXRpb24gPSBkdW1teUNvbXBvbmVudC5jdHJsLndhdGNoKCgpID0+IGV4cHJlc3Npb24sIChjb21wdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgZXhlY3V0ZWQrKztcbiAgICAgICAgICAgIGlmIChleGVjdXRlZCA+IDIpIGNvbXB1dGF0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qod2F0Y2hDb21wdXRhdGlvbi5pc0RvbmUoKSkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgZXhwcmVzc2lvbiA9IDE7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgLy8gSnVzdCB0byBjaGVjayB0aGF0IHdhdGNoIGlzIG9ubHkgZXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlcy5cbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICBleHBlY3QoZXhlY3V0ZWQpLnRvQmUoMik7XG5cbiAgICAgICAgZXhwcmVzc2lvbiA9IDI7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgZXhwZWN0KGV4ZWN1dGVkKS50b0JlKDMpO1xuXG4gICAgICAgIC8vIENoZWNrIHRoYXQgdW5zdWJzY3JpYmUgYWN0dWFsbHkgc3RvcHMgdGhlIHdhdGNoLlxuICAgICAgICBleHByZXNzaW9uID0gMztcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICBleHBlY3QoZXhlY3V0ZWQpLnRvQmUoMyk7XG4gICAgfSk7XG59KTtcblxuXG4iXX0=