/*
* Copyright 2010 The Rabbit Eclipse Plug-in Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package rabbit.data.internal.xml.access;
import rabbit.data.access.IAccessor;
import rabbit.data.access.model.ICommandData;
import rabbit.data.access.model.IFileData;
import rabbit.data.access.model.IJavaData;
import rabbit.data.access.model.ILaunchData;
import rabbit.data.access.model.IPartData;
import rabbit.data.access.model.IPerspectiveData;
import rabbit.data.access.model.ISessionData;
import rabbit.data.access.model.ITaskData;
import rabbit.data.internal.xml.StoreNamesModule;
import rabbit.data.internal.xml.access.AccessorModule;
import rabbit.data.internal.xml.access.CommandDataAccessor;
import rabbit.data.internal.xml.access.FileDataAccessor;
import rabbit.data.internal.xml.access.JavaDataAccessor;
import rabbit.data.internal.xml.access.LaunchDataAccessor;
import rabbit.data.internal.xml.access.PartDataAccessor;
import rabbit.data.internal.xml.access.PerspectiveDataAccessor;
import rabbit.data.internal.xml.access.SessionDataAccessor;
import rabbit.data.internal.xml.access.TaskDataAccessor;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;
/**
* Tests for {@link AccessorModule}
*/
@RunWith(Parameterized.class)
public class AccessorModuleTest {
@Parameters
public static Collection<Object[]> data() {
// @formatter:off
return Arrays.asList(new Object[][]{
{new TypeLiteral<IAccessor<ICommandData>> () {}, CommandDataAccessor .class},
{new TypeLiteral<IAccessor<IFileData>> () {}, FileDataAccessor .class},
{new TypeLiteral<IAccessor<IJavaData>> () {}, JavaDataAccessor .class},
{new TypeLiteral<IAccessor<ILaunchData>> () {}, LaunchDataAccessor .class},
{new TypeLiteral<IAccessor<IPartData>> () {}, PartDataAccessor .class},
{new TypeLiteral<IAccessor<IPerspectiveData>> () {}, PerspectiveDataAccessor .class},
{new TypeLiteral<IAccessor<ISessionData>> () {}, SessionDataAccessor .class},
{new TypeLiteral<IAccessor<ITaskData>> () {}, TaskDataAccessor .class},
});
// @formatter:on
}
private Injector injector;
private TypeLiteral<?> interfaceType;
private Class<?> implClass;
// Test that the instance retrieved using the given type is and instance of the given class
public AccessorModuleTest(TypeLiteral<?> interfaceType, Class<?> implClass) {
this.interfaceType = interfaceType;
this.implClass = implClass;
this.injector = Guice.createInjector(new AccessorModule(), new StoreNamesModule());
}
@Test
public void shouldBindTheCorrectAccessor() {
assertThat(injector.getInstance(Key.get(interfaceType)), instanceOf(implClass));
}
}