wrong 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +3 -1
- data/lib/wrong.rb +2 -1
- data/lib/wrong/chunk.rb +6 -1
- data/lib/wrong/irb.rb +16 -0
- data/lib/wrong/version.rb +1 -1
- data/test/adapters/rspec_test.rb +4 -2
- data/test/assert_test.rb +1 -1
- data/test/suite.rb +1 -1
- data/test/test_helper.rb +8 -1
- metadata +10 -69
- data/lib/predicated/Gemfile +0 -15
- data/lib/predicated/LICENSE +0 -20
- data/lib/predicated/README.markdown +0 -191
- data/lib/predicated/Rakefile +0 -51
- data/lib/predicated/lib/predicated.rb +0 -4
- data/lib/predicated/lib/predicated/autogen_call.rb +0 -37
- data/lib/predicated/lib/predicated/constrain.rb +0 -66
- data/lib/predicated/lib/predicated/evaluate.rb +0 -94
- data/lib/predicated/lib/predicated/from/callable_object.rb +0 -108
- data/lib/predicated/lib/predicated/from/json.rb +0 -59
- data/lib/predicated/lib/predicated/from/ruby_code_string.rb +0 -73
- data/lib/predicated/lib/predicated/from/url_part.rb +0 -104
- data/lib/predicated/lib/predicated/from/xml.rb +0 -61
- data/lib/predicated/lib/predicated/gem_check.rb +0 -34
- data/lib/predicated/lib/predicated/predicate.rb +0 -111
- data/lib/predicated/lib/predicated/print.rb +0 -62
- data/lib/predicated/lib/predicated/selectable.rb +0 -102
- data/lib/predicated/lib/predicated/simple_templated_predicate.rb +0 -79
- data/lib/predicated/lib/predicated/string_utils.rb +0 -20
- data/lib/predicated/lib/predicated/to/arel.rb +0 -41
- data/lib/predicated/lib/predicated/to/json.rb +0 -48
- data/lib/predicated/lib/predicated/to/sentence.rb +0 -94
- data/lib/predicated/lib/predicated/to/solr.rb +0 -15
- data/lib/predicated/lib/predicated/to/xml.rb +0 -67
- data/lib/predicated/lib/predicated/version.rb +0 -3
- data/lib/predicated/predicated.gemspec +0 -22
- data/lib/predicated/test/autogen_call_test.rb +0 -40
- data/lib/predicated/test/canonical_transform_cases.rb +0 -63
- data/lib/predicated/test/constrain_test.rb +0 -86
- data/lib/predicated/test/enumerable_test.rb +0 -32
- data/lib/predicated/test/equality_test.rb +0 -32
- data/lib/predicated/test/evaluate_test.rb +0 -149
- data/lib/predicated/test/from/callable_object_canonical_test.rb +0 -43
- data/lib/predicated/test/from/callable_object_test.rb +0 -78
- data/lib/predicated/test/from/json_test.rb +0 -83
- data/lib/predicated/test/from/ruby_code_string_canonical_test.rb +0 -37
- data/lib/predicated/test/from/ruby_code_string_test.rb +0 -103
- data/lib/predicated/test/from/url_part_parser_test.rb +0 -123
- data/lib/predicated/test/from/url_part_test.rb +0 -48
- data/lib/predicated/test/from/xml_test.rb +0 -57
- data/lib/predicated/test/json_conversion_test.rb +0 -33
- data/lib/predicated/test/print_test.rb +0 -66
- data/lib/predicated/test/selectable_test.rb +0 -123
- data/lib/predicated/test/simple_templated_predicate_test.rb +0 -39
- data/lib/predicated/test/suite.rb +0 -2
- data/lib/predicated/test/test_helper.rb +0 -64
- data/lib/predicated/test/test_helper_with_wrong.rb +0 -6
- data/lib/predicated/test/to/arel_test.rb +0 -85
- data/lib/predicated/test/to/json_test.rb +0 -74
- data/lib/predicated/test/to/sentence_test.rb +0 -90
- data/lib/predicated/test/to/solr_test.rb +0 -39
- data/lib/predicated/test/to/xml_test.rb +0 -72
- data/lib/predicated/test/xml_conversion_test.rb +0 -34
- data/lib/predicated/test_integration/arel_integration_test.rb +0 -52
- data/lib/predicated/test_integration/canonical_integration_cases.rb +0 -66
- data/lib/predicated/test_integration/schema.xml +0 -83
- data/lib/predicated/test_integration/solr_integration_test.rb +0 -71
- data/lib/predicated/test_integration/sqlite_db +0 -0
- data/lib/predicated/test_integration/suite.rb +0 -2
- data/lib/predicated/test_integration/usage_test.rb +0 -252
@@ -1,123 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/selectable"
|
4
|
-
|
5
|
-
regarding "part one: selectors on an array (simple enumerable). proving them out more generally." do
|
6
|
-
before do
|
7
|
-
@arr = [1,2,"c",4,"e",6]
|
8
|
-
Predicated::Selectable.bless_enumerable(@arr,
|
9
|
-
:strings => proc{|item|item.is_a?(String)},
|
10
|
-
:numbers => proc{|item|item.is_a?(Numeric)},
|
11
|
-
:less_than_3 => proc{|item|item < 3}
|
12
|
-
)
|
13
|
-
end
|
14
|
-
|
15
|
-
test %{selection basics.
|
16
|
-
People often remark that this kind of thing is jQuery-like.
|
17
|
-
I keep thinking I got it from Eric Evans.} do
|
18
|
-
assert{ @arr.select(:numbers) == [1,2,4,6] }
|
19
|
-
assert{ @arr.select(:strings) == ["c","e"] }
|
20
|
-
assert{ @arr.select(:numbers).select(:less_than_3) == [1,2] }
|
21
|
-
|
22
|
-
assert do
|
23
|
-
rescuing{ @arr.select(:less_than_3) }.is_a?(ArgumentError)
|
24
|
-
#because strings don't respond to <
|
25
|
-
#...there's no substitute for knowing what you're doing.
|
26
|
-
end
|
27
|
-
|
28
|
-
#normal select still works
|
29
|
-
assert{ @arr.select{|item|item.is_a?(String)} == ["c","e"] }
|
30
|
-
end
|
31
|
-
|
32
|
-
test "...selector name can be any object" do
|
33
|
-
arr = [1,2,"c",4,"e",6]
|
34
|
-
|
35
|
-
Predicated::Selectable.bless_enumerable(arr,
|
36
|
-
String => proc{|item|item.is_a?(String)},
|
37
|
-
Numeric => proc{|item|item.is_a?(Numeric)},
|
38
|
-
:less_than_3 => proc{|item|item < 3}
|
39
|
-
)
|
40
|
-
|
41
|
-
assert{ arr.select(String) == ["c","e"] }
|
42
|
-
assert{ arr.select(Numeric) == [1,2,4,6] }
|
43
|
-
assert{ arr.select(Numeric).select(:less_than_3) == [1,2] }
|
44
|
-
end
|
45
|
-
|
46
|
-
test "chaining. also works using varargs" do
|
47
|
-
assert{ @arr.select(:numbers).select(:less_than_3) == [1,2] }
|
48
|
-
assert{ @arr.select(:numbers, :less_than_3) == [1,2] }
|
49
|
-
end
|
50
|
-
|
51
|
-
test "extending twice is additive (not destructive)" do
|
52
|
-
arr = [1,2,"c",4,"e",6]
|
53
|
-
Predicated::Selectable.bless_enumerable(arr, :strings => proc{|item|item.is_a?(String)})
|
54
|
-
Predicated::Selectable.bless_enumerable(arr, :numbers => proc{|item|item.is_a?(Numeric)})
|
55
|
-
|
56
|
-
assert{ arr.select(:strings) == ["c","e"] }
|
57
|
-
assert{ arr.select(:numbers) == [1,2,4,6] }
|
58
|
-
end
|
59
|
-
|
60
|
-
test "works as a macro" do
|
61
|
-
class MyArray < Array
|
62
|
-
include Predicated::Selectable
|
63
|
-
selector :strings => proc{|item|item.is_a?(String)}
|
64
|
-
selector :numbers => proc{|item|item.is_a?(Numeric)}
|
65
|
-
selector :small => proc{|item|item.is_a?(Numeric) && item < 3},
|
66
|
-
:big => proc{|item|item.is_a?(Numeric) && item >= 3}
|
67
|
-
end
|
68
|
-
|
69
|
-
arr = MyArray.new
|
70
|
-
arr.replace([1,2,"c",4,"e",6])
|
71
|
-
|
72
|
-
assert{ arr.select(:strings) == ["c","e"] }
|
73
|
-
assert{ arr.select(:numbers) == [1,2,4,6] }
|
74
|
-
assert{ arr.select(:small) == [1,2] }
|
75
|
-
assert{ arr.select(:big) == [4,6] }
|
76
|
-
end
|
77
|
-
|
78
|
-
test %{memoizes.
|
79
|
-
Selector enumerable assumes an immutable collection.
|
80
|
-
I'm going to use that assumption against it, and cleverly prove that memoization works.
|
81
|
-
(Others might choose to mock in similar circumstances.)} do
|
82
|
-
assert{ @arr.select(:strings) == ["c","e"] }
|
83
|
-
|
84
|
-
@arr << "zzz"
|
85
|
-
|
86
|
-
assert{ @arr.select(:strings) == ["c","e"] }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
include Predicated
|
91
|
-
regarding "there are convenient selectors defined for getting things out of a predicate" do
|
92
|
-
class ::Array
|
93
|
-
def predicates
|
94
|
-
collect{|p, a|p}
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
it "gets predicate parts by type" do
|
99
|
-
root = Predicate { And(Eq(1, 2), Or(Eq(3, 4), Eq(5, 6))) }
|
100
|
-
the_or = Predicate { Or(Eq(3, 4), Eq(5, 6)) }
|
101
|
-
|
102
|
-
assert{ root.select(:all).predicates == [root, Equal.new(1, 2), the_or, Equal.new(3, 4), Equal.new(5, 6)] }
|
103
|
-
|
104
|
-
assert{ root.select(And).predicates == [root] }
|
105
|
-
assert{ root.select(Or).predicates == [the_or] }
|
106
|
-
assert{ root.select(Equal).predicates == [Equal.new(1, 2), Equal.new(3, 4), Equal.new(5, 6)] }
|
107
|
-
assert{ root.select(GreaterThan).predicates == [] }
|
108
|
-
|
109
|
-
gt_lt = Predicate { And(Gt(1, 2), Lt(3, 4)) }
|
110
|
-
assert{ gt_lt.select(GreaterThan).predicates == [GreaterThan.new(1, 2)] }
|
111
|
-
assert{ gt_lt.select(LessThan).predicates == [LessThan.new(3, 4)] }
|
112
|
-
|
113
|
-
gte_lte = Predicate { And(Gte(1, 2), Lte(3, 4)) }
|
114
|
-
assert{ gte_lte.select(GreaterThanOrEqualTo).predicates == [GreaterThanOrEqualTo.new(1, 2)] }
|
115
|
-
assert{ gte_lte.select(LessThanOrEqualTo).predicates == [LessThanOrEqualTo.new(3, 4)] }
|
116
|
-
|
117
|
-
mixed = Predicate { And(Eq(1, 2), Or(Gt(3, 4), Lt(5, 6))) }
|
118
|
-
mixed_or = Predicate { Or(Gt(3, 4), Lt(5, 6)) }
|
119
|
-
assert{ mixed.select(Operation).predicates == [Equal.new(1, 2), GreaterThan.new(3, 4), LessThan.new(5, 6)] }
|
120
|
-
assert{ mixed.select(Operation).select(Equal).predicates == [Equal.new(1, 2)] }
|
121
|
-
assert{ mixed.select(Binary).predicates == [mixed, Equal.new(1, 2), mixed_or, GreaterThan.new(3, 4), LessThan.new(5, 6)] }
|
122
|
-
end
|
123
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/simple_templated_predicate"
|
4
|
-
include Predicated
|
5
|
-
|
6
|
-
regarding "simple templated predicates. the left sides of operations and calls is a common unbound variable" do
|
7
|
-
|
8
|
-
test "operations. the left side is a placeholder" do
|
9
|
-
assert{ SimpleTemplatedPredicate{ Eq(1) }.fill_in(1) == Predicate { Eq(1, 1) } }
|
10
|
-
assert{ SimpleTemplatedPredicate{ Lt(2) }.fill_in(1) == Predicate { Lt(1, 2) } }
|
11
|
-
assert{ SimpleTemplatedPredicate{ Gt(1) }.fill_in(2) == Predicate { Gt(2, 1) } }
|
12
|
-
assert{ SimpleTemplatedPredicate{ Gte(1) }.fill_in(2) == Predicate { Gte(2, 1) } }
|
13
|
-
assert{ SimpleTemplatedPredicate{ Lte(2) }.fill_in(1) == Predicate { Lte(1, 2) } }
|
14
|
-
|
15
|
-
assert{ SimpleTemplatedPredicate{ Eq(true) }.fill_in(true) == Predicate { Eq(true, true) } }
|
16
|
-
end
|
17
|
-
|
18
|
-
test "and, or, not. just pass on the fill_in" do
|
19
|
-
assert{ SimpleTemplatedPredicate{ And(Gt(3),Lt(5)) }.fill_in(4) == Predicate { And(Gt(4,3),Lt(4,5)) } }
|
20
|
-
assert{ SimpleTemplatedPredicate{ Or(Gt(3),Lt(5)) }.fill_in(4) == Predicate { Or(Gt(4,3),Lt(4,5)) } }
|
21
|
-
assert{ SimpleTemplatedPredicate{ Not(Gt(5)) }.fill_in(4) == Predicate { Not(Gt(4,5)) } }
|
22
|
-
end
|
23
|
-
|
24
|
-
test "call. left side is a placeholder" do
|
25
|
-
assert{ SimpleTemplatedPredicate{ Call(:include?, "bc") }.fill_in("abc") ==
|
26
|
-
Predicate { Call("abc", :include?, "bc") } }
|
27
|
-
|
28
|
-
assert{ SimpleTemplatedPredicate{ Call(:nil?) }.fill_in("abc") ==
|
29
|
-
Predicate { Call("abc", :nil?) } }
|
30
|
-
end
|
31
|
-
|
32
|
-
test "to_s and inspect" do
|
33
|
-
assert{ SimpleTemplatedPredicate{ Eq(1) }.inspect == "Eq(1)" }
|
34
|
-
assert{ SimpleTemplatedPredicate{ Eq(1) }.to_s == "Eq(1)" }
|
35
|
-
|
36
|
-
assert{ SimpleTemplatedPredicate{ Call(:include?, "bc") }.inspect == "Call(include?('bc'))" }
|
37
|
-
assert{ SimpleTemplatedPredicate{ Call(:include?, "bc") }.to_s == "Call(include?('bc'))" }
|
38
|
-
end
|
39
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
dir = File.dirname(__FILE__)
|
2
|
-
$LOAD_PATH.unshift "#{dir}/../lib"
|
3
|
-
$LOAD_PATH.unshift "../wrong/lib"
|
4
|
-
require "rubygems"
|
5
|
-
require "minitest/spec"
|
6
|
-
require "pp"
|
7
|
-
|
8
|
-
#DO NOT REQUIRE WRONG IN HERE
|
9
|
-
#The circularity between projects will cause certain tests to not work.
|
10
|
-
|
11
|
-
class Color
|
12
|
-
attr_reader :name
|
13
|
-
def initialize(name)
|
14
|
-
@name = name
|
15
|
-
end
|
16
|
-
|
17
|
-
def ==(other)
|
18
|
-
other.is_a?(Color) && @name == other.name
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_s
|
22
|
-
"name:#{@name}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def run_suite(wildcard)
|
27
|
-
#simple way to make sure requires are isolated
|
28
|
-
result = Dir[wildcard].collect{|test_file| system("ruby #{test_file}") }.uniq == [true]
|
29
|
-
puts "suite " + (result ? "passed" : "FAILED")
|
30
|
-
exit(result ? 0 : 1)
|
31
|
-
end
|
32
|
-
|
33
|
-
class MiniTest::Unit::TestCase
|
34
|
-
|
35
|
-
def assert_raise(exception_info_regex)
|
36
|
-
begin
|
37
|
-
yield
|
38
|
-
rescue Exception => e
|
39
|
-
assert{ exception_info_regex =~ "#{e.class.name} #{e.message}" }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
module Kernel
|
46
|
-
alias_method :regarding, :describe
|
47
|
-
|
48
|
-
def xregarding(str)
|
49
|
-
puts "x'd out 'regarding \"#{str}\"'"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class MiniTest::Spec
|
54
|
-
class << self
|
55
|
-
alias_method :test, :it
|
56
|
-
|
57
|
-
def xtest(str)
|
58
|
-
puts "x'd out 'test \"#{str}\"'"
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
MiniTest::Unit.autorun
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
require "./test/canonical_transform_cases"
|
3
|
-
|
4
|
-
unless RUBY_VERSION=="1.8.6"
|
5
|
-
|
6
|
-
require "predicated/to/arel"
|
7
|
-
include Predicated
|
8
|
-
|
9
|
-
regarding "convert a predicate to an arel where clause" do
|
10
|
-
include CanonicalTransformCases
|
11
|
-
|
12
|
-
class FakeEngine
|
13
|
-
def connection
|
14
|
-
end
|
15
|
-
|
16
|
-
def table_exists?(name)
|
17
|
-
true
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class FakeColumn
|
22
|
-
attr_reader :name, :type
|
23
|
-
def initialize(name, type)
|
24
|
-
@name = name
|
25
|
-
@type = type
|
26
|
-
end
|
27
|
-
|
28
|
-
def type_cast(value)
|
29
|
-
value
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
@table = Arel::Table.new(:widget, :engine => FakeEngine.new)
|
34
|
-
Arel::Table.tables = [@table]
|
35
|
-
@table.instance_variable_set("@columns".to_sym, [
|
36
|
-
FakeColumn.new("a", :integer),
|
37
|
-
FakeColumn.new("b", :integer),
|
38
|
-
FakeColumn.new("c", :integer)
|
39
|
-
])
|
40
|
-
|
41
|
-
|
42
|
-
@to_expectations = {
|
43
|
-
"simple operations" => {
|
44
|
-
"eq" => Arel::Predicates::Equality.new(@table.attributes["a"], 3),
|
45
|
-
"gt" => Arel::Predicates::GreaterThan.new(@table.attributes["a"], 3),
|
46
|
-
"lt" => Arel::Predicates::LessThan.new(@table.attributes["a"], 3),
|
47
|
-
"gte" => Arel::Predicates::GreaterThanOrEqualTo.new(@table.attributes["a"], 3),
|
48
|
-
"lte" => Arel::Predicates::LessThanOrEqualTo.new(@table.attributes["a"], 3)
|
49
|
-
},
|
50
|
-
"primitive types" => {
|
51
|
-
"false" => Arel::Predicates::Equality.new(@table.attributes["a"], false),
|
52
|
-
"true" => Arel::Predicates::Equality.new(@table.attributes["a"], true),
|
53
|
-
"string" => Arel::Predicates::Equality.new(@table.attributes["a"], "yyy")
|
54
|
-
},
|
55
|
-
"not" => {
|
56
|
-
"simple" => Arel::Predicates::Not.new(Arel::Predicates::Equality.new(@table.attributes["a"], true))
|
57
|
-
},
|
58
|
-
"simple and / or" => {
|
59
|
-
"and" => Arel::Predicates::And.new(
|
60
|
-
Arel::Predicates::Equality.new(@table.attributes["a"], 1),
|
61
|
-
Arel::Predicates::Equality.new(@table.attributes["b"], 2)
|
62
|
-
),
|
63
|
-
"or" => Arel::Predicates::Or.new(
|
64
|
-
Arel::Predicates::Equality.new(@table.attributes["a"], 1),
|
65
|
-
Arel::Predicates::Equality.new(@table.attributes["b"], 2)
|
66
|
-
)
|
67
|
-
},
|
68
|
-
"complex and / or" => {
|
69
|
-
"or and" => Arel::Predicates::Or.new(
|
70
|
-
Arel::Predicates::And.new(
|
71
|
-
Arel::Predicates::Equality.new(@table.attributes["a"], 1),
|
72
|
-
Arel::Predicates::Equality.new(@table.attributes["b"], 2)
|
73
|
-
),
|
74
|
-
Arel::Predicates::Equality.new(@table.attributes["c"], 3)
|
75
|
-
)
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
create_canonical_tests(@to_expectations) do |predicate|
|
80
|
-
predicate.to_arel(@table)
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
require "./test/canonical_transform_cases"
|
3
|
-
|
4
|
-
require "predicated/to/json"
|
5
|
-
include Predicated
|
6
|
-
|
7
|
-
regarding "convert a predicate to a json structure" do
|
8
|
-
include CanonicalTransformCases
|
9
|
-
|
10
|
-
@to_expectations = {
|
11
|
-
"simple operations" => {
|
12
|
-
"eq" => ["a", "==", 3],
|
13
|
-
"gt" => ["a", ">", 3],
|
14
|
-
"lt" => ["a", "<", 3],
|
15
|
-
"gte" => ["a", ">=", 3],
|
16
|
-
"lte" => ["a", "<=", 3]
|
17
|
-
},
|
18
|
-
"primitive types" => {
|
19
|
-
"false" => ["a", "==", false],
|
20
|
-
"true" => ["a", "==", true],
|
21
|
-
"string" => ["a", "==", "yyy"]
|
22
|
-
},
|
23
|
-
"not" => {
|
24
|
-
"simple" => {"not" => ["a", "==", true]}
|
25
|
-
},
|
26
|
-
"simple and / or" => {
|
27
|
-
"and" => {"and" => [["a", "==", 1], ["b", "==", 2]] },
|
28
|
-
"or" => {"or" => [["a", "==", 1], ["b", "==", 2]] }
|
29
|
-
},
|
30
|
-
"complex and / or" => {
|
31
|
-
"or and" => {"or" => [
|
32
|
-
{"and" => [["a", "==", 1], ["b", "==", 2]]},
|
33
|
-
["c", "==", 3]
|
34
|
-
]}
|
35
|
-
}
|
36
|
-
}
|
37
|
-
|
38
|
-
create_canonical_tests(@to_expectations) do |predicate|
|
39
|
-
predicate.to_json_struct
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
regarding "convert a predicate to a json string" do
|
44
|
-
include CanonicalTransformCases
|
45
|
-
|
46
|
-
@to_expectations = {
|
47
|
-
"simple operations" => {
|
48
|
-
"eq" => %{["a","==",3]},
|
49
|
-
"gt" => %{["a",">",3]},
|
50
|
-
"lt" => %{["a","<",3]},
|
51
|
-
"gte" => %{["a",">=",3]},
|
52
|
-
"lte" => %{["a","<=",3]}
|
53
|
-
},
|
54
|
-
"primitive types" => {
|
55
|
-
"false" => %{["a","==",false]},
|
56
|
-
"true" => %{["a","==",true]},
|
57
|
-
"string" => %{["a","==","yyy"]}
|
58
|
-
},
|
59
|
-
"not" => {
|
60
|
-
"simple" => %{{"not":["a","==",true]}}
|
61
|
-
},
|
62
|
-
"simple and / or" => {
|
63
|
-
"and" => %{{"and":[["a","==",1],["b","==",2]]}},
|
64
|
-
"or" => %{{"or":[["a","==",1],["b","==",2]]}}
|
65
|
-
},
|
66
|
-
"complex and / or" => {
|
67
|
-
"or and" => %{{"or":[{"and":[["a","==",1],["b","==",2]]},["c","==",3]]}}
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
create_canonical_tests(@to_expectations) do |predicate|
|
72
|
-
predicate.to_json_str.gsub("\n", "").gsub(" ", "")
|
73
|
-
end
|
74
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/to/sentence"
|
4
|
-
include Predicated
|
5
|
-
|
6
|
-
regarding "convert a predicate to an english sentence" do
|
7
|
-
|
8
|
-
after do
|
9
|
-
Operation.reset_verb_phrases
|
10
|
-
end
|
11
|
-
|
12
|
-
test "operations" do
|
13
|
-
assert { Predicate{ Eq("a",1) }.to_sentence == '"a" is equal to 1' }
|
14
|
-
assert { Predicate{ Gt("a",1) }.to_sentence == '"a" is greater than 1' }
|
15
|
-
assert { Predicate{ Lt("a",1) }.to_sentence == '"a" is less than 1' }
|
16
|
-
assert { Predicate{ Gte("a",1) }.to_sentence == '"a" is greater than or equal to 1' }
|
17
|
-
assert { Predicate{ Lte("a",1) }.to_sentence == '"a" is less than or equal to 1' }
|
18
|
-
|
19
|
-
assert { Predicate{ Eq("a",1) }.to_negative_sentence == '"a" is not equal to 1' }
|
20
|
-
assert { Predicate{ Gt("a",1) }.to_negative_sentence == '"a" is not greater than 1' }
|
21
|
-
assert { Predicate{ Lt("a",1) }.to_negative_sentence == '"a" is not less than 1' }
|
22
|
-
assert { Predicate{ Gte("a",1) }.to_negative_sentence == '"a" is not greater than or equal to 1' }
|
23
|
-
assert { Predicate{ Lte("a",1) } .to_negative_sentence == '"a" is not less than or equal to 1' }
|
24
|
-
end
|
25
|
-
|
26
|
-
test "primitive types" do
|
27
|
-
assert { Predicate{ Eq("a",1) }.to_sentence == '"a" is equal to 1' }
|
28
|
-
assert { Predicate{ Eq("a",nil) }.to_sentence == '"a" is equal to nil' }
|
29
|
-
assert { Predicate{ Eq("a",true) }.to_sentence == '"a" is equal to true' }
|
30
|
-
assert { Predicate{ Eq("a",3.14) }.to_sentence == '"a" is equal to 3.14' }
|
31
|
-
end
|
32
|
-
|
33
|
-
test "not" do
|
34
|
-
assert { Predicate{ Not(Eq("a",1)) }.to_sentence == '"a" is not equal to 1' }
|
35
|
-
assert { Predicate{ Not(Eq("a",1)) }.to_negative_sentence == '"a" is equal to 1' }
|
36
|
-
end
|
37
|
-
|
38
|
-
test "complex types" do
|
39
|
-
assert { Predicate{ Eq([1,2],{3=>4}) }.to_sentence == "[1, 2] is equal to {3=>4}" }
|
40
|
-
end
|
41
|
-
|
42
|
-
test "default verb phrases for unknown methods (which are awkward/ESL-ish)" do
|
43
|
-
assert { Predicate{ Call("abc", :exclude?, "bc") }.to_sentence ==
|
44
|
-
'"abc" is exclude "bc"' }
|
45
|
-
|
46
|
-
assert { Predicate{ Call("abc", :exclude?, "bc") }.to_negative_sentence ==
|
47
|
-
'"abc" is not exclude "bc"' }
|
48
|
-
|
49
|
-
assert { Predicate{ Call("abc", :friends_with?, "bc") }.to_sentence ==
|
50
|
-
'"abc" is friends with "bc"' }
|
51
|
-
end
|
52
|
-
|
53
|
-
test "register methods and their verb phrases" do
|
54
|
-
Operation.register_verb_phrase(:exclude?, "excludes", "does not exclude")
|
55
|
-
assert { Predicate{ Call("abc", :exclude?, "bc") }.to_sentence ==
|
56
|
-
'"abc" excludes "bc"' }
|
57
|
-
|
58
|
-
assert { Predicate{ Call("abc", :exclude?, "bc") }.to_negative_sentence ==
|
59
|
-
'"abc" does not exclude "bc"' }
|
60
|
-
end
|
61
|
-
|
62
|
-
test "some other common methods have sensible verb phrases by default" do
|
63
|
-
assert { Predicate{ Call("abc", :include?, 'bc') }.to_sentence == '"abc" includes "bc"' }
|
64
|
-
assert { Predicate{ Call("abc", :include?, 'bc') }.to_negative_sentence == '"abc" does not include "bc"' }
|
65
|
-
|
66
|
-
s = Predicate{ Call("abc", :is_a?, String) }.to_sentence
|
67
|
-
assert { s == '"abc" is a String' }
|
68
|
-
assert { Predicate{ Call("abc", :is_a?, String) }.to_negative_sentence == '"abc" is not a String' }
|
69
|
-
end
|
70
|
-
|
71
|
-
test "nothing on the far side" do
|
72
|
-
assert { Predicate{ Call("abc", :nil?) }.to_sentence == '"abc" is nil' }
|
73
|
-
assert { Predicate{ Call("abc", :nil?) }.to_negative_sentence == '"abc" is not nil' }
|
74
|
-
end
|
75
|
-
|
76
|
-
test "simple and + or" do
|
77
|
-
assert { Predicate{ And(Eq("a", 1),Eq("b", 2)) }.to_sentence ==
|
78
|
-
'"a" is equal to 1 and "b" is equal to 2' }
|
79
|
-
|
80
|
-
assert { Predicate{ Or(Eq("a", 1),Eq("b", 2)) }.to_sentence ==
|
81
|
-
'"a" is equal to 1 or "b" is equal to 2' }
|
82
|
-
|
83
|
-
assert { Predicate{ And(Eq("a", 1),Eq("b", 2)) }.to_negative_sentence ==
|
84
|
-
'This is not true: "a" is equal to 1 and "b" is equal to 2' }
|
85
|
-
|
86
|
-
assert { Predicate{ Or(Eq("a", 1),Eq("b", 2)) }.to_negative_sentence ==
|
87
|
-
'This is not true: "a" is equal to 1 or "b" is equal to 2' }
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|