package org.robotframework.ide.eclipse.main.plugin.propertytester; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.robotframework.ide.eclipse.main.plugin.project.editor.validation.ProjectTreeElement; public class RedXmlValidationPropertyTesterTest { @Rule public ExpectedException thrown = ExpectedException.none(); private final RedXmlValidationPropertyTester tester = new RedXmlValidationPropertyTester(); @Test public void exceptionIsThrown_whenReceiverIsNotProjectTreeElement() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Property tester is unable to test properties of java.lang.Object. It should be used with " + ProjectTreeElement.class.getName()); tester.test(new Object(), "property", null, true); } @Test public void falseIsReturned_whenExpectedValueIsAString() { final boolean testResult = tester.test(mock(ProjectTreeElement.class), RedXmlValidationPropertyTester.IS_EXCLUDED, null, "value"); assertThat(testResult).isFalse(); } @Test public void falseIsReturnedForUnknownProperty() { assertThat(tester.test(mock(ProjectTreeElement.class), "unknown_property", null, true)).isFalse(); assertThat(tester.test(mock(ProjectTreeElement.class), "unknown_property", null, false)).isFalse(); } @Test public void testIsIncludedProperty() { final ProjectTreeElement includedElement = new ProjectTreeElement(null, false); final ProjectTreeElement notIncludedElement = new ProjectTreeElement(null, true); assertThat(isIncluded(includedElement, true)).isTrue(); assertThat(isIncluded(includedElement, false)).isFalse(); assertThat(isIncluded(notIncludedElement, true)).isFalse(); assertThat(isIncluded(notIncludedElement, false)).isTrue(); } @Test public void testIsExcludedProperty() { final ProjectTreeElement excludedElement = new ProjectTreeElement(null, true); final ProjectTreeElement notExcludedElement = new ProjectTreeElement(null, false); assertThat(isExcluded(excludedElement, true)).isTrue(); assertThat(isExcluded(excludedElement, false)).isFalse(); assertThat(isExcluded(notExcludedElement, true)).isFalse(); assertThat(isExcluded(notExcludedElement, false)).isTrue(); } @Test public void testIsInternalFolderProperty() { final ProjectTreeElement internalFolder = mock(ProjectTreeElement.class); final ProjectTreeElement nonInternalFolder = mock(ProjectTreeElement.class); when(internalFolder.isInternalFolder()).thenReturn(true); when(nonInternalFolder.isInternalFolder()).thenReturn(false); assertThat(isInternalFolder(internalFolder, true)).isTrue(); assertThat(isInternalFolder(internalFolder, false)).isFalse(); assertThat(isInternalFolder(nonInternalFolder, true)).isFalse(); assertThat(isInternalFolder(nonInternalFolder, false)).isTrue(); } private boolean isIncluded(final ProjectTreeElement element, final boolean expected) { return tester.test(element, RedXmlValidationPropertyTester.IS_INCLUDED, null, expected); } private boolean isExcluded(final ProjectTreeElement element, final boolean expected) { return tester.test(element, RedXmlValidationPropertyTester.IS_EXCLUDED, null, expected); } private boolean isInternalFolder(final ProjectTreeElement element, final boolean expected) { return tester.test(element, RedXmlValidationPropertyTester.IS_INTERNAL_FOLDER, null, expected); } }