UNPKG

@girders-elements/core

Version:

Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.

336 lines (282 loc) 4.06 kB
'use strict'; var _immutable=require('immutable'); var _=require('..');var zip=_interopRequireWildcard(_); var _data=require('../../data');var data=_interopRequireWildcard(_data);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}} var childCollectionKind='@@girders-elements/child-collection'; function elementZipper(data,defaultChildPositions){ return zip.elementZipper({defaultChildPositions:defaultChildPositions})(data); } describe('Zipper',function(){ var singleChild={ kind:'parent', children:[ { kind:'lvl1', children:[ { kind:'lvl2'}]}]}; it('zipper should correctly navigate up and down',function(){ var zipper=elementZipper((0,_immutable.fromJS)(singleChild),'children'); expect(zipper.value().get('kind')).toEqual('parent'); expect(data.isOfKind(childCollectionKind,zipper.down().value())).toBe(true); expect( zipper. down(). down(). value(). get('kind')). toEqual('lvl1'); expect( data.isOfKind( childCollectionKind, zipper. down(). down(). down(). value())). toBe(true); expect( zipper. down(). down(). down(). down(). value(). get('kind')). toEqual('lvl2'); expect( zipper. down(). down(). down(). down(). down()). toBeNull(); expect( zipper. down(). up(). value(). get('kind')). toEqual('parent'); expect( zipper. down(). down(). down(). up(). value(). get('kind')). toEqual('lvl1'); }); var multipleChildren={ id:1, kind:'t', children:[ { id:2, kind:'t', children:[ { id:3, kind:'t'}, { kind:'t', id:4}]}, { id:5, kind:'t', children:[ { kind:'t', id:6}, { kind:'t', id:7}]}, { id:8, kind:'t', children:[ { kind:'t', id:9}, { kind:'t', id:10}]}]}; it('zipper should correctly navigate up down left and right',function(){ var zipper=elementZipper((0,_immutable.fromJS)(multipleChildren),'children'); expect(zipper.value().get('id')).toEqual(1); expect(data.isOfKind(childCollectionKind,zipper.down().value())).toBe(true); expect( zipper. down(). down(). value(). get('id')). toEqual(2); expect( zipper. down(). down(). right(). value(). get('id')). toEqual(5); expect( zipper. down(). down(). right(). right(). value(). get('id')). toEqual(8); expect( zipper. down(). down(). right(). right(). left(). value(). get('id')). toEqual(5); expect( data.isOfKind( childCollectionKind, zipper. down(). down(). right(). right(). left(). up(). value())). toBe(true); expect( zipper. down(). down(). right(). right(). left(). up(). up(). value(). get('id')). toEqual(1); }); var multipleChildrenElements={ id:1, kind:'t', left:[ { kind:'t', id:2}], right:[ { kind:'t', id:3}, { kind:'t', id:4}]}; it('zipper multiple children elements',function(){ var zipper=elementZipper((0,_immutable.fromJS)(multipleChildrenElements),[ 'left', 'right']); expect(zipper.value().get('id')).toEqual(1); expect( zipper. down(). value(). get('propertyName')). toEqual('left'); expect( zipper. down(). right(). value(). get('propertyName')). toEqual('right'); expect( zipper. down(). down(). value(). get('id')). toEqual(2); expect( zipper. down(). right(). down(). value(). get('id')). toEqual(3); expect( zipper. down(). right(). down(). right(). value(). get('id')). toEqual(4); }); var withChildrenPositions={ id:1, kind:'tX', '@@girders-elements/children':['left','right'], left:[ { kind:'t', id:2}], right:[ { kind:'t', id:3}, { kind:'t', id:4}]}; it('supports the @@girders-elements/children hint for child positions',function(){ var zipper=elementZipper((0,_immutable.fromJS)(withChildrenPositions)); expect(zipper.value().get('id')).toEqual(1); expect( zipper. down(). value(). get('propertyName')). toEqual('left'); expect( zipper. down(). right(). value(). get('propertyName')). toEqual('right'); expect( zipper. down(). down(). value(). get('id')). toEqual(2); expect( zipper. down(). right(). down(). value(). get('id')). toEqual(3); expect( zipper. down(). right(). down(). right(). value(). get('id')). toEqual(4); }); });