sanichi-chess_icu 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,166 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ module ICU
4
+ describe Tournament do
5
+ context "a typical tournament" do
6
+ it "has a name, start date, some players and some results" do
7
+ lambda do
8
+ t = Tournament.new('Bangor Bash', '2009-11-09')
9
+ t.add_player(Player.new('Bobby', 'Fischer', 1))
10
+ t.add_player(Player.new('Garry', 'Gary Kasparov', 2))
11
+ t.add_player(Player.new('Mark', 'Orr', 3))
12
+ t.add_result(Result.new(1, 1, '=', :opponent => 2, :colour => 'W'))
13
+ t.add_result(Result.new(2, 2, 'L', :opponent => 3, :colour => 'W'))
14
+ t.add_result(Result.new(3, 3, 'W', :opponent => 1, :colour => 'W'))
15
+ end.should_not raise_error
16
+ end
17
+ end
18
+
19
+ # Tournament name.
20
+ context "name" do
21
+ before(:each) do
22
+ @t = Tournament.new('Edinburgh Masters', '2009-11-09')
23
+ end
24
+
25
+ it "must be specified in constructor" do
26
+ @t.name.should == 'Edinburgh Masters'
27
+ end
28
+
29
+ it "can be replaced by accessor" do
30
+ @t.name = 'Bangor Bashers'
31
+ @t.name.should == 'Bangor Bashers'
32
+ end
33
+
34
+ it "should not be blank or without letters" do
35
+ lambda { Tournament.new(' ', '2009-11-09') }.should raise_error(/invalid.*name/)
36
+ lambda { @t.name = '333' }.should raise_error(/invalid.*name/)
37
+ end
38
+ end
39
+
40
+ # Tournament start date.
41
+ context "start date" do
42
+ before(:each) do
43
+ @t = Tournament.new('Edinburgh Masters', '2009-11-09')
44
+ end
45
+
46
+ it "must be specified in constructor" do
47
+ @t.start.should == '2009-11-09'
48
+ end
49
+
50
+ it "can be replaced by accessor" do
51
+ @t.start = '16th June 2010'
52
+ @t.start.should == '2010-06-16'
53
+ end
54
+
55
+ it "should be a valid date" do
56
+ lambda { Tournament.new('Edinburgh Masters', ' ') }.should raise_error(/invalid.*date/)
57
+ lambda { @t.start = 'X' }.should raise_error(/invalid.*date/)
58
+ end
59
+ end
60
+
61
+ # Number of rounds.
62
+ context "rounds" do
63
+ it "defaults to nil" do
64
+ Tournament.new('Edinburgh Masters', '2009-11-09').rounds.should be_nil
65
+ end
66
+
67
+ it "should be a positive integer" do
68
+ Tournament.new('Edinburgh Masters', '2009-11-09', :rounds => 3).rounds.should == 3
69
+ Tournament.new('Edinburgh Masters', '2009-11-09', :rounds => ' 10 ').rounds.should == 10
70
+ lambda { Tournament.new('Edinburgh Masters', '2009-11-09', :rounds => ' 0 ') }.should raise_error(/invalid.*rounds/)
71
+ end
72
+ end
73
+
74
+ # Web site.
75
+ context "site" do
76
+ it "defaults to nil" do
77
+ Tournament.new('Edinburgh Masters', '2009-11-09').site.should be_nil
78
+ end
79
+
80
+ it "should be a reasonably valid looking URL" do
81
+ Tournament.new('Edinburgh Masters', '2009-11-09', :site => 'https://www.bbc.co.uk').site.should == 'https://www.bbc.co.uk'
82
+ Tournament.new('Edinburgh Masters', '2009-11-09', :site => 'www.icu.ie/event.php?id=1').site.should == 'http://www.icu.ie/event.php?id=1'
83
+ lambda { Tournament.new('Edinburgh Masters', '2009-11-09', :site => 'X') }.should raise_error(/invalid.*site/)
84
+ end
85
+ end
86
+
87
+ # Tournament players.
88
+ context "players" do
89
+ before(:each) do
90
+ @t = Tournament.new('Edinburgh Masters', '2009-11-09')
91
+ end
92
+
93
+ it "should have unique numbers" do
94
+ @t.add_player(Player.new('Mark', 'Orr', 1))
95
+ lambda { @t.add_player(Player.new('Bobby', 'Fischer', 1)) }.should raise_error(/player.*unique/)
96
+ end
97
+
98
+ it "can be added one at a time" do
99
+ @t.add_player(Player.new('Mark', 'Orr', -1))
100
+ @t.add_player(Player.new('Gary', 'Kasparov', -2))
101
+ @t.add_player(Player.new('Bobby', 'Fischer', -3))
102
+ @t.players.size.should == 3
103
+ @t.player(-1).first_name.should == 'Mark'
104
+ end
105
+ end
106
+
107
+ # Tournament results.
108
+ context "results" do
109
+ before(:each) do
110
+ @t = Tournament.new('Edinburgh Masters', '2009-11-09', :rounds => 3)
111
+ @t.add_player(@mark = Player.new('Mark', 'Orr', 1))
112
+ @t.add_player(@gary = Player.new('Gary', 'Kasparov', 2))
113
+ @t.add_player(@boby = Player.new('Bobby', 'Fischer', 3))
114
+ end
115
+
116
+ it "can be added one at a time" do
117
+ @t.add_result(Result.new(1, 1, 'W', :opponent => 2))
118
+ @t.add_result(Result.new(2, 2, 'D', :opponent => 3))
119
+ @t.add_result(Result.new(3, 3, 'L', :opponent => 1))
120
+ @mark.results.size.should == 2
121
+ @mark.points.should == 2.0
122
+ @gary.results.size.should == 2
123
+ @gary.points.should == 0.5
124
+ @boby.results.size.should == 2
125
+ @boby.points.should == 0.5
126
+ end
127
+
128
+ it "can be added symmetrically or asymmetrically with respect to rateability" do
129
+ @t.add_result(Result.new(1, 1, 'W', :opponent => 2))
130
+ @mark.results[0].rateable.should be_true
131
+ @gary.results[0].rateable.should be_true
132
+ @t.add_result(Result.new(2, 1, 'W', :opponent => 3), false)
133
+ @mark.results[1].rateable.should be_true
134
+ @boby.results[0].rateable.should be_false
135
+ end
136
+
137
+ it "should have a defined player" do
138
+ lambda { @t.add_result(Result.new(1, 4, 'L', :opponent => 1)) }.should raise_error(/player.*exist/)
139
+ end
140
+
141
+ it "should have a defined opponent" do
142
+ lambda { @t.add_result(Result.new(1, 1, 'W', :opponent => 4)) }.should raise_error(/opponent.*exist/)
143
+ end
144
+
145
+ it "should be consistent with the tournament's number of rounds" do
146
+ lambda { @t.add_result(Result.new(4, 1, 'W', :opponent => 2)) }.should raise_error(/round/)
147
+ end
148
+ end
149
+
150
+ context "finding players" do
151
+ before(:all) do
152
+ @t = Tournament.new('Bangor Bash', '2009-11-09')
153
+ @t.add_player(Player.new('Bobby', 'Fischer', 1, :fed => 'USA'))
154
+ @t.add_player(Player.new('Garry', 'Gary Kasparov', 2, :fed => 'RUS'))
155
+ @t.add_player(Player.new('Mark', 'Orr', 3, :fed => 'IRL'))
156
+ end
157
+
158
+ it "should find players based on loose equality" do
159
+ @t.find_player(Player.new('Mark', 'Orr', 4, :fed => 'IRL')).num.should == 3
160
+ @t.find_player(Player.new('Mark', 'Orr', 4, :fed => 'USA')).should be_nil
161
+ @t.find_player(Player.new('Mark', 'Sax', 4, :fed => 'IRL')).should be_nil
162
+ @t.find_player(Player.new('John', 'Orr', 4, :fed => 'IRL')).should be_nil
163
+ end
164
+ end
165
+ end
166
+ end
data/spec/util_spec.rb ADDED
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ module ICU
4
+ describe Util do
5
+ context "#parsedate" do
6
+ it "should parse standard dates" do
7
+ Util.parsedate('2001-01-01').should == '2001-01-01'
8
+ Util.parsedate('1955-11-09').should == '1955-11-09'
9
+ end
10
+
11
+ it "should handle US format" do
12
+ Util.parsedate('03/30/2009').should == '2009-03-30'
13
+ end
14
+
15
+ it "should handle European format" do
16
+ Util.parsedate('30/03/2009').should == '2009-03-30'
17
+ end
18
+
19
+ it "should prefer European format" do
20
+ Util.parsedate('02/03/2009').should == '2009-03-02'
21
+ end
22
+
23
+ it "should handle single digits" do
24
+ Util.parsedate('9/8/2006').should == '2006-08-09'
25
+ end
26
+
27
+ it "should handle names of months" do
28
+ Util.parsedate('9th Nov 1955').should == '1955-11-09'
29
+ Util.parsedate('16th June 1986').should == '1986-06-16'
30
+ end
31
+ end
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sanichi-chess_icu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Orr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-11 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: mark.j.l.orr@googlemail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - .gitignore
26
+ - CHANGELOG
27
+ - LICENCE
28
+ - README.rdoc
29
+ - Rakefile
30
+ - VERSION.yml
31
+ - lib/chess_icu.rb
32
+ - lib/name.rb
33
+ - lib/player.rb
34
+ - lib/result.rb
35
+ - lib/tournament.rb
36
+ - lib/tournament_fcsv.rb
37
+ - lib/util.rb
38
+ - spec/name_spec.rb
39
+ - spec/player_spec.rb
40
+ - spec/result_spec.rb
41
+ - spec/spec_helper.rb
42
+ - spec/tournament_fcsv_spec.rb
43
+ - spec/tournament_spec.rb
44
+ - spec/util_spec.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/sanichi/chess_icu
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --charset=UTF-8
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.2.0
68
+ signing_key:
69
+ specification_version: 2
70
+ summary: For parsing files of chess tournament data into ruby classes.
71
+ test_files:
72
+ - spec/name_spec.rb
73
+ - spec/player_spec.rb
74
+ - spec/result_spec.rb
75
+ - spec/spec_helper.rb
76
+ - spec/tournament_fcsv_spec.rb
77
+ - spec/tournament_spec.rb
78
+ - spec/util_spec.rb