1db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets/*
2db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * Copyright (C) 2016 The Android Open Source Project
3db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets *
4db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License");
5db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * you may not use this file except in compliance with the License.
6db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * You may obtain a copy of the License at
7db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets *
8db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets *      http://www.apache.org/licenses/LICENSE-2.0
9db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets *
10db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software
11db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS,
12db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * See the License for the specific language governing permissions and
14db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets * limitations under the License.
15db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets */
16db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets
17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.lifecycle.utils
18db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets
19bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.LifecycleProcessor
20db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinetsimport com.google.testing.compile.CompileTester
21db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinetsimport com.google.testing.compile.JavaFileObjects
227c63d6b4d54e7ce5150231c152c30dcec9ebe2f2Sergey Vasilinetsimport com.google.testing.compile.JavaSourcesSubject
23db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinetsimport java.io.File
24db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinetsimport java.nio.charset.Charset
25db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinetsimport javax.tools.JavaFileObject
26db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets
277c63d6b4d54e7ce5150231c152c30dcec9ebe2f2Sergey Vasilinetsfun load(fullClassName: String, folder: String): JavaFileObject {
28e705b41d213fa4f4174fd1b860151621c5ce839dSergey Vasilinets    val folderPath = "src/tests/test-data/${if (folder.isEmpty()) "" else folder + "/"}"
297c63d6b4d54e7ce5150231c152c30dcec9ebe2f2Sergey Vasilinets    val split = fullClassName.split(".")
307c63d6b4d54e7ce5150231c152c30dcec9ebe2f2Sergey Vasilinets    val code = File("$folderPath/${split.last()}.java").readText(Charset.defaultCharset())
317c63d6b4d54e7ce5150231c152c30dcec9ebe2f2Sergey Vasilinets    return JavaFileObjects.forSourceString(fullClassName, code)
32db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets}
33db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets
340af2c3fe23515ba1b51095e331cd354ecf970010Sergey Vasilinetsfun processClass(className: String, vararg fullClassNames: String): CompileTester {
350af2c3fe23515ba1b51095e331cd354ecf970010Sergey Vasilinets    val javaFiles = fullClassNames.map { load(it, "") }.toTypedArray()
360af2c3fe23515ba1b51095e331cd354ecf970010Sergey Vasilinets    val processedWith = JavaSourcesSubject.assertThat(load(className, ""), *javaFiles)
370af2c3fe23515ba1b51095e331cd354ecf970010Sergey Vasilinets            .processedWith(LifecycleProcessor())
38db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets    return checkNotNull(processedWith)
39db70d9afb916a2eba4bc2425ec2792e84eee4a60Sergey Vasilinets}
40