]> git.lizzy.rs Git - micro.git/blob - cmd/micro/pluginmanager_test.go
Merge remote-tracking branch 'zyedidia/master' into pm
[micro.git] / cmd / micro / pluginmanager_test.go
1 package main
2
3 import (
4         "encoding/json"
5         "github.com/blang/semver"
6         "testing"
7 )
8
9 func TestDependencyResolving(t *testing.T) {
10         js := `
11 [{
12   "Name": "Foo",
13   "Versions": [{ "Version": "1.0.0" }, { "Version": "1.5.0" },{ "Version": "2.0.0" }]
14 }, {
15   "Name": "Bar",
16   "Versions": [{ "Version": "1.0.0", "Require": {"Foo": ">1.0.0 <2.0.0"} }]
17 }, {
18   "Name": "Unresolvable",
19   "Versions": [{ "Version": "1.0.0", "Require": {"Foo": "<=1.0.0", "Bar": ">0.0.0"} }]
20         }]
21 `
22         var all PluginPackages
23         err := json.Unmarshal([]byte(js), &all)
24         if err != nil {
25                 t.Error(err)
26         }
27         selected, err := all.Resolve(PluginVersions{}, PluginDependencies{
28                 &PluginDependency{"Bar", semver.MustParseRange(">=1.0.0")},
29         })
30
31         check := func(name, version string) {
32                 v := selected.find(name)
33                 expected := semver.MustParse(version)
34                 if v == nil {
35                         t.Errorf("Failed to resolve %s", name)
36                 } else if expected.NE(v.Version) {
37                         t.Errorf("%s resolved in wrong version got %s", name, v)
38                 }
39         }
40
41         if err != nil {
42                 t.Error(err)
43         } else {
44                 check("Foo", "1.5.0")
45                 check("Bar", "1.0.0")
46         }
47
48         selected, err = all.Resolve(PluginVersions{}, PluginDependencies{
49                 &PluginDependency{"Unresolvable", semver.MustParseRange(">0.0.0")},
50         })
51         if err == nil {
52                 t.Error("Unresolvable package resolved:", selected)
53         }
54 }