def test_normalize_deps__skip_pomgen_mode_allows_refs_to_same_package( self): ws = workspace.Workspace("so/path", [], exclusions.src_exclusions(), maveninstallinfo.NOOP, pom_content=pomcontent.NOOP) package = "a/b/c" art1 = buildpom.MavenArtifactDef("g1", "a1", "1", bazel_package=package, pom_generation_mode=pomgenmode.SKIP) dep1 = dependency.MonorepoDependency(art1, bazel_target=None) art2 = buildpom.MavenArtifactDef("g2", "a2", "1", bazel_package=package) dep2 = dependency.MonorepoDependency(art2, bazel_target=None) art3 = buildpom.MavenArtifactDef("g1", "a1", "1", bazel_package="d/e/f") dep3 = dependency.MonorepoDependency(art3, bazel_target=None) dep4 = dependency.ThirdPartyDependency("name", "g101", "a101", "1") # the result of this method is based on bazel_package comparison deps = ws.normalize_deps(art1, [dep1, dep2, dep3, dep4]) self.assertEqual([dep1, dep2, dep3, dep4], deps)
def test_template__library_transitives(self): """ Verifies that transitive dependencies can be referenced using the property pomgen.transitive_closure_of_library_dependencies. """ pom_template = """ <project> <dependencyManagement> <dependencies> #{pomgen.transitive_closure_of_library_dependencies} </dependencies> </dependencyManagement> </project> """ expected_pom = """ <project> <dependencyManagement> <dependencies> <dependency> <groupId>com.grail.srpc</groupId> <artifactId>srpc-api</artifactId> <version>5.6.7</version> </dependency> <dependency> <groupId>cg</groupId> <artifactId>ca</artifactId> <version>0.0.1</version> </dependency> </dependencies> </dependencyManagement> </project> """ ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(), maveninstallinfo.NOOP, pomcontent.NOOP) artifact_def = buildpom.maven_artifact("groupId", "artifactId", "1.2.3") dep = dependency.new_dep_from_maven_artifact_def(artifact_def) artifact_def.custom_pom_template_content = pom_template pomgen = pom.TemplatePomGen(ws, artifact_def, dep) srpc_artifact_def = buildpom.MavenArtifactDef("com.grail.srpc", "srpc-api", "5.6.7", bazel_package="a/b/c") internal_dep = dependency.MonorepoDependency(srpc_artifact_def, bazel_target=None) external_dep = dependency.ThirdPartyDependency("name", "cg", "ca", "0.0.1") pomgen.register_dependencies_transitive_closure__library( set([external_dep, internal_dep])) generated_pom = pomgen.gen(pom.PomContentType.RELEASE) self.assertEqual(expected_pom, generated_pom)
def test_template__crawled_external_deps__configured_attributes(self): """ Verifies that "classifier" and "scope" are correcly set in the generated pom. """ pom_template = """ <project> <dependencyManagement> <dependencies> __pomgen.start_dependency_customization__ <dependency> <artifactId>ca</artifactId> <groupId>cg</groupId> <version>0.0.1</version> <scope>test</scope> <classifier>sources</classifier> </dependency> __pomgen.end_dependency_customization__ #{pomgen.transitive_closure_of_library_dependencies} </dependencies> </dependencyManagement> </project> """ expected_pom = """ <project> <dependencyManagement> <dependencies> <dependency> <groupId>cg</groupId> <artifactId>ca</artifactId> <version>0.0.1</version> <classifier>sources</classifier> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project> """ ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(), maveninstallinfo.NOOP, pomcontent.NOOP) artifact_def = buildpom.maven_artifact("groupId", "artifactId", "1.2.3") dep = dependency.new_dep_from_maven_artifact_def(artifact_def) artifact_def.custom_pom_template_content = pom_template pomgen = pom.TemplatePomGen(ws, artifact_def, dep) crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca", "0.0.1") pomgen.register_dependencies_transitive_closure__library( set([crawled_dep])) generated_pom = pomgen.gen(pom.PomContentType.RELEASE) self.assertEqual(expected_pom, generated_pom)
def test_external_dependency__names__default_packaging(self): """ Ensures the Dependency instance for an external dependency has expected names when packaging has a default value. """ dep = dependency.ThirdPartyDependency(maven_install_name="name", group_id="group", artifact_id="art", version="1.0.0", packaging="jar") self.assertEqual("group:art", dep.maven_coordinates_name) self.assertEqual("@name//:group_art", dep.bazel_label_name) self.assertEqual("group_art", dep.unqualified_bazel_label_name)
def test_external_dependency__names__with_classifier_and_default_packaging(self): """ Ensures the Dependency instance for an external dependency has expected names when packaging and classifier are set. """ dep = dependency.ThirdPartyDependency(maven_install_name="name", group_id="group", artifact_id="art", version="1.0.0", classifier="class") self.assertEqual("group:art:jar:class", dep.maven_coordinates_name) self.assertEqual("@name//:group_art_class", dep.bazel_label_name) self.assertEqual("group_art_class", dep.unqualified_bazel_label_name)
def test_copy(self): import copy dep = dependency.ThirdPartyDependency("name", "group", "artifact", "version", "classifier", "packaging", "scope") dep_copy = copy.copy(dep) self.assertTrue(dep is dep) self.assertFalse(dep is dep_copy) self.assertEqual(dep, dep_copy) self.assertEqual("group", dep_copy.group_id) self.assertEqual("artifact", dep_copy.artifact_id) self.assertEqual("version", dep_copy.version) self.assertEqual("classifier", dep_copy.classifier) self.assertEqual("packaging", dep_copy.packaging) self.assertEqual("scope", dep_copy.scope)
def _get_dependency_from_xml_element(el, version_must_be_set): group_id = _get_xpath_text_value(el, "groupId/text()", True) artifact_id = _get_xpath_text_value(el, "artifactId/text()", True) version = _get_xpath_text_value(el, "version/text()", version_must_be_set) classifier = _get_xpath_text_value(el, "classifier/text()", False) scope = _get_xpath_text_value(el, "scope/text()", False) _type = _get_xpath_text_value(el, "type/text()", False) if _type is not None: # we currently don't support "type" (for no particular reason, we could) raise Exception("we are dropping type on the floor %s" % _str(el)) return dependency.ThirdPartyDependency(bazel_label_name=None, group_id=group_id, artifact_id=artifact_id, version=version, classifier=classifier, scope=scope)
def test_template__crawled_external_deps(self): """ Verifies that crawled external deps can be referenced using the property pomgen.crawled_external_dependencies. """ pom_template = """ <project> <dependencyManagement> <dependencies> #{pomgen.crawled_external_dependencies} </dependencies> </dependencyManagement> </project> """ expected_pom = """ <project> <dependencyManagement> <dependencies> <dependency> <groupId>cg</groupId> <artifactId>ca</artifactId> <version>0.0.1</version> </dependency> </dependencies> </dependencyManagement> </project> """ ws = workspace.Workspace("some/path", "", [], exclusions.src_exclusions()) artifact_def = buildpom.maven_artifact("groupId", "artifactId", "1.2.3") dep = dependency.new_dep_from_maven_artifact_def(artifact_def) pomgen = pom.TemplatePomGen(ws, artifact_def, dep, pom_template) crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca", "0.0.1") pomgen.register_dependencies_globally(set(), set([crawled_dep])) generated_pom = pomgen.gen() self.assertEqual(expected_pom, generated_pom)
def test_template__crawled_external_deps__configured_exclusions(self): """ Verifies that exclusions can be "attached" to crawled deps by declaring them in a dependency config section. """ pom_template = """ <project> <dependencyManagement> <dependencies> __pomgen.start_dependency_customization__ <dependency> <artifactId>ca</artifactId> <groupId>cg</groupId> <version>0.0.1</version> <classifier>c1</classifier> <exclusions> <exclusion> <artifactId>ea1</artifactId> <groupId>zzz</groupId> </exclusion> <exclusion> <artifactId>ea2</artifactId> <groupId>aaa</groupId> </exclusion> </exclusions> </dependency> __pomgen.end_dependency_customization__ #{pomgen.crawled_external_dependencies} </dependencies> </dependencyManagement> </project> """ expected_pom = """ <project> <dependencyManagement> <dependencies> <dependency> <groupId>cg</groupId> <artifactId>ca</artifactId> <version>0.0.1</version> <classifier>c1</classifier> <exclusions> <exclusion> <groupId>aaa</groupId> <artifactId>ea2</artifactId> </exclusion> <exclusion> <groupId>zzz</groupId> <artifactId>ea1</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> </project> """ ws = workspace.Workspace("some/path", "", [], exclusions.src_exclusions()) artifact_def = buildpom.maven_artifact("groupId", "artifactId", "1.2.3") dep = dependency.new_dep_from_maven_artifact_def(artifact_def) pomgen = pom.TemplatePomGen(ws, artifact_def, dep, pom_template) crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca", "0.0.1") pomgen.register_dependencies_globally(set(), set([crawled_dep])) generated_pom = pomgen.gen() self.assertEqual(expected_pom, generated_pom)