summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/offline/OfflineManagerTest.kt
blob: e07dc1e9f1b5f723e15c084d9874d6ae560e4bc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.mapbox.mapboxsdk.testapp.offline

import android.content.Context
import android.support.test.rule.ActivityTestRule
import android.support.test.runner.AndroidJUnit4
import com.mapbox.mapboxsdk.AppCenter
import com.mapbox.mapboxsdk.offline.OfflineManager
import com.mapbox.mapboxsdk.offline.OfflineRegion
import com.mapbox.mapboxsdk.storage.FileSource
import com.mapbox.mapboxsdk.testapp.activity.FeatureOverviewActivity
import com.mapbox.mapboxsdk.testapp.utils.FileUtils
import java.io.IOException
import java.util.concurrent.CountDownLatch
import org.junit.FixMethodOrder
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(AndroidJUnit4::class)
class OfflineManagerTest : AppCenter() {

  companion object {
    private const val TEST_DB_FILE_NAME = "offline_test.db"
    private lateinit var mergedRegion: OfflineRegion
  }

  @Rule
  @JvmField
  var rule = ActivityTestRule(FeatureOverviewActivity::class.java)

  private val context: Context by lazy { rule.activity }

  @Test(timeout = 30_000)
  fun a_copyFileFromAssets() {
    val latch = CountDownLatch(1)
    rule.activity.runOnUiThread {
      FileUtils.CopyFileFromAssetsTask(rule.activity, object : FileUtils.OnFileCopiedFromAssetsListener {
        override fun onFileCopiedFromAssets() {
          latch.countDown()
        }

        override fun onError() {
          throw IOException("Unable to copy DB file.")
        }
      }).execute(TEST_DB_FILE_NAME, FileSource.getResourcesCachePath(rule.activity))
    }
    latch.await()
  }

  @Test(timeout = 30_000)
  fun b_mergeRegion() {
    val latch = CountDownLatch(1)
    rule.activity.runOnUiThread {
      OfflineManager.getInstance(context).mergeOfflineRegions(
        FileSource.getResourcesCachePath(rule.activity) + "/" + TEST_DB_FILE_NAME,
        object : OfflineManager.MergeOfflineRegionsCallback {
          override fun onMerge(offlineRegions: Array<out OfflineRegion>?) {
            assert(offlineRegions?.size == 1)
            latch.countDown()
          }

          override fun onError(error: String?) {
            throw RuntimeException("Unable to merge external offline database. $error")
          }
        })
    }
    latch.await()
  }

  @Test(timeout = 30_000)
  fun c_listRegion() {
    val latch = CountDownLatch(1)
    rule.activity.runOnUiThread {
      OfflineManager.getInstance(context).listOfflineRegions(object : OfflineManager.ListOfflineRegionsCallback {
        override fun onList(offlineRegions: Array<out OfflineRegion>?) {
          assert(offlineRegions?.size == 1)
          mergedRegion = offlineRegions!![0]
          latch.countDown()
        }

        override fun onError(error: String?) {
          throw RuntimeException("Unable to merge external offline database. $error")
        }
      })
    }
    latch.await()
  }

  @Test(timeout = 30_000)
  fun d_invalidateRegion() {
    val latch = CountDownLatch(1)
    rule.activity.runOnUiThread {
      mergedRegion.invalidate(object : OfflineRegion.OfflineRegionInvalidateCallback {
        override fun onInvalidate() {
          latch.countDown()
        }

        override fun onError(error: String?) {
          throw RuntimeException("Unable to delete region")
        }
      })
    }
    latch.await()
  }

  @Test(timeout = 30_000)
  fun e_deleteRegion() {
    val latch = CountDownLatch(1)
    rule.activity.runOnUiThread {
      mergedRegion.delete(object : OfflineRegion.OfflineRegionDeleteCallback {
        override fun onDelete() {
          latch.countDown()
        }

        override fun onError(error: String?) {
          throw RuntimeException("Unable to delete region")
        }
      })
    }
    latch.await()
  }
}