--- /dev/null
+/*
+ * Copyright (c) 2016 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.mdsal.binding.dom.adapter.invoke;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.WrongMethodTypeException;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.Notification;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class NotificationListenerInvokerTest {
+
+ @Test
+ public void fromTest() throws Exception {
+ assertNotNull(NotificationListenerInvoker.from(TestInterface.class));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ @SuppressWarnings({ "checkstyle:illegalThrows", "checkstyle:avoidHidingCauseException" })
+ public void fromWithExceptionTest() throws Throwable {
+ try {
+ NotificationListenerInvoker.from(TestPrivateInterface.class);
+ fail("Expected IllegalAccessException");
+ } catch (UncheckedExecutionException e) {
+ throw e.getCause();
+ }
+ }
+
+ @Test(expected = WrongMethodTypeException.class)
+ public void invokeNotification() throws Exception {
+ final NotificationListener notificationListener = mock(NotificationListener.class);
+ final MethodHandle methodHandle = mock(MethodHandle.class);
+ final NotificationListenerInvoker notificationListenerInvoker =
+ new NotificationListenerInvoker(ImmutableMap.of(QName.create("test", "test"), methodHandle));
+
+ notificationListenerInvoker.invokeNotification(notificationListener, QName.create("test", "test"), null);
+ fail("Expected WrongMethodTypeException, no method to invoke is supplied");
+ }
+
+ public interface TestInterface extends NotificationListener, Augmentation {
+ QName QNAME = QName.create("test", "test");
+ void onTestNotificationInterface(TestNotificationInterface notif);
+ }
+
+ private interface TestPrivateInterface extends NotificationListener, Augmentation {
+ QName QNAME = QName.create("test", "test");
+ void onTestNotificationInterface(TestNotificationInterface notif);
+ }
+
+ public interface TestNotificationInterface extends Notification {
+ QName QNAME = QName.create("test", "test");
+ }
+}
\ No newline at end of file