1973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets/*
2973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * Copyright 2018 The Android Open Source Project
3973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets *
4973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License");
5973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * you may not use this file except in compliance with the License.
6973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * You may obtain a copy of the License at
7973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets *
8973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets *      http://www.apache.org/licenses/LICENSE-2.0
9973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets *
10973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software
11973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS,
12973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * See the License for the specific language governing permissions and
14973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets * limitations under the License.
15973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets */
16973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets
171503d52153986fdcfe7e744795010708b7410892Ian Lakepackage androidx.navigation.safe.args.generator
18973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets
19973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.hamcrest.CoreMatchers.`is`
20973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.hamcrest.MatcherAssert.assertThat
21973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.junit.Rule
22973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.junit.Test
23973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.junit.rules.TemporaryFolder
24973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.junit.runner.RunWith
25973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport org.junit.runners.JUnit4
26973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsimport java.io.File
27973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets
28973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets@RunWith(JUnit4::class)
29973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinetsclass NavGeneratorTest {
30973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets
3128f10aef67d29479eb0821b63967450e1bcee8e4Sergey Vasilinets    @Suppress("MemberVisibilityCanBePrivate")
32973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets    @get:Rule
33973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets    val workingDir = TemporaryFolder()
347e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets
35973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets    @Test
36973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets    fun test() {
3728f10aef67d29479eb0821b63967450e1bcee8e4Sergey Vasilinets        val output = generateSafeArgs("foo", "foo.flavor",
3873d7c77fb8b34198d06bf1d0f672accbdcac61a9Sergey Vasilinets            testData("naive_test.xml"), workingDir.root)
3928f10aef67d29479eb0821b63967450e1bcee8e4Sergey Vasilinets        val javaNames = output.files
407e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets        val expectedSet = setOf(
417e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets                "androidx.navigation.testapp.MainFragmentDirections",
427e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets                "foo.flavor.NextFragmentDirections",
437e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets                "androidx.navigation.testapp.MainFragmentArgs",
447e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets                "foo.flavor.NextFragmentArgs"
457e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets                )
4628f10aef67d29479eb0821b63967450e1bcee8e4Sergey Vasilinets        assertThat(output.errors.isEmpty(), `is`(true))
477e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets        assertThat(javaNames.toSet(), `is`(expectedSet))
487e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets        javaNames.forEach { name ->
497e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets            val file = File(workingDir.root, "${name.replace('.', File.separatorChar)}.java")
507e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets            assertThat(file.exists(), `is`(true))
517e7dfaccd4c66e8eec029590c334b3839c3d09b7Sergey Vasilinets        }
52973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets    }
53973a5c08a9d5a6951830f9dc6c0fa875392491e4Sergey Vasilinets}