44package swift
55
66import (
7- "archive/zip"
87 "bytes"
98 "strings"
109 "testing"
1110
11+ "code.gitea.io/gitea/modules/test"
12+
1213 "github.com/hashicorp/go-version"
1314 "github.com/stretchr/testify/assert"
1415)
@@ -18,36 +19,24 @@ const (
1819 packageVersion = "1.0.1"
1920 packageDescription = "Package Description"
2021 packageRepositoryURL = "https://gitea.io/gitea/gitea"
22+ packageLicenseURL = "https://opensource.org/license/mit"
2123 packageAuthor = "KN4CK3R"
2224 packageLicense = "MIT"
2325)
2426
2527func TestParsePackage (t * testing.T ) {
26- createArchive := func (files map [string ][]byte ) * bytes.Reader {
27- var buf bytes.Buffer
28- zw := zip .NewWriter (& buf )
29- for filename , content := range files {
30- w , _ := zw .Create (filename )
31- w .Write (content )
32- }
33- zw .Close ()
34- return bytes .NewReader (buf .Bytes ())
35- }
36-
3728 t .Run ("MissingManifestFile" , func (t * testing.T ) {
38- data := createArchive (map [string ][]byte {"dummy.txt" : {}})
39-
40- p , err := ParsePackage (data , data .Size (), nil )
29+ data := test .WriteZipArchive (map [string ]string {"dummy.txt" : "" })
30+ p , err := ParsePackage (bytes .NewReader (data .Bytes ()), int64 (data .Len ()), nil )
4131 assert .Nil (t , p )
4232 assert .ErrorIs (t , err , ErrMissingManifestFile )
4333 })
4434
4535 t .Run ("ManifestFileTooLarge" , func (t * testing.T ) {
46- data := createArchive (map [string ][] byte {
47- "Package.swift" : make ([] byte , maxManifestFileSize + 1 ),
36+ data := test . WriteZipArchive (map [string ]string {
37+ "Package.swift" : strings . Repeat ( "a" , maxManifestFileSize + 1 ),
4838 })
49-
50- p , err := ParsePackage (data , data .Size (), nil )
39+ p , err := ParsePackage (bytes .NewReader (data .Bytes ()), int64 (data .Len ()), nil )
5140 assert .Nil (t , p )
5241 assert .ErrorIs (t , err , ErrManifestFileTooLarge )
5342 })
@@ -56,12 +45,12 @@ func TestParsePackage(t *testing.T) {
5645 content1 := "// swift-tools-version:5.7\n //\n // Package.swift"
5746 content2 := "// swift-tools-version:5.6\n //\n // Package@swift-5.6.swift"
5847
59- data := createArchive (map [string ][] byte {
60- "Package.swift" : [] byte ( content1 ) ,
61- "Package@swift-5.5.swift" : [] byte ( content2 ) ,
48+ data := test . WriteZipArchive (map [string ]string {
49+ "Package.swift" : content1 ,
50+ "Package@swift-5.5.swift" : content2 ,
6251 })
6352
64- p , err := ParsePackage (data , data .Size ( ), nil )
53+ p , err := ParsePackage (bytes . NewReader ( data . Bytes ()), int64 ( data .Len () ), nil )
6554 assert .NotNil (t , p )
6655 assert .NoError (t , err )
6756
@@ -77,14 +66,13 @@ func TestParsePackage(t *testing.T) {
7766 })
7867
7968 t .Run ("WithMetadata" , func (t * testing.T ) {
80- data := createArchive (map [string ][] byte {
81- "Package.swift" : [] byte ( "// swift-tools-version:5.7\n //\n // Package.swift" ) ,
69+ data := test . WriteZipArchive (map [string ]string {
70+ "Package.swift" : "// swift-tools-version:5.7\n //\n // Package.swift" ,
8271 })
8372
8473 p , err := ParsePackage (
85- data ,
86- data .Size (),
87- strings .NewReader (`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","keywords":["swift","package"],"license":"` + packageLicense + `","codeRepository":"` + packageRepositoryURL + `","author":{"givenName":"` + packageAuthor + `"},"repositoryURLs":["` + packageRepositoryURL + `"]}` ),
74+ bytes .NewReader (data .Bytes ()), int64 (data .Len ()),
75+ strings .NewReader (`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","keywords":["swift","package"],"license":"` + packageLicense + `","licenseURL":"` + packageLicenseURL + `","codeRepository":"` + packageRepositoryURL + `","author":{"givenName":"` + packageAuthor + `"},"repositoryURLs":["` + packageRepositoryURL + `"]}` ),
8876 )
8977 assert .NotNil (t , p )
9078 assert .NoError (t , err )
@@ -97,21 +85,21 @@ func TestParsePackage(t *testing.T) {
9785 assert .Equal (t , packageDescription , p .Metadata .Description )
9886 assert .ElementsMatch (t , []string {"swift" , "package" }, p .Metadata .Keywords )
9987 assert .Equal (t , packageLicense , p .Metadata .License )
88+ assert .Equal (t , packageLicenseURL , p .Metadata .LicenseURL )
10089 assert .Equal (t , packageAuthor , p .Metadata .Author .Name )
10190 assert .Equal (t , packageAuthor , p .Metadata .Author .GivenName )
10291 assert .Equal (t , packageRepositoryURL , p .Metadata .RepositoryURL )
10392 assert .ElementsMatch (t , []string {packageRepositoryURL }, p .RepositoryURLs )
10493 })
10594
10695 t .Run ("WithExplicitNameField" , func (t * testing.T ) {
107- data := createArchive (map [string ][] byte {
108- "Package.swift" : [] byte ( "// swift-tools-version:5.7\n //\n // Package.swift" ) ,
96+ data := test . WriteZipArchive (map [string ]string {
97+ "Package.swift" : "// swift-tools-version:5.7\n //\n // Package.swift" ,
10998 })
11099
111100 authorName := "John Doe"
112101 p , err := ParsePackage (
113- data ,
114- data .Size (),
102+ bytes .NewReader (data .Bytes ()), int64 (data .Len ()),
115103 strings .NewReader (`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","author":{"name":"` + authorName + `","givenName":"John","familyName":"Doe"}}` ),
116104 )
117105 assert .NotNil (t , p )
@@ -122,15 +110,30 @@ func TestParsePackage(t *testing.T) {
122110 assert .Equal (t , "Doe" , p .Metadata .Author .FamilyName )
123111 })
124112
113+ t .Run ("WithEmptyJSONMetadata" , func (t * testing.T ) {
114+ data := test .WriteZipArchive (map [string ]string {
115+ "Package.swift" : "// swift-tools-version:5.7\n //\n // Package.swift" ,
116+ })
117+
118+ p , err := ParsePackage (
119+ bytes .NewReader (data .Bytes ()), int64 (data .Len ()),
120+ strings .NewReader (`{}` ),
121+ )
122+ assert .NotNil (t , p )
123+ assert .NoError (t , err )
124+ assert .NotNil (t , p .Metadata )
125+ assert .Empty (t , p .Metadata .Author .Name )
126+ assert .Empty (t , p .RepositoryURLs )
127+ })
128+
125129 t .Run ("NameFieldGeneration" , func (t * testing.T ) {
126- data := createArchive (map [string ][] byte {
127- "Package.swift" : [] byte ( "// swift-tools-version:5.7\n //\n // Package.swift" ) ,
130+ data := test . WriteZipArchive (map [string ]string {
131+ "Package.swift" : "// swift-tools-version:5.7\n //\n // Package.swift" ,
128132 })
129133
130134 // Test with only individual name components - Name should be auto-generated
131135 p , err := ParsePackage (
132- data ,
133- data .Size (),
136+ bytes .NewReader (data .Bytes ()), int64 (data .Len ()),
134137 strings .NewReader (`{"author":{"givenName":"John","middleName":"Q","familyName":"Doe"}}` ),
135138 )
136139 assert .NotNil (t , p )
0 commit comments