diff options
-rw-r--r-- | .github/workflows/android.yml | 12 | ||||
-rw-r--r-- | app/build.gradle | 11 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java | 4 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java | 4 | ||||
-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); |