Skip to content

Commit 4bdc882

Browse files
authored
Merge pull request #7 from minibugdev/test
Add test and integrate with circle ci
2 parents 749fdc5 + edc7d99 commit 4bdc882

File tree

6 files changed

+182
-12
lines changed

6 files changed

+182
-12
lines changed

.circleci/config.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
version: 2
2+
jobs:
3+
build:
4+
docker:
5+
- image: circleci/android:api-26-alpha
6+
environment:
7+
- JVM_OPTS: -Xmx3200m
8+
steps:
9+
- run:
10+
name: Install custom system image
11+
command: sdkmanager "system-images;android-21;default;armeabi-v7a"
12+
environment:
13+
TERM: dumb
14+
- run:
15+
name: Create avd
16+
command: echo no | avdmanager create avd -n testEmulator -k "system-images;android-21;default;armeabi-v7a"
17+
environment:
18+
TERM: dumb
19+
- run:
20+
name: Start emulator
21+
command: export LD_LIBRARY_PATH=${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib && emulator64-arm -avd testEmulator -noaudio -no-boot-anim -no-window -accel on
22+
background: true
23+
environment:
24+
TERM: dumb
25+
- checkout
26+
- run:
27+
name: Wait for emulator
28+
command: |
29+
circle-android wait-for-boot
30+
sleep 30
31+
adb shell input keyevent 82
32+
environment:
33+
TERM: dumb
34+
- restore_cache:
35+
key: jars-{{ checksum "build.gradle" }}-{{ checksum "library/build.gradle" }}
36+
- run:
37+
name: Download Dependencies
38+
command: ./gradlew androidDependencies
39+
- save_cache:
40+
paths:
41+
- ~/.gradle
42+
key: jars-{{ checksum "build.gradle" }}-{{ checksum "library/build.gradle" }}
43+
- run:
44+
name: Run Tests
45+
command: ./gradlew :library:connectedAndroidTest
46+
- store_artifacts:
47+
path: library/build/reports
48+
destination: reports

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Drawable Badge
2+
[![CircleCI](https://circleci.com/gh/minibugdev/DrawableBadge.svg?style=svg)](https://circleci.com/gh/minibugdev/DrawableBadge)
23
[![Release](https://jitpack.io/v/minibugdev/DrawableBadge.svg)](https://jitpack.io/#minibugdev/DrawableBadge/1.0.1)
34
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/minibugdev/DrawableBadge/master/LICENSE)
45

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
buildscript {
22
ext.kotlin_version = '1.1.51'
3+
ext.support_library_version = '26.0.0-alpha1'
4+
ext.test_runner_version = '1.0.1'
5+
ext.junit_version = '4.12'
6+
ext.mockito_version = '1.5.0'
37

48
repositories {
59
jcenter()
@@ -17,6 +21,9 @@ buildscript {
1721
allprojects {
1822
repositories {
1923
jcenter()
24+
maven {
25+
url "https://maven.google.com"
26+
}
2027
}
2128
}
2229

library/build.gradle

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
33
apply plugin: 'kotlin-android'
44

5-
group='com.github.minibugdev'
5+
group = 'com.github.minibugdev'
66

77
android {
88
compileSdkVersion 26
@@ -13,6 +13,7 @@ android {
1313
targetSdkVersion 26
1414
versionCode 2
1515
versionName "1.0.1"
16+
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1617
}
1718
buildTypes {
1819
release {
@@ -22,12 +23,23 @@ android {
2223
}
2324
sourceSets {
2425
main.java.srcDirs += 'src/main/kotlin'
26+
test.java.srcDirs += 'src/test/kotlin'
27+
}
28+
testOptions {
29+
unitTests.returnDefaultValues = true
2530
}
2631
}
2732

2833
dependencies {
29-
compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
34+
compile "com.android.support:appcompat-v7:$support_library_version"
3035
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
36+
37+
androidTestCompile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
38+
androidTestCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
39+
androidTestCompile "com.nhaarman:mockito-kotlin-kt1.1:$mockito_version"
40+
androidTestCompile "org.mockito:mockito-android:2.11.0"
41+
androidTestCompile "com.android.support:support-annotations:$support_library_version"
42+
androidTestCompile "com.android.support.test:runner:$test_runner_version"
3143
}
3244

3345
// build a jar with source files
@@ -37,7 +49,7 @@ task sourcesJar(type: Jar) {
3749
}
3850

3951
task javadoc(type: Javadoc) {
40-
failOnError false
52+
failOnError false
4153
source = android.sourceSets.main.java.sourceFiles
4254
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
4355
classpath += configurations.compile
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.minibugdev.drawablebadge
2+
3+
import android.content.Context
4+
import android.content.res.Resources
5+
import android.graphics.Bitmap
6+
import android.support.test.filters.LargeTest
7+
import com.nhaarman.mockito_kotlin.mock
8+
import com.nhaarman.mockito_kotlin.whenever
9+
import org.junit.Before
10+
import org.junit.Test
11+
import kotlin.test.assertEquals
12+
import kotlin.test.assertFailsWith
13+
14+
@LargeTest
15+
class DrawableBadgeBuilderTest {
16+
17+
private lateinit var drawableBuilder: DrawableBadge.Builder
18+
private val mockContext: Context = mock()
19+
private val mockResource: Resources = mock()
20+
21+
@Before
22+
fun setup() {
23+
whenever(mockContext.resources).thenReturn(mockResource)
24+
drawableBuilder = DrawableBadge.Builder(mockContext)
25+
}
26+
27+
@Test
28+
fun testNotPassBitmapOrDrawableShouldThrowIllegalArgumentException() {
29+
assertFailsWith<IllegalArgumentException> {
30+
drawableBuilder.build()
31+
}
32+
}
33+
34+
@Test
35+
fun testConfigOnlyBitmapShouldUsingDefaultConfig() {
36+
whenever(mockResource.getColor(R.color.default_badge_color)).thenReturn(EXPECTED_DEFAULT_BADGE_COLOR_INT)
37+
whenever(mockResource.getColor(R.color.default_badge_border_color)).thenReturn(EXPECTED_DEFAULT_BADGE_BORDER_COLOR_INT)
38+
whenever(mockResource.getColor(R.color.default_badge_text_color)).thenReturn(EXPECTED_DEFAULT_BADGE_TEXT_COLOR_INT)
39+
whenever(mockResource.getDimensionPixelOffset(R.dimen.default_badge_size)).thenReturn(EXPECTED_DEFAULT_BADGE_SIZE.toInt())
40+
whenever(mockResource.getDimensionPixelOffset(R.dimen.default_badge_border_size)).thenReturn(EXPECTED_DEFAULT_BADGE_BORDER_SIZE.toInt())
41+
42+
val actual = drawableBuilder
43+
.bitmap(Bitmap.createBitmap(128, 128, Bitmap.Config.ALPHA_8))
44+
.build()
45+
46+
assertEquals(EXPECTED_DEFAULT_BADGE_SIZE, actual.badgeSize)
47+
assertEquals(EXPECTED_DEFAULT_BADGE_BORDER_SIZE, actual.badgeBorderSize)
48+
assertEquals(EXPECTED_DEFAULT_BADGE_COLOR_INT, actual.badgeColor)
49+
assertEquals(EXPECTED_DEFAULT_BADGE_BORDER_COLOR_INT, actual.badgeBorderColor)
50+
assertEquals(EXPECTED_DEFAULT_BADGE_TEXT_COLOR_INT, actual.textColor)
51+
assertEquals(BadgePosition.TOP_RIGHT, actual.badgePosition)
52+
assertEquals(true, actual.isShowBorder)
53+
}
54+
55+
@Test
56+
fun testCustomConfigShouldUsingCustomConfig() {
57+
whenever(mockResource.getColor(FAKE_BADGE_COLOR_RES_ID)).thenReturn(EXPECTED_CONFIG_BADGE_COLOR_INT)
58+
whenever(mockResource.getColor(FAKE_BADGE_BORDER_COLOR_RES_ID)).thenReturn(EXPECTED_CONFIG_BADGE_BORDER_COLOR_INT)
59+
whenever(mockResource.getColor(FAKE_TEXT_COLOR_RES_ID)).thenReturn(EXPECTED_CONFIG_BADGE_TEXT_COLOR_INT)
60+
whenever(mockResource.getDimensionPixelOffset(FAKE_BADGE_SIZE_DIMENSION_ID)).thenReturn(EXPECTED_CONFIG_BADGE_SIZE.toInt())
61+
whenever(mockResource.getDimensionPixelOffset(FAKE_BADGE_BORDER_SIZE_DIMENSION_ID)).thenReturn(EXPECTED_CONFIG_BADGE_BORDER_SIZE.toInt())
62+
63+
val actual = drawableBuilder
64+
.bitmap(Bitmap.createBitmap(128, 128, Bitmap.Config.ALPHA_8))
65+
.badgeSize(FAKE_BADGE_SIZE_DIMENSION_ID)
66+
.badgeBorderSize(FAKE_BADGE_BORDER_SIZE_DIMENSION_ID)
67+
.badgeColor(FAKE_BADGE_COLOR_RES_ID)
68+
.badgeBorderColor(FAKE_BADGE_BORDER_COLOR_RES_ID)
69+
.textColor(FAKE_TEXT_COLOR_RES_ID)
70+
.badgePosition(BadgePosition.BOTTOM_LEFT)
71+
.showBorder(false)
72+
.build()
73+
74+
assertEquals(EXPECTED_CONFIG_BADGE_SIZE, actual.badgeSize)
75+
assertEquals(EXPECTED_CONFIG_BADGE_BORDER_SIZE, actual.badgeBorderSize)
76+
assertEquals(EXPECTED_CONFIG_BADGE_COLOR_INT, actual.badgeColor)
77+
assertEquals(EXPECTED_CONFIG_BADGE_BORDER_COLOR_INT, actual.badgeBorderColor)
78+
assertEquals(EXPECTED_CONFIG_BADGE_TEXT_COLOR_INT, actual.textColor)
79+
assertEquals(BadgePosition.BOTTOM_LEFT, actual.badgePosition)
80+
assertEquals(false, actual.isShowBorder)
81+
}
82+
83+
companion object {
84+
private const val EXPECTED_DEFAULT_BADGE_SIZE = 100f
85+
private const val EXPECTED_DEFAULT_BADGE_BORDER_SIZE = 200f
86+
private const val EXPECTED_DEFAULT_BADGE_COLOR_INT = 1
87+
private const val EXPECTED_DEFAULT_BADGE_BORDER_COLOR_INT = 2
88+
private const val EXPECTED_DEFAULT_BADGE_TEXT_COLOR_INT = 3
89+
90+
private const val EXPECTED_CONFIG_BADGE_SIZE = 300f
91+
private const val EXPECTED_CONFIG_BADGE_BORDER_SIZE = 400f
92+
private const val EXPECTED_CONFIG_BADGE_COLOR_INT = 4
93+
private const val EXPECTED_CONFIG_BADGE_BORDER_COLOR_INT = 5
94+
private const val EXPECTED_CONFIG_BADGE_TEXT_COLOR_INT = 6
95+
96+
private const val FAKE_BADGE_SIZE_DIMENSION_ID = 100
97+
private const val FAKE_BADGE_BORDER_SIZE_DIMENSION_ID = 101
98+
private const val FAKE_BADGE_COLOR_RES_ID = 102
99+
private const val FAKE_BADGE_BORDER_COLOR_RES_ID = 103
100+
private const val FAKE_TEXT_COLOR_RES_ID = 104
101+
}
102+
}

library/src/main/java/com/minibugdev/drawablebadge/DrawableBadge.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import android.support.annotation.DrawableRes
1111
import android.support.v4.content.ContextCompat
1212
import android.text.TextPaint
1313

14-
class DrawableBadge private constructor(private val context: Context,
15-
@ColorInt private val textColor: Int,
16-
@ColorInt private val badgeColor: Int,
17-
@ColorInt private val badgeBorderColor: Int,
18-
private val badgeBorderSize: Float,
19-
private val badgeSize: Float,
20-
private val badgePosition: BadgePosition,
21-
private val bitmap: Bitmap,
22-
private val isShowBorder: Boolean) {
14+
class DrawableBadge private constructor(val context: Context,
15+
@ColorInt val textColor: Int,
16+
@ColorInt val badgeColor: Int,
17+
@ColorInt val badgeBorderColor: Int,
18+
val badgeBorderSize: Float,
19+
val badgeSize: Float,
20+
val badgePosition: BadgePosition,
21+
val bitmap: Bitmap,
22+
val isShowBorder: Boolean) {
2323

2424
class Builder(private val context: Context) {
2525

0 commit comments

Comments
 (0)