gradio / node_modules /oboe /test /specs /instanceApi.unit.spec.js
reisarod's picture
Upload folder using huggingface_hub
5fae594 verified
describe('instance api',function(){
"use strict";
var oboeBus, oboeInstance;
beforeEach(function(){
oboeBus = spiedPubSub();
oboeInstance = instanceApi(oboeBus);
});
function anAscent(){
return list(namedNode(ROOT_PATH, {}) );
}
describe('header method', function(){
it('returns undefined if not available', function() {
expect( oboeInstance.header() ).toBeUndefined();
});
it('can provide object once available', function() {
var headers = {"x-remainingRequests": 100};
oboeBus(HTTP_START).emit( 200, headers );
expect( oboeInstance.header() ).toEqual(headers);
});
it('can provide single header once available', function() {
var headers = {"x-remainingRequests": 100};
oboeBus(HTTP_START).emit( 200, headers );
expect( oboeInstance.header('x-remainingRequests') ).toEqual(100);
});
it('gives undefined for non-existent single header', function() {
var headers = {"x-remainingRequests": 100};
oboeBus(HTTP_START).emit( 200, headers );
expect( oboeInstance.header('x-remainingBathtubs') ).toBeUndefined();
});
});
describe('root method', function(){
it('returns undefined if not available', function() {
expect( oboeInstance.root() ).toBeUndefined();
});
it('can provide object once available', function() {
var root = {I:'am', the:'root'};
oboeBus(ROOT_FOUND).emit( root);
expect( oboeInstance.root() ).toEqual(root);
});
});
describe('node and path callbacks', function(){
it('calls node callback when notified of matching node', function() {
var callback = jasmine.createSpy('node callback'),
node = {},
path = [],
ancestors = [];
oboeInstance.on('node', 'a_pattern', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('node:a_pattern').emit( node, path, ancestors );
expect(callback).toHaveBeenCalledWith( node, path, ancestors );
});
it('calls path callback when notified of matching path', function() {
var callback = jasmine.createSpy('path callback'),
node = {},
path = [],
ancestors = [];
oboeInstance.on('path', 'a_pattern', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('path:a_pattern').emit( node, path, ancestors );
expect(callback).toHaveBeenCalledWith( node, path, ancestors );
});
it('allows short-cut node matching', function() {
var callback1 = jasmine.createSpy(),
callback2 = jasmine.createSpy();
oboeInstance.on('node', {
pattern1: callback1,
pattern2: callback2
});
expect(callback1).not.toHaveBeenCalled()
expect(callback2).not.toHaveBeenCalled()
oboeBus('node:pattern1').emit( {}, anAscent())
expect(callback1).toHaveBeenCalled()
expect(callback2).not.toHaveBeenCalled()
oboeBus('node:pattern2').emit( {}, anAscent())
expect(callback2).toHaveBeenCalled()
});
it('calls node callback added using 2-arg mode when notified of match to pattern', function() {
var callback = jasmine.createSpy('node callback'),
node = {},
path = [],
ancestors = [];
oboeInstance.on('node:a_pattern', callback)
expect(callback).not.toHaveBeenCalled()
oboeBus('node:a_pattern').emit( node, path, ancestors );
expect(callback).toHaveBeenCalledWith( node, path, ancestors );
});
it('allows adding using addListener method', function() {
var callback = jasmine.createSpy('node callback'),
node = {},
path = [],
ancestors = [];
oboeInstance.addListener('node:a_pattern', callback)
expect(callback).not.toHaveBeenCalled()
oboeBus('node:a_pattern').emit( node, path, ancestors );
expect(callback).toHaveBeenCalledWith( node, path, ancestors );
});
it('calls path callback added using 2-arg mode when notified of match to pattern', function() {
var callback = jasmine.createSpy('path callback'),
node = {},
path = [],
ancestors = [];
oboeInstance.on('path:a_pattern', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('path:a_pattern').emit( node, path, ancestors );
expect(callback).toHaveBeenCalledWith( node, path, ancestors );
});
it('doesn\'t call node callback on path found', function() {
var callback = jasmine.createSpy('node callback');
oboeInstance.on('node', 'a_pattern', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('path:a_pattern').emit( {}, list(namedNode(ROOT_PATH, {}) ) );
expect(callback).not.toHaveBeenCalled();
});
it('doesn\'t call again after forget called from inside callback', function() {
var callback = jasmine.createSpy().andCallFake(function(){
this.forget();
}),
ascent = list(namedNode('node', {}));
oboeInstance.on('node', 'a_pattern', callback);
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback.call.length).toBe(1)
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback.calls.length).toBe(1)
});
it('doesn\'t call node callback after callback is removed', function() {
var callback = jasmine.createSpy(),
ascent = list(namedNode('node', {}));
oboeInstance.on('node', 'a_pattern', callback);
oboeInstance.removeListener('node', 'a_pattern', callback);
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback).not.toHaveBeenCalled()
});
it('doesn\'t call node callback after callback is removed using 2-arg form', function() {
var callback = jasmine.createSpy(),
ascent = list(namedNode('node', {}));
oboeInstance.on('node', 'a_pattern', callback);
oboeInstance.removeListener('node:a_pattern', callback);
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback).not.toHaveBeenCalled()
});
it('doesn\'t call path callback after callback is removed', function() {
var callback = jasmine.createSpy(),
ascent = list(namedNode('path', {}));
oboeInstance.on('path', 'a_pattern', callback);
oboeInstance.removeListener('path', 'a_pattern', callback);
oboeBus('path:a_pattern').emit( {}, ascent);
expect(callback).not.toHaveBeenCalled()
});
it('doesn\'t remove callback if wrong pattern is removed', function() {
var callback = jasmine.createSpy(),
ascent = list(namedNode('node', {}));
oboeInstance.on('node', 'a_pattern', callback);
oboeInstance.removeListener('node', 'wrong_pattern', callback);
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback).toHaveBeenCalled()
});
it('doesn\'t remove callback if wrong callback is removed', function() {
var callback = jasmine.createSpy(),
wrongCallback = jasmine.createSpy(),
ascent = list(namedNode('node', {}));
oboeInstance.on('node', 'a_pattern', callback);
oboeInstance.removeListener('node', 'a_pattern', wrongCallback);
oboeBus('node:a_pattern').emit( {}, ascent);
expect(callback).toHaveBeenCalled()
});
it('allows nodes node to be removed in a different ' +
'style than they were added', function() {
var
callback1 = jasmine.createSpy(),
callback2 = jasmine.createSpy(),
callback3 = jasmine.createSpy(),
ascent = list(namedNode('node', {}));
oboeInstance.node('pattern1', callback1);
oboeInstance.on('node', 'pattern2', callback2);
oboeInstance.on('node', {pattern3: callback3});
oboeInstance.removeListener('node:pattern1', callback1);
oboeInstance.removeListener('node:pattern2', callback2);
oboeInstance.removeListener('node:pattern3', callback3);
oboeBus('node:pattern1').emit( {}, ascent);
oboeBus('node:pattern2').emit( {}, ascent);
oboeBus('node:pattern3').emit( {}, ascent);
expect(callback1).not.toHaveBeenCalled()
expect(callback2).not.toHaveBeenCalled()
expect(callback3).not.toHaveBeenCalled()
});
});
describe('start event', function() {
it('notifies .on(start) listener when http response starts', function(){
var callback = jasmine.createSpy();
oboeInstance.on('start', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus(HTTP_START).emit( 200, {a_header:'foo'} )
expect(callback).toHaveBeenCalledWith( 200, {a_header:'foo'} )
});
it('notifies .start listener when http response starts', function(){
var callback = jasmine.createSpy();
oboeInstance.start(callback);
expect(callback).not.toHaveBeenCalled()
oboeBus(HTTP_START).emit( 200, {a_header:'foo'} )
expect(callback).toHaveBeenCalledWith( 200, {a_header:'foo'} )
});
it('can be de-registered', function() {
var callback = jasmine.createSpy();
oboeInstance.on('start', callback);
oboeInstance.removeListener('start', callback);
oboeBus(HTTP_START).emit( 200, {a_header:'foo'} )
expect(callback).not.toHaveBeenCalled()
});
});
describe('done event', function(){
it('calls listener on end of JSON when added using .on(done)', function() {
var callback = jasmine.createSpy();
oboeInstance.on('done', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('node:!').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
});
it('calls listener on end of JSON when added using .done', function() {
var callback = jasmine.createSpy();
oboeInstance.done(callback);
expect(callback).not.toHaveBeenCalled()
oboeBus('node:!').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
});
it('can be de-registered', function() {
var callback = jasmine.createSpy();
oboeInstance.on('done', callback);
oboeInstance.removeListener('done', callback);
oboeBus('node:!').emit( {}, anAscent())
expect(callback).not.toHaveBeenCalled()
});
});
it('emits ABORTING when .abort() is called', function() {
oboeInstance.abort();
expect(oboeBus(ABORTING).emit).toHaveBeenCalled()
});
describe('errors cases', function(){
describe('calling fail listener', function() {
it('notifies .on(fail) listener when something fails', function(){
var callback = jasmine.createSpy();
oboeInstance.on('fail', callback);
expect(callback).not.toHaveBeenCalled()
oboeBus(FAIL_EVENT).emit( 'something went wrong' )
expect(callback).toHaveBeenCalledWith( 'something went wrong' )
});
it('notifies .fail listener when something fails', function(){
var callback = jasmine.createSpy();
oboeInstance.fail(callback);
expect(callback).not.toHaveBeenCalled()
oboeBus(FAIL_EVENT).emit( 'something went wrong' )
expect(callback).toHaveBeenCalledWith( 'something went wrong' )
});
it('can be de-registered', function() {
var callback = jasmine.createSpy();
oboeInstance.on('fail', callback);
oboeInstance.removeListener('fail', callback);
oboeBus(FAIL_EVENT).emit( 'something went wrong' )
expect(callback).not.toHaveBeenCalled()
});
});
it('is protected from error in node callback', function() {
var e = "an error";
var callback = jasmine.createSpy().andThrow(e);
expect(function(){
oboeInstance.on('node', 'a_pattern', callback);
}).not.toThrow();
oboeBus('node:a_pattern').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
expect(oboeBus(FAIL_EVENT).emit)
.toHaveBeenCalledWith(errorReport(undefined, undefined, e))
});
it('is protected from error in node callback added via shortcut', function() {
var e = "an error";
var callback = jasmine.createSpy().andThrow(e);
expect(function(){
oboeInstance.on('node', {'a_pattern': callback});
}).not.toThrow();
oboeBus('node:a_pattern').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
expect(oboeBus(FAIL_EVENT).emit)
.toHaveBeenCalledWith(errorReport(undefined, undefined, e))
});
it('is protected from error in path callback', function() {
var e = "an error";
var callback = jasmine.createSpy().andThrow(e);
expect(function(){
oboeInstance.on('path', 'a_pattern', callback);
}).not.toThrow();
oboeBus('path:a_pattern').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
expect(oboeBus(FAIL_EVENT).emit)
.toHaveBeenCalledWith(errorReport(undefined, undefined, e))
});
it('is protected from error in start callback', function() {
var e = "an error";
var callback = jasmine.createSpy().andThrow(e);
expect(function(){
oboeInstance.on('start', callback);
}).not.toThrow();
oboeBus(HTTP_START).emit()
expect(callback).toHaveBeenCalled()
expect(oboeBus(FAIL_EVENT).emit)
.toHaveBeenCalledWith(errorReport(undefined, undefined, e))
});
it('is protected from error in done callback', function() {
var e = "an error";
var callback = jasmine.createSpy().andThrow(e);
expect(function(){
oboeInstance.done( callback);
}).not.toThrow();
oboeBus( 'node:!').emit( {}, anAscent())
expect(callback).toHaveBeenCalled()
expect(oboeBus(FAIL_EVENT).emit)
.toHaveBeenCalledWith(errorReport(undefined, undefined, e))
});
});
describe('unknown event types', function() {
it('can be added and fired', function() {
var spy1 = jasmine.createSpy();
var spy2 = jasmine.createSpy();
expect(function(){
oboeInstance
.on('xyzzy', spy1)
.on('end_of_universe', spy2);
}).not.toThrow();
oboeInstance.emit('xyzzy', 'hello');
oboeInstance.emit('end_of_universe', 'oh no!');
expect( spy1 ).toHaveBeenCalledWith('hello');
expect( spy2 ).toHaveBeenCalledWith('oh no!');
});
it('is allows removal', function() {
var spy1 = jasmine.createSpy();
var spy2 = jasmine.createSpy();
oboeInstance
.on('xyzzy', spy1)
.on('end_of_universe', spy2);
oboeInstance.removeListener('xyzzy', spy1);
oboeInstance.removeListener('end_of_universe', spy2);
oboeInstance.emit('xyzzy', 'hello');
oboeInstance.emit('end_of_universe', 'oh no!');
expect( spy1 ).not.toHaveBeenCalled()
expect( spy2 ).not.toHaveBeenCalled()
});
});
});