diff --git a/modules/core/shared/src/main/scala/coursier/ivy/IvyXml.scala b/modules/core/shared/src/main/scala/coursier/ivy/IvyXml.scala index a022379b08..20bb8cb9c2 100644 --- a/modules/core/shared/src/main/scala/coursier/ivy/IvyXml.scala +++ b/modules/core/shared/src/main/scala/coursier/ivy/IvyXml.scala @@ -184,11 +184,14 @@ object IvyXml { val publicationsOpt = publicationsNodeOpt.map(publications) - val description = infoNode.children - .find(_.label == "description") + val descriptionNodeOpt = infoNode.children.find(_.label == "description") + + val description = descriptionNodeOpt .map(_.textContent.trim) .getOrElse("") + val homePage = descriptionNodeOpt.flatMap(_.attribute("homepage").right.toOption).getOrElse("") + val licenses = infoNode.children .filter(_.label == "license") .flatMap { n => @@ -229,7 +232,7 @@ object IvyXml { }, Info( description, - "", + homePage, licenses, Nil, publicationDate, diff --git a/modules/tests/shared/src/test/scala/coursier/test/IvyXmlParsingTests.scala b/modules/tests/shared/src/test/scala/coursier/test/IvyXmlParsingTests.scala new file mode 100644 index 0000000000..33a82c6c65 --- /dev/null +++ b/modules/tests/shared/src/test/scala/coursier/test/IvyXmlParsingTests.scala @@ -0,0 +1,49 @@ +package coursier +package test + +import coursier.core.Versions +import coursier.core.compatibility._ +import coursier.ivy.IvyXml +import utest._ + +object IvyXmlParsingTests extends TestSuite { + val tests = Tests { + 'infoWithHomePage { + // slice of https://dl.bintray.com/sbt/sbt-plugin-releases/com.github.gseitz/sbt-release/scala_2.12/sbt_1.0/1.0.12/ivys/ivy.xml + val node = """ + + + + + sbt-release + + + + """ + + val result = IvyXml.project(xmlParseDom(node).right.get).right.map(_.info) + val expected = Right(Info("sbt-release", "https://github.com/sbt/sbt-release", + List(("Apache-2.0", Some("http://www.apache.org/licenses/LICENSE-2.0"))), Nil, + Some(Versions.DateTime(2019, 10, 16, 12, 26, 29)), None)) + + assert(result == expected) + } + + 'infoWithoutHomePage { + val node = """ + + + + sbt-release + + + + """ + + val result = IvyXml.project(xmlParseDom(node).right.get).right.map(_.info) + val expected = Right(Info("sbt-release", "", Nil, Nil, None, None)) + + assert(result == expected) + } + } +}