~kyrofa/unity-scope-libertine/add_debian_packaging

« back to all changes in this revision

Viewing changes to internal/launchpad.net/go-unityscopes/v2/option_selector_filter_test.go

  • Committer: Kyle Fazzari
  • Date: 2015-07-27 18:38:30 UTC
  • Revision ID: kyle@canonical.com-20150727183830-390on30ba491p1aq
Vendor dependencies.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package scopes_test
 
2
 
 
3
import (
 
4
        . "gopkg.in/check.v1"
 
5
        "launchpad.net/unity-scope-libertine/internal/launchpad.net/go-unityscopes/v2"
 
6
)
 
7
 
 
8
func (s *S) TestOptionSelectorFilter(c *C) {
 
9
        filter1 := scopes.NewOptionSelectorFilter("f1", "Options", false)
 
10
        c.Check("f1", Equals, filter1.Id)
 
11
        c.Check("Options", Equals, filter1.Label)
 
12
        c.Check(filter1.MultiSelect, Equals, false)
 
13
        c.Check(filter1.DisplayHints, Equals, scopes.FilterDisplayDefault)
 
14
 
 
15
        filter1.DisplayHints = scopes.FilterDisplayPrimary
 
16
        filter1.AddOption("1", "Option 1")
 
17
        filter1.AddOption("2", "Option 2")
 
18
 
 
19
        c.Check(filter1.DisplayHints, Equals, scopes.FilterDisplayPrimary)
 
20
        c.Check(2, Equals, len(filter1.Options))
 
21
        c.Check("1", Equals, filter1.Options[0].Id)
 
22
        c.Check("Option 1", Equals, filter1.Options[0].Label)
 
23
        c.Check("2", Equals, filter1.Options[1].Id)
 
24
        c.Check("Option 2", Equals, filter1.Options[1].Label)
 
25
 
 
26
        // verify the list of options
 
27
        c.Check(len(filter1.Options), Equals, 2)
 
28
        c.Check(filter1.Options, DeepEquals, []scopes.FilterOption{scopes.FilterOption{"1", "Option 1"}, scopes.FilterOption{"2", "Option 2"}})
 
29
}
 
30
 
 
31
func (s *S) TestOptionSelectorFilterSingleSelection(c *C) {
 
32
        filter1 := scopes.NewOptionSelectorFilter("f1", "Options", false)
 
33
        filter1.AddOption("1", "Option 1")
 
34
        filter1.AddOption("2", "Option 2")
 
35
 
 
36
        fstate := make(scopes.FilterState)
 
37
        _, ok := fstate["route"]
 
38
        c.Check(ok, Equals, false)
 
39
        c.Check(filter1.HasActiveOption(fstate), Equals, false)
 
40
 
 
41
        // enable option1
 
42
        filter1.UpdateState(fstate, "1", true)
 
43
        _, ok = fstate["f1"]
 
44
        c.Check(ok, Equals, true)
 
45
        c.Check(filter1.HasActiveOption(fstate), Equals, true)
 
46
 
 
47
        active := filter1.ActiveOptions(fstate)
 
48
        c.Check(len(active), Equals, 1)
 
49
        c.Check(active, DeepEquals, []string{"1"})
 
50
 
 
51
        // enable option2, option1 get disabled
 
52
        filter1.UpdateState(fstate, "2", true)
 
53
        active = filter1.ActiveOptions(fstate)
 
54
        c.Check(len(active), Equals, 1)
 
55
        c.Check(active, DeepEquals, []string{"2"})
 
56
 
 
57
        // disable option1; filter state remains in the FilterState, just no options are selected
 
58
        filter1.UpdateState(fstate, "2", false)
 
59
        _, ok = fstate["f1"]
 
60
        c.Check(ok, Equals, true)
 
61
        active = filter1.ActiveOptions(fstate)
 
62
        c.Check(len(active), Equals, 0)
 
63
}
 
64
 
 
65
func (s *S) TestOptionSelectorFilterMultiSelection(c *C) {
 
66
        filter1 := scopes.NewOptionSelectorFilter("f1", "Options", true)
 
67
        filter1.AddOption("1", "Option 1")
 
68
        filter1.AddOption("2", "Option 2")
 
69
        filter1.AddOption("3", "Option 3")
 
70
 
 
71
        fstate := make(scopes.FilterState)
 
72
 
 
73
        // enable option1 & option2
 
74
        filter1.UpdateState(fstate, "1", true)
 
75
        filter1.UpdateState(fstate, "2", true)
 
76
        _, ok := fstate["f1"]
 
77
        c.Check(ok, Equals, true)
 
78
 
 
79
        c.Check(filter1.HasActiveOption(fstate), Equals, true)
 
80
        active := filter1.ActiveOptions(fstate)
 
81
        c.Check(len(active), Equals, 2)
 
82
        c.Check(active, DeepEquals, []string{"1", "2"})
 
83
 
 
84
        // disable option1
 
85
        filter1.UpdateState(fstate, "1", false)
 
86
        active = filter1.ActiveOptions(fstate)
 
87
        c.Check(len(active), Equals, 1)
 
88
        c.Check(active[0], Equals, "2")
 
89
 
 
90
        // disable option2
 
91
        filter1.UpdateState(fstate, "2", false)
 
92
        c.Check(0, Equals, len(filter1.ActiveOptions(fstate)))
 
93
 
 
94
        filter1.UpdateState(fstate, "3", true)
 
95
        filter1.UpdateState(fstate, "1", true)
 
96
 
 
97
        active = filter1.ActiveOptions(fstate)
 
98
        c.Check(len(active), Equals, 2)
 
99
        c.Check(active, DeepEquals, []string{"1", "3"})
 
100
 
 
101
        // add existing item
 
102
        filter1.UpdateState(fstate, "1", true)
 
103
        active = filter1.ActiveOptions(fstate)
 
104
        c.Check(len(active), Equals, 2)
 
105
        c.Check(active, DeepEquals, []string{"1", "3"})
 
106
 
 
107
        // add in the middle
 
108
        filter1.UpdateState(fstate, "2", true)
 
109
        active = filter1.ActiveOptions(fstate)
 
110
        c.Check(len(active), Equals, 3)
 
111
        c.Check(active, DeepEquals, []string{"1", "2", "3"})
 
112
 
 
113
        // erase in the middle
 
114
        filter1.UpdateState(fstate, "2", false)
 
115
        active = filter1.ActiveOptions(fstate)
 
116
        c.Check(len(active), Equals, 2)
 
117
        c.Check(active, DeepEquals, []string{"1", "3"})
 
118
 
 
119
        filter1.UpdateState(fstate, "2", true)
 
120
 
 
121
        // erase at the beginning
 
122
        filter1.UpdateState(fstate, "1", false)
 
123
        active = filter1.ActiveOptions(fstate)
 
124
        c.Check(len(active), Equals, 2)
 
125
        c.Check(active, DeepEquals, []string{"2", "3"})
 
126
 
 
127
        filter1.UpdateState(fstate, "1", true)
 
128
 
 
129
        // erase at the end
 
130
        filter1.UpdateState(fstate, "3", false)
 
131
        active = filter1.ActiveOptions(fstate)
 
132
        c.Check(len(active), Equals, 2)
 
133
        c.Check(active, DeepEquals, []string{"1", "2"})
 
134
 
 
135
        filter1.UpdateState(fstate, "1", false)
 
136
        active = filter1.ActiveOptions(fstate)
 
137
        c.Check(len(active), Equals, 1)
 
138
        c.Check(active, DeepEquals, []string{"2"})
 
139
 
 
140
        filter1.UpdateState(fstate, "2", false)
 
141
        active = filter1.ActiveOptions(fstate)
 
142
        c.Check(len(active), Equals, 0)
 
143
}
 
144
 
 
145
func (s *S) TestOptionSelectorFilterBadOption(c *C) {
 
146
        filter1 := scopes.NewOptionSelectorFilter("f1", "Options", true)
 
147
        filter1.AddOption("1", "Option 1")
 
148
        filter1.AddOption("2", "Option 2")
 
149
        filter1.AddOption("3", "Option 3")
 
150
 
 
151
        fstate := make(scopes.FilterState)
 
152
 
 
153
        c.Assert(func() { filter1.UpdateState(fstate, "5", true) }, PanicMatches, "invalid option ID")
 
154
        c.Assert(func() { filter1.UpdateState(fstate, "5", false) }, PanicMatches, "invalid option ID")
 
155
}