sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
197 lines (154 loc) • 5.25 kB
HTML
<html>
<!--
Copyright 2012 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.labs.observe.SimpleObservable</title>
<script src="../../base.js"></script>
<script>
goog.require('goog.dispose');
goog.require('goog.labs.observe.Observer');
goog.require('goog.labs.observe.SimpleObservable');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.recordFunction');
</script>
</head>
<body>
<script>
var observable;
function setUp() {
observable = new goog.labs.observe.SimpleObservable();
}
function tearDown() {
goog.dispose(observable);
}
function testObserve() {
var observerFn = goog.testing.recordFunction();
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn));
observable.notify();
assertEquals(1, observerFn.getCallCount());
}
function testObserveWithTheSameObserver() {
var observerFn = goog.testing.recordFunction();
var observer = goog.labs.observe.Observer.fromFunction(observerFn);
assertTrue(observable.observe(observer));
assertFalse(observable.observe(observer));
observable.notify();
assertEquals(1, observerFn.getCallCount());
observerFn.reset();
// observer.equals(observer2) == true
var observer2 = goog.labs.observe.Observer.fromFunction(observerFn);
assertFalse(observable.observe(observer2));
observable.notify();
assertEquals(1, observerFn.getCallCount());
}
function testMultipleObservers() {
var observerFn = goog.testing.recordFunction();
var observerFn2 = goog.testing.recordFunction();
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn));
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn2));
observable.notify();
assertEquals(1, observerFn.getCallCount());
assertEquals(1, observerFn2.getCallCount());
}
function testUnobserve() {
var observerFn = goog.testing.recordFunction();
var observer = goog.labs.observe.Observer.fromFunction(observerFn);
observable.observe(observer);
assertTrue(observable.unobserve(observer));
observable.notify();
assertEquals(0, observerFn.getCallCount());
assertFalse(observable.unobserve(observer));
}
function testNotice() {
var observerFn = goog.testing.recordFunction(function(notice) {
assertNotNull(notice);
assertEquals(observable, notice.getObservable());
assertUndefined(notice.getData());
});
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn));
observable.notify();
assertEquals(1, observerFn.getCallCount());
}
function testNoticeWithData() {
var data = {foo: 1};
var observerFn = goog.testing.recordFunction(function(notice) {
assertNotNull(notice);
assertEquals(observable, notice.getObservable());
assertEquals(data, notice.getData());
});
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn));
observable.notify(data);
assertEquals(1, observerFn.getCallCount());
}
function testUnobserveWhileObserverIsFiring() {
var observerFn = goog.testing.recordFunction(function() {
observable.unobserve(observer);
assertFalse(observable.unobserve(observer));
});
var observer = goog.labs.observe.Observer.fromFunction(observerFn);
var observerFn2 = goog.testing.recordFunction();
observable.observe(observer);
observable.observe(goog.labs.observe.Observer.fromFunction(observerFn2));
observable.notify();
assertEquals(1, observerFn.getCallCount());
assertEquals(1, observerFn2.getCallCount());
observable.notify();
assertEquals(1, observerFn.getCallCount());
assertEquals(2, observerFn2.getCallCount());
}
function testSimpleObservableAsComposition() {
var observable = new ActualObservable();
var observerFn = goog.testing.recordFunction(function(notice) {
assertNotNull(notice);
assertEquals(observable, notice.getObservable());
assertUndefined(notice.getData());
});
var observer = goog.labs.observe.Observer.fromFunction(observerFn);
observable.observe(observer);
observable.notify();
assertEquals(1, observerFn.getCallCount());
observerFn.reset();
}
function testDispose() {
var observerFn = function() {};
var observer = goog.labs.observe.Observer.fromFunction(observerFn);
observable.dispose();
assertThrows(function() {
observable.observe(observer);
});
assertThrows(function() {
observable.notify();
});
assertThrows(function() {
observable.observe(observer);
});
}
/**
* @constructor
* @extends {goog.Disposable}
*/
ActualObservable = function() {
goog.base(this);
this.observable_ = new goog.labs.observe.SimpleObservable(this);
this.registerDisposable(this.observable_);
};
goog.inherits(ActualObservable, goog.Disposable);
ActualObservable.prototype.observe = function(type, observer) {
this.observable_.observe(type, observer);
};
ActualObservable.prototype.unobserve = function(type, observer) {
this.observable_.unobserve(type, observer);
};
ActualObservable.prototype.notify = function(type, opt_data) {
this.observable_.notify(type, opt_data);
};
</script>
</body>
</html>