gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package maven
  4. import (
  5. "strings"
  6. "testing"
  7. "code.gitea.io/gitea/modules/util"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. "golang.org/x/text/encoding/charmap"
  11. )
  12. const (
  13. groupID = "org.gitea"
  14. artifactID = "my-project"
  15. version = "1.0.1"
  16. name = "My Gitea Project"
  17. description = "Package Description"
  18. projectURL = "https://gitea.io"
  19. license = "MIT"
  20. dependencyGroupID = "org.gitea.core"
  21. dependencyArtifactID = "git"
  22. dependencyVersion = "5.0.0"
  23. )
  24. const pomContent = `<?xml version="1.0"?>
  25. <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  26. <groupId>` + groupID + `</groupId>
  27. <artifactId>` + artifactID + `</artifactId>
  28. <version>` + version + `</version>
  29. <name>` + name + `</name>
  30. <description>` + description + `</description>
  31. <url>` + projectURL + `</url>
  32. <licenses>
  33. <license>
  34. <name>` + license + `</name>
  35. </license>
  36. </licenses>
  37. <dependencies>
  38. <dependency>
  39. <groupId>` + dependencyGroupID + `</groupId>
  40. <artifactId>` + dependencyArtifactID + `</artifactId>
  41. <version>` + dependencyVersion + `</version>
  42. </dependency>
  43. </dependencies>
  44. </project>`
  45. func TestParsePackageMetaData(t *testing.T) {
  46. t.Run("InvalidFile", func(t *testing.T) {
  47. m, err := ParsePackageMetaData(strings.NewReader(""))
  48. assert.Nil(t, m)
  49. assert.Error(t, err)
  50. })
  51. t.Run("Valid", func(t *testing.T) {
  52. m, err := ParsePackageMetaData(strings.NewReader(pomContent))
  53. assert.NoError(t, err)
  54. assert.NotNil(t, m)
  55. assert.Equal(t, groupID, m.GroupID)
  56. assert.Equal(t, artifactID, m.ArtifactID)
  57. assert.Equal(t, name, m.Name)
  58. assert.Equal(t, description, m.Description)
  59. assert.Equal(t, projectURL, m.ProjectURL)
  60. assert.Len(t, m.Licenses, 1)
  61. assert.Equal(t, license, m.Licenses[0])
  62. assert.Len(t, m.Dependencies, 1)
  63. assert.Equal(t, dependencyGroupID, m.Dependencies[0].GroupID)
  64. assert.Equal(t, dependencyArtifactID, m.Dependencies[0].ArtifactID)
  65. assert.Equal(t, dependencyVersion, m.Dependencies[0].Version)
  66. })
  67. t.Run("Encoding", func(t *testing.T) {
  68. // UTF-8 is default but the metadata could be encoded differently
  69. pomContent8859_1, err := charmap.ISO8859_1.NewEncoder().String(
  70. strings.ReplaceAll(
  71. pomContent,
  72. `<?xml version="1.0"?>`,
  73. `<?xml version="1.0" encoding="ISO-8859-1"?>`,
  74. ),
  75. )
  76. assert.NoError(t, err)
  77. m, err := ParsePackageMetaData(strings.NewReader(pomContent8859_1))
  78. assert.NoError(t, err)
  79. assert.NotNil(t, m)
  80. })
  81. t.Run("ParentInherit", func(t *testing.T) {
  82. pom := `<?xml version="1.0"?>
  83. <project>
  84. <modelVersion>4.0.0</modelVersion>
  85. <parent>
  86. <groupId>com.mycompany.app</groupId>
  87. <artifactId>my-app</artifactId>
  88. <version>1.0-SNAPSHOT</version>
  89. </parent>
  90. <artifactId>submodule1</artifactId>
  91. </project>
  92. `
  93. m, err := ParsePackageMetaData(strings.NewReader(pom))
  94. require.NoError(t, err)
  95. require.NotNil(t, m)
  96. assert.Equal(t, "com.mycompany.app", m.GroupID)
  97. assert.Equal(t, "submodule1", m.ArtifactID)
  98. })
  99. t.Run("ParentInherit", func(t *testing.T) {
  100. pom := `<?xml version="1.0"?>
  101. <project>
  102. <modelVersion>4.0.0</modelVersion>
  103. <artifactId></artifactId>
  104. </project>
  105. `
  106. _, err := ParsePackageMetaData(strings.NewReader(pom))
  107. require.ErrorIs(t, err, util.ErrInvalidArgument)
  108. })
  109. }