/* documentr - Edit, maintain, and present software documentation on the web. Copyright (C) 2012-2013 Maik Schreiber This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.blizzy.documentr; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.IOException; import java.util.Date; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.Repository; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextImpl; import de.blizzy.documentr.page.Page; import de.blizzy.documentr.page.TestPageUtil; public final class TestUtil { private TestUtil() {} public static Page createRandomPage() { return createRandomPage(null); } public static Page createRandomPage(String parentPagePath) { Page page = Page.fromText(String.valueOf(Math.random() * Long.MAX_VALUE), String.valueOf(Math.random() * Long.MAX_VALUE)); TestPageUtil.setParentPagePath(page, parentPagePath); return page; } public static <T> void assertEqualsContract(T equal1, T equal2, T equal3, T different) { assertNotSame(equal1, equal2); assertNotSame(equal1, equal3); assertNotSame(equal2, equal3); Class<? extends Object> clazz = equal1.getClass(); assertEquals(clazz, equal2.getClass()); assertEquals(clazz, equal3.getClass()); assertEquals(clazz, different.getClass()); // same object assertTrue(equal1.equals(equal1)); // reflexive assertTrue(equal1.equals(equal2)); // symmetric if (equal1.equals(equal2)) { assertTrue(equal2.equals(equal1)); } // transitive if (equal1.equals(equal2) && equal2.equals(equal3)) { assertTrue(equal1.equals(equal3)); } // consistent if (equal1.equals(equal2)) { assertTrue(equal1.equals(equal2)); } else { assertFalse(equal1.equals(equal2)); } // null assertFalse(equal1.equals(null)); // difference assertFalse(equal1.equals(different)); assertFalse(different.equals(equal1)); // subclass T subclassed = spy(equal2); assertFalse(subclassed.getClass().equals(clazz)); assertFalse(equal1.equals(subclassed)); assertFalse(subclassed.equals(equal1)); } public static <T> void assertHashCodeContract(T equal1, T equal2) { assertNotSame(equal1, equal2); assertEquals(equal1, equal2); Class<? extends Object> clazz = equal1.getClass(); assertEquals(clazz, equal2.getClass()); // consistent int hashCode = equal1.hashCode(); assertEquals(hashCode, equal1.hashCode()); // equal hash code for equal objects assertEquals(equal1.hashCode(), equal2.hashCode()); } public static String removeViewPrefix(String view) { return view.contains(":") ? StringUtils.substringAfter(view, ":") : view; //$NON-NLS-1$ //$NON-NLS-2$ } public static void assertRedirect(String view) { assertTrue(view.startsWith("redirect:")); //$NON-NLS-1$ } public static void assertForward(String view) { assertTrue(view.startsWith("forward:")); //$NON-NLS-1$ } public static void assertSecondsAgo(Date d, int seconds) { long time = d.getTime(); long now = System.currentTimeMillis(); assertTrue((now - time) <= (seconds * 1000L)); } public static SecurityContext createSecurityContext(Authentication authentication) { SecurityContextImpl context = new SecurityContextImpl(); context.setAuthentication(authentication); return context; } public static String removeTextRange(String html) { return html.replaceAll(" data-text-range=\"[0-9]+,[0-9]+\"", StringUtils.EMPTY); //$NON-NLS-1$ } public static void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { // ignore } } public static void assertClean(Repository repo) throws IOException { assertTrue(Git.wrap(repo).status().call().isClean()); } public static void assertRE(String expectedRegExp, String actual) { @SuppressWarnings("nls") String msg = "text does not match regular expression:\n" + "regular expression:\n" + expectedRegExp + "\n" + "text:\n" + actual; assertTrue(msg, Pattern.compile(expectedRegExp, Pattern.DOTALL).matcher(actual).matches()); } }