micro/cmd/micro/pluginmanager_test.go

56 lines
1.3 KiB
Go
Raw Normal View History

2016-09-23 08:03:42 +00:00
package main
import (
"github.com/blang/semver"
"testing"
2016-09-27 11:28:32 +00:00
2016-10-02 05:57:39 +00:00
"github.com/zyedidia/json5/encoding/json5"
2016-09-23 08:03:42 +00:00
)
func TestDependencyResolving(t *testing.T) {
js := `
[{
"Name": "Foo",
"Versions": [{ "Version": "1.0.0" }, { "Version": "1.5.0" },{ "Version": "2.0.0" }]
}, {
"Name": "Bar",
"Versions": [{ "Version": "1.0.0", "Require": {"Foo": ">1.0.0 <2.0.0"} }]
}, {
"Name": "Unresolvable",
"Versions": [{ "Version": "1.0.0", "Require": {"Foo": "<=1.0.0", "Bar": ">0.0.0"} }]
}]
`
var all PluginPackages
2016-09-27 11:28:32 +00:00
err := json5.Unmarshal([]byte(js), &all)
2016-09-23 08:03:42 +00:00
if err != nil {
t.Error(err)
}
2016-09-26 15:51:50 +00:00
selected, err := all.Resolve(PluginVersions{}, PluginDependencies{
2016-09-23 08:03:42 +00:00
&PluginDependency{"Bar", semver.MustParseRange(">=1.0.0")},
})
check := func(name, version string) {
2016-09-26 15:51:50 +00:00
v := selected.find(name)
2016-09-23 08:03:42 +00:00
expected := semver.MustParse(version)
if v == nil {
t.Errorf("Failed to resolve %s", name)
} else if expected.NE(v.Version) {
t.Errorf("%s resolved in wrong version got %s", name, v)
}
}
if err != nil {
t.Error(err)
} else {
check("Foo", "1.5.0")
check("Bar", "1.0.0")
}
2016-09-26 15:51:50 +00:00
selected, err = all.Resolve(PluginVersions{}, PluginDependencies{
2016-09-23 08:03:42 +00:00
&PluginDependency{"Unresolvable", semver.MustParseRange(">0.0.0")},
})
if err == nil {
t.Error("Unresolvable package resolved:", selected)
}
}