forked from clbustos/rubyvis
-
Notifications
You must be signed in to change notification settings - Fork 1
/
anchor_spec.rb
155 lines (137 loc) · 4.17 KB
/
anchor_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
describe Rubyvis::Anchor do
include Rubyvis::GeneralSpec
it "should have correct properties" do
props=[:antialias, :bottom, :cursor, :data, :events, :id, :left, :name, :reverse, :right, :title, :top, :visible].inject({}) {|ac, v| ac[v]=true; ac}
Rubyvis::Anchor.properties.should==props
end
it "should be initialized with an object which respond to parent" do
my_mock=mock('mark')
my_mock.should_receive(:parent).with(no_args())
Rubyvis.Anchor(my_mock)
end
describe "inner anchor data should work fine" do
before do
w=200
h=200
data_p1=[]
data_p2=[]
data_l=[]
@expected_l=[]
@expected_p2=[]
vis = pv.Panel.new().width(w).height(h)
cell=vis.add(pv.Panel).
data([1,2]).top(lambda {|*args| data_p1.push(args); 100}).
add(pv.Panel). data(['a','b']).top(lambda {|*args| data_p2.push(args); 100;})
cell.anchor('center').add(pv.Bar).top(lambda {|*args| data_l.push args; 1})
[1,2].each {|a| %w{a b}.each {|b|
@expected_l.push([b,b,a,nil])
@expected_p2.push([b,a,nil])
}}
@expected_p1=[[1,nil],[2,nil]]
@data_p1=data_p1
@data_p2=data_p2
@data_l=data_l
vis.render
end
if(true)
it "first loop correct" do
@data_p1.should==@expected_p1
end
it "second loop correct" do
@data_p2.should==@expected_p2
end
end
it "label loop correct" do
@data_l.should==@expected_l
end
end
it "antibiotics example should render correct data" do
a1=['a','b','c']
a2=[1,2,3]
antibiotics=["penicillin", "streptomycin", "neomycin"]
adatas=[]
s = 180
_p = 20
vis = pv.Panel.new().
height(s * antibiotics.size + _p * (antibiotics.size - 1)).
width(s * antibiotics.size + _p * (antibiotics.size - 1)).
top(14.5).
left(14.5).
bottom(44).
right(14)
cell = vis.add(pv.Panel).
data(a1).
width(s).
left(lambda {(s + _p) * index}).
add(pv.Panel).
data(a2).
height(s).
top(lambda {(s + _p) * self.index});
cell.anchor("center").add(pv.Label).text(lambda {|*args| adatas.push args})
expected=[]
a1.each {|a| a2.each {|b| expected.push([b,b,a,nil])}}
vis.render
adatas.should==expected
end
context "Panel-Panel-label assigment" do
before do
@h=200
@w=200
@values=["a","b","c"]
@vis = Rubyvis.Panel.new.width(@w).height(@h). add(pv.Panel).data(@values). add(pv.Panel).data(@values)
@anchor=@vis.anchor('center')
@label=@vis.add(pv.Label)
end
it "should have correct data" do
datas=[]
@label.text(lambda {|*args| datas.push args})
@vis.render
expected=[]
@values.each {|a| @values.each {|b| expected.push([b,b,a,nil])}}
datas.should==expected
end
end
it "should render equal to protovis 'anchor.html' example" do
@vis = Rubyvis::Panel.new().
width(200).
height(200)
@vis.add(Rubyvis::Bar).
fill_style("#ccc").
anchor("top").add(Rubyvis::Label).
text("top").
target.
anchor("bottom").
add(pv.Label).
text("bottom")
@vis.render
@pv_out=fixture_svg_read("anchor.svg")
@vis.to_svg.should have_same_svg_elements(@pv_out)
end
context "Panel-bar assigment" do
before do
@h=200
@w=200
@vis = Rubyvis.Panel.new.width(@w).height(@h)
@bar = @vis.add(Rubyvis::Bar).data([1,2,3])
@anchor=@bar.anchor('center')
@label=@anchor.add(Rubyvis::Label)
end
it "should have correct data for direct asigment" do
datas=[]
expected=[[1,nil],[2,nil],[3,nil]]
@label.text(lambda {|*args| datas.push args})
@vis.render
datas.should==expected
end
it "should have correct data for two levels of data" do
datas=[]
@vis.data(%w{a b c})
expected=[]
%w{a b c}.each {|a| [1,2,3].each {|b| expected.push([b,a])}}
@label.text(lambda {|*args| datas.push args})
@vis.render
datas.should==expected
end
end
end