sashite-pan 0.0.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 54eb039472c953fe47d1301a02d37843f1695c69
4
- data.tar.gz: 2811407830cf1f4387b252bb21223853c391fdf2
2
+ SHA256:
3
+ metadata.gz: ddc5404d30aecb881216eeeda12f98c7295f8dd415302f343c8ac0d0434a7289
4
+ data.tar.gz: a70d32986e8e6c1f90dedd8039562089e1f40b8c64a4dcfb518f0bfdd0592904
5
5
  SHA512:
6
- metadata.gz: 69aa6996ee0432f347ace90340aa1334a053e03d65372f618af480d1bd0e1f1192318c310bf67786177449c70209f36b5e2fcd2b9deeae1bf37a58423bea04b7
7
- data.tar.gz: 5034ed8b40429cf82976f8c575724ee7e7794b215adf1da0a2a976012b6d405956dd38962ef91ed5ad302fd3177931704903e7785155604baaa4c2e9a927129f
6
+ metadata.gz: f1ec2c07c1e3ecfbd9dde636595c182178891217eeea5c2724c994b8e8010f2d8ae371e48a5399ef3682ef22b6f9c35550a83123b0e2035dd0603a00c1cf101c
7
+ data.tar.gz: ca173e3c7ecd0e49e9026a1f8b5ae9b7f8375c7d893e45b20b8ca7723e10dfe8701f4b4ef837414f2436014653b2accc2a9d2fb2b9b71cf9307c88d4840b745b
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Cyril Wack
1
+ Copyright (c) 2014-2020 Cyril Kato
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,18 +1,14 @@
1
- # Sashite::PAN
1
+ # Portable Action Notation
2
2
 
3
- Ruby implementation of [PAN](http://sashite.wiki/Portable_Action_Notation) parser and emitter.
4
-
5
- ## Status
6
-
7
- * [![Gem Version](https://badge.fury.io/rb/sashite-pan.svg)](//badge.fury.io/rb/sashite-pan)
8
- * [![Build Status](https://secure.travis-ci.org/sashite/pan.rb.svg?branch=master)](//travis-ci.org/sashite/pan.rb?branch=master)
9
- * [![Dependency Status](https://gemnasium.com/sashite/pan.rb.svg)](//gemnasium.com/sashite/pan.rb)
3
+ A Ruby interface for data serialization in [PAN](https://developer.sashite.com/specs/portable-action-notation) format.
10
4
 
11
5
  ## Installation
12
6
 
13
7
  Add this line to your application's Gemfile:
14
8
 
15
- gem 'sashite-pan'
9
+ ```ruby
10
+ gem 'sashite-pan'
11
+ ```
16
12
 
17
13
  And then execute:
18
14
 
@@ -22,17 +18,61 @@ Or install it yourself as:
22
18
 
23
19
  $ gem install sashite-pan
24
20
 
25
- ## Example
21
+ ## Usage
22
+
23
+ Working with PAN can be very simple, for example:
24
+
25
+ ```ruby
26
+ require 'sashite/pan'
27
+
28
+ # Emit a PAN string
29
+
30
+ actions = [
31
+ [52, 36, '♙', nil]
32
+ ]
33
+
34
+ Sashite::PAN.dump(*actions) # => '52,36,♙'
35
+
36
+ # Parse a PAN string
37
+
38
+ Sashite::PAN.parse('52,36,♙') # => [[52, 36, '♙', nil]]
39
+ ```
40
+
41
+ ## Examples
42
+
43
+ ```ruby
44
+ # Black castles on king-side
45
+
46
+ Sashite::PAN.dump([60, 62, '♔', nil], [63, 61, '♖', nil]) # => '60,62,♔;63,61,♖'
47
+ Sashite::PAN.parse('60,62,♔;63,61,♖') # => [[60, 62, '♔', nil], [63, 61, '♖', nil]]
48
+
49
+ # Promoting a chess pawn into a knight
50
+
51
+ Sashite::PAN.dump([12, 4, '♘', nil]) # => '12,4,♘'
52
+ Sashite::PAN.parse('12,4,♘') # => [[12, 4, '♘', nil]]
53
+
54
+ # Capturing a rook and promoting a shogi pawn
55
+
56
+ Sashite::PAN.dump([33, 24, '+P', 'R']) # => '33,24,+P,R'
57
+ Sashite::PAN.parse('33,24,+P,R') # => [[33, 24, '+P', 'R']]
58
+
59
+ # Dropping a shogi pawn
60
+
61
+ Sashite::PAN.dump([nil, 42, 'P', nil]) # => '*,42,P'
62
+ Sashite::PAN.parse('*,42,P') # => [[nil, 42, 'P', nil]]
63
+
64
+ # Capturing a white chess pawn en passant
65
+
66
+ Sashite::PAN.dump([33, 32, '♟', nil], [32, 40, '♟', nil]) # => '33,32,♟;32,40,♟'
67
+ Sashite::PAN.parse('33,32,♟;32,40,♟') # => [[33, 32, '♟', nil], [32, 40, '♟', nil]]
68
+ ```
69
+
70
+ ## License
26
71
 
27
- require 'sashite-pan'
72
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
28
73
 
29
- action = Sashite::PAN.load :shift, 42, 43
30
- action.src_square # => 42
74
+ ## About Sashite
31
75
 
32
- ## Contributing
76
+ The `sashite-pan` gem is maintained by [Sashite](https://sashite.com/).
33
77
 
34
- 1. Fork it
35
- 2. Create your feature branch (`git checkout -b my-new-feature`)
36
- 3. Commit your changes (`git commit -am 'Add some feature'`)
37
- 4. Push to the branch (`git push origin my-new-feature`)
38
- 5. Create new Pull Request
78
+ With some [lines of code](https://github.com/sashite/), let's share the beauty of Chinese, Japanese and Western cultures through the game of chess!
@@ -1 +1,6 @@
1
- require 'sashite/pan'
1
+ # frozen_string_literal: true
2
+
3
+ # Sashite namespace
4
+ module Sashite; end
5
+
6
+ require_relative 'sashite/pan'
@@ -1,34 +1,17 @@
1
- require_relative 'pan/capture'
2
- require_relative 'pan/drop'
3
- require_relative 'pan/error/not_implemented_verb_error'
4
- require_relative 'pan/error/same_square_error'
5
- require_relative 'pan/promote'
6
- require_relative 'pan/remove'
7
- require_relative 'pan/shift'
1
+ # frozen_string_literal: true
8
2
 
9
3
  module Sashite
4
+ # The PAN (Portable Action Notation) module
10
5
  module PAN
11
- def self.load verb, arg1, arg2
12
- case verb
13
-
14
- when :capture
15
- Capture.new arg1, arg2
16
-
17
- when :drop
18
- Drop.new arg1, arg2
19
-
20
- when :promote
21
- Promote.new arg1, arg2
22
-
23
- when :remove
24
- Remove.new arg1, arg2
25
-
26
- when :shift
27
- Shift.new arg1, arg2
6
+ def self.dump(*actions)
7
+ Dumper.call(*actions)
8
+ end
28
9
 
29
- else
30
- raise NotImplementedVerbError
31
- end
10
+ def self.parse(string)
11
+ Parser.call(string)
32
12
  end
33
13
  end
34
14
  end
15
+
16
+ require_relative 'pan/dumper'
17
+ require_relative 'pan/parser'
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sashite
4
+ module PAN
5
+ # Action class
6
+ class Action
7
+ attr_reader :src_square, :dst_square, :piece_name, :piece_hand
8
+
9
+ private_class_method def self.separator
10
+ ';'
11
+ end
12
+
13
+ private
14
+
15
+ def separator
16
+ ','
17
+ end
18
+
19
+ def drop_char
20
+ '*'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'action'
4
+
5
+ module Sashite
6
+ module PAN
7
+ # Dumper class
8
+ class Dumper < Action
9
+ def self.call(*actions)
10
+ actions.map { |action_items| new(*action_items).call }
11
+ .join(separator)
12
+ end
13
+
14
+ def initialize(src_square, dst_square, piece_name, piece_hand)
15
+ @src_square = src_square.nil? ? drop_char : Integer(src_square)
16
+ @dst_square = Integer(dst_square)
17
+ @piece_name = piece_name.to_s
18
+ @piece_hand = piece_hand&.to_s
19
+ end
20
+
21
+ def call
22
+ action_items.join(separator)
23
+ end
24
+
25
+ private
26
+
27
+ def action_items
28
+ return [src_square, dst_square, piece_name] if piece_hand.nil?
29
+
30
+ [src_square, dst_square, piece_name, piece_hand]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'action'
4
+
5
+ module Sashite
6
+ module PAN
7
+ # Parser class
8
+ class Parser < Action
9
+ def self.call(serialized_move)
10
+ serialized_move.split(separator)
11
+ .map { |serialized_action| new(serialized_action).call }
12
+ end
13
+
14
+ def initialize(serialized_action)
15
+ action_args = serialized_action.split(separator)
16
+ src_square = action_args.fetch(0)
17
+ @src_square = src_square.eql?(drop_char) ? nil : Integer(src_square)
18
+ @dst_square = Integer(action_args.fetch(1))
19
+ @piece_name = action_args.fetch(2)
20
+ @piece_hand = action_args.fetch(3, nil)
21
+ end
22
+
23
+ def call
24
+ [src_square, dst_square, piece_name, piece_hand]
25
+ end
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,95 +1,148 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sashite-pan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - Cyril Wack
7
+ - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-29 00:00:00.000000000 Z
11
+ date: 2020-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.6'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.6'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: minitest
42
+ name: byebug
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '5'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '5'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-thread_safety
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
46
116
  - !ruby/object:Gem::Version
47
- version: '10'
117
+ version: '0'
48
118
  type: :development
49
119
  prerelease: false
50
120
  version_requirements: !ruby/object:Gem::Requirement
51
121
  requirements:
52
- - - "~>"
122
+ - - ">="
53
123
  - !ruby/object:Gem::Version
54
- version: '10'
55
- description: A Portable Action Notation (PAN) parser and emitter, optimized for programmer
56
- happiness.
57
- email:
58
- - contact@cyril.io
124
+ version: '0'
125
+ description: A Ruby interface for data serialization in PAN (Portable Action Notation)
126
+ format.
127
+ email: contact@cyril.email
59
128
  executables: []
60
129
  extensions: []
61
130
  extra_rdoc_files: []
62
131
  files:
63
- - ".gitignore"
64
- - ".ruby-version"
65
- - ".travis.yml"
66
- - Gemfile
67
132
  - LICENSE.md
68
133
  - README.md
69
- - Rakefile
70
- - VERSION.semver
71
134
  - lib/sashite-pan.rb
72
135
  - lib/sashite/pan.rb
73
- - lib/sashite/pan/capture.rb
74
- - lib/sashite/pan/drop.rb
75
- - lib/sashite/pan/error/not_implemented_verb_error.rb
76
- - lib/sashite/pan/error/same_square_error.rb
77
- - lib/sashite/pan/promote.rb
78
- - lib/sashite/pan/remove.rb
79
- - lib/sashite/pan/shift.rb
80
- - sashite-pan.gemspec
81
- - test/_test_helper.rb
82
- - test/test_capture.rb
83
- - test/test_drop.rb
84
- - test/test_movement.rb.rb
85
- - test/test_pan.rb
86
- - test/test_promote.rb
87
- - test/test_remove.rb
88
- - test/test_shift.rb
89
- homepage: https://github.com/sashite/pan.rb
136
+ - lib/sashite/pan/action.rb
137
+ - lib/sashite/pan/dumper.rb
138
+ - lib/sashite/pan/parser.rb
139
+ homepage: https://developer.sashite.com/specs/portable-action-notation
90
140
  licenses:
91
141
  - MIT
92
- metadata: {}
142
+ metadata:
143
+ bug_tracker_uri: https://github.com/sashite/pan.rb/issues
144
+ documentation_uri: https://rubydoc.info/gems/sashite-pan/index
145
+ source_code_uri: https://github.com/sashite/pan.rb
93
146
  post_install_message:
94
147
  rdoc_options: []
95
148
  require_paths:
@@ -105,17 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
158
  - !ruby/object:Gem::Version
106
159
  version: '0'
107
160
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.2.2
161
+ rubygems_version: 3.1.2
110
162
  signing_key:
111
163
  specification_version: 4
112
- summary: Portable Action Notation (PAN) parser and emitter.
113
- test_files:
114
- - test/_test_helper.rb
115
- - test/test_capture.rb
116
- - test/test_drop.rb
117
- - test/test_movement.rb.rb
118
- - test/test_pan.rb
119
- - test/test_promote.rb
120
- - test/test_remove.rb
121
- - test/test_shift.rb
164
+ summary: Data serialization in PAN format.
165
+ test_files: []
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
@@ -1 +0,0 @@
1
- 2.1.2
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.2
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
-
4
- Rake::TestTask.new do |t|
5
- end
6
-
7
- task(default: :test)
@@ -1 +0,0 @@
1
- 0.0.2
@@ -1,24 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Capture
4
- attr_reader :src_square, :dst_square
5
-
6
- def initialize src_square, dst_square
7
- raise TypeError unless src_square.is_a? Fixnum
8
- raise TypeError unless dst_square.is_a? Fixnum
9
- raise SameSquareError if src_square == dst_square
10
-
11
- @src_square = src_square
12
- @dst_square = dst_square
13
- end
14
-
15
- def to_a
16
- [
17
- self.class.name.split('::').last.downcase.to_sym,
18
- @src_square,
19
- @dst_square
20
- ]
21
- end
22
- end
23
- end
24
- end
@@ -1,23 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Drop
4
- attr_reader :actor, :dst_square
5
-
6
- def initialize actor, dst_square
7
- raise TypeError unless actor.is_a? Symbol
8
- raise TypeError unless dst_square.is_a? Fixnum
9
-
10
- @actor = actor
11
- @dst_square = dst_square
12
- end
13
-
14
- def to_a
15
- [
16
- self.class.name.split('::').last.downcase.to_sym,
17
- @actor,
18
- @dst_square
19
- ]
20
- end
21
- end
22
- end
23
- end
@@ -1,6 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class NotImplementedVerbError < ::StandardError
4
- end
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class SameSquareError < ::StandardError
4
- end
5
- end
6
- end
@@ -1,23 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Promote
4
- attr_reader :src_square, :actor
5
-
6
- def initialize src_square, actor
7
- raise TypeError unless src_square.is_a? Fixnum
8
- raise TypeError unless actor.is_a? Symbol
9
-
10
- @src_square = src_square
11
- @actor = actor
12
- end
13
-
14
- def to_a
15
- [
16
- self.class.name.split('::').last.downcase.to_sym,
17
- @src_square,
18
- @actor
19
- ]
20
- end
21
- end
22
- end
23
- end
@@ -1,24 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Remove
4
- attr_reader :src_square, :dst_square
5
-
6
- def initialize src_square, dst_square
7
- raise TypeError unless src_square.is_a? Fixnum
8
- raise TypeError unless dst_square.is_a? Fixnum
9
- raise SameSquareError if src_square == dst_square
10
-
11
- @src_square = src_square
12
- @dst_square = dst_square
13
- end
14
-
15
- def to_a
16
- [
17
- self.class.name.split('::').last.downcase.to_sym,
18
- @src_square,
19
- @dst_square
20
- ]
21
- end
22
- end
23
- end
24
- end
@@ -1,24 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Shift
4
- attr_reader :src_square, :dst_square
5
-
6
- def initialize src_square, dst_square
7
- raise TypeError unless src_square.is_a? Fixnum
8
- raise TypeError unless dst_square.is_a? Fixnum
9
- raise SameSquareError if src_square == dst_square
10
-
11
- @src_square = src_square
12
- @dst_square = dst_square
13
- end
14
-
15
- def to_a
16
- [
17
- self.class.name.split('::').last.downcase.to_sym,
18
- @src_square,
19
- @dst_square
20
- ]
21
- end
22
- end
23
- end
24
- end
@@ -1,19 +0,0 @@
1
- Gem::Specification.new do |spec|
2
- spec.name = 'sashite-pan'
3
- spec.version = File.read('VERSION.semver')
4
- spec.authors = ['Cyril Wack']
5
- spec.email = ['contact@cyril.io']
6
- spec.summary = %q{Portable Action Notation (PAN) parser and emitter.}
7
- spec.description = %q{A Portable Action Notation (PAN) parser and emitter, optimized for programmer happiness.}
8
- spec.homepage = 'https://github.com/sashite/pan.rb'
9
- spec.license = 'MIT'
10
-
11
- spec.files = `git ls-files -z`.split("\x0")
12
- spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
13
- spec.test_files = spec.files.grep(%r{^test/})
14
- spec.require_paths = ['lib']
15
-
16
- spec.add_development_dependency 'bundler', '~> 1.6'
17
- spec.add_development_dependency 'minitest', '~> 5'
18
- spec.add_development_dependency 'rake', '~> 10'
19
- end
@@ -1,2 +0,0 @@
1
- require 'sashite/pan'
2
- require 'minitest/autorun'
@@ -1,41 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'capture' do
5
- describe 'errors' do
6
- it 'raises a same square error' do
7
- -> { Sashite::PAN::Capture.new 42, 42 }.must_raise Sashite::PAN::SameSquareError
8
- end
9
-
10
- it 'raises a type error from the source square' do
11
- -> { Sashite::PAN::Capture.new '42', 43 }.must_raise TypeError
12
- end
13
-
14
- it 'raises a type error from the destination square' do
15
- -> { Sashite::PAN::Capture.new 42, '43' }.must_raise TypeError
16
- end
17
- end
18
-
19
- describe 'instances' do
20
- before do
21
- @action = Sashite::PAN.load :capture, 42, 43
22
- end
23
-
24
- it 'returns the action' do
25
- @action.to_a.must_equal [ :capture, 42, 43 ]
26
- end
27
-
28
- it 'returns the action (once again)' do
29
- @action.to_a.must_equal Sashite::PAN::Capture.new(42, 43).to_a
30
- end
31
-
32
- it 'returns the src_square of the action' do
33
- @action.src_square.must_equal 42
34
- end
35
-
36
- it 'returns the dst_square of the action' do
37
- @action.dst_square.must_equal 43
38
- end
39
- end
40
- end
41
- end
@@ -1,37 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'drops' do
5
- describe 'errors' do
6
- it 'raises a type error from the actor' do
7
- -> { Sashite::PAN.load :drop, 'foobar', 42 }.must_raise TypeError
8
- end
9
-
10
- it 'raises a type error from the destination square' do
11
- -> { Sashite::PAN.load :drop, :foobar, '42' }.must_raise TypeError
12
- end
13
- end
14
-
15
- describe 'instances' do
16
- before do
17
- @action = Sashite::PAN.load :drop, :foobar, 42
18
- end
19
-
20
- it 'returns the action' do
21
- @action.to_a.must_equal [ :drop, :foobar, 42 ]
22
- end
23
-
24
- it 'returns the action (once again)' do
25
- @action.to_a.must_equal Sashite::PAN::Drop.new(:foobar, 42).to_a
26
- end
27
-
28
- it 'returns the actor of the action' do
29
- @action.actor.must_equal :foobar
30
- end
31
-
32
- it 'returns the dst_square of the action' do
33
- @action.dst_square.must_equal 42
34
- end
35
- end
36
- end
37
- end
@@ -1,9 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'errors' do
5
- it 'raises a not implemented method error' do
6
- -> { Sashite::PAN.load :foobar, 42, 43 }.must_raise Sashite::PAN::NotImplementedVerbError
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'errors' do
5
- it 'raises a not implemented method error' do
6
- -> { Sashite::PAN.load :foobar, 42, 43 }.must_raise Sashite::PAN::NotImplementedVerbError
7
- end
8
- end
9
- end
@@ -1,37 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'promotion' do
5
- describe 'errors' do
6
- it 'raises a type error from the source square' do
7
- -> { Sashite::PAN.load :promote, '42', :foobar }.must_raise TypeError
8
- end
9
-
10
- it 'raises a type error from the actor' do
11
- -> { Sashite::PAN.load :promote, 42, 'foobar' }.must_raise TypeError
12
- end
13
- end
14
-
15
- describe 'instances' do
16
- before do
17
- @action = Sashite::PAN.load :promote, 42, :foobar
18
- end
19
-
20
- it 'returns the action' do
21
- @action.to_a.must_equal [ :promote, 42, :foobar ]
22
- end
23
-
24
- it 'returns the action (once again)' do
25
- @action.to_a.must_equal Sashite::PAN::Promote.new(42, :foobar).to_a
26
- end
27
-
28
- it 'returns the src_square of the action' do
29
- @action.src_square.must_equal 42
30
- end
31
-
32
- it 'returns the actor of the action' do
33
- @action.actor.must_equal :foobar
34
- end
35
- end
36
- end
37
- end
@@ -1,41 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'remove' do
5
- describe 'errors' do
6
- it 'raises a same square error' do
7
- -> { Sashite::PAN::Remove.new 42, 42 }.must_raise Sashite::PAN::SameSquareError
8
- end
9
-
10
- it 'raises a type error from the source square' do
11
- -> { Sashite::PAN::Remove.new '42', 43 }.must_raise TypeError
12
- end
13
-
14
- it 'raises a type error from the destination square' do
15
- -> { Sashite::PAN::Remove.new 42, '43' }.must_raise TypeError
16
- end
17
- end
18
-
19
- describe 'instances' do
20
- before do
21
- @action = Sashite::PAN.load :remove, 42, 43
22
- end
23
-
24
- it 'returns the action' do
25
- @action.to_a.must_equal [ :remove, 42, 43 ]
26
- end
27
-
28
- it 'returns the action (once again)' do
29
- @action.to_a.must_equal Sashite::PAN::Remove.new(42, 43).to_a
30
- end
31
-
32
- it 'returns the src_square of the action' do
33
- @action.src_square.must_equal 42
34
- end
35
-
36
- it 'returns the dst_square of the action' do
37
- @action.dst_square.must_equal 43
38
- end
39
- end
40
- end
41
- end
@@ -1,41 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'shift' do
5
- describe 'errors' do
6
- it 'raises a same square error' do
7
- -> { Sashite::PAN::Shift.new 42, 42 }.must_raise Sashite::PAN::SameSquareError
8
- end
9
-
10
- it 'raises a type error from the source square' do
11
- -> { Sashite::PAN::Shift.new '42', 43 }.must_raise TypeError
12
- end
13
-
14
- it 'raises a type error from the destination square' do
15
- -> { Sashite::PAN::Shift.new 42, '43' }.must_raise TypeError
16
- end
17
- end
18
-
19
- describe 'instances' do
20
- before do
21
- @action = Sashite::PAN.load :shift, 42, 43
22
- end
23
-
24
- it 'returns the action' do
25
- @action.to_a.must_equal [ :shift, 42, 43 ]
26
- end
27
-
28
- it 'returns the action (once again)' do
29
- @action.to_a.must_equal Sashite::PAN::Shift.new(42, 43).to_a
30
- end
31
-
32
- it 'returns the src_square of the action' do
33
- @action.src_square.must_equal 42
34
- end
35
-
36
- it 'returns the dst_square of the action' do
37
- @action.dst_square.must_equal 43
38
- end
39
- end
40
- end
41
- end