@genialis/resolwe
Version:
Resolwe frontend libraries
111 lines (109 loc) • 15.2 kB
JavaScript
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=
;