@skele/core
Version:
Core package of the Skele framework. Element definitions, registrations and traversal.
1 lines • 3.83 kB
JavaScript
;var _immutable=require("immutable");var _RegistryChain=require("../RegistryChain");var _Registry=_interopRequireDefault(require("../Registry"));var _MultivalueRegistry=_interopRequireDefault(require("../MultivalueRegistry"));var _PatternRegistry=_interopRequireDefault(require("../PatternRegistry"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}describe('RegistryChain',function(){var reg1=new _Registry.default();var reg2=new _Registry.default();var combined=new _RegistryChain.RegistryChain(reg1,reg2);afterEach(function(){reg1.reset();reg2.reset();});it('chains two repositories together',function(){reg1.register('a',1);reg2.register('b',2);expect(combined.get('a')).toEqual(1);expect(combined.get('b')).toEqual(2);});it('gives precedence to the primary registry',function(){reg1.register('a',1);reg2.register('a',2);expect(combined.get('a')).toEqual(2);});it('looks for the more specific version of the key in both registries first',function(){reg1.register(['a','b'],1);reg2.register('a',2);expect(combined.get(['a','b'])).toEqual(1);});});describe('RegistryChain with a fallabck pattern registry',function(){var reg1=new _PatternRegistry.default();var reg2=new _Registry.default();var combined=new _RegistryChain.RegistryChain(reg1,reg2);afterEach(function(){reg1.reset();reg2.reset();});it('supports more/less specific keys as well as patterns',function(){reg1.register(/^ab/,1);reg2.register(['ab','a'],2);expect(combined.get(['ab','a'])).toEqual(2);expect(combined.get('ab')).toEqual(1);});});describe('MultivalueRegistryChain',function(){var reg1=new _MultivalueRegistry.default();var reg2=new _MultivalueRegistry.default();var combined=new _RegistryChain.MultivalueRegistryChain(reg1,reg2);afterEach(function(){reg1.reset();reg2.reset();});it('combines results, less specific to more, fallback to primary, from both registries',function(){reg2.register('a',1);reg1.register(['a','b'],2);reg1.register(['a','b','c'],3);reg1.register('a',4);reg1.register(['a','b'],5);reg2.register(['a','b','c'],10);expect(combined.get('a')).toEqualI(_immutable.List.of(4,1));expect(combined.get(['a','b'])).toEqualI(_immutable.List.of(4,1,2,5));expect(combined.get(['a','b','c'])).toEqualI(_immutable.List.of(4,1,2,5,3,10));});});describe('chainRegistries',function(){var reg1=new _PatternRegistry.default();var reg2=new _Registry.default();var reg3=new _Registry.default();var reg4=new _Registry.default();afterEach(function(){reg1.reset();reg2.reset();reg3.reset();reg4.reset();});it('combines several registries, where registries to the right have precedence',function(){var combined=(0,_RegistryChain.chainRegistries)([reg1,reg2,reg3,reg4]);reg1.register('a',1);reg4.register('a',3);reg2.register('b',6);expect(combined.get('a')).toEqual(3);expect(combined.get('b')).toEqual(6);});it('combines a single registry',function(){var combined=(0,_RegistryChain.chainRegistries)([reg2]);reg2.register('a',1);expect(combined.get(['a'])).toEqual(1);});});describe('chainMultivalueRegistries',function(){var reg1=new _MultivalueRegistry.default();var reg2=new _MultivalueRegistry.default();var reg3=new _MultivalueRegistry.default();var reg4=new _MultivalueRegistry.default();afterEach(function(){reg1.reset();reg2.reset();reg3.reset();reg4.reset();});it('combines several registries, where registries to the right have precedence',function(){var combined=(0,_RegistryChain.chainMultivalueRegistries)([reg1,reg2,reg3,reg4]);reg1.register('a',1);reg3.register('a',2);reg2.register(['a','b'],3);reg4.register(['a','b'],4);expect(combined.get(['a','b'])).toEqualI(_immutable.List.of(1,2,3,4));});it('combines a single registry',function(){var combined=(0,_RegistryChain.chainMultivalueRegistries)([reg1]);reg1.register('a',1);expect(combined.get(['a'])).toEqualI(_immutable.List.of(1));});});