mirror of
https://github.com/awalsh128/cache-apt-pkgs-action.git
synced 2026-01-22 19:19:16 +00:00
119 lines
2.9 KiB
Go
119 lines
2.9 KiB
Go
package pkgs
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// Test constants - meaningful names without "test" prefix
|
|
const (
|
|
package1 = "zlib=1.2.3"
|
|
package2 = "rolldice=1.16-1build3"
|
|
package3 = "apt=2.0.0"
|
|
)
|
|
|
|
func TestPackagesNewPackages_referenceNil_executesFail(t *testing.T) {
|
|
if NewPackages() == nil {
|
|
t.Fatal("NewPackages() returned nil")
|
|
}
|
|
}
|
|
|
|
func TestPackagesNewPackages_containsPackages_executesFail(t *testing.T) {
|
|
if NewPackages().Len() != 0 {
|
|
t.Errorf("NewPackages() returned non-empty Packages, actual length %d", NewPackages().Len())
|
|
}
|
|
}
|
|
|
|
func TestPackagesNewPackagesFromStrings(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
pkgs []string
|
|
expectedLen int
|
|
expectedOrder []string // expected order after sorting
|
|
}{
|
|
{
|
|
name: "Empty input",
|
|
pkgs: []string{},
|
|
expectedLen: 0,
|
|
expectedOrder: []string{},
|
|
},
|
|
{
|
|
name: "Single package",
|
|
pkgs: []string{package1},
|
|
expectedLen: 1,
|
|
expectedOrder: []string{package1},
|
|
},
|
|
{
|
|
name: "Multiple packages unsorted",
|
|
pkgs: []string{package2, package1, package3}, // rolldice, zlib, apt
|
|
expectedLen: 3,
|
|
expectedOrder: []string{
|
|
package3,
|
|
package2,
|
|
package1,
|
|
}, // apt, rolldice, zlib (sorted by name)
|
|
},
|
|
{
|
|
name: "Duplicate packages",
|
|
pkgs: []string{package1, package1, package3},
|
|
expectedLen: 2,
|
|
expectedOrder: []string{package3, package1},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
p := NewPackagesFromStrings(tt.pkgs...)
|
|
|
|
// TestPackages Len()
|
|
if actual := p.Len(); actual != tt.expectedLen {
|
|
t.Errorf("Len() = %v, expected %v", actual, tt.expectedLen)
|
|
}
|
|
|
|
// TestPackages Get() and verify order
|
|
for i := 0; i < p.Len(); i++ {
|
|
if i >= len(tt.expectedOrder) {
|
|
t.Errorf(
|
|
"Too many packages in result, extra package at index %d: %s",
|
|
i,
|
|
p.Get(i),
|
|
)
|
|
continue
|
|
}
|
|
if actual := p.Get(i); actual.String() != tt.expectedOrder[i] {
|
|
t.Errorf("Get(%d) = %v, expected %v", i, actual, tt.expectedOrder[i])
|
|
}
|
|
}
|
|
|
|
// TestPackages String()
|
|
expectedString := ""
|
|
if len(tt.expectedOrder) > 0 {
|
|
for i, pkg := range tt.expectedOrder {
|
|
if i > 0 {
|
|
expectedString += " " // Use space separator to match implementation
|
|
}
|
|
expectedString += pkg
|
|
}
|
|
}
|
|
if actual := p.String(); actual != expectedString {
|
|
t.Errorf("String() = %v, expected %v", actual, expectedString)
|
|
}
|
|
|
|
// TestPackages StringArray()
|
|
actualArray := p.StringArray()
|
|
if len(actualArray) != len(tt.expectedOrder) {
|
|
t.Errorf(
|
|
"StringArray() length = %v, expected %v",
|
|
len(actualArray),
|
|
len(tt.expectedOrder),
|
|
)
|
|
} else {
|
|
for i, expected := range tt.expectedOrder {
|
|
if actualArray[i] != expected {
|
|
t.Errorf("StringArray()[%d] = %v, expected %v", i, actualArray[i], expected)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|