@@ -34,112 +34,6 @@ func TestRoomServe(t *testing.T) {
3434 }
3535}
3636
37- /*
38- func TestIgnore(t *testing.T) {
39- var buffer []byte
40-
41- ch := NewRoom()
42- go ch.Serve()
43- defer ch.Close()
44-
45- // Create 3 users, join the room and clear their screen buffers
46- users := make([]ScreenedUser, 3)
47- for i := 0; i < 3; i++ {
48- screen := &MockScreen{}
49- user := message.NewScreen(fmt.Sprintf("user%d", i), screen)
50- users[i] = ScreenedUser{
51- user: user,
52- screen: screen,
53- }
54-
55- _, err := ch.Join(user)
56- if err != nil {
57- t.Fatal(err)
58- }
59- }
60-
61- for _, u := range users {
62- for i := 0; i < 3; i++ {
63- u.user.HandleMsg(u.user.ConsumeOne())
64- u.screen.Read(&buffer)
65- }
66- }
67-
68- // Use some handy variable names for distinguish between roles
69- ignorer := users[0]
70- ignored := users[1]
71- other := users[2]
72-
73- // test ignoring unexisting user
74- if err := sendCommand("/ignore test", ignorer, ch, &buffer); err != nil {
75- t.Fatal(err)
76- }
77- expectOutput(t, buffer, "-> Err: user not found: test"+message.Newline)
78-
79- // test ignoring existing user
80- if err := sendCommand("/ignore "+ignored.user.Name(), ignorer, ch, &buffer); err != nil {
81- t.Fatal(err)
82- }
83- expectOutput(t, buffer, "-> Ignoring: "+ignored.user.Name()+message.Newline)
84-
85- // ignoring the same user twice returns an error message and doesn't add the user twice
86- if err := sendCommand("/ignore "+ignored.user.Name(), ignorer, ch, &buffer); err != nil {
87- t.Fatal(err)
88- }
89- expectOutput(t, buffer, "-> Err: user already ignored: user1"+message.Newline)
90- if ignoredList := ignorer.user.Ignored.ListPrefix(""); len(ignoredList) != 1 {
91- t.Fatalf("should have %d ignored users, has %d", 1, len(ignoredList))
92- }
93-
94- // when a message is sent from the ignored user, it is delivered to non-ignoring users
95- ch.Send(message.NewPublicMsg("hello", ignored.user))
96- other.user.HandleMsg(other.user.ConsumeOne())
97- other.screen.Read(&buffer)
98- expectOutput(t, buffer, ignored.user.Name()+": hello"+message.Newline)
99-
100- // ensure ignorer doesn't have received any message
101- if ignorer.user.HasMessages() {
102- t.Fatal("should not have messages")
103- }
104-
105- // `/ignore` returns a list of ignored users
106- if err := sendCommand("/ignore", ignorer, ch, &buffer); err != nil {
107- t.Fatal(err)
108- }
109- expectOutput(t, buffer, "-> 1 ignored: "+ignored.user.Name()+message.Newline)
110-
111- // `/unignore [USER]` removes the user from ignored ones
112- if err := sendCommand("/unignore "+ignored.user.Name(), users[0], ch, &buffer); err != nil {
113- t.Fatal(err)
114- }
115- expectOutput(t, buffer, "-> No longer ignoring: user1"+message.Newline)
116-
117- if err := sendCommand("/ignore", users[0], ch, &buffer); err != nil {
118- t.Fatal(err)
119- }
120- expectOutput(t, buffer, "-> 0 users ignored."+message.Newline)
121-
122- if ignoredList := ignorer.user.Ignored.ListPrefix(""); len(ignoredList) != 0 {
123- t.Fatalf("should have %d ignored users, has %d", 0, len(ignoredList))
124- }
125-
126- // after unignoring a user, its messages can be received again
127- ch.Send(message.NewPublicMsg("hello again!", ignored.user))
128-
129- // give some time for the channel to get the message
130- time.Sleep(100)
131-
132- // ensure ignorer has received the message
133- if !ignorer.user.HasMessages() {
134- // FIXME: This is flaky :/
135- t.Fatal("should have messages")
136- }
137- ignorer.user.HandleMsg(ignorer.user.ConsumeOne())
138- ignorer.screen.Read(&buffer)
139- expectOutput(t, buffer, ignored.user.Name()+": hello again!"+message.Newline)
140- }
141- */
142-
14337func expectOutput (t * testing.T , buffer []byte , expected string ) {
14438 bytes := []byte (expected )
14539 if ! reflect .DeepEqual (buffer , bytes ) {
@@ -185,6 +79,94 @@ func TestRoomJoin(t *testing.T) {
18579 }
18680}
18781
82+ func TestIgnore (t * testing.T ) {
83+ ch := NewRoom ()
84+ go ch .Serve ()
85+ defer ch .Close ()
86+
87+ addUser := func (name string ) (message.Author , <- chan []byte ) {
88+ s := & ChannelWriter {
89+ Chan : make (chan []byte , 3 ),
90+ }
91+ u := message .PipedScreen (name , s )
92+ u .SetConfig (message.UserConfig {
93+ Quiet : true ,
94+ })
95+ ch .Join (u )
96+ return u , s .Chan
97+ }
98+
99+ u_foo , m_foo := addUser ("foo" )
100+ u_bar , m_bar := addUser ("bar" )
101+ u_quux , m_quux := addUser ("quux" )
102+
103+ var expected , actual []byte
104+
105+ // foo ignores bar, quux hears both
106+ ch .Send (message .ParseInput ("/ignore bar" , u_foo ))
107+ expected = []byte ("-> Ignoring: bar" + message .Newline )
108+ actual = <- m_foo
109+ if ! reflect .DeepEqual (actual , expected ) {
110+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
111+ }
112+
113+ // bar and quux sends a message, quux hears bar, foo only hears quux
114+ ch .Send (message .ParseInput ("i am bar" , u_bar ))
115+ ch .Send (message .ParseInput ("i am quux" , u_quux ))
116+
117+ expected = []byte ("bar: i am bar" + message .Newline )
118+ actual = <- m_quux
119+ if ! reflect .DeepEqual (actual , expected ) {
120+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
121+ }
122+
123+ expected = []byte ("quux: i am quux" + message .Newline )
124+ actual = <- m_bar
125+ if ! reflect .DeepEqual (actual , expected ) {
126+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
127+ }
128+ actual = <- m_foo
129+ if ! reflect .DeepEqual (actual , expected ) {
130+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
131+ }
132+
133+ // foo sends a message, both quux and bar hear it
134+ ch .Send (message .ParseInput ("i am foo" , u_foo ))
135+ expected = []byte ("foo: i am foo" + message .Newline )
136+
137+ actual = <- m_quux
138+ if ! reflect .DeepEqual (actual , expected ) {
139+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
140+ }
141+ actual = <- m_bar
142+ if ! reflect .DeepEqual (actual , expected ) {
143+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
144+ }
145+
146+ // Confirm foo's message queue is still empty
147+ select {
148+ case actual = <- m_foo :
149+ t .Errorf ("foo's message queue is not empty: %q" , actual )
150+ default :
151+ // Pass.
152+ }
153+
154+ // Unignore and listen to bar again.
155+ ch .Send (message .ParseInput ("/unignore bar" , u_foo ))
156+ expected = []byte ("-> No longer ignoring: bar" + message .Newline )
157+ actual = <- m_foo
158+ if ! reflect .DeepEqual (actual , expected ) {
159+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
160+ }
161+
162+ ch .Send (message .ParseInput ("i am bar again" , u_bar ))
163+ expected = []byte ("bar: i am bar again" + message .Newline )
164+ actual = <- m_foo
165+ if ! reflect .DeepEqual (actual , expected ) {
166+ t .Errorf ("Got: %q; Expected: %q" , actual , expected )
167+ }
168+ }
169+
188170func TestRoomDoesntBroadcastAnnounceMessagesWhenQuiet (t * testing.T ) {
189171 msgs := make (chan message.Message )
190172 u := message .HandledScreen ("foo" , func (m message.Message ) error {
0 commit comments