OSDN Git Service

Improved the test case.
[shogi-server/shogi-server.git] / test / TC_functional.rb
1 require "baseclient"
2 require "kconv"
3
4 class TestClientAtmark < BaseClient
5   # login with trip
6   def login
7     cmd "LOGIN testsente@p1 dummy x1"
8     cmd "%%GAME testcase-1500-0 +"
9     
10     cmd2 "LOGIN testgote@p2 dummy2 x1"
11     cmd2 "%%CHALLENGE testcase-1500-0 -"
12   end
13
14   def test_toryo
15     result, result2 = handshake do
16       cmd  "%TORYO"
17     end
18     assert(/#LOSE/ =~ result)
19     assert(/#WIN/  =~ result2)
20   end
21 end
22
23
24 class TestComment < BaseClient
25   def test_toryo
26     result, result2 = handshake do
27       cmd  "%TORYO"
28     end
29     assert(/#LOSE/ =~ result)
30     assert(/#WIN/  =~ result2)
31   end
32
33   def test_inline_comment
34     result, result2 = handshake do
35       cmd "+2625FU,'comment"
36       cmd2 "-2233KA"
37       cmd  "%TORYO"
38     end
39     assert(/#LOSE/ =~ result)
40     assert(/#WIN/  =~ result2)
41   end
42
43   def test_inline_comment_ja_euc
44     result, result2 = handshake do
45       cmd "+2625FU,'\93ú\96{\8cêEUC"
46       cmd2 "-2233KA"
47       cmd  "%TORYO"
48     end
49     assert(/#LOSE/ =~ result)
50     assert(/#WIN/  =~ result2)
51   end
52
53   def test_inline_comment_ja_utf8
54     result, result2 = handshake do
55       cmd "+2625FU,'\93ú\96{\8cêUTF8".toutf8
56       cmd2 "-2233KA"
57       cmd  "%TORYO"
58     end
59     assert(/#LOSE/ =~ result)
60     assert(/#WIN/  =~ result2)
61   end
62 end
63
64
65 class TestWhiteMovesBlack < BaseClient
66   def test_white_moves_black
67     result, result2 = handshake do
68       cmd  "+9796FU"
69       cmd2 "+1716FU"
70       sleep 0.5
71     end
72     assert(/#ILLEGAL_MOVE/ =~ result)
73     assert(/#WIN/  =~ result)
74     assert(/#ILLEGAL_MOVE/ =~ result2)
75     assert(/#LOSE/ =~ result2)
76   end
77 end
78
79
80 class CSABaseClient < BaseClient
81   ##
82   # In CSA mode, the server decides sente or gote at random; and sockets are closed
83   # just after the game ends (i.e. %TORYO is sent)
84   # 
85   def handshake
86     login
87
88     sleep 0.5 # wait for game matching
89
90     str  = cmd  "AGREE"
91     str2 = cmd2 "AGREE"
92
93     if /Your_Turn:\+/ =~ str
94       @sente = "cmd"
95       @sente_socket = @socket1
96       @gote  = "cmd2"
97       @gote_socket  = @socket2
98     else
99       @sente = "cmd2"
100       @sente_socket = @socket2
101       @gote  = "cmd"
102       @gote_socket  = @socket1
103     end
104
105     yield if block_given?
106     
107     result  = read_nonblock(@sente_socket)
108     result2 = read_nonblock(@gote_socket)
109     [result, result2]
110   end
111
112   def sente_cmd(str)
113     eval "#{@sente} \"#{str}\""
114   end
115
116   def gote_cmd(str)
117     eval "#{@gote} \"#{str}\""
118   end
119 end
120
121 class TestLoginCSAWithoutTripGoodGamename < CSABaseClient
122   def login
123     cmd  "LOGIN wo_trip_p1 testcase-1500-0"
124     cmd2 "LOGIN wo_trip_p2 testcase-1500-0"
125   end
126
127   def test_toryo
128     result, result2 = handshake do
129       sente_cmd("%TORYO")
130     end
131     assert(/#LOSE/ =~ result)
132     assert(/#WIN/  =~ result2)
133   end
134 end
135
136 class TestLoginCSAWithTripGoodGamename < CSABaseClient
137   def login
138     cmd  "LOGIN w_trip_p1 testcase-1500-0,atrip"
139     cmd2 "LOGIN w_trip_p2 testcase-1500-0,anothertrip"
140   end
141
142   def test_toryo
143     result, result2 = handshake do
144       sente_cmd "%TORYO"
145       sleep 0.5
146     end
147     assert(/#LOSE/ =~ result)
148     assert(/#WIN/  =~ result2)
149   end
150 end
151
152 class TestChallenge < CSABaseClient
153   def login
154     cmd  "LOGIN w_trip_p1 testcase-1500-0,atrip"
155     cmd2 "LOGIN w_trip_p2 testcase-1500-0,anothertrip"
156   end
157
158   def test_toryo
159     result, result2 = handshake do
160       sente_cmd "CHALLENGE"
161       gote_cmd  "CHALLENGE"
162     end
163     assert_match(/CHALLENGE ACCEPTED/, result)
164     assert_match(/CHALLENGE ACCEPTED/, result2)
165   end
166 end
167
168 class TestFloodgateGame < BaseClient
169   def login
170     classname = self.class.name
171     gamename  = "floodgate-900-0"
172     cmd "LOGIN sente#{classname} dummy x1"
173     cmd "%%GAME #{gamename} *"
174     
175     cmd2 "LOGIN gote#{classname} dummy2 x1"
176     cmd2 "%%GAME #{gamename} *"
177   end
178
179   def test_game_wait
180     login
181     assert(true)
182   end
183 end
184
185 class TestFloodgateGameWrongTebam < BaseClient
186   def login
187     classname = self.class.name
188     gamename  = "floodgate-900-0"
189     cmd "LOGIN sente#{classname} dummy x1"
190     cmd("%%GAME #{gamename} +")
191   end
192
193   def test_game_wait
194     login
195     sleep 1
196     reply = read_nonblock(@socket1)
197     assert_match(/##\[ERROR\] You are not allowed/m, reply)
198   end
199 end
200
201 class TestDuplicatedMoves < BaseClient
202   def test_defer
203     result, result2 = handshake do
204       cmd  "+7776FU"
205       cmd  "+8786FU" # defer
206       cmd  "+9796FU" # defer
207       cmd2 "-7374FU"
208       cmd2 "-8384FU"
209       cmd2 "%TORYO" # defer
210       sleep 1
211     end
212     assert(/#WIN/  =~ result)
213     assert(/#LOSE/ =~ result2)
214   end
215
216   def test_defer2
217     result, result2 = handshake do
218       cmd  "+7776FU"
219       cmd  "+8786FU" # defer
220       cmd  "%TORYO" # defer
221       cmd2 "-7374FU"
222       cmd2 "-8384FU"
223       sleep 1
224     end
225     assert(/#LOSE/  =~ result)
226     assert(/#WIN/ =~ result2)
227   end
228
229   def test_defer3
230     result, result2 = handshake do
231       cmd  "+7776FU"
232       cmd  "+8786FU" # defer
233       cmd2 "-7374FU"
234       cmd2 "-8384FU"
235       cmd  "%TORYO" # defer
236       sleep 1
237     end
238     assert(/#LOSE/  =~ result)
239     assert(/#WIN/ =~ result2)
240   end
241 end
242
243 class TestChatCommand < BaseClient
244   def test_chat
245     cmd "%%CHAT Hello"
246     sleep 1
247     str = read_nonblock(@socket2)
248     puts str   
249     assert("", str)
250   end
251 end