-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.gradle
136 lines (119 loc) · 7.38 KB
/
build.gradle
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
125
126
127
128
129
130
131
132
133
134
135
136
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.expressoVersion = '3.2.0'
ext.kotlinVersion = '1.4.10'
ext.retrofitVersion = '2.7.0'
ext.okhttpVersion = '4.3.0'
ext.gsonVersion = '2.8.6'
ext.coroutinesVersion = "1.3.0"
ext.roomVersion = "2.2.3"
ext.architectureComponents = "1.1.1"
ext.liveDataVersion = "2.2.0"
ext.glideVersion = "4.11.0"
ext.koinVersion = "2.0.1"
ext.jUnitVersion = "4.13"
ext.navigationVersion = "2.2.0"
repositories {
google()
jcenter()
}
dependencies {
def navigatonSafeArgsVersion = "2.1.0"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigatonSafeArgsVersion"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
ext {
androidLibs = [
appcompat : 'androidx.appcompat:appcompat:1.1.0',
recyclerview : 'androidx.recyclerview:recyclerview:1.1.0',
constraintlayout : 'androidx.constraintlayout:constraintlayout:1.1.3',
androidxCore : 'androidx.core:core-ktx:1.1.0',
lifecycleExtensions : "android.arch.lifecycle:extensions:$architectureComponents",
lifecycleExtensionsViewModel: "android.arch.lifecycle:viewmodel:$architectureComponents",
liveDataCoreKtx : "androidx.lifecycle:lifecycle-livedata-core-ktx:$liveDataVersion",
liveDataKtx : "androidx.lifecycle:lifecycle-livedata-ktx:$liveDataVersion",
liveDataViewModelKtx : "androidx.lifecycle:lifecycle-viewmodel-ktx:$liveDataVersion",
playServicesLocation : 'com.google.android.gms:play-services-location:17.0.0',
material : 'com.google.android.material:material:1.0.0',
roomRuntime : "androidx.room:room-runtime:$roomVersion",
roomKotlin : "androidx.room:room-ktx:$roomVersion",
glide : "com.github.bumptech.glide:glide:$glideVersion",
dexter : 'com.karumi:dexter:6.0.1',
navigation : "androidx.navigation:navigation-fragment-ktx:$navigationVersion",
navigationKotlin : "androidx.navigation:navigation-ui-ktx:$navigationVersion"
]
androidKaptLibs = [
roomCompiler : "androidx.room:room-compiler:$roomVersion",
glideCompiler: "com.github.bumptech.glide:compiler:$glideVersion"
]
kotlinLibs = [
stdlib : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion",
coroutines: "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
]
libs = [
okhttpLoginInterceptor: "com.squareup.okhttp3:logging-interceptor:$okhttpVersion",
retrofit : "com.squareup.retrofit2:retrofit:$retrofitVersion",
retrofitGsonConverter : "com.squareup.retrofit2:converter-gson:$retrofitVersion",
koinAndroidxViewModel : "org.koin:koin-androidx-viewmodel:$koinVersion",
koinAndroid : "org.koin:koin-android:$koinVersion",
koinAndroidxScope : "org.koin:koin-androidx-scope:$koinVersion",
koinCore : "org.koin:koin-core:$koinVersion"
]
testLibs = [
junit : "junit:junit:$jUnitVersion",
// Mockito és un framework que permet crear mocks de manera automàtica. DE tal forma que permet verificar
// quines funcions han estat cridades i quantes vegades ho han fet.
// La primera llibreria, el que fa és solucionar un problema amb Kotlin: Mockito el que fa és omplir amb nulls
// la majoria dels components de les classes que mockeja, i això amb kotlin dóna problemes perquè una classe pot
// ser no nullable.
mockitoKotlin: "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0",
// Com que et Kotlin totes les classes són final per defecte, aquesta el que fa és que una classe encara que sigui
// final, es pogui mockejar.
mockitoInline: "org.mockito:mockito-inline:2.28.2",
// To use Koin in integratioin tests
koinTest : "org.koin:koin-test:$koinVersion",
// Com que les llibreries de testing s'afegeixen amb el androidTestImplementation,
// el mòdul testShared no s'ha afegirà en temps de compilació al projecte,
// només es compila quan s'executin els tests
testShared : project(':testShared'),
coroutineTest: "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
]
// LiveData té 2 problemes per fer testing:
// 1. LiveData sempre busquen el main thread per executar els observers, així s'asseugren que la
// actualització de les dades es fan el fin principal. Però en els tests això falla, perquè
// en els tests no hi ha fil principal.
// Aquesta llibreria ens permet afegir una rule en els testos, la qual obliga als LiveData
// a executar-se sempre al fil del test, en comptes de buscar el fil principal.
// 2. Per altra banda, en els testos no tenim un objecte Lifecycle, per tant podem utilitzar el observer per
// testejar-lo. Hem d'utilitzar una funció que es diu observeForEver i passer-li un observer mockejat.
androidxTestLibs = [
archCoreTesting: 'android.arch.core:core-testing:1.1.1'
]
androidTestLibs = [
testRunner : 'androidx.test:runner:1.2.0',
espressoCore : "androidx.test.espresso:espresso-core:$expressoVersion",
// Afegeix aspectes per testejar el recyclerview
espressoContrib: "androidx.test.espresso:espresso-contrib:$expressoVersion",
// les rules són maneres de simplificar el codi el test, per facilitar la gestió dels testos abans i després de la seva execució.
rules : "androidx.test:rules:1.2.0",
extJunit : "androidx.test.ext:junit-ktx:1.1.1",
mockWebServer : "com.squareup.okhttp3:mockwebserver:4.9.0",
// les peticions s'executen en un fil secundari, el test es continua executant i mai trobararem el contingut carregat a la UI. Per això tenim aquesta llibreria
// que són una manera d'identificar operacions asíncrones al nostres tests. Espresso això ho ja implementat, però en llibreries externes no, per això fem aquesta la fem servir per a okhttp el qual utilitza retrofit.
okhttpIdlingResources: "com.jakewharton.espresso:okhttp3-idling-resource:1.0.0"
]
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}