[
https://issues.apache.org/jira/browse/JCR-3371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13405977#comment-13405977
]
Randall Hauch edited comment on JCR-3371 at 7/3/12 6:33 PM:
------------------------------------------------------------
The existing ShareableNodeTest.testRemoveMixin() test method assumed that an
implementation would always throw an UnsupportedOperationException. This is not
only checking for the incorrect exception, section 14.15 "RemoveMixin"
specifically states that it *is* possible for an implementation to support
removing the 'mix:shareable' mixin.
This change fixes that test method to check only for the
ConstraintViolationException or an UnsupportedOperationException, or if neither
of those happen then the test verifies that the implementation correctly
removed the mixin.
This test attempts to remove the mixin only after creating the node, adding the
mixin, and then saving the session. In other words, the shareable node was
never used to create a shared node. An additional test was added to test trying
to remove the mixin from a node that has already been shared. Again, either the
ConstraintViolationException or UnsupportedOperationException are thrown, or
the test verifies that the implementation correctly removed the mixin.
Note that a local Jackrabbit build with the latest codebase completes
successfully with the proposed changes.
was (Author: rhauch):
The existing ShareableNodeTest.testRemoveMixin() test method assumed that an
implementation would always throw an UnsupportedOperationException. This is not
only checking for the incorrect exception, section 14.15 "RemoveMixin"
specifically states that it *is* possible for an implementation to support
removing the 'mix:shareable' mixin.
This change fixes that test method to check only for the
ConstraintViolationException or an UnsupportedOperationException, or if neither
of those happen then the test verifies that the implementation correctly
removed the mixin.
This test attempts to remove the mixin only after creating the node, adding the
mixin, and then saving the session. In other words, the shareable node was
never used to create a shared node. An additional test was added to test trying
to remove the mixin from a node that has already been shared. Again, either the
ConstraintViolationException or UnsupportedOperationException are thrown, or
the test verifies that the implementation correctly removed the mixin.
> TCK test for shareable nodes incorrectly assumes the 'mix:shareable' mixin
> cannot be removed
> --------------------------------------------------------------------------------------------
>
> Key: JCR-3371
> URL: https://issues.apache.org/jira/browse/JCR-3371
> Project: Jackrabbit Content Repository
> Issue Type: Task
> Components: jackrabbit-jcr-tests, JCR 2.0, test
> Affects Versions: 2.5
> Reporter: Randall Hauch
> Fix For: 2.5.1, 2.6
>
> Attachments: JCR-3371-CorrectedShareableNodeTest-logic.patch
>
>
> The ShareableNodeTest.testRemoveMixin() assumes that removing the
> "mix:shareable" mixin will *always* throw an UnsupportedOperationException.
> This is not only checking for the incorrect exception, section 14.15
> "RemoveMixin" specifically states that it *is* possible for an implementation
> to support removing the 'mix:shareable' mixin:
> "If an attempt is made to remove the mix:shareable mixin node type from a
> node in a
> shared set the implementation may either throw a
> ConstraintViolationException or allow
> the removal and change the subgraph in some implementation-specific
> manner.
> One possibility is to replace the node with a copy that has no children
> (if this does not
> violate the node type restrictions of that node). Another possibility is
> to give the node
> a copy of all of its descendants (unless the resulting copy operation
> would be unfeasible,
> as would be the case if a share cycle were involved)."
> Thus, even though it is possible for an implementation not to allow removing
> the "mix:shareable" mixin, the test shouldn't expect that an implementation
> will throw an exception. For example, one particularly easy thing for an
> implementation to support is removing 'mix:shareable' if and only if there
> are no other shared nodes (e.g., the "getSharedSet().getSize() == 1").
> This test could be removed, or perhaps it might be possible to test that
> removing the mixin (and saving) will either succeed or will throws only a
> ConstraintViolationException.
> I marked as critical because the TCK test prevents other implementations from
> correctly proving compatibility.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira