/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.core.internal.dependency; import org.assertj.core.api.Assertions; import org.junit.Test; import org.seedstack.seed.SeedException; import org.seedstack.seed.spi.DependencyProvider; public class DependencyProxyTest { private static final String PROXY_METHOD = "proxy method"; @Test public void testInvoke() { DependencyProvider provider = new DependencyProxy<DependencyProvider>(new Class[]{DependencyProvider.class}, new Object() { @SuppressWarnings("unused") public String getClassToCheck() { return PROXY_METHOD; } }).getProxy(); Assertions.assertThat(provider.getClassToCheck()).isEqualTo(PROXY_METHOD); } @Test(expected = SeedException.class) public void testCreationError() { new DependencyProxy<DependencyProvider>(new Class[]{String.class}, new Object() { }); } @Test(expected = UnsupportedOperationException.class) public void testInvokeWithoutMethod() { DependencyProvider provider = new DependencyProxy<DependencyProvider>(new Class[]{DependencyProvider.class}, new Object() { }).getProxy(); provider.getClassToCheck(); } @Test public void testInvokeWithoutInvocationError() { final String errorMessage = "Dummy exception"; DependencyProvider provider = new DependencyProxy<DependencyProvider>(new Class[]{DependencyProvider.class}, new Object() { @SuppressWarnings("unused") public String getClassToCheck() { throw new RuntimeException(errorMessage); } }).getProxy(); try { provider.getClassToCheck(); } catch (Exception e) { Assertions.assertThat(e).isInstanceOf(RuntimeException.class); Assertions.assertThat(e.getMessage()).isEqualTo(errorMessage); } } }