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}