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,86 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/predicate"
|
4
|
-
require "predicated/constrain"
|
5
|
-
include Predicated
|
6
|
-
|
7
|
-
regarding %{constraints are rules about the content and structure of predicates.
|
8
|
-
a predicate might violate a constraint} do
|
9
|
-
|
10
|
-
before do
|
11
|
-
@value_not_equal_to_two =
|
12
|
-
Constraint.new(:name => "Value can't be two",
|
13
|
-
:selectors => [Operation],
|
14
|
-
:check_that => proc{|predicate, ancestors| predicate.right!=2})
|
15
|
-
|
16
|
-
@not_more_than_two_levels_deep =
|
17
|
-
Constraint.new(:name => "Limited to two levels deep",
|
18
|
-
:check_that => proc{|predicate, ancestors| ancestors.length<=2})
|
19
|
-
|
20
|
-
@one = Predicate{Eq(1,1)}
|
21
|
-
@two = Predicate{Eq(2,2)}
|
22
|
-
@three = Predicate{Eq(3,3)}
|
23
|
-
|
24
|
-
@one_and_three = Predicate{And(Eq(1,1), Eq(3,3))}
|
25
|
-
@one_and_two = Predicate{And(Eq(1,1), Eq(2,2))}
|
26
|
-
|
27
|
-
@deeply_nested = Predicate{Or(Or(And(Eq(1,1), Eq(3,3)), Eq(4,4)), Eq(5,5))}
|
28
|
-
end
|
29
|
-
|
30
|
-
test "apply to each predicate - simple" do
|
31
|
-
constraints = Constraints.new.add(@value_not_equal_to_two)
|
32
|
-
|
33
|
-
assert{ constraints.check(@one).pass? }
|
34
|
-
deny { constraints.check(@two).pass? }
|
35
|
-
|
36
|
-
assert{ constraints.check(@one_and_three).pass? }
|
37
|
-
deny { constraints.check(@one_and_two).pass? }
|
38
|
-
end
|
39
|
-
|
40
|
-
test "apply each to each predicate - many constraints" do
|
41
|
-
constraints =
|
42
|
-
Constraints.new.
|
43
|
-
add(@value_not_equal_to_two).
|
44
|
-
add(@not_more_than_two_levels_deep)
|
45
|
-
|
46
|
-
assert{ constraints.check(@one_and_three).pass? }
|
47
|
-
deny { constraints.check(@one_and_two).pass? }
|
48
|
-
|
49
|
-
assert{ constraints.check(@one_and_three).pass? }
|
50
|
-
deny { constraints.check(@deeply_nested).pass? }
|
51
|
-
end
|
52
|
-
|
53
|
-
test "equality" do
|
54
|
-
one = Constraint.new(:name => "Value can't be two",
|
55
|
-
:selectors => [Operation],
|
56
|
-
:check_that => proc{|predicate, ancestors| predicate.right!=2})
|
57
|
-
two = Constraint.new(:name => "Value can't be two",
|
58
|
-
:selectors => [Operation],
|
59
|
-
:check_that => proc{|predicate, ancestors| predicate.right!=2})
|
60
|
-
three = Constraint.new(:name => "Some other constraint",
|
61
|
-
:check_that => proc{|predicate, ancestors| false})
|
62
|
-
|
63
|
-
assert{ one == two }
|
64
|
-
deny { one == three }
|
65
|
-
end
|
66
|
-
|
67
|
-
test %{result contains information about whether the checks passed,
|
68
|
-
which constraints were violated,
|
69
|
-
along with the offending predicates} do
|
70
|
-
constraints = Constraints.new.add(@value_not_equal_to_two)
|
71
|
-
|
72
|
-
result = constraints.check(@one)
|
73
|
-
assert{ result.pass? }
|
74
|
-
assert{ result.violations == {} }
|
75
|
-
|
76
|
-
result = constraints.check(Predicate{And(Eq(1,1), And(Eq(2,2), Eq(3,2)))})
|
77
|
-
deny { result.pass? }
|
78
|
-
assert{
|
79
|
-
result.violations == {
|
80
|
-
@value_not_equal_to_two => [Equal.new(2,2), Equal.new(3,2)]
|
81
|
-
}
|
82
|
-
}
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/predicate"
|
4
|
-
include Predicated
|
5
|
-
|
6
|
-
regarding "you can flip through the predicate tree, like any enumerable. a list of ancestors of each node are provided" do
|
7
|
-
|
8
|
-
test "simple" do
|
9
|
-
assert { Predicate { Eq(1, 2) }.to_a == [[Predicate { Eq(1, 2) }, []]] }
|
10
|
-
end
|
11
|
-
|
12
|
-
test "complex" do
|
13
|
-
the_top = Predicate { And(Eq(1, 2), Or(Eq(3, 4), Eq(5, 6))) }
|
14
|
-
the_or = Predicate { Or(Eq(3, 4), Eq(5, 6)) }
|
15
|
-
assert { the_top.to_a ==
|
16
|
-
[
|
17
|
-
[the_top, []],
|
18
|
-
[Predicate { Eq(1, 2) }, [the_top]],
|
19
|
-
[Predicate { Or(Eq(3, 4), Eq(5, 6)) }, [the_top]],
|
20
|
-
[Predicate { Eq(3, 4) }, [the_top, the_or]],
|
21
|
-
[Predicate { Eq(5, 6) }, [the_top, the_or]]
|
22
|
-
]
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
test "not" do
|
27
|
-
the_top = Predicate { Not(Eq(1, 2)) }
|
28
|
-
assert { the_top.to_a == [[the_top, []], [Predicate { Eq(1, 2) }, [the_top]]] }
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/predicate"
|
4
|
-
include Predicated
|
5
|
-
|
6
|
-
regarding "prove value equality" do
|
7
|
-
|
8
|
-
test "simple" do
|
9
|
-
assert { Predicate { Eq(1, 1) } == Predicate { Eq(1, 1) } }
|
10
|
-
deny { Predicate { Eq(1, 1) } == Predicate { Eq(1, 99) } }
|
11
|
-
end
|
12
|
-
|
13
|
-
test "unary" do
|
14
|
-
assert { Predicate { Not(Eq(1, 1)) } == Predicate { Not(Eq(1, 1)) } }
|
15
|
-
deny { Predicate { Not(Eq(1, 1)) } == Predicate { Not(Eq(99, 99)) } }
|
16
|
-
end
|
17
|
-
|
18
|
-
test "complex" do
|
19
|
-
assert { Predicate { And(Eq(1, 1), Or(Eq(2, 2), Eq(3, 3))) } ==
|
20
|
-
Predicate { And(Eq(1, 1), Or(Eq(2, 2), Eq(3, 3))) } }
|
21
|
-
|
22
|
-
deny { Predicate { And(Eq(1, 1), Or(Eq(2, 2), Eq(3, 3))) } ==
|
23
|
-
Predicate { And(Eq(1, 1), Or(Eq(2, 99), Eq(3, 3))) } }
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
regarding "predicate base class. not sure I'm happy with the implementation...too tricky" do
|
29
|
-
test "all predicates descend from a predicate base class. it's a marker class" do
|
30
|
-
assert{ And.new(Equal.new(1,1),Equal.new(2,2)).is_a?(Predicate) }
|
31
|
-
end
|
32
|
-
end
|
@@ -1,149 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/evaluate"
|
4
|
-
include Predicated
|
5
|
-
|
6
|
-
regarding "evaluate a predicate as boolean logic in ruby. change the context by providing and optional binding." do
|
7
|
-
|
8
|
-
regarding "proving out basic operations" do
|
9
|
-
test "equals" do
|
10
|
-
assert { Predicate { Eq(1, 1) }.evaluate }
|
11
|
-
deny { Predicate { Eq(1, 2) }.evaluate }
|
12
|
-
end
|
13
|
-
|
14
|
-
test "less than" do
|
15
|
-
assert { Predicate { Lt(1, 2) }.evaluate }
|
16
|
-
deny { Predicate { Lt(2, 2) }.evaluate }
|
17
|
-
deny { Predicate { Lt(3, 2) }.evaluate }
|
18
|
-
end
|
19
|
-
|
20
|
-
test "greater than" do
|
21
|
-
deny { Predicate { Gt(1, 2) }.evaluate }
|
22
|
-
deny { Predicate { Gt(2, 2) }.evaluate }
|
23
|
-
assert { Predicate { Gt(3, 2) }.evaluate }
|
24
|
-
end
|
25
|
-
|
26
|
-
test "less than or equal to" do
|
27
|
-
assert { Predicate { Lte(1, 2) }.evaluate }
|
28
|
-
assert { Predicate { Lte(2, 2) }.evaluate }
|
29
|
-
deny { Predicate { Lte(3, 2) }.evaluate }
|
30
|
-
end
|
31
|
-
|
32
|
-
test "greater than or equal to" do
|
33
|
-
deny { Predicate { Gte(1, 2) }.evaluate }
|
34
|
-
assert { Predicate { Gte(2, 2) }.evaluate }
|
35
|
-
assert { Predicate { Gte(3, 2) }.evaluate }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
regarding "comparing values of different data types" do
|
40
|
-
test "strings" do
|
41
|
-
assert { Predicate { Eq("1", "1") }.evaluate }
|
42
|
-
deny { Predicate { Eq("1", 1) }.evaluate }
|
43
|
-
deny { Predicate { Eq("1", nil) }.evaluate }
|
44
|
-
end
|
45
|
-
|
46
|
-
test "booleans" do
|
47
|
-
assert { Predicate { Eq(true, true) }.evaluate }
|
48
|
-
deny { Predicate { Eq(false, true) }.evaluate }
|
49
|
-
|
50
|
-
deny { Predicate { Eq(false, nil) }.evaluate }
|
51
|
-
deny { Predicate { Eq(true, nil) }.evaluate }
|
52
|
-
|
53
|
-
deny { Predicate { Eq("false", false) }.evaluate }
|
54
|
-
deny { Predicate { Eq("true", true) }.evaluate }
|
55
|
-
end
|
56
|
-
|
57
|
-
test "numbers" do
|
58
|
-
assert { Predicate { Eq(1, 1) }.evaluate }
|
59
|
-
assert { Predicate { Eq(1, 1.0) }.evaluate }
|
60
|
-
assert { Predicate { Eq(1.0, 1.0) }.evaluate }
|
61
|
-
deny { Predicate { Eq(1, 2) }.evaluate }
|
62
|
-
deny { Predicate { Eq(1, nil) }.evaluate }
|
63
|
-
end
|
64
|
-
|
65
|
-
test "objects" do
|
66
|
-
assert { Predicate { Eq(Color.new("red"), Color.new("red")) }.evaluate }
|
67
|
-
deny { Predicate { Eq(Color.new("red"), Color.new("BLUE")) }.evaluate }
|
68
|
-
deny { Predicate { Eq(Color.new("red"), 2) }.evaluate }
|
69
|
-
deny { Predicate { Eq(Color.new("red"), "red") }.evaluate }
|
70
|
-
deny { Predicate { Eq(Color.new("red"), nil) }.evaluate }
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
regarding "and" do
|
76
|
-
test "left and right must be true" do
|
77
|
-
assert { Predicate { And( Eq(1, 1), Eq(2, 2) ) }.evaluate }
|
78
|
-
deny { Predicate { And( Eq(99, 1), Eq(2, 2) ) }.evaluate }
|
79
|
-
deny { Predicate { And( Eq(1, 1), Eq(99, 2) ) }.evaluate }
|
80
|
-
end
|
81
|
-
|
82
|
-
test "simple true and false work too" do
|
83
|
-
assert { Predicate { And( true, true ) }.evaluate }
|
84
|
-
assert { Predicate { And( true, Eq(2, 2) ) }.evaluate }
|
85
|
-
deny { Predicate { And( true, false ) }.evaluate }
|
86
|
-
deny { Predicate { And( Eq(2, 2), false ) }.evaluate }
|
87
|
-
end
|
88
|
-
|
89
|
-
test "nested" do
|
90
|
-
assert { Predicate { And( true, And(true, true) ) }.evaluate }
|
91
|
-
deny { Predicate { And( false, And(true, true) ) }.evaluate }
|
92
|
-
deny { Predicate { And( true, And(true, false) ) }.evaluate }
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
regarding "or" do
|
97
|
-
test "one of left or right must be true" do
|
98
|
-
assert { Predicate { Or(true, true) }.evaluate }
|
99
|
-
assert { Predicate { Or(true, false) }.evaluate }
|
100
|
-
assert { Predicate { Or(false, true) }.evaluate }
|
101
|
-
deny { Predicate { Or(false, false) }.evaluate }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
regarding "not" do
|
106
|
-
test "simple negation" do
|
107
|
-
assert { Predicate { Not(Eq(3, 2)) }.evaluate }
|
108
|
-
deny { Predicate { Not(Eq(2, 2)) }.evaluate }
|
109
|
-
end
|
110
|
-
|
111
|
-
test "complex" do
|
112
|
-
assert { Predicate { Not( And(Eq(2, 2),false) ) }.evaluate }
|
113
|
-
deny { Predicate { Not( And(Eq(2, 2),true) ) }.evaluate }
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
regarding "evaluate adds a generic 'call' class. that is, object.message(args)" do
|
118
|
-
test "evaluate simple calls" do
|
119
|
-
assert { Predicate { Call("abc", :include?, "bc") }.evaluate }
|
120
|
-
deny { Predicate { Call("abc", :include?, "ZZ") }.evaluate }
|
121
|
-
end
|
122
|
-
|
123
|
-
test "nil call. call defaults to no args if none are specified" do
|
124
|
-
assert { Predicate { Call(nil, :nil?, []) }.evaluate }
|
125
|
-
deny { Predicate { Call("abc", :nil?, []) }.evaluate }
|
126
|
-
|
127
|
-
assert { Predicate { Call(nil, :nil?) }.evaluate }
|
128
|
-
deny { Predicate { Call("abc", :nil?) }.evaluate }
|
129
|
-
end
|
130
|
-
|
131
|
-
test "inspect" do
|
132
|
-
assert { Call.new("abc", :include?, "bc").inspect == "Call('abc'.include?('bc'))" }
|
133
|
-
end
|
134
|
-
|
135
|
-
test "inspect, empty right hand side" do
|
136
|
-
assert { Call.new("abc", :nil?).inspect == "Call('abc'.nil?)" }
|
137
|
-
end
|
138
|
-
|
139
|
-
test "call equality" do
|
140
|
-
assert { Call.new("abc", :include?, "bc") == Call.new("abc", :include?, "bc") }
|
141
|
-
deny { Call.new("ZZZ", :include?, "bc") == Call.new("abc", :include?, "bc") }
|
142
|
-
deny { Call.new("abc", :zzz, "bc") == Call.new("abc", :include?, "bc") }
|
143
|
-
deny { Call.new("abc", :include?, "ZZZ") == Call.new("abc", :include?, "bc") }
|
144
|
-
end
|
145
|
-
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
require "./test/canonical_transform_cases"
|
3
|
-
|
4
|
-
if RUBY_VERSION =~/^1.9/
|
5
|
-
puts "skipping callable object-related tests in 1.9"
|
6
|
-
else
|
7
|
-
|
8
|
-
require "predicated/from/callable_object"
|
9
|
-
include Predicated
|
10
|
-
|
11
|
-
regarding "callable object - canoical transform cases" do
|
12
|
-
include CanonicalTransformCases
|
13
|
-
|
14
|
-
@expectations = {
|
15
|
-
"simple operations" => {
|
16
|
-
"eq" => Predicate.from_callable_object{"a"==3},
|
17
|
-
"gt" => Predicate.from_callable_object{"a">3},
|
18
|
-
"lt" => Predicate.from_callable_object{"a"<3},
|
19
|
-
"gte" => Predicate.from_callable_object{"a">=3},
|
20
|
-
"lte" => Predicate.from_callable_object{"a"<=3}
|
21
|
-
},
|
22
|
-
"primitive types" => {
|
23
|
-
"false" => Predicate.from_callable_object{"a"==false},
|
24
|
-
"true" => Predicate.from_callable_object{"a"==true},
|
25
|
-
"string" => Predicate.from_callable_object{"a"=="yyy"}
|
26
|
-
},
|
27
|
-
"not" => {
|
28
|
-
"simple" => Predicate.from_callable_object{!("a"==true)}
|
29
|
-
},
|
30
|
-
"simple and / or" => {
|
31
|
-
#parens are necessary around AND's in solr in order to force precedence
|
32
|
-
"and" => Predicate.from_callable_object{"a"==1 && "b"==2},
|
33
|
-
"or" => Predicate.from_callable_object{"a"==1 || "b"==2}
|
34
|
-
},
|
35
|
-
"complex and / or" => {
|
36
|
-
"or and" => Predicate.from_callable_object{"a"==1 && "b"==2 || "c"==3}
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
create_canonical_tests(@expectations)
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require "./test/test_helper"
|
2
|
-
require "./test/canonical_transform_cases"
|
3
|
-
|
4
|
-
|
5
|
-
if RUBY_VERSION =~/^1.9/
|
6
|
-
puts "skipping callable object-related tests in 1.9"
|
7
|
-
else
|
8
|
-
|
9
|
-
require "predicated/from/callable_object"
|
10
|
-
include Predicated
|
11
|
-
|
12
|
-
regarding "convert a ruby callable object - a proc or lambda - into a predicate" do
|
13
|
-
|
14
|
-
regarding "basic operations" do
|
15
|
-
|
16
|
-
test "complex types" do
|
17
|
-
assert_equal Predicate.from_callable_object{Color.new("red")==Color.new("blue")},
|
18
|
-
Predicate{ Eq(Color.new("red"),Color.new("blue")) }
|
19
|
-
|
20
|
-
assert_equal Predicate.from_callable_object{ {1=>2}=={"a"=>"b"} },
|
21
|
-
Predicate{ Eq({1=>2},{"a"=>"b"}) }
|
22
|
-
end
|
23
|
-
|
24
|
-
test "word and / or" do
|
25
|
-
assert_equal Predicate.from_callable_object{1==1 and 2==2}, Predicate{ And(Eq(1,1),Eq(2,2)) }
|
26
|
-
assert_equal Predicate.from_callable_object{1==1 or 2==2}, Predicate{ Or(Eq(1,1),Eq(2,2)) }
|
27
|
-
end
|
28
|
-
|
29
|
-
test "substitute in from the binding" do
|
30
|
-
a = 1
|
31
|
-
b = "1"
|
32
|
-
c = "c"
|
33
|
-
d = Color.new("purple")
|
34
|
-
|
35
|
-
assert_equal Predicate.from_callable_object(binding()){a==1}, Predicate{ Eq(1,1) }
|
36
|
-
assert_equal Predicate.from_callable_object(binding()){b==1}, Predicate{ Eq("1",1) }
|
37
|
-
assert_equal Predicate.from_callable_object(binding()){c==b}, Predicate{ Eq("c","1") }
|
38
|
-
assert_equal Predicate.from_callable_object(binding()){d==d}, Predicate{ Eq(Color.new("purple"),
|
39
|
-
Color.new("purple")) }
|
40
|
-
assert Predicate.from_callable_object(binding()){d==d}.left === d
|
41
|
-
|
42
|
-
assert_equal Predicate.from_callable_object(binding()){a==b && b==c},
|
43
|
-
Predicate{ And(Eq(1,"1"),Eq("1","c")) }
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
test "parens change precedence" do
|
48
|
-
assert_equal Predicate.from_callable_object{1==1 || 2==2 && 3==3},
|
49
|
-
Predicate{ Or( Eq(1,1), And(Eq(2,2),Eq(3,3)) ) }
|
50
|
-
|
51
|
-
assert_equal Predicate.from_callable_object{(1==1 || 2==2) && 3==3},
|
52
|
-
Predicate{ And( Or(Eq(1,1),Eq(2,2)), Eq(3,3) ) }
|
53
|
-
end
|
54
|
-
|
55
|
-
test "works with procs and lambdas" do
|
56
|
-
|
57
|
-
assert_equal Predicate.from_callable_object(proc{1<2}), Predicate{ Lt(1,2) }
|
58
|
-
assert_equal Predicate.from_callable_object(lambda{1<2}), Predicate{ Lt(1,2) }
|
59
|
-
|
60
|
-
a = "aaa"
|
61
|
-
assert_equal Predicate.from_callable_object(proc{a=="bbb"}, binding()),
|
62
|
-
Predicate{ Eq("aaa","bbb") }
|
63
|
-
assert_equal Predicate.from_callable_object(lambda{a=="bbb"}, binding()),
|
64
|
-
Predicate{ Eq("aaa","bbb") }
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
regarding "errors" do
|
70
|
-
test "predicates only" do
|
71
|
-
assert_raises(Predicated::Predicate::DontKnowWhatToDoWithThisSexpError) do
|
72
|
-
Predicate.from_callable_object{a=1}
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require "./test/test_helper_with_wrong"
|
2
|
-
|
3
|
-
require "predicated/from/json"
|
4
|
-
require "./test/canonical_transform_cases"
|
5
|
-
include Predicated
|
6
|
-
|
7
|
-
regarding "convert a json string to a predicate" do
|
8
|
-
include CanonicalTransformCases
|
9
|
-
|
10
|
-
@expectations = {
|
11
|
-
"simple operations" => {
|
12
|
-
"eq" => Predicate.from_json_str(%{["a","==",3]}),
|
13
|
-
"gt" => Predicate.from_json_str(%{["a",">",3]}),
|
14
|
-
"lt" => Predicate.from_json_str(%{["a","<",3]}),
|
15
|
-
"gte" => Predicate.from_json_str(%{["a",">=",3]}),
|
16
|
-
"lte" => Predicate.from_json_str(%{["a","<=",3]})
|
17
|
-
},
|
18
|
-
"primitive types" => {
|
19
|
-
"false" => Predicate.from_json_str(%{["a","==",false]}),
|
20
|
-
"true" => Predicate.from_json_str(%{["a","==",true]}),
|
21
|
-
"string" => Predicate.from_json_str(%{["a","==","yyy"]})
|
22
|
-
},
|
23
|
-
"not" => {
|
24
|
-
"simple" => Predicate.from_json_str(%{{"not":["a","==",true]}})
|
25
|
-
},
|
26
|
-
"simple and / or" => {
|
27
|
-
#parens are necessary around AND's in solr in order to force precedence
|
28
|
-
"and" => Predicate.from_json_str(%{{"and":[["a","==",1],["b","==",2]]}}),
|
29
|
-
"or" => Predicate.from_json_str(%{{"or":[["a","==",1],["b","==",2]]}})
|
30
|
-
},
|
31
|
-
"complex and / or" => {
|
32
|
-
"or and" => Predicate.from_json_str(%{
|
33
|
-
{
|
34
|
-
"or":[
|
35
|
-
{"and":[["a","==",1],["b","==",2]]},
|
36
|
-
["c","==",3]
|
37
|
-
]
|
38
|
-
}
|
39
|
-
})
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
create_canonical_tests(@expectations)
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
regarding "convert a json structure to a predicate" do
|
48
|
-
include CanonicalTransformCases
|
49
|
-
|
50
|
-
@expectations = {
|
51
|
-
"simple operations" => {
|
52
|
-
"eq" => Predicate.from_json_struct(["a", "==", 3]),
|
53
|
-
"gt" => Predicate.from_json_struct(["a", ">", 3]),
|
54
|
-
"lt" => Predicate.from_json_struct(["a", "<", 3]),
|
55
|
-
"gte" => Predicate.from_json_struct(["a", ">=", 3]),
|
56
|
-
"lte" => Predicate.from_json_struct(["a", "<=", 3])
|
57
|
-
},
|
58
|
-
"primitive types" => {
|
59
|
-
"false" => Predicate.from_json_struct(["a", "==", false]),
|
60
|
-
"true" => Predicate.from_json_struct(["a", "==", true]),
|
61
|
-
"string" => Predicate.from_json_struct(["a", "==", "yyy"])
|
62
|
-
},
|
63
|
-
"not" => {
|
64
|
-
"simple" => Predicate.from_json_struct("not" => ["a", "==", true])
|
65
|
-
},
|
66
|
-
"simple and / or" => {
|
67
|
-
#parens are necessary around AND's in solr in order to force precedence
|
68
|
-
"and" => Predicate.from_json_struct("and" => [["a", "==", 1],["b", "==", 2]]),
|
69
|
-
"or" => Predicate.from_json_struct("or" => [["a", "==", 1],["b", "==", 2]])
|
70
|
-
},
|
71
|
-
"complex and / or" => {
|
72
|
-
"or and" => Predicate.from_json_struct(
|
73
|
-
"or" => [
|
74
|
-
{"and" => [["a", "==", 1],["b", "==", 2]]},
|
75
|
-
["c", "==", 3]
|
76
|
-
]
|
77
|
-
)
|
78
|
-
}
|
79
|
-
}
|
80
|
-
|
81
|
-
create_canonical_tests(@expectations)
|
82
|
-
|
83
|
-
end
|