1#!/usr/bin/env python3 2# 3# Copyright (C) 2020 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16# 17 18import unittest 19import os 20from create_project import * 21 22class TestNewDirectory(unittest.TestCase): 23 24 def test_package_name(self): 25 package = generate_package_name("androidx.foo", "foo") 26 self.assertEqual("androidx.foo", package) 27 28 package = generate_package_name("androidx.foo", "foo-bar") 29 self.assertEqual("androidx.foo.bar", package) 30 31 package = generate_package_name("androidx.foo.bar", "bar") 32 self.assertEqual("androidx.foo.bar", package) 33 34 package = generate_package_name("androidx.foo.bar", "bar-qux") 35 self.assertEqual("androidx.foo.bar.qux", package) 36 37 def test_name_correctness(self): 38 self.assertFalse(validate_name("foo", "bar")) 39 self.assertFalse(validate_name("foo", "foo")) 40 self.assertFalse(validate_name("androidx.foo", "bar")) 41 self.assertFalse(validate_name("androidx.foo", "bar-qux")) 42 self.assertFalse(validate_name("androidx.foo.bar", "foo")) 43 self.assertTrue(validate_name("androidx.foo", "foo")) 44 self.assertTrue(validate_name("androidx.foo", "foo-bar")) 45 self.assertTrue(validate_name("androidx.foo.bar", "bar")) 46 self.assertTrue(validate_name("androidx.foo.bar", "bar-qux")) 47 48 def test_full_directory_name(self): 49 full_fp = get_full_artifact_path("androidx.foo", "foo") 50 self.assertTrue(full_fp.endswith("frameworks/support/foo/foo")) 51 52 full_fp = get_full_artifact_path("androidx.foo", "foo-bar") 53 self.assertTrue(full_fp.endswith("frameworks/support/foo/foo-bar")) 54 55 full_fp = get_full_artifact_path("androidx.foo.bar", "bar") 56 self.assertTrue(full_fp.endswith("frameworks/support/foo/bar/bar")) 57 58 full_fp = get_full_artifact_path("androidx.foo.bar", "bar-qux") 59 self.assertTrue(full_fp.endswith("frameworks/support/foo/bar/bar-qux")) 60 61 def test_get_package_documentation_file_dir(self): 62 package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo") 63 frameworks_support_fp = os.path.abspath(os.path.join(os.getcwd(), '..', '..')) 64 self.assertEqual(frameworks_support_fp + "/foo/foo/src/main/java/androidx/foo", package_info_dir_fp) 65 66 package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo-bar") 67 self.assertEqual(frameworks_support_fp + "/foo/foo-bar/src/main/java/androidx/foo", package_info_dir_fp) 68 69 package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar") 70 self.assertEqual(frameworks_support_fp + "/foo/bar/bar/src/main/java/androidx/foo/bar", package_info_dir_fp) 71 72 package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar-qux") 73 self.assertEqual(frameworks_support_fp + "/foo/bar/bar-qux/src/main/java/androidx/foo/bar", package_info_dir_fp) 74 75 package_info_dir_fp = get_package_documentation_file_dir("androidx.compose.bar", "bar-qux") 76 self.assertEqual(frameworks_support_fp + "/compose/bar/bar-qux/src/commonMain/kotlin/androidx/compose/bar", 77 package_info_dir_fp) 78 79 package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.compose", "compose-qux") 80 self.assertEqual(frameworks_support_fp + "/foo/compose/compose-qux/src/commonMain/kotlin/androidx/foo/compose", 81 package_info_dir_fp) 82 83 def test_get_package_documentation_filename(self): 84 frameworks_support_fp = os.path.abspath(os.path.join(os.getcwd(), '..', '..')) 85 86 package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.KOTLIN) 87 self.assertEqual("androidx-foo-foo-documentation.md", package_info_dir_filename) 88 89 package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.NATIVE) 90 self.assertEqual("androidx-foo-foo-documentation.md", package_info_dir_filename) 91 92 package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo-bar", ProjectType.KOTLIN) 93 self.assertEqual("androidx-foo-foo-bar-documentation.md", package_info_dir_filename) 94 95 package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar", ProjectType.KOTLIN) 96 self.assertEqual("androidx-foo-bar-bar-documentation.md", package_info_dir_filename) 97 98 package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar-qux", ProjectType.KOTLIN) 99 self.assertEqual("androidx-foo-bar-bar-qux-documentation.md", package_info_dir_filename) 100 101 package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.JAVA) 102 self.assertEqual("package-info.java", package_info_dir_filename) 103 104 package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo-bar", ProjectType.JAVA) 105 self.assertEqual("package-info.java", package_info_dir_filename) 106 107 package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar", ProjectType.JAVA) 108 self.assertEqual("package-info.java", package_info_dir_filename) 109 110 package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar-qux", ProjectType.JAVA) 111 self.assertEqual("package-info.java", package_info_dir_filename) 112 113 def test_group_id_directory_name(self): 114 full_fp = get_group_id_path("androidx.foo") 115 self.assertTrue(full_fp.endswith("frameworks/support/foo")) 116 117 full_fp = get_group_id_path("androidx.foo") 118 self.assertTrue(full_fp.endswith("frameworks/support/foo")) 119 120 full_fp = get_group_id_path("androidx.foo.bar") 121 self.assertTrue(full_fp.endswith("frameworks/support/foo/bar")) 122 123 full_fp = get_group_id_path("androidx.foo.bar") 124 self.assertTrue(full_fp.endswith("frameworks/support/foo/bar")) 125 126 127class TestSettingsGradle(unittest.TestCase): 128 129 def test_settings_gradle_line(self): 130 line = get_new_settings_gradle_line("androidx.foo", "foo") 131 self.assertEqual("includeProject(\":foo:foo\", [BuildType.MAIN])\n", line) 132 133 line = get_new_settings_gradle_line("androidx.foo", "foo-bar") 134 self.assertEqual("includeProject(\":foo:foo-bar\", [BuildType.MAIN])\n", line) 135 136 line = get_new_settings_gradle_line("androidx.foo.bar", "bar") 137 self.assertEqual("includeProject(\":foo:bar:bar\", [BuildType.MAIN])\n", line) 138 139 line = get_new_settings_gradle_line("androidx.foo.bar", "bar-qux") 140 self.assertEqual("includeProject(\":foo:bar:bar-qux\", [BuildType.MAIN])\n", line) 141 142 line = get_new_settings_gradle_line("androidx.compose", "compose-foo") 143 self.assertEqual("includeProject(\":compose:compose-foo\", [BuildType.COMPOSE])\n", line) 144 145 line = get_new_settings_gradle_line("androidx.compose.foo", "foo-bar") 146 self.assertEqual("includeProject(\":compose:foo:foo-bar\", [BuildType.COMPOSE])\n", line) 147 148 line = get_new_settings_gradle_line("androidx.foo.bar", "bar-compose") 149 self.assertEqual("includeProject(\":foo:bar:bar-compose\", [BuildType.COMPOSE])\n", line) 150 151 def test_gradle_project_coordinates(self): 152 coordinates = get_gradle_project_coordinates("androidx.foo", "foo") 153 self.assertEqual(":foo:foo", coordinates) 154 155 coordinates = get_gradle_project_coordinates("androidx.foo", "foo-bar") 156 self.assertEqual(":foo:foo-bar", coordinates) 157 158 coordinates = get_gradle_project_coordinates("androidx.foo.bar", "bar") 159 self.assertEqual(":foo:bar:bar", coordinates) 160 161 coordinates = get_gradle_project_coordinates("androidx.foo.bar", "bar-qux") 162 self.assertEqual(":foo:bar:bar-qux", coordinates) 163 164class TestBuildGradle(unittest.TestCase): 165 def test_correct_library_type_is_returned(self): 166 library_type = get_library_type("foo-samples") 167 self.assertEqual("SAMPLES", library_type) 168 169 library_type = get_library_type("foo-compiler") 170 self.assertEqual("ANNOTATION_PROCESSOR", library_type) 171 172 library_type = get_library_type("foo-lint") 173 self.assertEqual("LINT", library_type) 174 175 library_type = get_library_type("foo-inspection") 176 self.assertEqual("IDE_PLUGIN", library_type) 177 178 library_type = get_library_type("foo") 179 self.assertEqual("PUBLISHED_LIBRARY", library_type) 180 181 library_type = get_library_type("foo-inspect") 182 self.assertEqual("PUBLISHED_LIBRARY", library_type) 183 184 library_type = get_library_type("foocomp") 185 self.assertEqual("PUBLISHED_LIBRARY", library_type) 186 187 library_type = get_library_type("foo-bar") 188 self.assertEqual("PUBLISHED_LIBRARY", library_type) 189 190 191class TestDocsTipOfTree(unittest.TestCase): 192 193 def test_docs_tip_of_tree_build_grade_line(self): 194 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo") 195 self.assertEqual(" docs(project(\":foo:foo\"))\n", line) 196 197 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo-bar") 198 self.assertEqual(" docs(project(\":foo:foo-bar\"))\n", line) 199 200 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar") 201 self.assertEqual(" docs(project(\":foo:bar:bar\"))\n", line) 202 203 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar-qux") 204 self.assertEqual(" docs(project(\":foo:bar:bar-qux\"))\n", line) 205 206 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo-samples") 207 self.assertEqual(" samples(project(\":foo:foo-samples\"))\n", line) 208 209 line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar-qux-samples") 210 self.assertEqual(" samples(project(\":foo:bar:bar-qux-samples\"))\n", line) 211 212class TestReplacements(unittest.TestCase): 213 214 def test_version_macro(self): 215 macro = get_group_id_version_macro("androidx.foo") 216 self.assertEqual("FOO", macro) 217 218 macro = get_group_id_version_macro("androidx.foo.bar") 219 self.assertEqual("FOO_BAR", macro) 220 221 macro = get_group_id_version_macro("androidx.compose.bar") 222 self.assertEqual("BAR", macro) 223 224 macro = get_group_id_version_macro("androidx.compose.foo.bar") 225 self.assertEqual("FOO_BAR", macro) 226 227 macro = get_group_id_version_macro("androidx.compose") 228 self.assertEqual("COMPOSE", macro) 229 230 def test_sed(self): 231 out_dir = "./out" 232 test_file = out_dir + "/temp.txt" 233 test_file_contents = "a\nb\nc" 234 if not os.path.exists(out_dir): 235 os.makedirs(out_dir) 236 with open(test_file,"w") as f: 237 f.write("a\nb\nc") 238 sed("a", "d", test_file) 239 240 # write back the file 241 with open(test_file) as f: 242 file_contents = f.read() 243 self.assertEqual("d\nb\nc", file_contents) 244 rm(out_dir) 245 246 def test_mv_dir_within_same_dir(self): 247 src_out_dir = "./src_out" 248 test_src_file = src_out_dir + "/temp.txt" 249 test_file_contents = "a\nb\nc" 250 if not os.path.exists(src_out_dir): 251 os.makedirs(src_out_dir) 252 with open(test_src_file,"w") as f: 253 f.write("a\nb\nc") 254 255 dst_out_dir = "./dst_out" 256 mv_dir(src_out_dir, dst_out_dir) 257 # write back the file 258 with open(dst_out_dir + "/temp.txt") as f: 259 file_contents = f.read() 260 self.assertEqual("a\nb\nc", file_contents) 261 rm(src_out_dir) 262 rm(dst_out_dir) 263 264 def test_mv_dir_to_different_dir(self): 265 src_out_dir = "./src_out_2" 266 test_src_file = src_out_dir + "/temp.txt" 267 test_file_contents = "a\nb\nc" 268 if not os.path.exists(src_out_dir): 269 os.makedirs(src_out_dir) 270 with open(test_src_file,"w") as f: 271 f.write("a\nb\nc") 272 273 dst_out_dir_parent = "./dst_out_2" 274 dst_out_dir = dst_out_dir_parent + "/hello/world" 275 mv_dir(src_out_dir, dst_out_dir) 276 # write back the file 277 with open(dst_out_dir + "/temp.txt") as f: 278 file_contents = f.read() 279 self.assertEqual("a\nb\nc", file_contents) 280 rm(src_out_dir) 281 rm(dst_out_dir_parent) 282 283 def test_rename_file_within_same_dir(self): 284 test_src_file = "./temp.txt" 285 test_file_contents = "a\nb\nc" 286 with open(test_src_file,"w") as f: 287 f.write("a\nb\nc") 288 289 test_dst_file = "./temp_out.txt" 290 rename_file(test_src_file, test_dst_file) 291 # read back the file 292 with open(test_dst_file) as f: 293 file_contents = f.read() 294 self.assertEqual("a\nb\nc", file_contents) 295 rm(test_dst_file) 296 297 def test_remove_line(self): 298 out_dir = "./out" 299 test_file = out_dir + "/temp.txt" 300 test_file_contents = "a\nb\nc" 301 if not os.path.exists(out_dir): 302 os.makedirs(out_dir) 303 304 with open(test_file,"w") as f: 305 f.write("a\nb\nc") 306 remove_line("b", test_file) 307 # read back the file and check 308 with open(test_file) as f: 309 file_contents = f.read() 310 self.assertEqual("a\nc", file_contents) 311 312 with open(test_file,"w") as f: 313 f.write("abc\ndef\nghi") 314 remove_line("c", test_file) 315 # read back the file and check 316 with open(test_file) as f: 317 file_contents = f.read() 318 self.assertEqual("def\nghi", file_contents) 319 320 # Clean up 321 rm(out_dir) 322 323 324class TestLibraryGroupKt(unittest.TestCase): 325 326 def test_library_group_atomicity_is_correctly_determined(self): 327 self.assertFalse(is_group_id_atomic("androidx.core")) 328 self.assertFalse(is_group_id_atomic("androidx.foo")) 329 self.assertFalse(is_group_id_atomic("")) 330 self.assertFalse(is_group_id_atomic("androidx.compose.foo")) 331 self.assertTrue(is_group_id_atomic("androidx.cardview")) 332 self.assertTrue(is_group_id_atomic("androidx.tracing")) 333 self.assertTrue(is_group_id_atomic("androidx.compose.foundation")) 334 335 336if __name__ == '__main__': 337 unittest.main()