5
"launchpad.net/unity-scope-libertine/internal/launchpad.net/go-unityscopes/v2"
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)
15
filter1.DisplayHints = scopes.FilterDisplayPrimary
16
filter1.AddOption("1", "Option 1")
17
filter1.AddOption("2", "Option 2")
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)
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"}})
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")
36
fstate := make(scopes.FilterState)
37
_, ok := fstate["route"]
38
c.Check(ok, Equals, false)
39
c.Check(filter1.HasActiveOption(fstate), Equals, false)
42
filter1.UpdateState(fstate, "1", true)
44
c.Check(ok, Equals, true)
45
c.Check(filter1.HasActiveOption(fstate), Equals, true)
47
active := filter1.ActiveOptions(fstate)
48
c.Check(len(active), Equals, 1)
49
c.Check(active, DeepEquals, []string{"1"})
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"})
57
// disable option1; filter state remains in the FilterState, just no options are selected
58
filter1.UpdateState(fstate, "2", false)
60
c.Check(ok, Equals, true)
61
active = filter1.ActiveOptions(fstate)
62
c.Check(len(active), Equals, 0)
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")
71
fstate := make(scopes.FilterState)
73
// enable option1 & option2
74
filter1.UpdateState(fstate, "1", true)
75
filter1.UpdateState(fstate, "2", true)
77
c.Check(ok, Equals, true)
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"})
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")
91
filter1.UpdateState(fstate, "2", false)
92
c.Check(0, Equals, len(filter1.ActiveOptions(fstate)))
94
filter1.UpdateState(fstate, "3", true)
95
filter1.UpdateState(fstate, "1", true)
97
active = filter1.ActiveOptions(fstate)
98
c.Check(len(active), Equals, 2)
99
c.Check(active, DeepEquals, []string{"1", "3"})
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"})
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"})
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"})
119
filter1.UpdateState(fstate, "2", true)
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"})
127
filter1.UpdateState(fstate, "1", true)
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"})
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"})
140
filter1.UpdateState(fstate, "2", false)
141
active = filter1.ActiveOptions(fstate)
142
c.Check(len(active), Equals, 0)
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")
151
fstate := make(scopes.FilterState)
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")