@@ -97,10 +97,49 @@ func TestParsePackage(t *testing.T) {
9797		assert .Equal (t , packageDescription , p .Metadata .Description )
9898		assert .ElementsMatch (t , []string {"swift" , "package" }, p .Metadata .Keywords )
9999		assert .Equal (t , packageLicense , p .Metadata .License )
100+ 		assert .Equal (t , packageAuthor , p .Metadata .Author .Name )
100101		assert .Equal (t , packageAuthor , p .Metadata .Author .GivenName )
101102		assert .Equal (t , packageRepositoryURL , p .Metadata .RepositoryURL )
102103		assert .ElementsMatch (t , []string {packageRepositoryURL }, p .RepositoryURLs )
103104	})
105+ 
106+ 	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" ),
109+ 		})
110+ 
111+ 		authorName  :=  "John Doe" 
112+ 		p , err  :=  ParsePackage (
113+ 			data ,
114+ 			data .Size (),
115+ 			strings .NewReader (`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","author":{"name":"` + authorName + `","givenName":"John","familyName":"Doe"}}` ),
116+ 		)
117+ 		assert .NotNil (t , p )
118+ 		assert .NoError (t , err )
119+ 
120+ 		assert .Equal (t , authorName , p .Metadata .Author .Name )
121+ 		assert .Equal (t , "John" , p .Metadata .Author .GivenName )
122+ 		assert .Equal (t , "Doe" , p .Metadata .Author .FamilyName )
123+ 	})
124+ 
125+ 	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" ),
128+ 		})
129+ 
130+ 		// Test with only individual name components - Name should be auto-generated 
131+ 		p , err  :=  ParsePackage (
132+ 			data ,
133+ 			data .Size (),
134+ 			strings .NewReader (`{"author":{"givenName":"John","middleName":"Q","familyName":"Doe"}}` ),
135+ 		)
136+ 		assert .NotNil (t , p )
137+ 		assert .NoError (t , err )
138+ 		assert .Equal (t , "John Q Doe" , p .Metadata .Author .Name )
139+ 		assert .Equal (t , "John" , p .Metadata .Author .GivenName )
140+ 		assert .Equal (t , "Q" , p .Metadata .Author .MiddleName )
141+ 		assert .Equal (t , "Doe" , p .Metadata .Author .FamilyName )
142+ 	})
104143}
105144
106145func  TestTrimmedVersionString (t  * testing.T ) {
@@ -142,3 +181,43 @@ func TestTrimmedVersionString(t *testing.T) {
142181		assert .Equal (t , c .Expected , TrimmedVersionString (c .Version ))
143182	}
144183}
184+ 
185+ func  TestPersonNameString (t  * testing.T ) {
186+ 	cases  :=  []struct  {
187+ 		Name      string 
188+ 		Person    Person 
189+ 		Expected  string 
190+ 	}{
191+ 		{
192+ 			Name :     "GivenNameOnly" ,
193+ 			Person :   Person {GivenName : "John" },
194+ 			Expected : "John" ,
195+ 		},
196+ 		{
197+ 			Name :     "GivenAndFamily" ,
198+ 			Person :   Person {GivenName : "John" , FamilyName : "Doe" },
199+ 			Expected : "John Doe" ,
200+ 		},
201+ 		{
202+ 			Name :     "FullName" ,
203+ 			Person :   Person {GivenName : "John" , MiddleName : "Q" , FamilyName : "Doe" },
204+ 			Expected : "John Q Doe" ,
205+ 		},
206+ 		{
207+ 			Name :     "MiddleAndFamily" ,
208+ 			Person :   Person {MiddleName : "Q" , FamilyName : "Doe" },
209+ 			Expected : "Q Doe" ,
210+ 		},
211+ 		{
212+ 			Name :     "Empty" ,
213+ 			Person :   Person {},
214+ 			Expected : "" ,
215+ 		},
216+ 	}
217+ 
218+ 	for  _ , c  :=  range  cases  {
219+ 		t .Run (c .Name , func (t  * testing.T ) {
220+ 			assert .Equal (t , c .Expected , c .Person .String ())
221+ 		})
222+ 	}
223+ }
0 commit comments