OSDN Git Service

[shogi-server] Write more game results in record files
authorDaigo Moriwaki <daigo@debian.org>
Sat, 2 Sep 2017 11:14:43 +0000 (20:14 +0900)
committerDaigo Moriwaki <daigo@debian.org>
Sat, 2 Sep 2017 11:14:43 +0000 (20:14 +0900)
As the CSA Record Format standard states, "%TIME_UP" and
"%SENNICHITE" are now recorded in CSA files when a game ends for
timed up or sennichite respectively.
(Closes #37490)

changelog
shogi_server/game_result.rb
test/TC_game_result.rb

index 9e650fd..b33c74a 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,11 @@
+2017-09-02  Daigo Moriwaki <daigo at debian dot org>
+
+       * [shogi-server] Write more game results in record files
+         As the CSA Record Format standard states, "%TIME_UP" and
+         "%SENNICHITE" are now recorded in CSA files when a game ends for
+         timed up or sennichite respectively.
+         (Closes #37490)
+
 2017-02-26 Daigo Moriwaki <daigo at debian dot org>
 
        * utils/csa-filter.rb: Allow csa-filter.rb to filter games by a winner or loser
index d6960af..27902b9 100644 (file)
@@ -194,7 +194,7 @@ class GameResultTimeoutWin < GameResultWin
   def process
     @winner.write_safe("#TIME_UP\n#WIN\n")
     @loser.write_safe( "#TIME_UP\n#LOSE\n")
-    # no log
+    log("%TIME_UP")  # a player in turn lost
     log_summary
     notify
   end
@@ -337,7 +337,7 @@ class GameResultSennichiteDraw < GameResultDraw
     @players.each do |player|
       player.write_safe("#SENNICHITE\n#DRAW\n")
     end
-    # no log
+    log("%SENNICHITE")
     log_summary
     notify
   end
index 277ec11..da07a01 100644 (file)
@@ -10,12 +10,20 @@ $league.event = "TC_game_result"
 module ShogiServer
   class BasicPlayer
     attr_accessor :sente, :status
+
+    def write_safe(dummy)
+    end
   end
 end
 
 class TestGameResult < Test::Unit::TestCase
   class DummyGame
     attr_accessor :game_name
+    attr_reader :board
+
+    def initialize
+      @board = ""
+    end
   end
 
   def setup
@@ -105,10 +113,28 @@ class TestGameResult < Test::Unit::TestCase
 
   def test_game_result_sennichite_draw
     gr = ShogiServer::GameResultSennichiteDraw.new(@game, @p1, @p2)
+    $cache_state = []
+    def gr.log(s)
+      $cache_state << s
+    end
     assert_equal(@p1.last_game_win, false)
     assert_equal(@p2.last_game_win, false)
     assert_equal("sennichite", gr.log_summary_type)
+
+    gr.delete_observers
+    gr.process
+    assert_equal("%SENNICHITE", $cache_state[0])
   end
 
+  def test_game_result_timeout
+    gr = ShogiServer::GameResultTimeoutWin.new(@game, @p2, @p1)
+    $cache_state = []
+    def gr.log(s)
+      $cache_state << s
+    end
+    gr.delete_observers
+    gr.process
+    assert_equal("%TIME_UP", $cache_state[0])
+  end
 end