thinreports 0.6.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -0
- data/README.rdoc +100 -0
- data/Rakefile +10 -0
- data/doc/yardoc_templates/default/layout/html/footer.erb +10 -0
- data/lib/thinreports.rb +11 -0
- data/lib/thinreports/core.rb +20 -0
- data/lib/thinreports/core/errors.rb +58 -0
- data/lib/thinreports/core/events.rb +71 -0
- data/lib/thinreports/core/ext.rb +5 -0
- data/lib/thinreports/core/ext/array.rb +19 -0
- data/lib/thinreports/core/ext/hash.rb +19 -0
- data/lib/thinreports/core/ext/object.rb +25 -0
- data/lib/thinreports/core/format.rb +14 -0
- data/lib/thinreports/core/format/base.rb +93 -0
- data/lib/thinreports/core/format/builder.rb +65 -0
- data/lib/thinreports/core/ordered_hash.rb +39 -0
- data/lib/thinreports/core/page.rb +91 -0
- data/lib/thinreports/core/shape.rb +53 -0
- data/lib/thinreports/core/shape/base.rb +16 -0
- data/lib/thinreports/core/shape/base/interface.rb +38 -0
- data/lib/thinreports/core/shape/base/internal.rb +60 -0
- data/lib/thinreports/core/shape/basic.rb +15 -0
- data/lib/thinreports/core/shape/basic/format.rb +26 -0
- data/lib/thinreports/core/shape/basic/interface.rb +57 -0
- data/lib/thinreports/core/shape/basic/internal.rb +29 -0
- data/lib/thinreports/core/shape/list.rb +25 -0
- data/lib/thinreports/core/shape/list/configuration.rb +33 -0
- data/lib/thinreports/core/shape/list/events.rb +30 -0
- data/lib/thinreports/core/shape/list/format.rb +72 -0
- data/lib/thinreports/core/shape/list/manager.rb +209 -0
- data/lib/thinreports/core/shape/list/page.rb +118 -0
- data/lib/thinreports/core/shape/list/page_state.rb +40 -0
- data/lib/thinreports/core/shape/list/section_format.rb +32 -0
- data/lib/thinreports/core/shape/list/section_interface.rb +48 -0
- data/lib/thinreports/core/shape/list/section_internal.rb +29 -0
- data/lib/thinreports/core/shape/list/store.rb +34 -0
- data/lib/thinreports/core/shape/manager.rb +14 -0
- data/lib/thinreports/core/shape/manager/format.rb +28 -0
- data/lib/thinreports/core/shape/manager/internal.rb +87 -0
- data/lib/thinreports/core/shape/manager/target.rb +85 -0
- data/lib/thinreports/core/shape/tblock.rb +16 -0
- data/lib/thinreports/core/shape/tblock/format.rb +36 -0
- data/lib/thinreports/core/shape/tblock/formatter.rb +32 -0
- data/lib/thinreports/core/shape/tblock/formatter/basic.rb +38 -0
- data/lib/thinreports/core/shape/tblock/formatter/datetime.rb +21 -0
- data/lib/thinreports/core/shape/tblock/formatter/number.rb +49 -0
- data/lib/thinreports/core/shape/tblock/formatter/padding.rb +43 -0
- data/lib/thinreports/core/shape/tblock/interface.rb +52 -0
- data/lib/thinreports/core/shape/tblock/internal.rb +70 -0
- data/lib/thinreports/core/shape/text.rb +15 -0
- data/lib/thinreports/core/shape/text/format.rb +25 -0
- data/lib/thinreports/core/shape/text/interface.rb +16 -0
- data/lib/thinreports/core/shape/text/internal.rb +17 -0
- data/lib/thinreports/core/utils.rb +48 -0
- data/lib/thinreports/generator.rb +30 -0
- data/lib/thinreports/generator/base.rb +49 -0
- data/lib/thinreports/generator/pdf.rb +63 -0
- data/lib/thinreports/generator/pdf/document.rb +171 -0
- data/lib/thinreports/generator/pdf/document/draw_shape.rb +74 -0
- data/lib/thinreports/generator/pdf/document/font.rb +59 -0
- data/lib/thinreports/generator/pdf/document/graphics.rb +42 -0
- data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +92 -0
- data/lib/thinreports/generator/pdf/document/graphics/basic.rb +132 -0
- data/lib/thinreports/generator/pdf/document/graphics/image.rb +51 -0
- data/lib/thinreports/generator/pdf/document/graphics/text.rb +130 -0
- data/lib/thinreports/generator/pdf/document/parse_color.rb +51 -0
- data/lib/thinreports/generator/pdf/document/parse_svg.rb +102 -0
- data/lib/thinreports/generator/pdf/drawer.rb +16 -0
- data/lib/thinreports/generator/pdf/drawer/base.rb +56 -0
- data/lib/thinreports/generator/pdf/drawer/list.rb +39 -0
- data/lib/thinreports/generator/pdf/drawer/list_section.rb +46 -0
- data/lib/thinreports/generator/pdf/drawer/page.rb +101 -0
- data/lib/thinreports/generator/pdf/prawn_ext.rb +36 -0
- data/lib/thinreports/generator/pxd.rb +75 -0
- data/lib/thinreports/generator/pxd/helper.rb +33 -0
- data/lib/thinreports/generator/pxd/list_renderer.rb +58 -0
- data/lib/thinreports/generator/pxd/page_renderer.rb +75 -0
- data/lib/thinreports/layout.rb +17 -0
- data/lib/thinreports/layout/base.rb +78 -0
- data/lib/thinreports/layout/configuration.rb +27 -0
- data/lib/thinreports/layout/format.rb +77 -0
- data/lib/thinreports/layout/version.rb +43 -0
- data/lib/thinreports/report.rb +31 -0
- data/lib/thinreports/report/base.rb +160 -0
- data/lib/thinreports/report/events.rb +32 -0
- data/lib/thinreports/report/internal.rb +131 -0
- data/resources/fonts/IPA_Font_License_Agreement_v1.0.txt +117 -0
- data/resources/fonts/ipag.ttf +0 -0
- data/resources/fonts/ipagp.ttf +0 -0
- data/resources/fonts/ipam.ttf +0 -0
- data/resources/fonts/ipamp.ttf +0 -0
- data/tasks/clean.rake +6 -0
- data/tasks/doc.rake +13 -0
- data/tasks/test.rake +18 -0
- data/test/unit/core/ext/array_spec.rb +29 -0
- data/test/unit/core/ext/hash_spec.rb +29 -0
- data/test/unit/core/ext/object_spec.rb +30 -0
- data/test/unit/core/format/test_base.rb +148 -0
- data/test/unit/core/format/test_builder.rb +114 -0
- data/test/unit/core/ordered_hash_spec.rb +51 -0
- data/test/unit/core/shape/base/test_interface.rb +52 -0
- data/test/unit/core/shape/base/test_internal.rb +109 -0
- data/test/unit/core/shape/basic/test_format.rb +59 -0
- data/test/unit/core/shape/basic/test_interface.rb +70 -0
- data/test/unit/core/shape/basic/test_internal.rb +42 -0
- data/test/unit/core/shape/list/test_configuration.rb +52 -0
- data/test/unit/core/shape/list/test_events.rb +28 -0
- data/test/unit/core/shape/list/test_format.rb +71 -0
- data/test/unit/core/shape/list/test_page.rb +10 -0
- data/test/unit/core/shape/list/test_page_state.rb +31 -0
- data/test/unit/core/shape/list/test_section_format.rb +46 -0
- data/test/unit/core/shape/list/test_section_interface.rb +52 -0
- data/test/unit/core/shape/list/test_section_internal.rb +30 -0
- data/test/unit/core/shape/list/test_store.rb +41 -0
- data/test/unit/core/shape/manager/test_format.rb +40 -0
- data/test/unit/core/shape/manager/test_internal.rb +137 -0
- data/test/unit/core/shape/manager/test_target.rb +109 -0
- data/test/unit/core/shape/tblock/formatter/test_basic.rb +24 -0
- data/test/unit/core/shape/tblock/formatter/test_datetime.rb +47 -0
- data/test/unit/core/shape/tblock/formatter/test_number.rb +76 -0
- data/test/unit/core/shape/tblock/formatter/test_padding.rb +72 -0
- data/test/unit/core/shape/tblock/test_format.rb +125 -0
- data/test/unit/core/shape/tblock/test_formatter.rb +28 -0
- data/test/unit/core/shape/tblock/test_interface.rb +40 -0
- data/test/unit/core/shape/tblock/test_internal.rb +139 -0
- data/test/unit/core/shape/text/test_format.rb +73 -0
- data/test/unit/core/shape/text/test_internal.rb +21 -0
- data/test/unit/core/test_events.rb +91 -0
- data/test/unit/core/test_shape.rb +35 -0
- data/test/unit/core/utils_spec.rb +56 -0
- data/test/unit/generator/pdf/document/graphics/test_attributes.rb +103 -0
- data/test/unit/generator/pdf/document/test_font.rb +54 -0
- data/test/unit/generator/pdf/document/test_graphics.rb +43 -0
- data/test/unit/generator/pdf/document/test_parse_color.rb +30 -0
- data/test/unit/generator/test_base.rb +51 -0
- data/test/unit/helper.rb +37 -0
- data/test/unit/layout/test_base.rb +92 -0
- data/test/unit/layout/test_configuration.rb +46 -0
- data/test/unit/layout/test_format.rb +104 -0
- data/test/unit/layout/test_version.rb +62 -0
- data/test/unit/report/test_base.rb +187 -0
- data/test/unit/report/test_events.rb +22 -0
- data/test/unit/report/test_internal.rb +234 -0
- data/test/unit/test_layout.rb +12 -0
- data/test/unit/test_report.rb +30 -0
- metadata +218 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::Base::TestInterface < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
class TestInterface < ThinReports::Core::Shape::Base::Interface
|
9
|
+
internal_delegators :m1, :m2
|
10
|
+
|
11
|
+
# For testing
|
12
|
+
# Instead, #internal method is overwritten by flexmock.
|
13
|
+
def init_internal(parent, format)
|
14
|
+
# Nothing to do
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup
|
19
|
+
internal = flexmock(:m1 => 'm1', :m2 => 'm2')
|
20
|
+
@interface = TestInterface.new(flexmock('parent'), flexmock('format'))
|
21
|
+
|
22
|
+
flexmock(@interface, :internal => internal)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_internal_delegators_macro
|
26
|
+
assert_respond_to @interface, :m1
|
27
|
+
assert_respond_to @interface, :m2
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_methods_delegated_from_internal
|
31
|
+
assert_same @interface.m1, @interface.internal.m1
|
32
|
+
assert_same @interface.m2, @interface.internal.m2
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_forced_to_specify_an_internal_argument
|
36
|
+
internal = flexmock('forced_internal')
|
37
|
+
interface = TestInterface.new(flexmock('parent'), flexmock('format'),
|
38
|
+
internal)
|
39
|
+
|
40
|
+
assert_same internal, interface.internal
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_copy
|
44
|
+
flexmock(@interface.internal, :copy => flexmock('new_internal'),
|
45
|
+
:format => flexmock('format'))
|
46
|
+
|
47
|
+
new_interface = @interface.copy(flexmock('new_parent'))
|
48
|
+
|
49
|
+
refute_same new_interface, @interface
|
50
|
+
assert_instance_of TestInterface, new_interface
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::Base::TestInternal < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
class TestInternal < ThinReports::Core::Shape::Base::Internal
|
9
|
+
format_delegators :m1, :m2
|
10
|
+
end
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@internal = TestInternal.new(flexmock('parent'),
|
14
|
+
flexmock(:m1 => 'm1', :m2 => 'm2'))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_format_delegators_macro
|
18
|
+
assert_respond_to @internal, :m1
|
19
|
+
assert_respond_to @internal, :m2
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_methods_delegated_from_format
|
23
|
+
assert_same @internal.m1, @internal.format.m1
|
24
|
+
assert_same @internal.m2, @internal.format.m2
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_switch_parent!
|
28
|
+
new_parent = flexmock('new_parent')
|
29
|
+
res = @internal.switch_parent!(new_parent)
|
30
|
+
|
31
|
+
assert_same @internal, res
|
32
|
+
assert_same @internal.parent, new_parent
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_available_style?
|
36
|
+
assert_operator @internal, :available_style?, :fill
|
37
|
+
assert_operator @internal, :available_style?, :stroke
|
38
|
+
|
39
|
+
refute_operator @internal, :available_style?, 'font-family'
|
40
|
+
refute_operator @internal, :available_style?, :x
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_attributes
|
44
|
+
format = flexmock('format')
|
45
|
+
format.should_receive(:svg_attrs).
|
46
|
+
and_return('fill' => 'red',
|
47
|
+
'stroke' => 'black',
|
48
|
+
'x' => 100,
|
49
|
+
'y' => 100,
|
50
|
+
'width' => 200)
|
51
|
+
internal = TestInternal.new(flexmock('parent'), format)
|
52
|
+
internal.attrs['fill'] = '#ff0000'
|
53
|
+
internal.attrs['stroke'] = '#000000'
|
54
|
+
|
55
|
+
assert_equal internal.attributes, {'fill' => '#ff0000',
|
56
|
+
'stroke' => '#000000',
|
57
|
+
'x' => 100,
|
58
|
+
'y' => 100,
|
59
|
+
'width' => 200}
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_copy
|
63
|
+
@internal.attrs.update('stroke' => 'red')
|
64
|
+
@internal.states.update(:value => '123')
|
65
|
+
|
66
|
+
new_internal = @internal.copy(flexmock('new_parent'))
|
67
|
+
|
68
|
+
refute_same @internal, new_internal
|
69
|
+
assert_instance_of TestInternal, new_internal
|
70
|
+
|
71
|
+
# Test for parent property
|
72
|
+
refute_same @internal.parent, new_internal.parent
|
73
|
+
|
74
|
+
# Test for format property
|
75
|
+
assert_same @internal.format, new_internal.format
|
76
|
+
|
77
|
+
# Test for attrs
|
78
|
+
args_attrs_test = [@internal.attrs, new_internal.attrs]
|
79
|
+
|
80
|
+
assert_equal(*args_attrs_test)
|
81
|
+
refute_same(*args_attrs_test)
|
82
|
+
|
83
|
+
# Test for value of attrs
|
84
|
+
args_attr_values_test = [@internal.attrs['stroke'],
|
85
|
+
new_internal.attrs['stroke']]
|
86
|
+
|
87
|
+
assert_equal(*args_attr_values_test)
|
88
|
+
refute_same(*args_attr_values_test)
|
89
|
+
|
90
|
+
@internal.attrs['fill'] = 'black'
|
91
|
+
assert_nil new_internal.attrs['fill']
|
92
|
+
|
93
|
+
# Test for states
|
94
|
+
args_states_test = [@internal.states, new_internal.states]
|
95
|
+
|
96
|
+
assert_equal(*args_states_test)
|
97
|
+
refute_same(*args_states_test)
|
98
|
+
|
99
|
+
# Test for value of states
|
100
|
+
args_state_values_test = [@internal.states[:value],
|
101
|
+
new_internal.states[:value]]
|
102
|
+
|
103
|
+
assert_equal(*args_state_values_test)
|
104
|
+
refute_same(*args_state_values_test)
|
105
|
+
|
106
|
+
@internal.states[:value].reverse!
|
107
|
+
refute_equal(*args_state_values_test)
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::Basic::TestFormat < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
TEST_BASIC_FORMAT = {
|
9
|
+
"type" => "s-rect",
|
10
|
+
"id" => "rect_1",
|
11
|
+
"display" => "true",
|
12
|
+
"svg" => {
|
13
|
+
"tag" => "rect",
|
14
|
+
"attrs" => {
|
15
|
+
"stroke" => "#000000",
|
16
|
+
"stroke-width" => "1",
|
17
|
+
"fill" => "#ff0000",
|
18
|
+
"fill-opacity" => "1",
|
19
|
+
"stroke-dasharray" => "none",
|
20
|
+
"rx" => "0",
|
21
|
+
"ry" => "0",
|
22
|
+
"width" => "196.1",
|
23
|
+
"height" => "135.1",
|
24
|
+
"x" => "85",
|
25
|
+
"y" => "82"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
# Alias
|
31
|
+
Format = ThinReports::Core::Shape::Basic::Format
|
32
|
+
|
33
|
+
def test_build_basic_format
|
34
|
+
build_basic_format
|
35
|
+
rescue => e
|
36
|
+
flunk exception_details(e, 'Building failed.')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_basic_config_readers
|
40
|
+
format = Format.new(TEST_BASIC_FORMAT)
|
41
|
+
|
42
|
+
assert_equal format.id, 'rect_1'
|
43
|
+
assert_equal format.type, 's-rect'
|
44
|
+
assert_equal format.svg_tag, 'rect'
|
45
|
+
assert_equal format.display?, true
|
46
|
+
assert_equal format.svg_attrs['stroke'], '#000000'
|
47
|
+
assert_equal format.svg_attrs['stroke-dasharray'], 'none'
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_display?
|
51
|
+
format = Format.new('display' => 'false')
|
52
|
+
|
53
|
+
assert_equal format.display?, false
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_basic_format
|
57
|
+
Format.build(TEST_BASIC_FORMAT)
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::Basic::TestInterface < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
# Alias
|
9
|
+
Basic = ThinReports::Core::Shape::Basic
|
10
|
+
|
11
|
+
def setup
|
12
|
+
format = flexmock('format')
|
13
|
+
format.should_receive(:display? => true)
|
14
|
+
|
15
|
+
@basic = Basic::Interface.new(flexmock('parent'), format)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_visible
|
19
|
+
assert_equal @basic.visible?, true
|
20
|
+
@basic.visible(false)
|
21
|
+
assert_equal @basic.visible?, false
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_style
|
25
|
+
@basic.style(:fill, '#ff0000')
|
26
|
+
@basic.style(:stroke, '#0000ff')
|
27
|
+
|
28
|
+
assert_equal @basic.internal.attrs, {'fill' => '#ff0000',
|
29
|
+
'stroke' => '#0000ff'}
|
30
|
+
assert_raises ThinReports::Errors::UnknownShapeStyleName do
|
31
|
+
@basic.style(:unknown, 'unknown value')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_styles
|
36
|
+
@basic.styles(:fill => 'red', :stroke => 'blue')
|
37
|
+
|
38
|
+
assert_equal @basic.internal.attrs, {'fill' => 'red',
|
39
|
+
'stroke' => 'blue'}
|
40
|
+
assert_raises ThinReports::Errors::UnknownShapeStyleName do
|
41
|
+
@basic.styles(:fill => 'blue', :unknown => 'black')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_hide
|
46
|
+
@basic.hide
|
47
|
+
assert_equal @basic.visible?, false
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_show
|
51
|
+
@basic.visible(false)
|
52
|
+
@basic.show
|
53
|
+
assert_equal @basic.visible?, true
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_method_chain
|
57
|
+
@basic.hide.show
|
58
|
+
assert_equal @basic.visible?, true
|
59
|
+
|
60
|
+
@basic.style(:fill, 'red').hide
|
61
|
+
assert_equal @basic.internal.attrs['fill'], 'red'
|
62
|
+
assert_equal @basic.visible?, false
|
63
|
+
|
64
|
+
@basic.styles(:fill => 'red', :stroke => 'blue').style(:fill, 'black')
|
65
|
+
assert_equal @basic.internal.attrs['fill'], 'black'
|
66
|
+
|
67
|
+
@basic.visible(true).visible(false)
|
68
|
+
assert_equal @basic.visible?, false
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::Basic::TestInternal < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
Basic = ThinReports::Core::Shape::Basic
|
9
|
+
|
10
|
+
def setup
|
11
|
+
format = flexmock('format')
|
12
|
+
format.should_receive(:display? => true)
|
13
|
+
|
14
|
+
@internal = Basic::Internal.new(flexmock('parent'), format)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_visible
|
18
|
+
assert_equal @internal.visible?, true
|
19
|
+
|
20
|
+
@internal.visible(false)
|
21
|
+
|
22
|
+
assert_equal @internal.visible?, false
|
23
|
+
assert_equal @internal.format.display?, true
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_svg_attr
|
27
|
+
assert_empty @internal.attrs
|
28
|
+
|
29
|
+
@internal.svg_attr(:fill, 'red')
|
30
|
+
@internal.svg_attr(:stroke, 'black')
|
31
|
+
|
32
|
+
assert_equal @internal.attrs, {'fill' => 'red', 'stroke' => 'black'}
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_type_of?
|
36
|
+
flexmock(@internal.format).should_receive(:type => 's-rect')
|
37
|
+
|
38
|
+
assert_equal @internal.type_of?(:basic), true
|
39
|
+
assert_equal @internal.type_of?(:rect), true
|
40
|
+
assert_equal @internal.type_of?(:tblock), false
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::List::TestConfiguration < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
List = ThinReports::Core::Shape::List
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@events = flexmock('events')
|
12
|
+
@store = flexmock('store')
|
13
|
+
@config = List::Configuration.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_use_stores
|
17
|
+
flexmock(List::Store).should_receive(:init).with(::Hash).once
|
18
|
+
|
19
|
+
@config.use_stores(:a => 0, :b => 0)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_store
|
23
|
+
flexmock(List::Store).should_receive(:init => @store)
|
24
|
+
|
25
|
+
@config.use_stores(:a => 0, :b => 0)
|
26
|
+
assert_same @config.store, @store
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_store_return_nil_when_uninitialized_yet
|
30
|
+
assert_nil @config.store
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_copy
|
34
|
+
copied_store = flexmock('copied store')
|
35
|
+
|
36
|
+
flexmock(@store, :copy => copied_store)
|
37
|
+
flexmock(List::Store).should_receive(:init => @store)
|
38
|
+
|
39
|
+
copied_events = flexmock('copied events')
|
40
|
+
|
41
|
+
flexmock(@events, :copy => copied_events)
|
42
|
+
flexmock(List::Events).should_receive(:new => @events)
|
43
|
+
|
44
|
+
@config = List::Configuration.new
|
45
|
+
@config.use_stores(:a => 1)
|
46
|
+
|
47
|
+
copied_config = @config.copy
|
48
|
+
|
49
|
+
assert_same copied_config.events, copied_events
|
50
|
+
assert_same copied_config.store, copied_store
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::List::TestEvents < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
List = ThinReports::Core::Shape::List
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@events = List::Events.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_allowed_event_types
|
15
|
+
assert_equal @events.instance_variable_get(:@types),
|
16
|
+
[:page_footer_insert, :footer_insert]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_SectionEvent
|
20
|
+
e = List::Events::SectionEvent.new(:section_event,
|
21
|
+
:target,
|
22
|
+
:store)
|
23
|
+
assert_equal e.type, :section_event
|
24
|
+
assert_equal e.target, :target
|
25
|
+
assert_equal e.section, :target
|
26
|
+
assert_equal e.store, :store
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit/helper'
|
4
|
+
|
5
|
+
class ThinReports::Core::Shape::List::TestFormat < MiniTest::Unit::TestCase
|
6
|
+
include ThinReports::TestHelpers
|
7
|
+
|
8
|
+
TEST_LIST_FORMAT = {
|
9
|
+
"type" => "s-list",
|
10
|
+
"id" => "List",
|
11
|
+
"display" => "true",
|
12
|
+
"page-footer-enabled" => "true",
|
13
|
+
"footer-enabled" => "true",
|
14
|
+
"header-enabled" => "true",
|
15
|
+
"page-break" => "true",
|
16
|
+
"content-height" => 255,
|
17
|
+
"detail" => {},
|
18
|
+
"footer" => {},
|
19
|
+
"page-footer" => {},
|
20
|
+
"header" => {},
|
21
|
+
"svg" => {
|
22
|
+
"tag" => "g",
|
23
|
+
"attrs" => {}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
List = ThinReports::Core::Shape::List
|
28
|
+
|
29
|
+
def test_build_when_all_sections_enabled
|
30
|
+
flexmock(List::SectionFormat).
|
31
|
+
should_receive(:build).times(4).and_return({})
|
32
|
+
|
33
|
+
begin
|
34
|
+
format = build_format
|
35
|
+
rescue => e
|
36
|
+
flunk exception_details(e, 'Building failed.')
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_equal format.sections.size, 4
|
40
|
+
[:detail, :header, :footer, :page_footer].each do |sec|
|
41
|
+
assert_includes format.sections.keys, sec
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_build_when_page_footer_and_footer_disabled
|
46
|
+
flexmock(List::SectionFormat).
|
47
|
+
should_receive(:build).times(2).and_return({})
|
48
|
+
|
49
|
+
format = build_format('page-footer-enabled' => 'false',
|
50
|
+
'footer-enabled' => 'false')
|
51
|
+
|
52
|
+
assert_equal format.sections.size, 2
|
53
|
+
[:detail, :header].each do |sec|
|
54
|
+
assert_includes format.sections.keys, sec
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_config_readers
|
59
|
+
format = List::Format.new(TEST_LIST_FORMAT)
|
60
|
+
|
61
|
+
assert_equal format.height, 255
|
62
|
+
assert_equal format.auto_page_break?, true
|
63
|
+
assert_equal format.has_header?, true
|
64
|
+
assert_equal format.has_footer?, true
|
65
|
+
assert_equal format.has_page_footer?, true
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_format(data = {})
|
69
|
+
List::Format.build(TEST_LIST_FORMAT.merge(data))
|
70
|
+
end
|
71
|
+
end
|