--- /dev/null
+/*
+ * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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.util.codec;
+
+import static com.google.common.base.Preconditions.checkState;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
+
+public class IdentityCodecUtilTest {
+ private static final QNameModule MODULE = QNameModule.create(XMLNamespace.of("yangtools846"));
+ private static EffectiveModelContext SCHEMA_CONTEXT;
+
+ @BeforeClass
+ public static void init() {
+ SCHEMA_CONTEXT = YangParserTestUtils.parseYangResource("/yangtools846.yang");
+ }
+
+ @AfterClass
+ public static void cleanup() {
+ SCHEMA_CONTEXT = null;
+ }
+
+ @Test
+ public void testCorrectInput() {
+ assertNotNull(IdentityCodecUtil.parseIdentity("yt846:foo", SCHEMA_CONTEXT,
+ IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testNonExistent() {
+ assertThrows(IllegalArgumentException.class,
+ () -> IdentityCodecUtil.parseIdentity("yt846:bar", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testEmptyLocalName() {
+ assertThrows(IllegalArgumentException.class,
+ () -> IdentityCodecUtil.parseIdentity("yt846:", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testEmptyString() {
+ assertThrows(IllegalStateException.class,
+ () -> IdentityCodecUtil.parseIdentity("", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testNoPrefix() {
+ assertThrows(IllegalStateException.class,
+ () -> IdentityCodecUtil.parseIdentity("foo", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testEmptyPrefix() {
+ assertThrows(IllegalStateException.class,
+ () -> IdentityCodecUtil.parseIdentity(":foo", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ @Test
+ public void testColon() {
+ assertThrows(IllegalStateException.class,
+ () -> IdentityCodecUtil.parseIdentity(":", SCHEMA_CONTEXT, IdentityCodecUtilTest::resolvePrefix));
+ }
+
+ private static QNameModule resolvePrefix(final String prefix) {
+ // TODO: QNameCodecUtil should deal with some of the malformed stuff here by throwing IAE. We throw an ISE
+ // to discern what is happening.
+ checkState("yt846".equals(prefix), "Unexpected prefix %s", prefix);
+ return MODULE;
+ }
+}