/*
* Copyright 2015 ArcBees Inc.
*
* 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 com.gwtplatform.processors.tools;
import javax.lang.model.element.Element;
import javax.lang.model.element.Name;
import javax.lang.model.element.PackageElement;
import javax.lang.model.util.Elements;
import org.junit.Before;
import org.junit.Test;
import com.gwtplatform.processors.tools.logger.Logger;
import com.gwtplatform.processors.tools.utils.Utils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
public class GwtSourceFilterTest {
private static final String MODULE1 = "com.gwtplatform.processors.tools.module1.GwtSourceFilterTestModule";
private static final String MODULE4 = "com.gwtplatform.processors.tools.module4.GwtSourceFilterTestModule";
private static final String MODULE4_SOURCE_PATH = "com.gwtplatform.processors.tools.module4.test";
private Logger logger;
private Utils utils;
private Elements elements;
@Before
public void setUp() {
logger = mock(Logger.class);
utils = mock(Utils.class);
elements = mock(Elements.class);
given(utils.getElements()).willReturn(elements);
}
@Test
public void load_module1() {
// when
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE1);
// then
assertThat(filter.getSourcePackages()).containsOnly(
"com.gwtplatform.processors.tools.module1.client",
"com.gwtplatform.processors.tools.module1.client.potatoes.red",
"com.gwtplatform.processors.tools.module2.client",
"com.gwtplatform.processors.tools.module2.shared",
"com.gwtplatform.processors.tools.module3",
MODULE4_SOURCE_PATH
);
}
@Test
public void load_module4() {
// when
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE4);
// then
assertThat(filter.getSourcePackages()).containsOnly(MODULE4_SOURCE_PATH);
}
@Test
public void load_module4_twice() {
// given
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE4);
// when
filter.addModule(MODULE4);
// then
assertThat(filter.getSourcePackages()).containsOnly(MODULE4_SOURCE_PATH);
}
@Test
public void elementIsPartOfGwtSource_notInSource() {
// given
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE1);
Element element = createElementStubWithPackage("org.jukito");
// when
boolean result = filter.elementIsPartOfGwtSource(element);
// then
assertThat(result).isFalse();
}
@Test
public void elementIsPartOfGwtSource_sameSource() {
// given
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE1);
Element element = createElementStubWithPackage(MODULE4_SOURCE_PATH);
// when
boolean result = filter.elementIsPartOfGwtSource(element);
// then
assertThat(result).isTrue();
}
@Test
public void elementIsPartOfGwtSource_subPackage() {
// given
GwtSourceFilter filter = new GwtSourceFilter(logger, utils, MODULE1);
Element element = createElementStubWithPackage(MODULE4_SOURCE_PATH + ".sub.subsub");
// when
boolean result = filter.elementIsPartOfGwtSource(element);
// then
assertThat(result).isTrue();
}
private Element createElementStubWithPackage(String packageName) {
Element element = mock(Element.class);
PackageElement packageElement = mock(PackageElement.class);
Name name = mock(Name.class);
given(elements.getPackageOf(element)).willReturn(packageElement);
given(packageElement.getQualifiedName()).willReturn(name);
given(name.toString()).willReturn(packageName);
return element;
}
}