#!/usr/bin/env python3 # # Copyright (C) 2020 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import unittest import os from create_project import * class TestNewDirectory(unittest.TestCase): def test_package_name(self): package = generate_package_name("androidx.foo", "foo") self.assertEqual("androidx.foo", package) package = generate_package_name("androidx.foo", "foo-bar") self.assertEqual("androidx.foo.bar", package) package = generate_package_name("androidx.foo.bar", "bar") self.assertEqual("androidx.foo.bar", package) package = generate_package_name("androidx.foo.bar", "bar-qux") self.assertEqual("androidx.foo.bar.qux", package) def test_name_correctness(self): self.assertFalse(validate_name("foo", "bar")) self.assertFalse(validate_name("foo", "foo")) self.assertFalse(validate_name("androidx.foo", "bar")) self.assertFalse(validate_name("androidx.foo", "bar-qux")) self.assertFalse(validate_name("androidx.foo.bar", "foo")) self.assertTrue(validate_name("androidx.foo", "foo")) self.assertTrue(validate_name("androidx.foo", "foo-bar")) self.assertTrue(validate_name("androidx.foo.bar", "bar")) self.assertTrue(validate_name("androidx.foo.bar", "bar-qux")) def test_full_directory_name(self): full_fp = get_full_artifact_path("androidx.foo", "foo") self.assertTrue(full_fp.endswith("frameworks/support/foo/foo")) full_fp = get_full_artifact_path("androidx.foo", "foo-bar") self.assertTrue(full_fp.endswith("frameworks/support/foo/foo-bar")) full_fp = get_full_artifact_path("androidx.foo.bar", "bar") self.assertTrue(full_fp.endswith("frameworks/support/foo/bar/bar")) full_fp = get_full_artifact_path("androidx.foo.bar", "bar-qux") self.assertTrue(full_fp.endswith("frameworks/support/foo/bar/bar-qux")) def test_get_package_documentation_file_dir(self): package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo") frameworks_support_fp = os.path.abspath(os.path.join(os.getcwd(), '..', '..')) self.assertEqual(frameworks_support_fp + "/foo/foo/src/main/java/androidx/foo", package_info_dir_fp) package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo-bar") self.assertEqual(frameworks_support_fp + "/foo/foo-bar/src/main/java/androidx/foo", package_info_dir_fp) package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar") self.assertEqual(frameworks_support_fp + "/foo/bar/bar/src/main/java/androidx/foo/bar", package_info_dir_fp) package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar-qux") self.assertEqual(frameworks_support_fp + "/foo/bar/bar-qux/src/main/java/androidx/foo/bar", package_info_dir_fp) package_info_dir_fp = get_package_documentation_file_dir("androidx.compose.bar", "bar-qux") self.assertEqual(frameworks_support_fp + "/compose/bar/bar-qux/src/commonMain/kotlin/androidx/compose/bar", package_info_dir_fp) package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.compose", "compose-qux") self.assertEqual(frameworks_support_fp + "/foo/compose/compose-qux/src/commonMain/kotlin/androidx/foo/compose", package_info_dir_fp) def test_get_package_documentation_filename(self): frameworks_support_fp = os.path.abspath(os.path.join(os.getcwd(), '..', '..')) package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.KOTLIN) self.assertEqual("androidx-foo-foo-documentation.md", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.NATIVE) self.assertEqual("androidx-foo-foo-documentation.md", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo-bar", ProjectType.KOTLIN) self.assertEqual("androidx-foo-foo-bar-documentation.md", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar", ProjectType.KOTLIN) self.assertEqual("androidx-foo-bar-bar-documentation.md", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar-qux", ProjectType.KOTLIN) self.assertEqual("androidx-foo-bar-bar-qux-documentation.md", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo", ProjectType.JAVA) self.assertEqual("package-info.java", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo", "foo-bar", ProjectType.JAVA) self.assertEqual("package-info.java", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar", ProjectType.JAVA) self.assertEqual("package-info.java", package_info_dir_filename) package_info_dir_filename = get_package_documentation_filename("androidx.foo.bar", "bar-qux", ProjectType.JAVA) self.assertEqual("package-info.java", package_info_dir_filename) def test_group_id_directory_name(self): full_fp = get_group_id_path("androidx.foo") self.assertTrue(full_fp.endswith("frameworks/support/foo")) full_fp = get_group_id_path("androidx.foo") self.assertTrue(full_fp.endswith("frameworks/support/foo")) full_fp = get_group_id_path("androidx.foo.bar") self.assertTrue(full_fp.endswith("frameworks/support/foo/bar")) full_fp = get_group_id_path("androidx.foo.bar") self.assertTrue(full_fp.endswith("frameworks/support/foo/bar")) class TestSettingsGradle(unittest.TestCase): def test_settings_gradle_line(self): line = get_new_settings_gradle_line("androidx.foo", "foo") self.assertEqual("includeProject(\":foo:foo\", [BuildType.MAIN])\n", line) line = get_new_settings_gradle_line("androidx.foo", "foo-bar") self.assertEqual("includeProject(\":foo:foo-bar\", [BuildType.MAIN])\n", line) line = get_new_settings_gradle_line("androidx.foo.bar", "bar") self.assertEqual("includeProject(\":foo:bar:bar\", [BuildType.MAIN])\n", line) line = get_new_settings_gradle_line("androidx.foo.bar", "bar-qux") self.assertEqual("includeProject(\":foo:bar:bar-qux\", [BuildType.MAIN])\n", line) line = get_new_settings_gradle_line("androidx.compose", "compose-foo") self.assertEqual("includeProject(\":compose:compose-foo\", [BuildType.COMPOSE])\n", line) line = get_new_settings_gradle_line("androidx.compose.foo", "foo-bar") self.assertEqual("includeProject(\":compose:foo:foo-bar\", [BuildType.COMPOSE])\n", line) line = get_new_settings_gradle_line("androidx.foo.bar", "bar-compose") self.assertEqual("includeProject(\":foo:bar:bar-compose\", [BuildType.COMPOSE])\n", line) def test_gradle_project_coordinates(self): coordinates = get_gradle_project_coordinates("androidx.foo", "foo") self.assertEqual(":foo:foo", coordinates) coordinates = get_gradle_project_coordinates("androidx.foo", "foo-bar") self.assertEqual(":foo:foo-bar", coordinates) coordinates = get_gradle_project_coordinates("androidx.foo.bar", "bar") self.assertEqual(":foo:bar:bar", coordinates) coordinates = get_gradle_project_coordinates("androidx.foo.bar", "bar-qux") self.assertEqual(":foo:bar:bar-qux", coordinates) class TestBuildGradle(unittest.TestCase): def test_correct_library_type_is_returned(self): library_type = get_library_type("foo-samples") self.assertEqual("SAMPLES", library_type) library_type = get_library_type("foo-compiler") self.assertEqual("ANNOTATION_PROCESSOR", library_type) library_type = get_library_type("foo-lint") self.assertEqual("LINT", library_type) library_type = get_library_type("foo-inspection") self.assertEqual("IDE_PLUGIN", library_type) library_type = get_library_type("foo") self.assertEqual("PUBLISHED_LIBRARY", library_type) library_type = get_library_type("foo-inspect") self.assertEqual("PUBLISHED_LIBRARY", library_type) library_type = get_library_type("foocomp") self.assertEqual("PUBLISHED_LIBRARY", library_type) library_type = get_library_type("foo-bar") self.assertEqual("PUBLISHED_LIBRARY", library_type) class TestDocsTipOfTree(unittest.TestCase): def test_docs_tip_of_tree_build_grade_line(self): line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo") self.assertEqual(" docs(project(\":foo:foo\"))\n", line) line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo-bar") self.assertEqual(" docs(project(\":foo:foo-bar\"))\n", line) line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar") self.assertEqual(" docs(project(\":foo:bar:bar\"))\n", line) line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar-qux") self.assertEqual(" docs(project(\":foo:bar:bar-qux\"))\n", line) line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo", "foo-samples") self.assertEqual(" samples(project(\":foo:foo-samples\"))\n", line) line = get_new_docs_tip_of_tree_build_grade_line("androidx.foo.bar", "bar-qux-samples") self.assertEqual(" samples(project(\":foo:bar:bar-qux-samples\"))\n", line) class TestReplacements(unittest.TestCase): def test_version_macro(self): macro = get_group_id_version_macro("androidx.foo") self.assertEqual("FOO", macro) macro = get_group_id_version_macro("androidx.foo.bar") self.assertEqual("FOO_BAR", macro) macro = get_group_id_version_macro("androidx.compose.bar") self.assertEqual("BAR", macro) macro = get_group_id_version_macro("androidx.compose.foo.bar") self.assertEqual("FOO_BAR", macro) macro = get_group_id_version_macro("androidx.compose") self.assertEqual("COMPOSE", macro) def test_sed(self): out_dir = "./out" test_file = out_dir + "/temp.txt" test_file_contents = "a\nb\nc" if not os.path.exists(out_dir): os.makedirs(out_dir) with open(test_file,"w") as f: f.write("a\nb\nc") sed("a", "d", test_file) # write back the file with open(test_file) as f: file_contents = f.read() self.assertEqual("d\nb\nc", file_contents) rm(out_dir) def test_mv_dir_within_same_dir(self): src_out_dir = "./src_out" test_src_file = src_out_dir + "/temp.txt" test_file_contents = "a\nb\nc" if not os.path.exists(src_out_dir): os.makedirs(src_out_dir) with open(test_src_file,"w") as f: f.write("a\nb\nc") dst_out_dir = "./dst_out" mv_dir(src_out_dir, dst_out_dir) # write back the file with open(dst_out_dir + "/temp.txt") as f: file_contents = f.read() self.assertEqual("a\nb\nc", file_contents) rm(src_out_dir) rm(dst_out_dir) def test_mv_dir_to_different_dir(self): src_out_dir = "./src_out_2" test_src_file = src_out_dir + "/temp.txt" test_file_contents = "a\nb\nc" if not os.path.exists(src_out_dir): os.makedirs(src_out_dir) with open(test_src_file,"w") as f: f.write("a\nb\nc") dst_out_dir_parent = "./dst_out_2" dst_out_dir = dst_out_dir_parent + "/hello/world" mv_dir(src_out_dir, dst_out_dir) # write back the file with open(dst_out_dir + "/temp.txt") as f: file_contents = f.read() self.assertEqual("a\nb\nc", file_contents) rm(src_out_dir) rm(dst_out_dir_parent) def test_rename_file_within_same_dir(self): test_src_file = "./temp.txt" test_file_contents = "a\nb\nc" with open(test_src_file,"w") as f: f.write("a\nb\nc") test_dst_file = "./temp_out.txt" rename_file(test_src_file, test_dst_file) # read back the file with open(test_dst_file) as f: file_contents = f.read() self.assertEqual("a\nb\nc", file_contents) rm(test_dst_file) def test_remove_line(self): out_dir = "./out" test_file = out_dir + "/temp.txt" test_file_contents = "a\nb\nc" if not os.path.exists(out_dir): os.makedirs(out_dir) with open(test_file,"w") as f: f.write("a\nb\nc") remove_line("b", test_file) # read back the file and check with open(test_file) as f: file_contents = f.read() self.assertEqual("a\nc", file_contents) with open(test_file,"w") as f: f.write("abc\ndef\nghi") remove_line("c", test_file) # read back the file and check with open(test_file) as f: file_contents = f.read() self.assertEqual("def\nghi", file_contents) # Clean up rm(out_dir) class TestLibraryGroupKt(unittest.TestCase): def test_library_group_atomicity_is_correctly_determined(self): self.assertFalse(is_group_id_atomic("androidx.core")) self.assertFalse(is_group_id_atomic("androidx.foo")) self.assertFalse(is_group_id_atomic("")) self.assertFalse(is_group_id_atomic("androidx.compose.foo")) self.assertTrue(is_group_id_atomic("androidx.cardview")) self.assertTrue(is_group_id_atomic("androidx.tracing")) self.assertTrue(is_group_id_atomic("androidx.compose.foundation")) if __name__ == '__main__': unittest.main()