Added: sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockPropertyDefGenerator.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockPropertyDefGenerator.java?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockPropertyDefGenerator.java (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/mock/MockPropertyDefGenerator.java Mon Feb 16 18:14:21 2015 @@ -0,0 +1,220 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package de.sandroboehme.jsnodetypes.mock; + +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_BINARY; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_BOOLEAN; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_DATE; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_DOUBLE; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_LONG; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_NAME; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_PATH; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_REFERENCE; +import static de.sandroboehme.jsnodetypes.GenerationConstants.CONSTRAINT_STRING; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_BOOLEAN; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_CALENDAR; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_DOUBLE; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_LONG; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_NAME; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_PATH; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_REFERENCE; +import static de.sandroboehme.jsnodetypes.GenerationConstants.DEFAULT_VALUE_STRING; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +import javax.jcr.Node; +import javax.jcr.PropertyType; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.Value; +import javax.jcr.ValueFormatException; +import javax.jcr.Workspace; +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeIterator; +import javax.jcr.nodetype.NodeTypeManager; +import javax.jcr.nodetype.PropertyDefinition; +import javax.jcr.version.OnParentVersionAction; + +import org.apache.sling.api.SlingHttpServletRequest; +import org.apache.sling.api.SlingHttpServletResponse; +import org.apache.sling.api.resource.Resource; + +import de.sandroboehme.jsnodetypes.GenerationConstants; + +/** + * Generates the PropertyDefinition mocks to simulate the property definitions that the servlet gets + * from the node type manager. + * + */ +public class MockPropertyDefGenerator { + + // mock classes + protected SlingHttpServletRequest request = null; + protected SlingHttpServletResponse response = null; + protected Resource resource = null; + protected Node currentNode = null; + protected Session session = null; + protected Workspace workspace = null; + protected NodeTypeManager ntManager = null; + protected NodeTypeIterator nodeTypeIterator = null; + protected ByteArrayOutputStream outStream = null; + + public PropertyDefinition getSimplePropertyDef(String name) { + PropertyDefinition propertyDef = mock(PropertyDefinition.class); + when(propertyDef.getOnParentVersion()).thenReturn(OnParentVersionAction.COPY); + when(propertyDef.getName()).thenReturn(name); + return propertyDef; + } + + private PropertyDefinition getCompletePropertyDev(String name, Integer type, String[] valueConstraints, String defaultValueString) throws ValueFormatException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getString()).thenReturn(defaultValueString); + PropertyDefinition propertyDef = getPropertyDef(name, type, valueConstraints, new Value[] {defaultValue}); + return propertyDef; + } + + /** + * @param name + * @param type + * @param valueConstraints + * @param defaultValue - the getType() method will be mocked within this method. You only need to mock the getString(), getDouble() methods. + * @return + * @throws ValueFormatException + * @throws RepositoryException + */ + public PropertyDefinition getPropertyDef(String name, Integer type, String[] valueConstraints, Value[] defaultValues) + throws ValueFormatException, RepositoryException { + return getPropertyDef(name, type, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE, OnParentVersionAction.VERSION, valueConstraints, defaultValues); + } + + public PropertyDefinition getPropertyDef(String propertyName, Integer type, Boolean isAutoCreated, Boolean isMandatory, Boolean isProtected, Boolean isMultiple, Integer onParentVersionAction, String[] valueConstraints, Value[] defaultValues) + throws ValueFormatException, RepositoryException { + PropertyDefinition propertyDef = mock(PropertyDefinition.class); + when(propertyDef.getOnParentVersion()).thenReturn(onParentVersionAction); + when(propertyDef.getName()).thenReturn(propertyName); + when(propertyDef.getRequiredType()).thenReturn(type); + when(propertyDef.getValueConstraints()).thenReturn(valueConstraints); + when(propertyDef.isMultiple()).thenReturn(isMultiple); + when(propertyDef.isProtected()).thenReturn(isProtected); + NodeType declaringNodeType = mock(NodeType.class); + when(declaringNodeType.getName()).thenReturn("ntName"); + when(propertyDef.getDeclaringNodeType()).thenReturn(declaringNodeType); + if (defaultValues!=null){ + for (Value defaultValue : defaultValues) { + when(defaultValue.getType()).thenReturn(type); + } + } + when(propertyDef.getDefaultValues()).thenReturn(defaultValues); + when(propertyDef.isAutoCreated()).thenReturn(isAutoCreated); + when(propertyDef.isMandatory()).thenReturn(isMandatory); + return propertyDef; + } + + @SuppressWarnings("deprecation") + public PropertyDefinition[] getDifferentPropertyDefinitions() throws ValueFormatException, RepositoryException{ + Value defaultValue1 = mock(Value.class); + when(defaultValue1.getType()).thenReturn(PropertyType.BINARY); + when(defaultValue1.getStream()).thenReturn(new ByteArrayInputStream(GenerationConstants.DEFAULT_VALUE_BINARY_0.getBytes())); + Value defaultValue2 = mock(Value.class); + when(defaultValue2.getType()).thenReturn(PropertyType.BINARY); + when(defaultValue2.getStream()).thenReturn(new ByteArrayInputStream(GenerationConstants.DEFAULT_VALUE_BINARY_1.getBytes())); + + PropertyDefinition binPropDef1 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,2048]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef2 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef3 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef4 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef5 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef6 = this.getPropertyDef("binPropDef", PropertyType.BINARY, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef7 = this.getPropertyDef("binPropDef", PropertyType.BOOLEAN, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef8 = this.getPropertyDef("binPropDef2", PropertyType.BOOLEAN, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + return new PropertyDefinition[]{binPropDef8, binPropDef7, binPropDef6, binPropDef5, binPropDef4, binPropDef3, binPropDef2, binPropDef1}; + } + + @SuppressWarnings("deprecation") + public PropertyDefinition[] getEqualPropertyDefinitions() throws ValueFormatException, RepositoryException{ + Value defaultValue1 = mock(Value.class); + when(defaultValue1.getType()).thenReturn(PropertyType.BINARY); + when(defaultValue1.getStream()).thenReturn(new ByteArrayInputStream("A content".getBytes())); + Value defaultValue2 = mock(Value.class); + when(defaultValue2.getType()).thenReturn(PropertyType.BINARY); + when(defaultValue2.getStream()).thenReturn(new ByteArrayInputStream("An other content".getBytes())); + + PropertyDefinition binPropDef1 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,2048]"}, new Value[] {defaultValue1, defaultValue2}); + PropertyDefinition binPropDef2 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2}); + return new PropertyDefinition[]{binPropDef2, binPropDef1}; + } + + public PropertyDefinition getCompleteStringPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + return getCompletePropertyDev(name, PropertyType.STRING, new String[]{CONSTRAINT_STRING}, DEFAULT_VALUE_STRING); + } + + @SuppressWarnings("deprecation") + public PropertyDefinition getCompleteBinaryPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getType()).thenReturn(PropertyType.BINARY); + when(defaultValue.getStream()).thenReturn(new ByteArrayInputStream("A content".getBytes())); + return getPropertyDef(name, PropertyType.BINARY, new String[]{CONSTRAINT_BINARY}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteDatePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getDate()).thenReturn(DEFAULT_VALUE_CALENDAR); + return getPropertyDef(name, PropertyType.DATE, new String[]{CONSTRAINT_DATE}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteDoublePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getDouble()).thenReturn(DEFAULT_VALUE_DOUBLE); + return getPropertyDef(name, PropertyType.DOUBLE, new String[]{CONSTRAINT_DOUBLE}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteLongPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getLong()).thenReturn(DEFAULT_VALUE_LONG); + return getPropertyDef(name, PropertyType.LONG, new String[]{CONSTRAINT_LONG}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteBooleanPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getBoolean()).thenReturn(DEFAULT_VALUE_BOOLEAN); + return getPropertyDef(name, PropertyType.BOOLEAN, new String[]{CONSTRAINT_BOOLEAN}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteNamePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_NAME); + return getPropertyDef(name, PropertyType.NAME, new String[]{CONSTRAINT_NAME}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompletePathPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_PATH); + return getPropertyDef(name, PropertyType.PATH, new String[]{CONSTRAINT_PATH}, new Value[] {defaultValue}); + } + + public PropertyDefinition getCompleteReferencePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException { + Value defaultValue = mock(Value.class); + when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_REFERENCE); + return getPropertyDef(name, PropertyType.REFERENCE, new String[]{CONSTRAINT_REFERENCE}, new Value[] {defaultValue}); + } + +}
Added: sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/JSONAssert.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/JSONAssert.java?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/JSONAssert.java (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/java/de/sandroboehme/jsnodetypes/test/JSONAssert.java Mon Feb 16 18:14:21 2015 @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package de.sandroboehme.jsnodetypes.test; + +import java.util.Iterator; + +import org.apache.sling.commons.json.JSONArray; +import org.apache.sling.commons.json.JSONException; +import org.apache.sling.commons.json.JSONObject; +import org.junit.Assert; + +/** + * Provides assertions on equality for JSON Arrays and Objects. + * + * This class is copied from org.apache.sling.commons.json.test.JSONAssert. + * This code in turn was based on code written by Andres Almiray <aalmi...@users.sourceforge.net> as + * part of the json-lib project - http://json-lib.sourceforge.net/ + * + * TODO: It should be made reusable in some way or the other. + */ +public class JSONAssert extends Assert { + /** + * Asserts that two JSONArrays are equal. + */ + public static void assertEquals(JSONArray expected, JSONArray actual) + throws JSONException { + assertEquals(null, expected, actual); + } + + /** + * Asserts that two JSONObjects are equal. + */ + public static void assertEquals(JSONObject expected, JSONObject actual) + throws JSONException { + assertEquals(null, expected, actual); + } + + /** + * Asserts that two JSONArrays are equal. + */ + public static void assertEquals(String message, JSONArray expected, + JSONArray actual) throws JSONException { + String header = message == null ? "" : message + ": "; + if (expected == null) { + fail(header + "expected array was null"); + } + if (actual == null) { + fail(header + "actual array was null"); + } + if (expected == actual || expected.equals(actual)) { + return; + } + if (actual.length() != expected.length()) { + fail(header + "arrays sizes differed, expected.length()=" + + expected.length() + " actual.length()=" + actual.length()); + } + + int max = expected.length(); + for (int i = 0; i < max; i++) { + Object o1 = expected.get(i); + Object o2 = actual.get(i); + + // handle nulls + if (JSONObject.NULL.equals(o1)) { + if (JSONObject.NULL.equals(o2)) { + continue; + } + fail(header + "arrays first differed at element [" + i + + "];"); + } else { + if (JSONObject.NULL.equals(o2)) { + fail(header + "arrays first differed at element [" + i + + "];"); + } + } + + if (o1 instanceof JSONArray && o2 instanceof JSONArray) { + JSONArray e = (JSONArray) o1; + JSONArray a = (JSONArray) o2; + assertEquals(header + "arrays first differed at element " + i + + ";", e, a); + } else if (o1 instanceof JSONObject && o2 instanceof JSONObject) { + assertEquals(header + "arrays first differed at element [" + i + + "];", (JSONObject) o1, (JSONObject) o2); + } else if (o1 instanceof String) { + assertEquals(header + "arrays first differed at element [" + i + + "];", (String) o1, String.valueOf(o2)); + } else if (o2 instanceof String) { + assertEquals(header + "arrays first differed at element [" + i + + "];", String.valueOf(o1), (String) o2); + } else { + assertEquals(header + "arrays first differed at element [" + i + + "];", o1, o2); + } + } + } + + /** + * Asserts that two JSONObjects are equal. + */ + public static void assertEquals(String message, JSONObject expected, + JSONObject actual) throws JSONException { + String header = message == null ? "" : message + ": "; + if (expected == null) { + fail(header + "expected object was null"); + } + if (actual == null) { + fail(header + "actual object was null"); + } + if (expected == actual /* || expected.equals( actual ) */) { + return; + } + + JSONArray expectedNames = expected.names(); + JSONArray actualNames = actual.names(); + + if (expectedNames == null && actualNames == null) { + return; + } + + if (expectedNames == null) { + expectedNames = new JSONArray(); + } + + if (actualNames == null) { + actualNames = new JSONArray(); + } + + assertEquals(header + + "names sizes differed, expected.names().length()=" + + expectedNames.length() + " actual.names().length()=" + + actualNames.length(), expectedNames.length(), actualNames + .length()); + for (Iterator<String> keys = expected.keys(); keys.hasNext();) { + String key = keys.next(); + Object o1 = expected.opt(key); + Object o2 = actual.opt(key); + + if (JSONObject.NULL.equals(o1)) { + if (JSONObject.NULL.equals(o2)) { + continue; + } + fail(header + "objects differed at key [" + key + "];"); + } else { + if (JSONObject.NULL.equals(o2)) { + fail(header + "objects differed at key [" + key + "];"); + } + } + + if (o1 instanceof JSONObject && o2 instanceof JSONObject) { + assertEquals(header + "objects differed at key [" + key + "];", + (JSONObject) o1, (JSONObject) o2); + } else if (o1 instanceof JSONArray && o2 instanceof JSONArray) { + assertEquals(header + "objects differed at key [" + key + "];", + (JSONArray) o1, (JSONArray) o2); + } else if (o1 instanceof String) { + assertEquals(header + "objects differed at key [" + key + "];", + (String) o1, String.valueOf(o2)); + } else if (o2 instanceof String) { + assertEquals(header + "objects differed at key [" + key + "];", + String.valueOf(o1), (String) o2); + } else { + assertEquals(header + "objects differed at key [" + key + "];", + o1, o2); + } + } + } + +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/NodeTypesSpec.js URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/NodeTypesSpec.js?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/NodeTypesSpec.js (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/javascript/NodeTypesSpec.js Mon Feb 16 18:14:21 2015 @@ -0,0 +1,1129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +describe('The Node Type Manager', function() { + + // The documentation about the spec format can be found here: + // http://pivotal.github.com/jasmine/ + var defaultNTJsonURL = "src/defaultNT/defaultNT.json"; + + function compareItemDefitions(actualItemDefinitions, expectedItemDefinitions){ + expect(actualItemDefinitions.autoCreated).toEqual(expectedItemDefinitions.autoCreated); + expect(actualItemDefinitions.mandatory).toEqual(expectedItemDefinitions.mandatory); + expect(actualItemDefinitions.protected).toEqual(expectedItemDefinitions.protected); + expect(actualItemDefinitions.onParentVersion).toEqual(expectedItemDefinitions.onParentVersion); + } + + function compareNodeTypeProperties(actualNodeType, expectedNodeType){ + expect(actualNodeType.mixin).toBe(expectedNodeType.mixin); + expect(actualNodeType.orderableChildNodes).toBe(expectedNodeType.orderableChildNodes); + expect(actualNodeType.declaredSupertypes).toEqual(expectedNodeType.declaredSupertypes); + } + + function comparePropertyDefProperties(actualPropertyDefs, expectedPropertyDefs){ + expect(actualPropertyDefs.defaultValues).toEqual(expectedPropertyDefs.defaultValues); + expect(actualPropertyDefs.valueConstraints).toEqual(expectedPropertyDefs.valueConstraints); + expect(actualPropertyDefs.requiredType).toEqual(expectedPropertyDefs.requiredType); + expect(actualPropertyDefs.multiple).toEqual(expectedPropertyDefs.multiple); + } + + function compareChildNodeDefProperties(actualChildNodeDefs, expectedChildNodeDefs){ + expect(actualChildNodeDefs.allowsSameNameSiblings).toEqual(expectedChildNodeDefs.allowsSameNameSiblings); + expect(actualChildNodeDefs.defaultPrimaryType).toEqual(expectedChildNodeDefs.defaultPrimaryType); + expect(actualChildNodeDefs.requiredPrimaryTypes).toEqual(expectedChildNodeDefs.requiredPrimaryTypes); + } + + it('returns the node type names.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "n1" : { + },"n2" : { + },"n3" : { + },"n4" : { + }} + }; + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + expect(ntManager.getNodeTypeNames()).toEqual(["nt:base","n1","n2","n3","n4"]); + }); + + it('returns the specified node type.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aNodeType" : { + }} + }; + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + expect(ntManager.getNodeType("aNodeType")).toEqual(settings.nodeTypesJson["aNodeType"]); + }); + + describe('collects', function () { + var ntManager; + + describe('all child node definitions from the super types ', function () { + + function arrayContainsCnDefWithName(array, cnDefName){ + var found = false; + for (var i=0; i<array.length && found===false; i++){ + found = array[i].name === cnDefName; + } + return found; + } + + it('with <getAllChildNodeDefinitions()>.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType", "aMixinParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + },{ + "name" : "childNodeDef2"} + ] + },"aParentNodeType" : { + "declaredSupertypes" : [ "aGrandParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef3" + },{ + "name" : "childNodeDef4"} + ] + },"aMixinParentNodeType" : { + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef5" + },{ + "name" : "childNodeDef6"} + ] + },"aGrandParentNodeType" : { + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef7" + },{ + "name" : "childNodeDef8"} + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingChildNodeDefs = ntManager.getNodeType("aNodeType").getAllChildNodeDefinitions(); + expect(resultingChildNodeDefs.length).toBe(8); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef1")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef2")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef3")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef4")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef5")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef6")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef7")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef8")).toBe(true); + }); + + it('with <getAllChildNodeDefinitions()> but does not contain duplicate entries from the parents.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + },{ + "name" : "childNodeDef2"} + ] + },"aParentNodeType" : { + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + },{ + "name" : "childNodeDef2"} + ] + },"nt:base" : { + } + } + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingChildNodeDefs = ntManager.getNodeType("aNodeType").getAllChildNodeDefinitions(); + expect(resultingChildNodeDefs.length).toBe(2); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef1")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef2")).toBe(true); + }); + + it('with <getAllChildNodeDefinitions()> and lists child node definitions with the same name but different content.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1", + "requiredPrimaryTypes": [ + "aNodeType" + ], + },{ + "name" : "childNodeDef2" + } + ] + },"aParentNodeType" : { + "declaredSupertypes" : [ "aGrandParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + },{ + "name" : "childNodeDef2" + } + ] + },"aGrandParentNodeType" : { + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + } + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingChildNodeDefs = ntManager.getNodeType("aNodeType").getAllChildNodeDefinitions(); + + expect(resultingChildNodeDefs.length).toBe(3); + + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef1")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef2")).toBe(true); + }); + + it('with <getAllChildNodeDefinitions()> but does not follow circular dependencies.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType", "aMixinParentNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef1" + },{ + "name" : "childNodeDef2"} + ] + },"aParentNodeType" : { + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef3" + },{ + "name" : "childNodeDef4"} + ] + },"aMixinParentNodeType" : { + //this creates a circular dependency + "declaredSupertypes" : [ "aNodeType" ], + "declaredChildNodeDefinitions" : [{ + "name" : "childNodeDef5" + },{ + "name" : "childNodeDef6"} + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + + var resultingChildNodeDefs = ntManager.getNodeType("aNodeType").getAllChildNodeDefinitions(); + expect(resultingChildNodeDefs.length).toBe(6); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef1")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef2")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef3")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef4")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef5")).toBe(true); + expect(arrayContainsCnDefWithName(resultingChildNodeDefs, "childNodeDef6")).toBe(true); + }); + }); + + describe('all property definitions from the super types', function () { + + function arrayContainsPropDefWithName(array, propDefName){ + var found = false; + for (var i=0; i<array.length && found===false; i++){ + found = array[i].name === propDefName; + } + return found; + } + + it('with <getAllPropertyDefinitions()>', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType", "aMixinParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2"} + ] + },"aParentNodeType" : { + "declaredSupertypes" : [ "aGrandParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef3" + },{ + "name" : "propertyDef4"} + ] + },"aMixinParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef5" + },{ + "name" : "propertyDef6"} + ] + },"aGrandParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef7" + },{ + "name" : "propertyDef8"} + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingPropertyDefs = ntManager.getNodeType("aNodeType").getAllPropertyDefinitions(); + expect(resultingPropertyDefs.length).toBe(8); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef1")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef2")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef3")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef4")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef5")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef6")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef7")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef8")).toBe(true); + }); + + it('with <getAllPropertyDefinitions()> but does not contain duplicate entries from the parents.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2"} + ] + },"aParentNodeType" : { + "declaredSupertypes" : [ "aGrandParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2"} + ] + },"aGrandParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2"} + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingPropertyDefs = ntManager.getNodeType("aNodeType").getAllPropertyDefinitions(); + expect(resultingPropertyDefs.length).toBe(2); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef1")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef2")).toBe(true); + }); + + it('with <getAllPropertyDefinitions()> and lists property definitions with the same name but different content.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1", + "multiple": true + },{ + "name" : "propertyDef2", + "multiple": true + } + ] + },"aParentNodeType" : { + "declaredSupertypes" : [ "aGrandParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2", + "multiple": true + } + ] + },"aGrandParentNodeType" : { + "declaredSupertypes" : [ "aGrandGrandParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1", + "valueConstraints": [ + "nt:versionHistory" + ], + },{ + "name" : "propertyDef2", + "multiple": true + } + ] + },"aGrandGrandParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1", + "defaultValues": [{ + "name": "nt:base", + "type": "Name" + }], + },{ + "name" : "propertyDef2", + "multiple": true + } + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingPropertyDefs = ntManager.getNodeType("aNodeType").getAllPropertyDefinitions(); + expect(resultingPropertyDefs.length).toBe(5); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef1")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef2")).toBe(true); + }); + + it('with <getAllPropertyDefinitions()> but does not follow circular dependencies.', function() { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : {"aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType", "aMixinParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1" + },{ + "name" : "propertyDef2"} + ] + },"aParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef3" + },{ + "name" : "propertyDef4"} + ] + },"aMixinParentNodeType" : { + // this supertype should not create a circular dependency + "declaredSupertypes" : [ "aNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef5" + },{ + "name" : "propertyDef6"} + ] + },"nt:base" : { + "declaredSupertypes" : [] + }} + }; + ntManager = new de.sandroboehme.NodeTypeManager(settings); + var resultingPropertyDefs = ntManager.getNodeType("aNodeType").getAllPropertyDefinitions(); + expect(resultingPropertyDefs.length).toBe(6); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef1")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef2")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef3")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef4")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef5")).toBe(true); + expect(arrayContainsPropDefWithName(resultingPropertyDefs, "propertyDef6")).toBe(true); + }); + + }); + }); + + describe('recognizes the default settings', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt": { + "declaredPropertyDefinitions": [{"name": "propertyDef1"}, {"name": "propertyDef2"}], + "declaredChildNodeDefinitions": [{"name": "childNodeDef1"}, {"name": "childNodeDef2"}], + }, + "nt:base" : { + } + } + }; + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + + it('for the properties at the node type level', function() { + compareNodeTypeProperties(ntManager.getNodeType("nt"), ntManager.internalGetDefaultNodeType()) + }); + + describe('for the properties at the property definition level', function() { + it('that do inherit from item definition', function() { + comparePropertyDefProperties(ntManager.getNodeType("nt").getAllPropertyDefinitions(), ntManager.internalGetDefaultNodeType().declaredPropertyDefinitions); + }); + it('that don\'t inherit from item definition', function() { + compareItemDefitions(ntManager.getNodeType("nt").getAllPropertyDefinitions(), ntManager.internalGetDefaultNodeType().declaredPropertyDefinitions); + }); + }); + + describe('for the properties at the child node definition level', function() { + ntManager = new de.sandroboehme.NodeTypeManager(settings); + it('that do inherit from item definition', function() { + compareChildNodeDefProperties(ntManager.getNodeType("nt").getAllChildNodeDefinitions(), ntManager.internalGetDefaultNodeType().declaredChildNodeDefinitions); + }); + + it('that don\'t inherit from item definition', function() { + compareItemDefitions(ntManager.getNodeType("nt").getAllChildNodeDefinitions(), ntManager.internalGetDefaultNodeType().declaredChildNodeDefinitions); + }); + }); + }); + + describe('overwrites the default settings', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt": { + "mixin": true, + "orderableChildNodes": true, + "declaredSupertypes": [ + "otherNodeType" + ], + "declaredPropertyDefinitions": [ + { + "defaultValues": [{ + "string": "a default value", + "type": "String" + }], + "valueConstraints": ["banana","apple"], + "requiredType": "String", + "multiple": true, + + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION" + } + ], + "declaredChildNodeDefinitions": [ + { + "allowsSameNameSiblings": true, + "defaultPrimaryType": "otherNodeType", + "requiredPrimaryTypes": [ + "otherNodeType" + ], + + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION" + } + ] + }, + "nt:base" : { + }, + "otherNodeType" : { + + } + } + }; + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + + it('for the properties at the node type level', function() { + compareNodeTypeProperties(ntManager.getNodeType("nt"), settings.nodeTypesJson.nt) + }); + + describe('for the properties at the property definition level', function() { + it('that do inherit from item definition', function() { + comparePropertyDefProperties(ntManager.getNodeType("nt").getAllPropertyDefinitions(), settings.nodeTypesJson.nt.declaredPropertyDefinitions); + }); + it('that don\'t inherit from item definition', function() { + compareItemDefitions(ntManager.getNodeType("nt").getAllPropertyDefinitions(), settings.nodeTypesJson.nt.declaredPropertyDefinitions); + }); + }); + + describe('for the properties at the child node definition level', function() { + it('that do inherit from item definition', function() { + compareChildNodeDefProperties(ntManager.getNodeType("nt").getAllChildNodeDefinitions(), settings.nodeTypesJson.nt.declaredChildNodeDefinitions); + }); + + it('that don\'t inherit from item definition', function() { + compareItemDefitions(ntManager.getNodeType("nt").getAllChildNodeDefinitions(), settings.nodeTypesJson.nt.declaredChildNodeDefinitions); + }); + }); + }); + + describe('returns in getApplicableCnTypesPerCnDef()', function () { + /* adding a keySize function to Object */ + if (typeof Object.keySize === "undefined") { + Object.keySize = function(obj) { + var keySize = 0, key; + for (key in obj) { + if (obj.hasOwnProperty(key)) keySize++; + } + return keySize; + }; + } + describe('all valid child node types', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aSuperType" : { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "supCnDef1" + ], + "name" : "supCnDef1Name" + }, + { + "requiredPrimaryTypes": [ + "supCnDef3", + "supCnDef2" + ], + "name" : "*" + } + ] + }, + "mix:supSupCnDef1" : { + "mixin": true + }, + "mix:supSupCnDef2" : { + "mixin": true + }, + "supCnDef1" : { + "declaredSupertypes": [ + "mix:supSupCnDef1", + "mix:supSupCnDef2" + ] + }, + "supCnDef1Sub1" : { + "declaredSupertypes": [ + "supCnDef1" + ] + }, + "supCnDef1Sub11" : { + "declaredSupertypes": [ + "supCnDef1Sub1" + ] + }, + "supCnDef2": { + }, + "supCnDef2Sub1" : { + "declaredSupertypes": [ + "supCnDef2" + ] + }, + "supCnDef2Sub11" : { + "declaredSupertypes": [ + "supCnDef2Sub1" + ] + }, + "supCnDef2Mixin" : { + "declaredSupertypes": [ + "supCnDef2Sub11" + ], + "mixin": true + }, + "supCnDef3": { + }, + "supCnDef3Def2" : { + "declaredSupertypes": [ + "supCnDef3", + "supCnDef2" + ] + }, + "aNodeType" : { + "declaredSupertypes": [ + "aSuperType" + ], + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "cnDef1" + ], + "name" : "cnDef1Name" + }, + { + "requiredPrimaryTypes": [ + "cnDef2" + ], + "name" : "cnDef2Name" + }, + { + "requiredPrimaryTypes": [ + "cnDef3" + ], + "name" : "*" + + }, + { + "requiredPrimaryTypes": [ + "cnDef4", + "cnDef5" + ], + "name" : "*" + } + ] + }, + "cnDef1" : { + }, + "cnDef2" : { + }, + "cnDef2Sub1" : { + "declaredSupertypes": [ + "cnDef2" + ] + }, + "cnDef2Sub11" : { + "declaredSupertypes": [ + "cnDef2Sub1" + ] + }, + "cnDef2Sub2" : { + "declaredSupertypes": [ + "cnDef2" + ] + }, + "cnDef3" : { + }, + "cnDef4" : { + }, + "cnDef5" : { + "declaredSupertypes": [ + "cnDef2Sub2" + ] + }, + "cnDef4Sub1" : { + "declaredSupertypes": [ + "cnDef4" + ] + }, + "cnDef4Sub11" : { + "declaredSupertypes": [ + "cnDef4Sub1" + ] + }, + "cnDef4Sub2" : { + "declaredSupertypes": [ + "cnDef4" + ] + }, + "cnDef5Sub1" : { + "declaredSupertypes": [ + "cnDef5" + ] + }, + "cnDef5Sub2" : { + "declaredSupertypes": [ + "cnDef5", + "cnDef2Sub2" + ] + }, + "CnDef2Mixin" : { + "declaredSupertypes": [ + "cnDef5Sub2" + ], + "mixin": true + }, + "cnDef45" : { + "declaredSupertypes": [ + "cnDef4Sub11", + "cnDef5Sub2" + ] + }, + "cnDef45Sub1" : { + "declaredSupertypes": [ + "cnDef45" + ] + } + } + }; + + // see "/src/test/resources/applicableChildNodeTypesDatastructure.jpg" for a + // visualization of the test datastructure + + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + var applicableCnTypes = ntManager.getNodeType("aNodeType").getApplicableCnTypesPerCnDef(); + + it('generally', function() { + expect(applicableCnTypes!=null).toBe(true); + expect(applicableCnTypes).toBeDefined(); + + expect(applicableCnTypes["cnDef1Name"]).toBeDefined(); + expect(Object.keySize(applicableCnTypes["cnDef1Name"])).toBe(1); + expect(applicableCnTypes["cnDef1Name"]["cnDef1"]).toBeDefined(); + + expect(applicableCnTypes["cnDef2Name"]).toBeDefined(); + expect(Object.keySize(applicableCnTypes["cnDef2Name"])).toBe(10); + expect(applicableCnTypes["cnDef2Name"]["cnDef2"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef2Sub1"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef2Sub11"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef2Sub2"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef5"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef5Sub1"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef5Sub2"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef45"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["cnDef45Sub1"]).toBeDefined(); + expect(applicableCnTypes["cnDef2Name"]["CnDef2Mixin"]).toBeDefined(); + + expect(applicableCnTypes["*"]).toBeDefined(); + expect(Object.keySize(applicableCnTypes["*"])).toBe(4); + expect(applicableCnTypes["*"]["supCnDef3Def2"]).toBeDefined(); + + expect(applicableCnTypes["*"]["cnDef3"]).toBeDefined(); + + expect(applicableCnTypes["*"]["cnDef45"]).toBeDefined(); + expect(applicableCnTypes["*"]["cnDef45Sub1"]).toBeDefined(); + + expect(applicableCnTypes["supCnDef1Name"]).toBeDefined(); + expect(Object.keySize(applicableCnTypes["supCnDef1Name"])).toBe(3); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1"]).toBeDefined(); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1Sub1"]).toBeDefined(); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1Sub11"]).toBeDefined(); + }); + + it('with multiple requiredPrimaryTypes', function() { + expect(applicableCnTypes["*"]).toBeDefined(); + expect(applicableCnTypes["*"]["supCnDef3Def2"]).toBeDefined(); + expect(applicableCnTypes["*"]["cnDef3"]).toBeDefined(); + expect(applicableCnTypes["*"]["cnDef45"]).toBeDefined(); + expect(applicableCnTypes["*"]["cnDef45Sub1"]).toBeDefined(); + }); + + it('including all valid super types\' child node types and its subtypes with multiple requiredPrimaryTypes', function() { + expect(applicableCnTypes["supCnDef1Name"]).toBeDefined(); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1Sub1"]).toBeDefined(); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1Sub1"]).toBeDefined(); + expect(applicableCnTypes["supCnDef1Name"]["supCnDef1Sub11"]).toBeDefined(); + + expect(applicableCnTypes["*"]["supCnDef3Def2"]).toBeDefined(); + }); + + }); + describe('all node types', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aNodeType" : { + "declaredChildNodeDefinitions": [ + { +// no required primary types declared: + "name" : "cnDef1Name" + } + ] + }, + "nt1" : { + }, + "nt2" : { + } + } + }; + + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + var applicableCnTypes = ntManager.getNodeType("aNodeType").getApplicableCnTypesPerCnDef(); + + it('if required primary types is \'nt:base\'', function() { + expect(applicableCnTypes!=null).toBe(true); + expect(applicableCnTypes["cnDef1Name"]).toBeDefined(true); + expect(applicableCnTypes["cnDef1Name"]["nt:base"]).toBeDefined(true); + expect(applicableCnTypes["cnDef1Name"]["aNodeType"]).toBeDefined(true); + expect(applicableCnTypes["cnDef1Name"]["nt1"]).toBeDefined(true); + expect(applicableCnTypes["cnDef1Name"]["nt2"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypes["cnDef1Name"])).toBe(4); + }); + }); + it('the residual definition', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aNodeType" : { + "declaredChildNodeDefinitions": [{ + "requiredPrimaryTypes": [ + "cnType1" + ], + "name" : "cnDef1Name" + },{ + "requiredPrimaryTypes": [ + "cnType2" + ], + "name" : "*" + } + ] + }, + "cnType1" : { + }, + "cnType2" : { + } + } + }; + + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + var applicableCnTypes = ntManager.getNodeType("aNodeType").getApplicableCnTypesPerCnDef(); + + expect(applicableCnTypes!=null).toBe(true); + expect(applicableCnTypes["cnDef1Name"]).toBeDefined(true); + expect(applicableCnTypes["cnDef1Name"]["cnType1"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypes["cnDef1Name"])).toBe(1); + + expect(applicableCnTypes["*"]["cnType2"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypes["*"])).toBe(1); + }); + + it('the applicable mixin node types if \'true\' has been passed to the mixin parameter', function () { + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aNodeType" : { + "declaredChildNodeDefinitions": [{ + "requiredPrimaryTypes": [ + "cnType1" + ], + "name" : "cnDef1Name" + },{ + "requiredPrimaryTypes": [ + "cnType2" + ], + "name" : "cnDef2Name" + },{ + "requiredPrimaryTypes": [ + "cnType3" + ], + "name" : "*" + } + ] + }, + "cnType1" : { + }, + "cnType2" : { + "mixin": true + }, + "cnType3" : { + "mixin": true + } + } + }; + + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + var applicableCnTypesWithMixin = ntManager.getNodeType("aNodeType").getApplicableCnTypesPerCnDef(true); + + expect(applicableCnTypesWithMixin!=null).toBe(true); + expect(applicableCnTypesWithMixin["cnDef1Name"]).toBeDefined(true); + expect(applicableCnTypesWithMixin["cnDef1Name"]["cnType1"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithMixin["cnDef1Name"])).toBe(1); + + expect(applicableCnTypesWithMixin["cnDef2Name"]).toBeDefined(true); + expect(applicableCnTypesWithMixin["cnDef2Name"]["cnType2"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithMixin["cnDef1Name"])).toBe(1); + + expect(applicableCnTypesWithMixin["*"]["cnType3"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithMixin["*"])).toBe(1); + + + var applicableCnTypesWithoutMixin = ntManager.getNodeType("aNodeType").getApplicableCnTypesPerCnDef(false); + + expect(applicableCnTypesWithoutMixin!=null).toBe(true); + expect(applicableCnTypesWithoutMixin["cnDef1Name"]).toBeDefined(true); + expect(applicableCnTypesWithoutMixin["cnDef1Name"]["cnType1"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithoutMixin["cnDef1Name"])).toBe(1); + + expect(applicableCnTypesWithoutMixin["cnDef2Name"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithoutMixin["cnDef2Name"])).toBe(0); + + expect(applicableCnTypesWithoutMixin["*"]).toBeDefined(true); + expect(Object.keySize(applicableCnTypesWithoutMixin["*"])).toBe(0); + }); + }); + + describe('checks in canAddChildNode()', function () { + + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "ntResidualChild": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "nt:base" + ], + "name" : "*" + } + ] + }, + "ntNonResidualChild": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "nt:base" + ], + "name" : "aChildNodeDef1" + } + ] + }, + "ntNonResidualProtectedChild": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "nt:base" + ], + "name" : "aChildNodeDef2", + "protected": true + } + ] + }, + "ntWithOtherChildNode": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "otherNodeType" + ], + "name" : "*" + } + ] + }, + "nt:base" : { + }, + "otherNodeType" : { + }, + "inheritedNodeType" : { + "declaredSupertypes": [ + "otherNodeType" + ] + }, + "aNodeType" : { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "aChildNodeType" + ], + "name" : "*" + } + ] + }, + "aChildNodeType" : { + }, + "aChildNodesSubtype" : { + "declaredSupertypes": [ + "aChildNodeType" + ] + } + } + }; + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + var ntBase = ntManager.getNodeType("nt:base"); + var ntResidualChild = ntManager.getNodeType("ntResidualChild"); + + describe('if the name is valid', function() { + it('for residual node names', function() { + expect(ntManager.getNodeType("ntResidualChild").canAddChildNode("childNodeDefName", ntBase)).toBe(true); + }); + it('for non residual node names', function() { + expect(ntManager.getNodeType("ntNonResidualChild").canAddChildNode("aChildNodeDef1", ntBase)).toBe(true); + expect(ntManager.getNodeType("ntNonResidualChild").canAddChildNode("aChildNodeDefA", ntBase)).toBe(false); + }); + }); + it('if the destination is not protected', function() { + expect(ntManager.getNodeType("ntNonResidualProtectedChild").canAddChildNode("aChildNodeDef2", ntResidualChild)).toBe(false); + }); + describe('if the type is valid', function() { + it('for direct types', function() { + var otherNodeType = ntManager.getNodeType("otherNodeType"); + expect(ntManager.getNodeType("ntWithOtherChildNode").canAddChildNode("otherNodeType", otherNodeType)).toBe(true); + expect(ntManager.getNodeType("ntWithOtherChildNode").canAddChildNode("otherNodeType", ntBase)).toBe(false); + }); + it('for an inherited type', function() { + var inheritedNodeType = ntManager.getNodeType("inheritedNodeType"); + expect(ntManager.getNodeType("ntWithOtherChildNode").canAddChildNode("inheritedNodeType", inheritedNodeType)).toBe(true); + expect(ntManager.getNodeType("ntWithOtherChildNode").canAddChildNode("inheritedNodeType", ntBase)).toBe(false); + }); + it('for subtype', function() { + var aChildNodeType = ntManager.getNodeType("aChildNodeType"); + var aChildNodesSubtype = ntManager.getNodeType("aChildNodesSubtype"); + expect(ntManager.getNodeType("aNodeType").canAddChildNode("aNodeName", aChildNodeType)).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddChildNode("aNodeName", aChildNodesSubtype)).toBe(true); + }); + }); + }); + + describe('checks in canAddProperty()', function () { + + var settings = { + "defaultNTJsonURL": defaultNTJsonURL, + "nodeTypesJson" : { + "nt:base" : { + }, + "aParentNodeType" : { + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef6", + "requiredType": "Date" + },{ + "name" : "propertyDef4", + "requiredType": "Date", + "protected": true + },{ + "name" : "propertyDef5", + "requiredType": "String" + },{ + "name" : "*", + "requiredType": "String" + },{ + "name" : "propertyDef2", + "requiredType": "undefined" + }] + }, + "aNodeType" : { + "declaredSupertypes" : [ "aParentNodeType" ], + "declaredPropertyDefinitions" : [{ + "name" : "propertyDef1", + "requiredType": "String" + }] + } + } + }; + + var ntManager = new de.sandroboehme.NodeTypeManager(settings); + + describe('if the name and type is applicable', function() { + it('for residual property names', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("aPropertyDef", "String")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("aPropertyDef", "Binary")).toBe(false); + expect(ntManager.getNodeType("aNodeType").canAddProperty("aPropertyDef", "Date")).toBe(false); + }); + it('for undefined property types', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef2", "Binary")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef2", "Date")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef2", "String")).toBe(true); + }); + it('for non residual property names', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef1", "String")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef1", "Binary")).toBe(false); + }); + it('for properties of super types', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef5", "String")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef5", "Binary")).toBe(false); + }); + }); + it('if the type is case insensitive', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef1", "stRING")).toBe(true); + }); + it('if the name and type is not applicable for protected properties', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef4", "Date")).toBe(false); + }); + it('that residual property definitions are not applicable for non residual property types', function() { + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef6", "Date")).toBe(true); + expect(ntManager.getNodeType("aNodeType").canAddProperty("propertyDef6", "String")).toBe(false); + }); + }); + + function sameArrayContent(array1, array2){ + expect(array1.length).toBe(array2.length); + for (var i=0; i<array2.length; i++){ + if (typeof array2[i] !== "undefined") { + expect(array1).toContain(array2[i]); + } + } + } + +}); Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/applicableChildNodeTypesDatastructure.jpg URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/applicableChildNodeTypesDatastructure.jpg?rev=1660179&view=auto ============================================================================== Binary file - no diff available. Propchange: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/applicableChildNodeTypesDatastructure.jpg ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBinaryPropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBinaryPropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBinaryPropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBinaryPropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "binary": "/ntName/stringPropertyDef/Binary/true/true/true/true/VERSION/0.default_binary_value.bin", + "type": "Binary" + } + ], + "requiredType": "Binary", + "valueConstraints": [ + "[,1024]" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "stringPropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBooleanPropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBooleanPropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBooleanPropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteBooleanPropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "boolean": true, + "type": "Boolean" + } + ], + "requiredType": "Boolean", + "valueConstraints": [ + "true" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "booleanPropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteChildNodeDefinitions.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteChildNodeDefinitions.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteChildNodeDefinitions.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteChildNodeDefinitions.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,32 @@ +{ + "ntWithChildNodeDefs": { + "declaredChildNodeDefinitions": [ + { + "allowsSameNameSiblings": true, + "defaultPrimaryType": "requiredPrimaryType1", + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "childNodeDef1" + }, + { + "allowsSameNameSiblings": true, + "defaultPrimaryType": "requiredPrimaryType1", + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "childNodeDef2" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDatePropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDatePropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDatePropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDatePropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "date": "2012-02-01T00:00:00.000+01:00", + "type": "Date" + } + ], + "requiredType": "Date", + "valueConstraints": [ + "2012-04-01T00:00:00Z" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "datePropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDoublePropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDoublePropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDoublePropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteDoublePropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "double": 2.2, + "type": "Double" + } + ], + "requiredType": "Double", + "valueConstraints": [ + "[,5]" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "doublePropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteLongPropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteLongPropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteLongPropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteLongPropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "long": 2, + "type": "Long" + } + ], + "requiredType": "Long", + "valueConstraints": [ + "[,55]" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "longPropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNamePropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNamePropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNamePropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNamePropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "name": "myapp:myName", + "type": "Name" + } + ], + "requiredType": "Name", + "valueConstraints": [ + "myapp:myName" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "namePropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNodeTypes.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNodeTypes.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNodeTypes.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteNodeTypes.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,56 @@ +{ + "testNodeType": { + "declaredSupertypes": [ + "superType1", + "superType2", + "superType3" + ], + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "string": "Default-String", + "type": "String" + } + ], + "valueConstraints": [ + ".*" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "stringPropertyDef" + } + ], + "declaredChildNodeDefinitions": [ + { + "allowsSameNameSiblings": true, + "defaultPrimaryType": "requiredPrimaryType1", + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "childNodeDef1" + }, + { + "allowsSameNameSiblings": true, + "defaultPrimaryType": "requiredPrimaryType1", + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "childNodeDef2" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompletePathPropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompletePathPropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompletePathPropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompletePathPropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "path": "/myapp:myName/myapp:myChildNode/aSubChildNode", + "type": "Path" + } + ], + "requiredType": "Path", + "valueConstraints": [ + "/myapp:myName/myapp:myChildNode/*" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "pathPropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteReferencePropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteReferencePropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteReferencePropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteReferencePropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,24 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "reference": "nt:unstructured", + "type": "Reference" + } + ], + "requiredType": "Reference", + "valueConstraints": [ + "nt:unstructured" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "referencePropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteStringPropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteStringPropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteStringPropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testCompleteStringPropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,23 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "string": "Default-String", + "type": "String" + } + ], + "valueConstraints": [ + ".*" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "stringPropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithServlet.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithServlet.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithServlet.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithServlet.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,12 @@ +{ + "testNodeType": { + "declaredPropertyDefinitions": [{ + "name": "stringPropertyDef" + } + ], + "declaredChildNodeDefinitions": [{ + "name": "childNodeDef" + } + ] + } +} \ No newline at end of file Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithoutServlet.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithoutServlet.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithoutServlet.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testIfDefaultsAreOmittedWithoutServlet.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,8 @@ +{ + "declaredPropertyDefinitions": [ + {} + ], + "declaredChildNodeDefinitions": [ + {} + ] +} \ No newline at end of file Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleConstraints.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleConstraints.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleConstraints.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleConstraints.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,18 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "valueConstraints": [ + "banana", + "apple" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "stringProp" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleDefaultValues.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleDefaultValues.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleDefaultValues.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testMultipleDefaultValues.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,27 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "string": "Default-String", + "type": "String" + }, + { + "string": "Default-String2", + "type": "String" + } + ], + "valueConstraints": [ + ".*" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "stringProp" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testNodeTypeWithEmptyName.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testNodeTypeWithEmptyName.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testNodeTypeWithEmptyName.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testNodeTypeWithEmptyName.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,4 @@ +{ + "testNodeType1": { + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleChildNodeDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleChildNodeDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleChildNodeDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleChildNodeDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,13 @@ +{ + "ntWithChildNodeDefs": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "childNodeDef1" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleNodeType.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleNodeType.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleNodeType.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimpleNodeType.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,4 @@ +{ + "testNodeType": { + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimplePropertyDefinition.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimplePropertyDefinition.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimplePropertyDefinition.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testOneSimplePropertyDefinition.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,10 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "requiredType": "undefined", + "name": "simplePropertyDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testResidualChildNodeDefinitions.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testResidualChildNodeDefinitions.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testResidualChildNodeDefinitions.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testResidualChildNodeDefinitions.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,27 @@ +{ + "ntWithChildNodeDefs": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "*" + }, + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "*" + }, + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "childNodeDef" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleChildNodeDefinitions.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleChildNodeDefinitions.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleChildNodeDefinitions.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleChildNodeDefinitions.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,20 @@ +{ + "ntWithChildNodeDefs": { + "declaredChildNodeDefinitions": [ + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "childNodeDef1" + }, + { + "requiredPrimaryTypes": [ + "requiredPrimaryType1", + "requiredPrimaryType2" + ], + "name": "childNodeDef2" + } + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleNodeTypes.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleNodeTypes.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleNodeTypes.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSimpleNodeTypes.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,6 @@ +{ + "testNodeType2": { + }, + "testNodeType1": { + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSupertypeList.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSupertypeList.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSupertypeList.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testSupertypeList.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,9 @@ +{ + "testNodeType": { + "declaredSupertypes": [ + "superType1", + "superType2", + "superType3" + ] + } +} Added: sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testTwoResidualPropertyDefinitions.json URL: http://svn.apache.org/viewvc/sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testTwoResidualPropertyDefinitions.json?rev=1660179&view=auto ============================================================================== --- sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testTwoResidualPropertyDefinitions.json (added) +++ sling/trunk/contrib/commons/js/nodetypes/src/test/resources/expectedNTJSON/testTwoResidualPropertyDefinitions.json Mon Feb 16 18:14:21 2015 @@ -0,0 +1,41 @@ +{ + "ntWithPropertyDefs": { + "declaredPropertyDefinitions": [ + { + "defaultValues": [ + { + "string": "Default-String", + "type": "String" + } + ], + "valueConstraints": [ + ".*" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "*" + }, + { + "defaultValues": [ + { + "date": "2012-02-01T00:00:00.000+01:00", + "type": "Date" + } + ], + "requiredType": "Date", + "valueConstraints": [ + "2012-04-01T00:00:00Z" + ], + "multiple": true, + "autoCreated": true, + "mandatory": true, + "protected": true, + "onParentVersion": "VERSION", + "name": "*" + } + ] + } +}