| |
|
| | describe('instance api and pattern adaptor composed',function(){ |
| | "use strict"; |
| | |
| | var bus, api, matches; |
| | |
| | beforeEach(function(){ |
| | bus = spiedPubSub(); |
| | |
| | matches = {}; |
| | |
| | function jsonPathCompiler(pattern){ |
| |
|
| | function compiled ( ascent ){ |
| | if( matches[pattern] === ascent ) { |
| | return head(ascent); |
| | } else { |
| | return false; |
| | } |
| | } |
| | |
| | return compiled; |
| | } |
| |
|
| | api = instanceApi(bus); |
| | |
| | |
| | |
| | patternAdapter(bus, jsonPathCompiler); |
| | }); |
| | |
| | function anAscentMatching(pattern) { |
| | var ascent = list(namedNode('node', {})); |
| |
|
| | matches[pattern] = ascent; |
| |
|
| | return ascent; |
| | } |
| | |
| | it('has chainable methods that don\'t explode', function() { |
| | |
| |
|
| | expect(function(){ |
| | function fn(){} |
| | |
| | api |
| | .path('*', fn) |
| | .node('*', fn) |
| | .fail(fn).path('*', fn) |
| | .path({'*':fn}) |
| | .node({'*': fn}) |
| | .done(fn) |
| | .path({'*':fn}) |
| | .start(fn) |
| | .on('path','*', fn) |
| | .on('node','*', fn) |
| | .fail(fn) |
| | .on('path','*', fn) |
| | .on('path',{'*':fn}) |
| | .on('node',{'*': fn}) |
| | .on('path',{'*':fn}) |
| | .on('done',fn) |
| | .on('start',fn); |
| | }).not.toThrow(); |
| | }) |
| |
|
| | describe('header method', function(){ |
| |
|
| | it('returns undefined if not available', function() { |
| | |
| | expect( api.header() ).toBeUndefined(); |
| | }); |
| | |
| | it('can provide object once available', function() { |
| | |
| | var headers = {"x-remainingRequests": 100}; |
| | |
| | bus(HTTP_START).emit( 200, headers ); |
| | |
| | expect( api.header() ).toEqual(headers); |
| | }); |
| | |
| | it('can provide single header once available', function() { |
| | var headers = {"x-remainingRequests": 100}; |
| | |
| | bus(HTTP_START).emit( 200, headers ); |
| | |
| | expect( api.header('x-remainingRequests') ).toEqual(100); |
| | }); |
| | |
| | it('gives undefined for non-existent single header', function() { |
| | var headers = {"x-remainingRequests": 100}; |
| | |
| | bus(HTTP_START).emit( 200, headers ); |
| | |
| | expect( api.header('x-remainingBathtubs') ).toBeUndefined(); |
| | }); |
| | }); |
| | |
| | describe('root method', function(){ |
| | |
| | it('returns undefined if not available', function() { |
| | |
| | expect( api.root() ).toBeUndefined(); |
| | }); |
| | |
| | it('can provide object once available', function() { |
| | |
| | var root = {I:'am', the:'root'}; |
| | |
| | bus(ROOT_FOUND).emit( root); |
| | |
| | expect( api.root() ).toEqual(root); |
| | }); |
| | }); |
| | |
| | describe('node and path callbacks', function(){ |
| | it('calls node callback on matching node', function() { |
| | |
| | var callback = jasmine.createSpy('node callback'), |
| | ascent = anAscentMatching('a_pattern'); |
| | |
| | api.on('node', 'a_pattern', callback); |
| | |
| | expect(callback).not.toHaveBeenCalled() |
| | |
| | bus(NODE_FOUND).emit( ascent) |
| |
|
| | expect(callback).toHaveBeenCalled() |
| | }); |
| | |
| | it('calls path callback on matching path', function() { |
| | |
| | var callback = jasmine.createSpy(), |
| | ascent = anAscentMatching('a_pattern'); |
| | |
| | api.on('path', 'a_pattern', callback); |
| | |
| | expect(callback).not.toHaveBeenCalled() |
| | |
| | bus(PATH_FOUND).emit( ascent) |
| | |
| | expect(callback).toHaveBeenCalled() |
| | }); |
| | |
| | it('does not call node callback on non-matching node', function() { |
| | |
| | var callback = jasmine.createSpy(), |
| | ascent = anAscentMatching('a_pattern'); |
| | |
| | api.on('node', 'a_different_pattern', callback); |
| | |
| | bus(NODE_FOUND).emit( ascent) |
| | |
| | expect(callback).not.toHaveBeenCalled() |
| | }); |
| | |
| | it('calls node callback again on second match', function() { |
| | |
| | var callback = jasmine.createSpy(), |
| | ascent = anAscentMatching('a_pattern'); |
| | |
| | api.on('node', 'a_pattern', callback); |
| | |
| | bus(NODE_FOUND).emit( ascent) |
| | |
| | expect(callback.call.length).toBe(1) |
| | |
| | bus(NODE_FOUND).emit( ascent) |
| | |
| | expect(callback.calls.length).toBe(2) |
| | }); |
| | |
| | }); |
| | |
| | }); |
| |
|