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