Skip to content

Commit

Permalink
test: set up sample app test env with robolectric
Browse files Browse the repository at this point in the history
  • Loading branch information
2BAB committed Mar 15, 2023
1 parent c40acfa commit ec1cde1
Show file tree
Hide file tree
Showing 10 changed files with 269 additions and 29 deletions.
17 changes: 16 additions & 1 deletion sample/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isIncludeCompileClasspath

plugins {
id("com.android.application")
kotlin("android")
Expand All @@ -11,7 +13,7 @@ android {
compileSdk = 31
defaultConfig {
applicationId = "me.xx2bab.caliper.sample"
minSdk = 23
minSdk = 26
targetSdk = 31
versionCode = 1
versionName = "1.0.0"
Expand Down Expand Up @@ -62,15 +64,28 @@ android {
jvmTarget = "17"
}

testOptions {
unitTests {
// For AGP to trigger the resources package and other tasks for test variants
// especially when using Robolectric to do Unit Test.
isIncludeAndroidResources = true
}
}
}

dependencies {
implementation(project(":library"))
implementation(deps.kotlin.std)
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("com.google.android.material:material:1.4.+")
implementation("androidx.constraintlayout:constraintlayout:2.1.3")

caliper("me.2bab:caliper-runtime-privacy:+")
caliper(project(":custom-proxy"))

testImplementation(deps.junit4)
testImplementation(deps.robolectric)
testImplementation(deps.hamcrest)
}

// Run `./gradlew clean assembleFullDebug` for testing
Expand Down
11 changes: 10 additions & 1 deletion sample/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="me.xx2bab.caliper.sample.MainActivity"
<activity
android:name=".BatteryOptimizationActivity"
android:exported="false" />
<activity
android:name=".PrivacyActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Expand Down
20 changes: 0 additions & 20 deletions sample/app/src/main/java/me/xx2bab/caliper/sample/MainActivity.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package me.xx2bab.caliper.sample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class BatteryOptimizationActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_battery_optimization)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.xx2bab.caliper.sample

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import me.xx2bab.caliper.sample.library.LibrarySampleClass

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

findViewById<Button>(R.id.navi_to_privacy).setOnClickListener {
startActivity(Intent(this, PrivacyActivity::class.java))
}
findViewById<Button>(R.id.navi_to_battery_optimization).setOnClickListener {
startActivity(Intent(this, BatteryOptimizationActivity::class.java))
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package me.xx2bab.caliper.sample

import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.Settings
import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.RequiresApi

class PrivacyActivity : AppCompatActivity() {

lateinit var outputTv: TextView
lateinit var expectedTv: TextView

@RequiresApi(Build.VERSION_CODES.O)
lateinit var triggerButtons: List<TriggerButton>

override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode == 100) {
outputTv.text = "true"
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_privacy)
triggerButtons = listOf(
TriggerButton(
text = "getSerial()",
id = 10001,
expectedResult = "android/os/Build->getSerial",
onClickListener = {
outputTv.text = Build.getSerial()
expectedTv.text = ""
}
),
TriggerButton(
text = "SERIAL",
id = 10002,
expectedResult = "android/os/Build->getSerialField",
onClickListener = {
outputTv.text = Build.SERIAL
}
),
TriggerButton(
text = "getString()",
id = 10003,
expectedResult = "android/provider/Settings\$Settings.Secure->getString",
onClickListener = {
outputTv.text = Settings.Secure.getString(this.application.contentResolver,
Settings.Secure.ANDROID_ID)
}
),
TriggerButton(
text = "requestPermissions()",
id = 10004,
expectedResult = "android/app/Activity->requestPermissions",
onClickListener = {
requestPermissions(arrayOf("android.permission.READ_PHONE_STATE"), 100)
}
)
)

outputTv = findViewById(R.id.return_content)
expectedTv = findViewById(R.id.expect_content)
val buttonList = findViewById<LinearLayout>(R.id.button_list)

triggerButtons.forEach {
buttonList.addView(makeTriggerButton(this, it))
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package me.xx2bab.caliper.sample

import android.content.Context
import android.widget.Button

data class TriggerButton(
val text: String,
val id: Int,
val expectedResult: String,
val onClickListener: () -> Unit
)

fun makeTriggerButton(context: Context, triggerButton: TriggerButton): Button {
val button = Button(context)
button.text = triggerButton.text
button.id = triggerButton.id
button.setOnClickListener {
triggerButton.onClickListener()
}
return button
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BatteryOptimizationActivity">

</androidx.constraintlayout.widget.ConstraintLayout>
30 changes: 23 additions & 7 deletions sample/app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
<!-- <TextView-->
<!-- android:id="@+id/console_text"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Hello Caliper."-->
<!-- android:textSize="22sp"-->
<!-- android:layout_centerInParent="true"/>-->


<Button
android:id="@+id/navi_to_privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="PrivacyActivity" />

<Button
android:id="@+id/navi_to_battery_optimization"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello Caliper."
android:textSize="22sp"
android:layout_centerInParent="true"/>
android:text="BatteryOptimActivity" />

</RelativeLayout>
</LinearLayout>
74 changes: 74 additions & 0 deletions sample/app/src/main/res/layout/activity_privacy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="24dp"
tools:context=".PrivacyActivity">

<TextView
android:id="@+id/return_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="Return:" />

<TextView
android:id="@+id/return_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_toEndOf="@id/return_title"
android:text="" />

<TextView
android:id="@+id/log_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/return_content"
android:layout_marginEnd="16dp"
android:text="Log:" />

<TextView
android:id="@+id/log_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/return_content"
android:layout_alignParentEnd="true"
android:layout_toEndOf="@id/return_title"
android:text="" />

<TextView
android:id="@+id/expect_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/log_content"
android:layout_marginEnd="16dp"
android:text="Expect:" />

<TextView
android:id="@+id/expect_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/return_content"
android:layout_alignParentEnd="true"
android:layout_toEndOf="@id/log_content"
android:text="" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/expect_content"
android:layout_alignParentBottom="true">

<LinearLayout
android:id="@+id/button_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

</LinearLayout>
</ScrollView>

</RelativeLayout>

0 comments on commit ec1cde1

Please sign in to comment.