cofgratx 0.0.1

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,60 @@
1
+ require 'spec_helper'
2
+ require 'cofgratx/cfg/terminal'
3
+
4
+ describe Terminal do
5
+ context ".initialize" do
6
+ it "can initialize with a string" do
7
+ expect{ described_class.new("something") }.to_not raise_error
8
+ end
9
+
10
+ it "can initialize with a regular expression" do
11
+ expect{ described_class.new(/[a-z]/) }.to_not raise_error
12
+ end
13
+
14
+ it "raises an exception on bad initial objects" do
15
+ expect{ described_class.new(12345) }.to raise_error(ArgumentError, "expected Regular Expression or String; got #{12345.class.name}")
16
+ end
17
+ end
18
+
19
+ context ".match?" do
20
+ context "returns false when the terminal is not found at the strings beginning" do
21
+ it{ expect( described_class.new("test").match?("no match") ).to be_falsey }
22
+ it{ expect( described_class.new("test").match?("no test first") ).to be_falsey }
23
+ it{ expect( described_class.new(/tony/).match?("get some sandwiches") ).to be_falsey }
24
+ it{ expect( described_class.new(/burgers/).match?("bob's burgers are better") ).to be_falsey }
25
+ it{ expect( described_class.new(/b.*s/).match?("hamburgers") ).to be_falsey }
26
+ end
27
+
28
+ context "returns true when the terminal is found at the start of the string" do
29
+ it{ expect( described_class.new("test").match?("test") ).to be_truthy }
30
+ it{ expect( described_class.new("test").match?("test first") ).to be_truthy }
31
+ it{ expect( described_class.new(/tony/).match?("tony, get some sandwiches") ).to be_truthy }
32
+ it{ expect( described_class.new(/burgers/).match?("burgers by bob are better") ).to be_truthy }
33
+ it{ expect( described_class.new(/b.*s/).match?("burgers and hams") ).to be_truthy }
34
+ end
35
+ end
36
+
37
+ context ".extract" do
38
+ context "returns nil and the unmodified string when the terminal is not found at the strings beginning" do
39
+ it{ expect( described_class.new("test").extract("no match") ).to match_array( [nil, "no match"] ) }
40
+ it{ expect( described_class.new("test").extract("no test first") ).to match_array( [nil, "no test first"] ) }
41
+ it{ expect( described_class.new(/tony/).extract("get some sandwiches") ).to match_array( [nil, "get some sandwiches"] ) }
42
+ it{ expect( described_class.new(/burgers/).extract("bob's burgers are better") ).to match_array( [nil, "bob's burgers are better"] ) }
43
+ it{ expect( described_class.new(/b.*s/).extract("hamburgers") ).to match_array( [nil, "hamburgers"] ) }
44
+ end
45
+
46
+ context "returns the terminal match and remainder of string" do
47
+ it "does not mutate the input string" do
48
+ input_string = "Don't change me!"
49
+ expect( described_class.new("Don't change me!").extract(input_string) ).to match_array( ["Don't change me!", ""] )
50
+ expect( input_string ).to match "Don't change me!"
51
+ end
52
+ it{ expect( described_class.new("test").extract("test") ).to match_array( ["test", ""] ) }
53
+ it{ expect( described_class.new("test").extract("test first") ).to match_array( ["test", " first"] ) }
54
+ it{ expect( described_class.new(/tony/).extract("tony, get some sandwiches") ).to match_array( ["tony", ", get some sandwiches"] ) }
55
+ it{ expect( described_class.new(/burgers/).extract("burgers by bob are better") ).to match_array( ["burgers", " by bob are better"] ) }
56
+ it{ expect( described_class.new(/b.*?s/).extract("burgers and hams") ).to match_array( ["burgers", " and hams"] ) }
57
+ end
58
+ end
59
+
60
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'cofgratx/cfg/translation_repetition_set_error'
3
+ require 'cofgratx/cfg/translation_repetition_set'
4
+
5
+ describe TranslationRepetitionSet do
6
+
7
+ context '.offset=' do
8
+ before do
9
+ @set = described_class.new
10
+ end
11
+
12
+ it { expect{ @set.offset = 1 }.to_not raise_error }
13
+ it { expect{ @set.offset = 13 }.to_not raise_error }
14
+
15
+ [ "gibberish", nil, "", 1.234, "2", "three" ].each do |bad_input|
16
+ it { expect{ @set.offset = bad_input }.to raise_error(ArgumentError, "expected Fixnum; got '#{bad_input.class.name}'") }
17
+ end
18
+
19
+ [ 0, -3, -1 ].each do |bad_input|
20
+ it { expect{ @set.offset = bad_input }.to raise_error(ArgumentError, "expected positive Fixnum; got '#{bad_input}'") }
21
+ end
22
+ end
23
+
24
+ context '.translations=' do
25
+ before do
26
+ @set = described_class.new
27
+ end
28
+
29
+ it { expect{ @set.translations = 1 }.to_not raise_error }
30
+ it { expect{ @set.translations = [1] }.to_not raise_error }
31
+ it { expect{ @set.translations = 13, "one", 5 }.to_not raise_error }
32
+ it { expect{ @set.translations = ["one", "two", 3, 4, 5] }.to_not raise_error }
33
+
34
+ [ [0], [1, 0, -3, 2], -44 ].each do |bad_input|
35
+ it { expect{ @set.translations = bad_input }.to raise_error(TranslationRepetitionSetError, "subrule number cannot be less than 1") }
36
+ end
37
+
38
+ [ [/bad/], [1.231], [nil] ].each do |bad_input|
39
+ it { expect{ @set.translations = bad_input }.to raise_error(ArgumentError, "expected Fixnum or String; got #{bad_input.first.class.name}") }
40
+ end
41
+ end
42
+
43
+ context ".initialize" do
44
+ it { expect{ described_class.new }.to_not raise_error }
45
+ it { expect{ described_class.new(1) }.to_not raise_error }
46
+ it { expect{ described_class.new(1, "foo", "bar", 6) }.to_not raise_error }
47
+ it { expect{ described_class.new(1, ["foo", "bar", 6]) }.to_not raise_error }
48
+
49
+ it "sets the offset and translations by calling the appropriate methods" do
50
+ expect_any_instance_of(described_class).to receive(:offset=).with(1).and_call_original
51
+ expect_any_instance_of(described_class).to receive(:translations=).with(["foo",3]).and_call_original
52
+
53
+ set = described_class.new(1, "foo", 3)
54
+ end
55
+ end
56
+
57
+ context ".offset" do
58
+ it "retrieves the correct offset" do
59
+ expect( described_class.new(3).offset ).to equal 3
60
+ end
61
+ end
62
+
63
+ context ".translations" do
64
+ it "retrieves the correct translations" do
65
+ expect( described_class.new(3, 5, 4, 3, "splat").translations ).to match_array [5, 4, 3, "splat"]
66
+ end
67
+ end
68
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cofgratx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - callahat
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: The CFG class can be used to create a specification for a context free
56
+ grammar and define translations for it
57
+ email:
58
+ - tim.callahan25@yahoo.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - .rspec
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - cofgratx.gemspec
70
+ - lib/cofgratx.rb
71
+ - lib/cofgratx/cfg/grammar.rb
72
+ - lib/cofgratx/cfg/grammar_error.rb
73
+ - lib/cofgratx/cfg/non_terminal.rb
74
+ - lib/cofgratx/cfg/repetition.rb
75
+ - lib/cofgratx/cfg/rule.rb
76
+ - lib/cofgratx/cfg/rule_error.rb
77
+ - lib/cofgratx/cfg/terminal.rb
78
+ - lib/cofgratx/cfg/translation_repetition_set.rb
79
+ - lib/cofgratx/cfg/translation_repetition_set_error.rb
80
+ - lib/cofgratx/version.rb
81
+ - spec/grammar_spec.rb
82
+ - spec/non_terminal_spec.rb
83
+ - spec/repetition_spec.rb
84
+ - spec/rule_spec.rb
85
+ - spec/spec_helper.rb
86
+ - spec/terminal_spec.rb
87
+ - spec/translation_repetition_set_spec.rb
88
+ homepage: ''
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.4.3
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: A context free grammar validator and translator
112
+ test_files:
113
+ - spec/grammar_spec.rb
114
+ - spec/non_terminal_spec.rb
115
+ - spec/repetition_spec.rb
116
+ - spec/rule_spec.rb
117
+ - spec/spec_helper.rb
118
+ - spec/terminal_spec.rb
119
+ - spec/translation_repetition_set_spec.rb