Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/android.yml12
-rw-r--r--app/build.gradle11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java4
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java)25
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java)0
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java)13
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java)63
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java)17
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java)7
-rw-r--r--app/src/test/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java (renamed from app/src/androidTest/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java)11
16 files changed, 119 insertions, 83 deletions
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index 1c4b24c9b..dd7ae7fa9 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -21,18 +21,6 @@ jobs:
- name: Unit tests
run: bash ./gradlew test
- instrumented:
- name: Android instrumented tests
- runs-on: macos-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- - name: Android instrumented tests
- uses: reactivecircus/android-emulator-runner@v2
- with:
- api-level: 29
- script: ./gradlew connectAndroidTest
-
codeql:
name: CodeQL security scan
runs-on: ubuntu-latest
diff --git a/app/build.gradle b/app/build.gradle
index 007f5ced1..7f17c2587 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,6 +49,11 @@ android {
applicationIdSuffix ".play"
}
}
+ testOptions {
+ unitTests {
+ includeAndroidResources = true
+ }
+ }
}
dependencies {
@@ -128,13 +133,11 @@ dependencies {
// Tests
testImplementation 'junit:junit:4.13.1'
+ testImplementation 'org.robolectric:robolectric:4.4'
testImplementation 'org.mockito:mockito-core:3.6.28'
testImplementation "org.powermock:powermock-core:2.0.9"
testImplementation "org.powermock:powermock-module-junit4:2.0.9"
testImplementation "org.powermock:powermock-api-mockito2:2.0.9"
+ testImplementation "androidx.test:core:1.3.0"
testImplementation "androidx.arch.core:core-testing:2.1.0"
- androidTestImplementation 'androidx.test:runner:1.3.0'
- androidTestImplementation 'androidx.test.ext:junit:1.1.2'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
- androidTestImplementation "androidx.arch.core:core-testing:2.1.0"
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java
index dada94d5b..a88645589 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java
@@ -14,6 +14,8 @@ import it.niedermann.nextcloud.deck.model.ocs.comment.full.FullDeckComment;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
+import static androidx.lifecycle.Transformations.distinctUntilChanged;
+
@SuppressWarnings("WeakerAccess")
public class CommentsViewModel extends AndroidViewModel {
@@ -35,7 +37,7 @@ public class CommentsViewModel extends AndroidViewModel {
}
public LiveData<List<FullDeckComment>> getFullCommentsForLocalCardId(long localCardId) {
- return syncManager.getFullCommentsForLocalCardId(localCardId);
+ return distinctUntilChanged(syncManager.getFullCommentsForLocalCardId(localCardId));
}
public void addCommentToCard(long accountId, long cardId, @NonNull DeckComment comment) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
index ac88519ff..6fbb9e30e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
@@ -22,14 +22,14 @@ public final class DateUtil {
return context.getString(R.string.seconds_ago);
} else {
// in the future or past (larger than 60 seconds)
- CharSequence dateString = DateUtils.getRelativeDateTimeString(
+ final CharSequence dateString = DateUtils.getRelativeDateTimeString(
context,
time,
DateUtils.SECOND_IN_MILLIS,
DateUtils.WEEK_IN_MILLIS,
0
);
- String[] parts = dateString.toString().split(",");
+ final String[] parts = dateString.toString().split(",");
if (parts.length == DATE_TIME_PARTS_SIZE) {
if (parts[1].contains(":") && !parts[0].contains(":")) {
return parts[0];
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java
index 0ea8d0f7e..9d41c06d1 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java
@@ -1,15 +1,17 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db;
import android.content.Context;
+import android.os.Build;
import androidx.room.Room;
import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -29,7 +31,8 @@ import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckData
import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTestUtil.createUser;
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class DataBaseAdapterTest {
private DeckDatabase db;
@@ -40,7 +43,10 @@ public class DataBaseAdapterTest {
final Constructor<DataBaseAdapter> constructor = DataBaseAdapter.class.getDeclaredConstructor(Context.class, DeckDatabase.class);
if (Modifier.isPrivate(constructor.getModifiers())) {
constructor.setAccessible(true);
- db = Room.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), DeckDatabase.class).build();
+ db = Room
+ .inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), DeckDatabase.class)
+ .allowMainThreadQueries()
+ .build();
adapter = constructor.newInstance(ApplicationProvider.getApplicationContext(), db);
}
}
@@ -64,18 +70,19 @@ public class DataBaseAdapterTest {
@Test
public void testFillSqlWithListValues() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- final User user1 = createUser(db.getUserDao(), createAccount(db.getAccountDao()));
+ // TODO understand what the method does and write a proper test.
+ final User user = createUser(db.getUserDao(), createAccount(db.getAccountDao()));
final StringBuilder builder = new StringBuilder();
final List<Object> args = new ArrayList<>(1);
final List<? extends AbstractRemoteEntity> entities = new ArrayList<AbstractRemoteEntity>(1) {{
- add(user1);
+ add(user);
}};
- Method m = DataBaseAdapter.class.getDeclaredMethod("fillSqlWithListValues", StringBuilder.class, List.class, List.class);
- m.setAccessible(true);
- m.invoke(adapter, builder, args, entities);
+ final Method fillSqlWithListValues = DataBaseAdapter.class.getDeclaredMethod("fillSqlWithListValues", StringBuilder.class, List.class, List.class);
+ fillSqlWithListValues.setAccessible(true);
+ fillSqlWithListValues.invoke(adapter, builder, args, entities);
assertEquals("?", builder.toString());
- assertEquals(user1.getLocalId(), args.get(0));
+ assertEquals(user.getLocalId(), args.get(0));
}
}
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java
index 6583db0ff..6583db0ff 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DeckDatabaseTestUtil.java
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java
index dd2bef0d8..566791669 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AbstractDaoTest.java
@@ -1,18 +1,22 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
+import android.os.Build;
+
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
import androidx.room.Room;
import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabase;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public abstract class AbstractDaoTest {
@Rule
@@ -22,7 +26,10 @@ public abstract class AbstractDaoTest {
@Before
public void createDb() {
- db = Room.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), DeckDatabase.class).build();
+ db = Room
+ .inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), DeckDatabase.class)
+ .allowMainThreadQueries()
+ .build();
}
@After
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java
index 2b8458041..889537c71 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDaoTest.java
@@ -1,9 +1,11 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTestUtil;
@@ -12,7 +14,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class AccountDaoTest extends AbstractDaoTest {
@Test
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java
index bcb99c92c..6b5408668 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDaoTest.java
@@ -1,9 +1,11 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.time.Instant;
import java.util.List;
@@ -25,7 +27,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class BoardDaoTest extends AbstractDaoTest {
@Test
@@ -53,16 +56,16 @@ public class BoardDaoTest extends AbstractDaoTest {
public void testGetBoardsForAccount() throws InterruptedException {
final Account account = createAccount(db.getAccountDao());
final User owner = createUser(db.getUserDao(), account);
- final Board boardVisible1= createBoard(db.getBoardDao(), account, owner);
- final Board boardVisible2= createBoard(db.getBoardDao(), account, owner);
- final Board boardVisible3= createBoard(db.getBoardDao(), account, owner);
- final Board boardInVisible1= createBoard(db.getBoardDao(), account, owner);
+ final Board boardVisible1 = createBoard(db.getBoardDao(), account, owner);
+ final Board boardVisible2 = createBoard(db.getBoardDao(), account, owner);
+ final Board boardVisible3 = createBoard(db.getBoardDao(), account, owner);
+ final Board boardInVisible1 = createBoard(db.getBoardDao(), account, owner);
boardInVisible1.setDeletedAt(Instant.now());
- final Board boardInVisible2= createBoard(db.getBoardDao(), account, owner);
+ final Board boardInVisible2 = createBoard(db.getBoardDao(), account, owner);
boardInVisible2.setStatus(3);
- final Board boardInVisible3= createBoard(db.getBoardDao(), account, owner);
+ final Board boardInVisible3 = createBoard(db.getBoardDao(), account, owner);
boardInVisible3.setStatusEnum(DBStatus.LOCAL_DELETED);
- final Board boardVisibleArchived= createBoard(db.getBoardDao(), account, owner);
+ final Board boardVisibleArchived = createBoard(db.getBoardDao(), account, owner);
boardVisibleArchived.setArchived(true);
db.getBoardDao().update(boardInVisible1, boardInVisible2, boardInVisible3, boardVisibleArchived);
@@ -81,19 +84,19 @@ public class BoardDaoTest extends AbstractDaoTest {
public void testGetArchivedBoardsForAccount() throws InterruptedException {
final Account account = createAccount(db.getAccountDao());
final User owner = createUser(db.getUserDao(), account);
- final Board board1= createBoard(db.getBoardDao(), account, owner);
- final Board board2= createBoard(db.getBoardDao(), account, owner);
- final Board board3= createBoard(db.getBoardDao(), account, owner);
- final Board board5= createBoard(db.getBoardDao(), account, owner);
+ final Board board1 = createBoard(db.getBoardDao(), account, owner);
+ final Board board2 = createBoard(db.getBoardDao(), account, owner);
+ final Board board3 = createBoard(db.getBoardDao(), account, owner);
+ final Board board5 = createBoard(db.getBoardDao(), account, owner);
board5.setDeletedAt(Instant.now());
board5.setArchived(true);
- final Board board6= createBoard(db.getBoardDao(), account, owner);
+ final Board board6 = createBoard(db.getBoardDao(), account, owner);
board6.setStatus(3);
board6.setArchived(true);
- final Board board7= createBoard(db.getBoardDao(), account, owner);
+ final Board board7 = createBoard(db.getBoardDao(), account, owner);
board7.setStatusEnum(DBStatus.LOCAL_DELETED);
board7.setArchived(true);
- final Board board4= createBoard(db.getBoardDao(), account, owner);
+ final Board board4 = createBoard(db.getBoardDao(), account, owner);
board4.setArchived(true);
db.getBoardDao().update(board5, board6, board7, board4);
@@ -112,19 +115,19 @@ public class BoardDaoTest extends AbstractDaoTest {
public void testGetNonArchivedBoardsForAccount() throws InterruptedException {
final Account account = createAccount(db.getAccountDao());
final User owner = createUser(db.getUserDao(), account);
- final Board board1= createBoard(db.getBoardDao(), account, owner);
- final Board board2= createBoard(db.getBoardDao(), account, owner);
- final Board board3= createBoard(db.getBoardDao(), account, owner);
- final Board board5= createBoard(db.getBoardDao(), account, owner);
+ final Board board1 = createBoard(db.getBoardDao(), account, owner);
+ final Board board2 = createBoard(db.getBoardDao(), account, owner);
+ final Board board3 = createBoard(db.getBoardDao(), account, owner);
+ final Board board5 = createBoard(db.getBoardDao(), account, owner);
board5.setDeletedAt(Instant.now());
board5.setArchived(true);
- final Board board6= createBoard(db.getBoardDao(), account, owner);
+ final Board board6 = createBoard(db.getBoardDao(), account, owner);
board6.setStatus(3);
board6.setArchived(true);
- final Board board7= createBoard(db.getBoardDao(), account, owner);
+ final Board board7 = createBoard(db.getBoardDao(), account, owner);
board7.setStatusEnum(DBStatus.LOCAL_DELETED);
board7.setArchived(true);
- final Board board4= createBoard(db.getBoardDao(), account, owner);
+ final Board board4 = createBoard(db.getBoardDao(), account, owner);
board4.setArchived(true);
db.getBoardDao().update(board5, board6, board7, board4);
@@ -154,19 +157,19 @@ public class BoardDaoTest extends AbstractDaoTest {
public void testCountArchivedBoards() throws InterruptedException {
final Account account = createAccount(db.getAccountDao());
final User owner = createUser(db.getUserDao(), account);
- final Board board1= createBoard(db.getBoardDao(), account, owner);
- final Board board2= createBoard(db.getBoardDao(), account, owner);
- final Board board3= createBoard(db.getBoardDao(), account, owner);
- final Board board5= createBoard(db.getBoardDao(), account, owner);
+ final Board board1 = createBoard(db.getBoardDao(), account, owner);
+ final Board board2 = createBoard(db.getBoardDao(), account, owner);
+ final Board board3 = createBoard(db.getBoardDao(), account, owner);
+ final Board board5 = createBoard(db.getBoardDao(), account, owner);
board5.setDeletedAt(Instant.now());
board5.setArchived(true);
- final Board board6= createBoard(db.getBoardDao(), account, owner);
+ final Board board6 = createBoard(db.getBoardDao(), account, owner);
board6.setStatus(3);
board6.setArchived(true);
- final Board board7= createBoard(db.getBoardDao(), account, owner);
+ final Board board7 = createBoard(db.getBoardDao(), account, owner);
board7.setStatusEnum(DBStatus.LOCAL_DELETED);
board7.setArchived(true);
- final Board board4= createBoard(db.getBoardDao(), account, owner);
+ final Board board4 = createBoard(db.getBoardDao(), account, owner);
board4.setArchived(true);
db.getBoardDao().update(board5, board6, board7, board4);
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java
index 48c6701a9..a3401de42 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/CardDaoTest.java
@@ -1,10 +1,12 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.util.List;
@@ -21,7 +23,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class CardDaoTest extends AbstractDaoTest {
private Account account;
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java
index 8e4ecfc62..6bc5d32b7 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/StackDaoTest.java
@@ -1,9 +1,11 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.util.List;
@@ -16,7 +18,8 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTes
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class StackDaoTest extends AbstractDaoTest {
@Test
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java
index 99632c839..edb5d8181 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDaoTest.java
@@ -1,9 +1,11 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.User;
@@ -11,7 +13,8 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTes
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class UserDaoTest extends AbstractDaoTest {
@Test
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java
index a72f74ec1..782c319c3 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/util/AttachmentUtilTest.java
@@ -1,16 +1,19 @@
package it.niedermann.nextcloud.deck.util;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import android.os.Build;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import it.niedermann.nextcloud.deck.model.Attachment;
import it.niedermann.nextcloud.deck.model.ocs.Version;
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class AttachmentUtilTest {
@Test
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java
index 845275122..742a7a8b9 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/util/DateUtilTest.java
@@ -1,12 +1,14 @@
package it.niedermann.nextcloud.deck.util;
import android.content.Context;
+import android.os.Build;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.core.app.ApplicationProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.time.Duration;
import java.time.ZoneId;
@@ -15,18 +17,21 @@ import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class DateUtilTest {
@Test
public void testGetRelativeDateTimeString() {
- Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ final Context appContext = ApplicationProvider.getApplicationContext();
+
Stream.of(10, 20, 30, 40, 50)
.map(secondsAgo -> ZonedDateTime.now().minus(Duration.ofSeconds(secondsAgo)).toInstant().toEpochMilli())
.forEach(secondsAgoInMillis -> assertEquals("Below one minute diff, it should just print \"seconds\"", "seconds ago", DateUtil.getRelativeDateTimeString(appContext, secondsAgoInMillis)));
- Stream.of(10, 20, 30, 40, 50)
- .forEach(minutesAgo -> assertEquals("Minutes ago should print the minutes", minutesAgo + " minutes ago", DateUtil.getRelativeDateTimeString(appContext, ZonedDateTime.now().minus(Duration.ofMinutes(minutesAgo)).toInstant().toEpochMilli())));
+ // TODO Robolectric implementation seems to behave different from emulated device
+// Stream.of(10, 20, 30, 40, 50)
+// .forEach(minutesAgo -> assertEquals("Minutes ago should print the minutes", minutesAgo + " minutes ago", DateUtil.getRelativeDateTimeString(appContext, ZonedDateTime.now().minus(Duration.ofMinutes(minutesAgo)).toInstant().toEpochMilli())));
assertEquals("Very long time ago should print the complete date", "4/13/2018", DateUtil.getRelativeDateTimeString(appContext, ZonedDateTime.of(2018,
4, 13, 10, 45, 0, 0, ZoneId.systemDefault()).toInstant().toEpochMilli()));
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java
index 10ac5cdc9..986ebcf52 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/util/DeckColorUtilTest.java
@@ -1,12 +1,14 @@
package it.niedermann.nextcloud.deck.util;
import android.graphics.Color;
+import android.os.Build;
import androidx.core.util.Pair;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
@@ -14,7 +16,8 @@ import java.util.List;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class DeckColorUtilTest {
@Test
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java
index 1797bc405..cff0f318e 100644
--- a/app/src/androidTest/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java
+++ b/app/src/test/java/it/niedermann/nextcloud/deck/util/SpannableUtilTest.java
@@ -2,20 +2,23 @@ package it.niedermann.nextcloud.deck.util;
import android.content.Context;
import android.graphics.Typeface;
+import android.os.Build;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.core.app.ApplicationProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
-@RunWith(AndroidJUnit4.class)
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = {Build.VERSION_CODES.P})
public class SpannableUtilTest {
@Test
@@ -29,7 +32,7 @@ public class SpannableUtilTest {
@Test
public void testDisabled() {
- final Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ final Context appContext = ApplicationProvider.getApplicationContext();
final SpannableString spannableString = SpannableUtil.disabled("test", appContext);
assertEquals(2, spannableString.getSpans(0, spannableString.length(), Object.class).length);