/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.data.api;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.common.collect.UnmodifiableIterator;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nonnull;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
public class PathArgumentListTest {
private static final class TestClass extends PathArgumentList {
@Override
public UnmodifiableIterator<PathArgument> iterator() {
return null;
}
@Override
public PathArgument get(final int index) {
return null;
}
@Override
public int size() {
return 0;
}
}
@Test
public void testIsEmpty() {
assertFalse(new TestClass().isEmpty());
}
@Test
public void testProtections() {
final PathArgumentList l = new TestClass();
try {
l.remove(null);
fail();
} catch (UnsupportedOperationException e) {
}
try {
l.addAll(null);
fail();
} catch (UnsupportedOperationException e) {
}
try {
l.removeAll(null);
fail();
} catch (UnsupportedOperationException e) {
}
try {
l.retainAll(null);
fail();
} catch (UnsupportedOperationException e) {
}
try {
l.clear();
fail();
} catch (UnsupportedOperationException e) {
}
try {
l.addAll(0, null);
fail();
} catch (UnsupportedOperationException e) {
}
}
@Test
public void testPathArgument() throws URISyntaxException, ParseException {
final QNameModule qNameModule = QNameModule.create(new URI("urn:opendaylight.test2"),
SimpleDateFormatUtil.getRevisionFormat().parse("2015-08-08"));
final QName qNameRoot = QName.create(qNameModule, "root");
final QName qNameList = QName.create(qNameModule, "list");
final QName qNameLeaf = QName.create(qNameModule, "leaf-a");
final Map<QName, Object> entryLeaf = new HashMap<>();
entryLeaf.put(qNameList, "leaf");
final YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates = new YangInstanceIdentifier
.NodeIdentifierWithPredicates(qNameList , entryLeaf);
final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.of(qNameRoot).node(qNameList)
.node(nodeIdentifierWithPredicates).node(qNameLeaf);
final PathArgument pathArgumentToRoot = yangInstanceIdentifier.getAncestor(1).getPathArguments().iterator()
.next();
final StackedPathArguments stackedPathArguments = (StackedPathArguments)yangInstanceIdentifier.getPathArguments();
assertTrue(yangInstanceIdentifier.pathArgumentsEqual(yangInstanceIdentifier));
assertEquals(pathArgumentToRoot, stackedPathArguments.get(0));
assertEquals(4, stackedPathArguments.size());
assertEquals(true, stackedPathArguments.contains(pathArgumentToRoot));
assertEquals(0, stackedPathArguments.indexOf(pathArgumentToRoot));
assertEquals(0, stackedPathArguments.lastIndexOf(pathArgumentToRoot));
final StackedReversePathArguments stackedReversePathArguments = (StackedReversePathArguments)yangInstanceIdentifier
.getReversePathArguments();
final QName rootQname = pathArgumentToRoot.getNodeType();
final QName leafQname = stackedReversePathArguments.get(0).getNodeType();
assertEquals(qNameRoot, rootQname);
assertEquals(qNameLeaf, leafQname);
assertEquals(4, stackedReversePathArguments.size());
assertEquals(true, stackedReversePathArguments.contains(pathArgumentToRoot));
assertEquals(3, stackedReversePathArguments.indexOf(pathArgumentToRoot));
assertEquals(3, stackedReversePathArguments.lastIndexOf(pathArgumentToRoot));
final StackedYangInstanceIdentifier stackedYangInstanceIdentifier = (StackedYangInstanceIdentifier)
yangInstanceIdentifier;
final StackedYangInstanceIdentifier stackedYangInstanceIdentifierClone = stackedYangInstanceIdentifier.clone();
final YangInstanceIdentifier yangInstanceIdentifier1 = stackedYangInstanceIdentifier.getAncestor(4);
assertEquals(stackedYangInstanceIdentifier, stackedYangInstanceIdentifierClone);
assertEquals(stackedReversePathArguments, yangInstanceIdentifier1.getReversePathArguments());
try {
stackedYangInstanceIdentifier.getAncestor(12);
fail();
} catch (IllegalArgumentException e) {
}
}
}