mirror of
https://github.com/hanzoai/pack.git
synced 2026-09-30 23:43:13 +00:00
* refactor(node): check engines after file-based detection for package manager Engines are now considered only if file-based detection keeps default npm, so lockfiles/configs take precedence over engines as a hint. * feat: extract yarn version from package.json > engines > yarn * test: add bun version to bun test assertion * test: update snapshots * test: add engines version extraction test * test: assert against two distinct versions we couldn't do this before the recent testing harness improvement * test: snapshot update * fix: properly handle corepack version definitions * docs: update docs on node provider detection * docs: add docs command to claude
118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseSemver(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
version string
|
|
want *Semver
|
|
wantErr bool
|
|
errorPrefix string
|
|
}{
|
|
{
|
|
name: "basic semver",
|
|
version: "1.2.3",
|
|
want: &Semver{Major: 1, Minor: 2, Patch: 3},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "with v prefix",
|
|
version: "v1.2.3",
|
|
want: &Semver{Major: 1, Minor: 2, Patch: 3},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "with other prefix",
|
|
version: "ruby-2.3.4",
|
|
want: nil,
|
|
wantErr: true,
|
|
errorPrefix: "invalid major version",
|
|
},
|
|
{
|
|
name: "with alpha suffix",
|
|
version: "1.2.3-alpha",
|
|
want: &Semver{Major: 1, Minor: 2, Patch: 3},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "with beta suffix",
|
|
version: "1.2.3-beta",
|
|
want: &Semver{Major: 1, Minor: 2, Patch: 3},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "two parts",
|
|
version: "1.2",
|
|
want: &Semver{Major: 1, Minor: 2, Patch: 0},
|
|
},
|
|
{
|
|
name: "invalid major",
|
|
version: "a.2.3",
|
|
want: nil,
|
|
wantErr: true,
|
|
errorPrefix: "invalid major version",
|
|
},
|
|
{
|
|
name: "invalid minor",
|
|
version: "1.b.3",
|
|
want: nil,
|
|
wantErr: true,
|
|
errorPrefix: "invalid minor version",
|
|
},
|
|
{
|
|
name: "invalid patch",
|
|
version: "1.2.c",
|
|
want: nil,
|
|
wantErr: true,
|
|
errorPrefix: "invalid patch version",
|
|
},
|
|
{
|
|
name: "invalid",
|
|
version: "1-23",
|
|
want: nil,
|
|
wantErr: true,
|
|
errorPrefix: "invalid major version",
|
|
},
|
|
{
|
|
name: "corepack version",
|
|
version: "[email protected]",
|
|
want: &Semver{
|
|
Major: 8,
|
|
Minor: 15,
|
|
Patch: 4,
|
|
},
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := ParseSemver(tt.version)
|
|
|
|
// Check error cases
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("ParseSemver() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
|
|
// If we expect an error, check the error message prefix
|
|
if tt.wantErr && err != nil {
|
|
if !strings.HasPrefix(err.Error(), tt.errorPrefix) {
|
|
t.Errorf("ParseSemver() error = %v, wantErrPrefix %v", err, tt.errorPrefix)
|
|
}
|
|
return
|
|
}
|
|
|
|
// Check valid result cases
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("ParseSemver() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|