#  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.

# Stub implementation class
javax.jcr.tck.repository_stub_impl=org.apache.jackrabbit.oak.jcr.LuceneOakRepositoryStub

# credential configuration
javax.jcr.tck.superuser.name=admin
javax.jcr.tck.superuser.pwd=admin
javax.jcr.tck.readwrite.name=admin
javax.jcr.tck.readwrite.pwd=admin
javax.jcr.tck.readonly.name=anonymous
javax.jcr.tck.readonly.pwd=

# global test configuration
javax.jcr.tck.testroot=/testroot
javax.jcr.tck.nodetype=nt:unstructured
javax.jcr.tck.nodetypenochildren=nt:address
javax.jcr.tck.nodename1=node1
javax.jcr.tck.nodename2=node2
javax.jcr.tck.nodename3=node3
javax.jcr.tck.nodename4=node4
javax.jcr.tck.propertyname1=prop1
javax.jcr.tck.propertyname2=prop2
javax.jcr.tck.propertyvalue1=value1
javax.jcr.tck.propertyvalue2=value2
#javax.jcr.tck.propertytype1=String
#javax.jcr.tck.propertytype2=String
javax.jcr.tck.workspacename=default

# namespace configuration
javax.jcr.tck.namespaces=test
javax.jcr.tck.namespaces.test=http://www.apache.org/jackrabbit/test

# retention and hold
javax.jcr.tck.holdname=hold

# repository factory class name
javax.jcr.tck.repository.factory=org.apache.jackrabbit.oak.jcr.OakRepositoryFactory

# sample for per test case config overriding
# Test class: AddNodeText
# Test method: testName
javax.jcr.tck.AddNodeTest.testName.nodename1=myname

# ==============================================================================
# JAVAX.JCR CONFIGURATION
# ==============================================================================

# Test class: ItemDefTest
javax.jcr.tck.ItemDefTest.testroot=/testdata

# Test class: ItemReadMethodsTest
javax.jcr.tck.ItemReadMethodsTest.testroot=/testdata

# Test class: NodeReadMethodsTest
javax.jcr.tck.NodeReadMethodsTest.testroot=/testdata

# Test class: PropertyTypeTest
javax.jcr.tck.PropertyTypeTest.testroot=/testdata

# Test class: BinaryPropertyTest
javax.jcr.tck.BinaryPropertyTest.testroot=/testdata

# Test class: BooleanPropertyTest
javax.jcr.tck.BooleanPropertyTest.testroot=/testdata

# Test class: DatePropertyTest
javax.jcr.tck.DatePropertyTest.testroot=/testdata

# Test class: DecimalPropertyTest
javax.jcr.tck.DecimalPropertyTest.testroot=/testdata

# Test class: DoublePropertyTest
javax.jcr.tck.DoublePropertyTest.testroot=/testdata

# Test class: LongPropertyTest
javax.jcr.tck.LongPropertyTest.testroot=/testdata

# Test class: NamePropertyTest
javax.jcr.tck.NamePropertyTest.testroot=/testdata

# Test class: PathPropertyTest
javax.jcr.tck.PathPropertyTest.testroot=/testdata

# Test class: ReferencePropertyTest
javax.jcr.tck.ReferencePropertyTest.testroot=/testdata

# Test class: StringPropertyTest
javax.jcr.tck.StringPropertyTest.testroot=/testdata

# Test class: SetValueVersionExceptionTest
# nodetype2: nodetype with a reference property
javax.jcr.tck.SetValueVersionExceptionTest.nodetype2=nt:linkedFile
# propertyname3: name of the single value reference property
javax.jcr.tck.SetValueVersionExceptionTest.propertyname3=jcr:content

# Test class: SetValueValueFormatExceptionTest
javax.jcr.tck.SetValueValueFormatExceptionTest.nodetype=test:canSetProperty
javax.jcr.tck.SetValueValueFormatExceptionTest.testValue.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testValueArray.propertyname1=BooleanMultiple
javax.jcr.tck.SetValueValueFormatExceptionTest.testString.propertyname1=Date
javax.jcr.tck.SetValueValueFormatExceptionTest.testStringArray.propertyname1=DateMultiple
javax.jcr.tck.SetValueValueFormatExceptionTest.testInputStream.propertyname1=Date
javax.jcr.tck.SetValueValueFormatExceptionTest.testLong.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testDouble.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testCalendar.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testBoolean.propertyname1=Date
javax.jcr.tck.SetValueValueFormatExceptionTest.testNode.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testNodeNotReferenceable.propertyname1=ReferenceConstraints

# Test class: SetPropertyAssumeTypeTest
javax.jcr.tck.SetPropertyAssumeTypeTest.nodetype=test:canSetProperty
javax.jcr.tck.SetPropertyAssumeTypeTest.testStringConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=String
javax.jcr.tck.SetPropertyAssumeTypeTest.testValueConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=String
javax.jcr.tck.SetPropertyAssumeTypeTest.testValuesConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=StringMultiple

# Test class: UndefinedPropertyTest
javax.jcr.tck.UndefinedPropertyTest.testroot=/testdata

# Test class: PropertyReadMethodsTest
javax.jcr.tck.PropertyReadMethodsTest.testroot=/testdata

# Test class: NodeIteratorTest
javax.jcr.tck.NodeIteratorTest.testroot=/testdata

# Test class: NodeDiscoveringNodeTypesTest
javax.jcr.tck.NodeDiscoveringNodeTypesTest.testroot=/testdata

# Test class: RepositoryDescriptorTest
javax.jcr.tck.RepositoryDescriptorTest.testroot=/testdata

# Test class: WorkspaceReadMethodsTest
javax.jcr.tck.WorkspaceReadMethodsTest.testroot=/testdata

# Test class: SessionReadMethodsTest
javax.jcr.tck.SessionReadMethodsTest.testroot=/testdata

# Test class: NamespaceRegistryReadMethodsTest
javax.jcr.tck.NamespaceRegistryReadMethodsTest.testroot=/testdata

# Test class: NamespaceRemappingTest
javax.jcr.tck.NamespaceRemappingTest.testroot=/testdata

# Test class: SessionTest
# Test method: testMoveItemExistsException
# nodetype that does not allow same name siblings
javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype2=nt:folder
# valid node type that can be added as child of nodetype2
javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype3=nt:folder

# Test class: SessionTest
# Test method: testSaveConstraintViolationException
# nodetype that has a property that is mandatory but not autocreated
javax.jcr.tck.SessionTest.testSaveConstraintViolationException.nodetype2=nt:file

# Test class: SessionUUIDTest
# node type that has a property of type PropertyType.REFERENCE
javax.jcr.tck.SessionUUIDTest.nodetype=nt:unstructured
# name of the property that is of type PropertyType.REFERENCE
javax.jcr.tck.SessionUUIDTest.propertyname1=foobar
# nodetype that has nodetype mix:referenceable assigned
javax.jcr.tck.SessionUUIDTest.nodetype2=test:refTargetNode

# Test class: SessionUUIDTest
# Test method: testSaveMovedRefNode
# name of the property that can be modified
javax.jcr.tck.SessionUUIDTest.testSaveMovedRefNode.propertyname1=foobar

# Test class: NodeTest
# Test method: testAddNodeItemExistsException
# nodetype that does not allow same name siblings and allows child nodes of
# the same type
javax.jcr.tck.NodeTest.testAddNodeItemExistsException.nodetype=nt:folder

# Test class: NodeTest
# Test method: testRemoveMandatoryNode
# nodetype that has a mandatory child node definition
javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype2=nt:file
# nodetype of the  mandatory child
javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype3=nt:unstructured
# name of the mandatory node
javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodename3=jcr:content

# Test class: NodeTest
# Test method: testSaveConstraintViolationException
# nodetype that has a property that is mandatory but not autocreated
javax.jcr.tck.NodeTest.testSaveConstraintViolationException.nodetype2=nt:file

# Test class: NodeAddMixinTest
# Test method: testAddInheritedMixin
# the parent type should inherit a mixin type
javax.jcr.tck.NodeAddMixinTest.testAddInheritedMixin.nodetype=test:setProperty

# Test class: NodeUUIDTest
# node type that has a property of type PropertyType.REFERENCE
javax.jcr.tck.NodeUUIDTest.nodetype=nt:unstructured
# name of the property that is of type PropertyType.REFERENCE
javax.jcr.tck.NodeUUIDTest.propertyname1=ref
# nodetype that has nodetype mix:referenceable assigned
javax.jcr.tck.NodeUUIDTest.nodetype2=test:refTargetNode

# Test class: NodeUUIDTest
# Test method: testSaveMovedRefNode
# name of the property that can be modified
javax.jcr.tck.NodeUUIDTest.testSaveMovedRefNode.propertyname1=foobar
# nodetype that has nodetype mix:referenceable assigned

# Test class: NodeOrderableChildNodesTest
# nodetype that supports orderable child nodes
javax.jcr.tck.NodeOrderableChildNodesTest.nodetype2=nt:unstructured
# valid node type that can be added as child of nodetype 2
javax.jcr.tck.NodeOrderableChildNodesTest.nodetype3=nt:unstructured

# Test class: NodeOrderableChildNodesTest
# Test method: testOrderBeforeUnsupportedRepositoryOperationException
# nodetype that does not allow ordering of child nodes
javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype2=nt:folder
# valid node type that can be added as child of nodetype 2
javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype3=nt:folder

# Test class: SetPropertyNodeTest
# nodetype which is referenceable
javax.jcr.tck.SetPropertyNodeTest.nodetype=test:setProperty

# Test class: SetPropertyValueTest
# property that allows multiple values
javax.jcr.tck.SetPropertyValueTest.propertyname2=test:multiProperty
javax.jcr.tck.SetPropertyValueTest.nodetype=test:setProperty

# Test class: SetPropertyStringTest
# property that allows multiple values
javax.jcr.tck.SetPropertyStringTest.propertyname2=test:multiProperty
javax.jcr.tck.SetPropertyStringTest.nodetype=test:setProperty

# Test class: WorkspaceCloneSameNameSibsTest
javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

# Test class: WorkspaceCopyBetweenWorkspacesSameNameSibsTest
javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

# Test class: WorkspaceCopySameNameSibsTest
javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

# Test class: WorkspaceMoveSameNameSibsTest
javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

# Test class: RepositoryLoginTest
javax.jcr.tck.RepositoryLoginTest.testroot=/testdata

# Test class: RootNodeTest
javax.jcr.tck.RootNodeTest.testroot=/testdata

# Test class: ReferenceableRootNodesTest
javax.jcr.tck.ReferenceableRootNodesTest.testroot=/testdata

# Test class: ExportDocViewTest
javax.jcr.tck.ExportDocViewTest.testroot=/testdata

# ------------------------------------------------------------------------------
# observation configuration
# ------------------------------------------------------------------------------

# Test class: AddEventListenerTest
# Test method: testNodeType
javax.jcr.tck.AddEventListenerTest.testNodeType.nodetype2=nt:folder

# Configuration settings for the serialization.
# Note that the serialization test tries to use as many features of the repository
# as possible, but fails silently if a feature is not available. You have to
# specify all of the following configuration entries, even if your repository does
# not support the feature that is associated with them.

# Root node for the example tree
javax.jcr.tck.SerializationTest.testroot=/testdata/serialization

# Node type to use for the example tree. Specify a node type that allows complex trees and all property types if possible
javax.jcr.tck.SerializationTest.nodetype=nt:unstructured

# Name of the nodes for source and target tree
javax.jcr.tck.SerializationTest.sourceFolderName=source
javax.jcr.tck.SerializationTest.targetFolderName=target
javax.jcr.tck.SerializationTest.rootNodeName=test

# List the properties whose values may change during serialization/deserialization. For example,
# the UUID of a node is unique in the repository, so it will have to change when you re-import
# a tree at a different location.
javax.jcr.tck.SerializationTest.propertyValueMayChange= jcr:created jcr:uuid jcr:versionHistory jcr:baseVersion jcr:predecessors P_Reference

# List all properties which are skipped during xml import according specification chapter 7.3.3
javax.jcr.tck.SerializationTest.propertySkipped=

# The name of the test node types. For easier diagnostics, the node types have names
# that tell you the kind of information they store
javax.jcr.tck.SerializationTest.nodeTypesTestNode=NodeTypes
javax.jcr.tck.SerializationTest.mixinTypeTestNode=MixinTypes
javax.jcr.tck.SerializationTest.propertyTypesTestNode=PropertyTypes
javax.jcr.tck.SerializationTest.sameNameChildrenTestNode=SameNameChildren
javax.jcr.tck.SerializationTest.multiValuePropertiesTestNode=MultiValueProperties
javax.jcr.tck.SerializationTest.referenceableNodeTestNode=ReferenceableNode
javax.jcr.tck.SerializationTest.orderChildrenTestNode=OrderChildren
javax.jcr.tck.SerializationTest.namespaceTestNode=Namespace

# The name of the test property types.
javax.jcr.tck.SerializationTest.stringTestProperty=P_String
javax.jcr.tck.SerializationTest.binaryTestProperty=P_Binary
javax.jcr.tck.SerializationTest.dateTestProperty=P_Date
javax.jcr.tck.SerializationTest.longTestProperty=P_Long
javax.jcr.tck.SerializationTest.doubleTestProperty=P_Double
javax.jcr.tck.SerializationTest.booleanTestProperty=P_Boolean
javax.jcr.tck.SerializationTest.nameTestProperty=P_Name
javax.jcr.tck.SerializationTest.pathTestProperty=P_Path
javax.jcr.tck.SerializationTest.referenceTestProperty=P_Reference
javax.jcr.tck.SerializationTest.multiValueTestProperty=P_MultiValue

# node type not allowing same name sibs
javax.jcr.tck.SerializationTest.sameNameSibsFalseChildNodeDefinition=test:sameNameSibsFalseChildNodeDefinition

# Test method: testVersioningExceptionSessionFileChild
# specified nodetype must be versionable and allow child nodes of the same type.
javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileChild.nodetype=test:versionable

# Test method: testVersioningExceptionSessionFileParent
# specified nodetype must be versionable and allow child nodes of the same type.
javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileParent.nodetype=test:versionable

# Test method: testSessionImportXmlOverwriteException
# requires a node type that does not allow same name siblings
javax.jcr.tck.SerializationTest.testSessionImportXmlOverwriteException.nodetype=nt:folder

# Test class: ExportSysViewTest
javax.jcr.tck.ExportSysViewTest.testroot=/testdata

# ==============================================================================
# JAVAX.JCR.NODETYPE CONFIGURATION
# ==============================================================================

javax.jcr.tck.nodetype.testroot=/testdata

javax.jcr.tck.NodeTypeCreationTest.testroot=/testroot

# ==============================================================================
# JAVAX.JCR.QUERY CONFIGURATION
# ==============================================================================

# Test class: SaveTest
# Test method: testConstraintViolationException
# Specified node type must not allow child nodes.
javax.jcr.tck.SaveTest.testConstraintViolationException.nodetype=nt:query

# Test class: XPathQueryLevel1Test
javax.jcr.tck.XPathQueryLevel1Test.testroot=/testdata/query

# Test class: XPathDocOrderTest
javax.jcr.tck.XPathDocOrderTest.testroot=/testdata/query

# Test class: XPathPosIndexTest
javax.jcr.tck.XPathPosIndexTest.testroot=/testdata/query

# Test class: XPathOrderByTest
javax.jcr.tck.XPathOrderByTest.testroot=/testdata/query

# Test class: XPathSyntaxTest
javax.jcr.tck.XPathSyntaxTest.testroot=/testdata/query

# Test class: XPathJcrPathTest
javax.jcr.tck.XPathJcrPathTest.testroot=/testdata

# Test class: SQLQueryLevel1Test
javax.jcr.tck.SQLQueryLevel1Test.testroot=/testdata/query

# Test class: SQLSyntaxTest
javax.jcr.tck.SQLSyntaxTest.testroot=/testdata/query

# Test class: SQLOrderByTest
javax.jcr.tck.SQLOrderByTest.testroot=/testdata/query

# Test class: DerefQueryLevel1Test
javax.jcr.tck.DerefQueryLevel1Test.testroot=/testdata

# Test class: GetLanguageTest
javax.jcr.tck.GetLanguageTest.testroot=/testdata

# Test class: GetPersistentQueryPathLevel1Test
javax.jcr.tck.GetPersistentQueryPathLevel1Test.testroot=/testdata

# Test class: GetPropertyNamesTest
javax.jcr.tck.GetPropertyNamesTest.testroot=/testdata

# Test class: GetStatementTest
javax.jcr.tck.GetStatementTest.testroot=/testdata

# Test class: GetSupportedQueryLanguagesTest
javax.jcr.tck.GetSupportedQueryLanguagesTest.testroot=/testdata

# Test class: SQLJcrPathTest
javax.jcr.tck.SQLJcrPathTest.testroot=/testdata

# Test class: SQLPathTest
javax.jcr.tck.SQLPathTest.testroot=/testdata

# Test class: PredicatesTest
javax.jcr.tck.PredicatesTest.testroot=/testdata

# Test class: SimpleSelectionTest
javax.jcr.tck.SimpleSelectionTest.testroot=/testdata

# ==============================================================================
# JAVAX.JCR.VERSIONING CONFIGURATION
# ==============================================================================

# nodetype that is versionable. if it is not, an attempt is made to create versionable nodes
# by adding a mix:versionable mixin-type.
# NOTE: javax.jcr.tck.nodetype must define a non-versionable nodetype!
javax.jcr.tck.version.versionableNodeType=test:versionable
javax.jcr.tck.version.simpleVersionableNodeType=nt:unstructured
javax.jcr.tck.version.propertyValue=aPropertyValue
javax.jcr.tck.version.destination=/testroot/versionableNodeName3

# testroot for the version package
# the test root must allow versionable and non-versionable nodes being created below
javax.jcr.tck.version.testroot=/testroot

# 3 nodes (nodeName1, nodeName2, nodeName3 with nt=versionableNodeType / nt=nonVersionableNodeType will be cloned to 2nd workspace
# nodename1 > used to persistently create versionable node below testroot
# nodename2 > used to create second versionable node below testroot (used for restore/workspace.restore with uuid-conflict)
# nodename3 > used to persistently create non-versionable node below testroot
javax.jcr.tck.version.nodename1=versionableNodeName1
javax.jcr.tck.version.nodename2=versionableNodeName2
javax.jcr.tck.version.nodename3=nonVersionableNodeName1

# nodename 4: versionabel child-node of the first versionable node with nodeName1 and nodetype 'versionableNodeType'
# used for:
# + creation of a node in the 2nd workspace, that does not exist in the first workspace
# + creation of a node in the 2nd workspace, in order to test uuid-conflicts with Workspace.restore.
# + creation of a sub-node in the default workspace, in order to test uuid-conflicts with Node.restore.
# + NOTE: the nodetype with 'versionableNodeType' must define its children nodes to either have COPY or VERSION
#         OPV behaviour in order to successfully test Node.restore and Workspace.restore with uuid conflict.
javax.jcr.tck.version.nodename4=childNodeName

# path to existing String-properties and a new value for the property, that allows to test the indicated OPV behaviour
javax.jcr.tck.OnParentVersionAbortTest.propertyname1=test:abortOnParentVersionProp
javax.jcr.tck.OnParentVersionComputeTest.propertyname1=test:computeOnParentVersionProp
javax.jcr.tck.OnParentVersionCopyTest.propertyname1=test:copyOnParentVersionProp
javax.jcr.tck.OnParentVersionIgnoreTest.propertyname1=test:ignoreOnParentVersionProp
javax.jcr.tck.OnParentVersionInitializeTest.propertyname1=test:initializeOnParentVersionProp

# Test class: RestoreTest
# Test method: testRestoreWithUUIDConflict
# nodename4 must be the name of a child node with a OPV definition COPY or VERSION
javax.jcr.tck.RestoreTest.testRestoreWithUUIDConflict.nodename4=test:versionOnParentVersion
javax.jcr.tck.RestoreTest.testRestoreLabel.nodename4=test:versionOnParentVersion
javax.jcr.tck.RestoreTest.testRestoreName.nodename4=test:versionOnParentVersion
javax.jcr.tck.RestoreTest.testRestoreNameJcr2.nodename4=test:versionOnParentVersion
javax.jcr.tck.RestoreTest.propertyValue1=version1
javax.jcr.tck.RestoreTest.propertyValue2=version2

# Test class: WorkspaceRestoreTest
javax.jcr.tck.WorkspaceRestoreTest.testRestoreLabel.nodename4=test:versionOnParentVersion
javax.jcr.tck.WorkspaceRestoreTest.testRestoreName.nodename4=test:versionOnParentVersion

# config for nodes that show the indicated OPV behaviour:
# nodes are added in order to test the versioning behaviour indicated by the test-class name.
# NOTE:
# - nodename4 is uses as name for the childnode
# - nodetype is used as nodetype name for the childnode
# - the specified child node is created below nodename1 with versionableNodeType
#   the versionableNodeType and/or nodename1 may be overwritten with the individual
#   testclass below.
javax.jcr.tck.OnParentVersionCopyTest.nodename4=test:copyOnParentVersion
javax.jcr.tck.OnParentVersionCopyTest.nodetype=nt:unstructured
javax.jcr.tck.OnParentVersionAbortTest.nodename4=test:abortOnParentVersion
javax.jcr.tck.OnParentVersionAbortTest.nodetype=nt:unstructured
javax.jcr.tck.OnParentVersionIgnoreTest.nodename4=test:ignoreOnParentVersion
javax.jcr.tck.OnParentVersionIgnoreTest.nodetype=nt:unstructured

# ==============================================================================
# JAVAX.JCR.VERSIONING CONFIGURATION (simple versioning)
# ==============================================================================

# nodetype that is versionable. if it is not, an attempt is made to create versionable nodes
# by adding a mix:versionable mixin-type.
# NOTE: javax.jcr.tck.nodetype must define a non-versionable nodetype!
javax.jcr.tck.simple.versionableNodeType=nt:unstructured
javax.jcr.tck.simple.propertyValue=aPropertyValue
javax.jcr.tck.simple.destination=/testroot/versionableNodeName3

# testroot for the version package
# the test root must allow versionable and non-versionable nodes being created below
javax.jcr.tck.simple.testroot=/testroot

# 3 nodes (nodeName1, nodeName2, nodeName3 with nt=versionableNodeType / nt=nonVersionableNodeType will be cloned to 2nd workspace
# nodename1 > used to persistently create versionable node below testroot
# nodename2 > used to create second versionable node below testroot (used for restore/workspace.restore with uuid-conflict)
# nodename3 > used to persistently create non-versionable node below testroot
javax.jcr.tck.simple.nodename1=versionableNodeName1
javax.jcr.tck.simple.nodename2=versionableNodeName2
javax.jcr.tck.simple.nodename3=nonVersionableNodeName1

# nodename 4: versionabel child-node of the first versionable node with nodeName1 and nodetype 'versionableNodeType'
# used for:
# + creation of a node in the 2nd workspace, that does not exist in the first workspace
# + creation of a node in the 2nd workspace, in order to test uuid-conflicts with Workspace.restore.
# + creation of a sub-node in the default workspace, in order to test uuid-conflicts with Node.restore.
# + NOTE: the nodetype with 'versionableNodeType' must define its children nodes to either have COPY or VERSION
#         OPV behaviour in order to successfully test Node.restore and Workspace.restore with uuid conflict.
javax.jcr.tck.simple.nodename4=childNodeName

# ==============================================================================
# JAVAX.JCR.RETENTION CONFIGURATION
# ==============================================================================
javax.jcr.tck.retentionpolicyholder=/testconf/retentionTest

# ==============================================================================
# LIFECYCLE MANAGEMENT CONFIGURATION
# ==============================================================================
javax.jcr.tck.lifecycleNode=/testdata/lifecycle/node
