Fix for LDAP-46: Changed order of ADD_ATTRIBUTE and REMOVE_ATTRIBUTE modification item in multi-value Attributes.

This commit is contained in:
Mattias Arthursson
2007-04-17 19:04:01 +00:00
parent d945064b0d
commit a4d5b8535c
2 changed files with 36 additions and 11 deletions

View File

@@ -289,10 +289,10 @@ public class DirContextAdapter implements DirContextOperations {
Collection removedValues = CollectionUtils.subtract(oldValues,
newValues);
collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr,
addedValues, myModifications);
collectModifications(DirContext.REMOVE_ATTRIBUTE, changedAttr,
removedValues, myModifications);
collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr,
addedValues, myModifications);
if (myModifications.isEmpty()) {
// This means that the attributes are not equal, but the

View File

@@ -789,21 +789,21 @@ public class DirContextAdapterTest extends TestCase {
ModificationItem[] modificationItems = tested.getModificationItems();
assertEquals(2, modificationItems.length);
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[0]
.getModificationOp());
Attribute modifiedAttribute = modificationItems[0].getAttribute();
assertEquals("abc", modifiedAttribute.getID());
assertEquals(2, modifiedAttribute.size());
assertEquals("klytt", modifiedAttribute.get(0));
assertEquals("kalle", modifiedAttribute.get(1));
modifiedAttribute = modificationItems[1].getAttribute();
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[1]
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[0]
.getModificationOp());
assertEquals("abc", modifiedAttribute.getID());
assertEquals(2, modifiedAttribute.size());
assertEquals("rty", modifiedAttribute.get(0));
assertEquals("uio", modifiedAttribute.get(1));
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[1]
.getModificationOp());
modifiedAttribute = modificationItems[1].getAttribute();
assertEquals("abc", modifiedAttribute.getID());
assertEquals(2, modifiedAttribute.size());
assertEquals("klytt", modifiedAttribute.get(0));
assertEquals("kalle", modifiedAttribute.get(1));
}
public void testAddAttribute_Multivalue() throws Exception {
@@ -962,4 +962,29 @@ public class DirContextAdapterTest extends TestCase {
}
return null;
}
public void testModifyMultiValueAttributeModificationOrder()
throws NamingException {
BasicAttribute attribute = new BasicAttribute("abc");
attribute.add("Some Person");
attribute.add("Some Other Person");
tested.setAttribute(attribute);
tested.setUpdateMode(true);
tested.setAttributeValues("abc", new String[] { "some person",
"Some Other Person" });
// Perform test
ModificationItem[] modificationItems = tested.getModificationItems();
assertEquals(2, modificationItems.length);
ModificationItem modificationItem = modificationItems[0];
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItem
.getModificationOp());
assertEquals("Some Person", modificationItem.getAttribute().get());
modificationItem = modificationItems[1];
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItem
.getModificationOp());
assertEquals("some person", modificationItem.getAttribute().get());
}
}