From 23857a5b6a17294a684f1d73cc61dacbe9afe91c Mon Sep 17 00:00:00 2001 From: Roland Illig Date: Sat, 16 Feb 2019 22:00:32 +0100 Subject: [PATCH] Downgraded JUnit from 5 to 4 The test for the HtmlHelper must mock the Html.escapeHtml method, which is static. To do this, it needs PowerMock. PowerMock does not support JUnit 5 since the API for JUnit extensions changed between JUnit 4 and JUnit 5. Therefore, to have all the nice features of PowerMock, JUnit has to stay at version 4. --- app/build.gradle | 17 +++++++--- .../java/eu/faircode/email/HtmlHelper.java | 8 ++--- .../eu/faircode/email/HtmlHelperTest.java | 34 ++++++++++++++++--- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3922d2e7da..53f1e78058 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,8 +117,10 @@ dependencies { def dnsjava_version = "2.1.8" def openpgp_version = "12.0" def requery_version = "3.26.0" - def junit_version = "5.3.1" + def junit_version = "4.12" def assertj_version = "3.11.1" + def mockito_version = "2.24.0" + def powermock_version = "2.0.0" // https://developer.android.com/jetpack/docs/release-notes @@ -181,10 +183,17 @@ dependencies { // git clone https://android.googlesource.com/platform/frameworks/opt/colorpicker implementation project(path: ':colorpicker') - // https://junit.org/junit5/ - testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version" + // https://junit.org/ + testImplementation "junit:junit:$junit_version" // https://joel-costigliola.github.io/assertj/ testImplementation "org.assertj:assertj-core:$assertj_version" + + // https://site.mockito.org/ + testImplementation "org.mockito:mockito-core:$mockito_version" + + // https://github.com/powermock/powermock + testImplementation "org.powermock:powermock-core:$powermock_version" + testImplementation "org.powermock:powermock-api-mockito2:$powermock_version" + testImplementation "org.powermock:powermock-module-junit4:$powermock_version" } diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index f07e6e9fd3..413383d1b9 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -130,8 +130,8 @@ public class HtmlHelper { StringBuilder sb = new StringBuilder(); int end = 0; while (matcher.find()) { - sb.append(html(text.substring(end, matcher.start()))); - String ref = html(matcher.group()); + sb.append(Html.escapeHtml(text.substring(end, matcher.start()))); + String ref = Html.escapeHtml(matcher.group()); sb.append(String.format("%s", ref, ref)); end = matcher.end(); } @@ -139,10 +139,6 @@ public class HtmlHelper { return sb.toString(); } - private static String html(String plain) { - return plain.replace("&", "&").replace("<", "<"); - } - static Drawable decodeImage(String source, Context context, long id, boolean show) { int px = Helper.dp2pixels(context, 48); diff --git a/app/src/test/java/eu/faircode/email/HtmlHelperTest.java b/app/src/test/java/eu/faircode/email/HtmlHelperTest.java index 9ca5787e46..613afc2e44 100644 --- a/app/src/test/java/eu/faircode/email/HtmlHelperTest.java +++ b/app/src/test/java/eu/faircode/email/HtmlHelperTest.java @@ -1,13 +1,39 @@ package eu.faircode.email; -import org.junit.jupiter.api.Test; +import android.text.Html; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; -class HtmlHelperTest { +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.powermock.api.mockito.PowerMockito.mockStatic; +import static org.powermock.api.mockito.PowerMockito.when; + +@PrepareForTest(Html.class) +@RunWith(PowerMockRunner.class) +public class HtmlHelperTest { + + @Before + public void setUp() { + mockStatic(Html.class); + when(Html.escapeHtml(any(CharSequence.class))).thenAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + return invocation.getArgument(0).toString() + .replace("&", "&") + .replace("<", "<"); + } + }); + } @Test - void autolink() { + public void autolink() { testAutolink( "To visit http://www.example.org, go to http://www.example.org.",