thinreports 0.6.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. data/.yardopts +1 -0
  2. data/README.rdoc +100 -0
  3. data/Rakefile +10 -0
  4. data/doc/yardoc_templates/default/layout/html/footer.erb +10 -0
  5. data/lib/thinreports.rb +11 -0
  6. data/lib/thinreports/core.rb +20 -0
  7. data/lib/thinreports/core/errors.rb +58 -0
  8. data/lib/thinreports/core/events.rb +71 -0
  9. data/lib/thinreports/core/ext.rb +5 -0
  10. data/lib/thinreports/core/ext/array.rb +19 -0
  11. data/lib/thinreports/core/ext/hash.rb +19 -0
  12. data/lib/thinreports/core/ext/object.rb +25 -0
  13. data/lib/thinreports/core/format.rb +14 -0
  14. data/lib/thinreports/core/format/base.rb +93 -0
  15. data/lib/thinreports/core/format/builder.rb +65 -0
  16. data/lib/thinreports/core/ordered_hash.rb +39 -0
  17. data/lib/thinreports/core/page.rb +91 -0
  18. data/lib/thinreports/core/shape.rb +53 -0
  19. data/lib/thinreports/core/shape/base.rb +16 -0
  20. data/lib/thinreports/core/shape/base/interface.rb +38 -0
  21. data/lib/thinreports/core/shape/base/internal.rb +60 -0
  22. data/lib/thinreports/core/shape/basic.rb +15 -0
  23. data/lib/thinreports/core/shape/basic/format.rb +26 -0
  24. data/lib/thinreports/core/shape/basic/interface.rb +57 -0
  25. data/lib/thinreports/core/shape/basic/internal.rb +29 -0
  26. data/lib/thinreports/core/shape/list.rb +25 -0
  27. data/lib/thinreports/core/shape/list/configuration.rb +33 -0
  28. data/lib/thinreports/core/shape/list/events.rb +30 -0
  29. data/lib/thinreports/core/shape/list/format.rb +72 -0
  30. data/lib/thinreports/core/shape/list/manager.rb +209 -0
  31. data/lib/thinreports/core/shape/list/page.rb +118 -0
  32. data/lib/thinreports/core/shape/list/page_state.rb +40 -0
  33. data/lib/thinreports/core/shape/list/section_format.rb +32 -0
  34. data/lib/thinreports/core/shape/list/section_interface.rb +48 -0
  35. data/lib/thinreports/core/shape/list/section_internal.rb +29 -0
  36. data/lib/thinreports/core/shape/list/store.rb +34 -0
  37. data/lib/thinreports/core/shape/manager.rb +14 -0
  38. data/lib/thinreports/core/shape/manager/format.rb +28 -0
  39. data/lib/thinreports/core/shape/manager/internal.rb +87 -0
  40. data/lib/thinreports/core/shape/manager/target.rb +85 -0
  41. data/lib/thinreports/core/shape/tblock.rb +16 -0
  42. data/lib/thinreports/core/shape/tblock/format.rb +36 -0
  43. data/lib/thinreports/core/shape/tblock/formatter.rb +32 -0
  44. data/lib/thinreports/core/shape/tblock/formatter/basic.rb +38 -0
  45. data/lib/thinreports/core/shape/tblock/formatter/datetime.rb +21 -0
  46. data/lib/thinreports/core/shape/tblock/formatter/number.rb +49 -0
  47. data/lib/thinreports/core/shape/tblock/formatter/padding.rb +43 -0
  48. data/lib/thinreports/core/shape/tblock/interface.rb +52 -0
  49. data/lib/thinreports/core/shape/tblock/internal.rb +70 -0
  50. data/lib/thinreports/core/shape/text.rb +15 -0
  51. data/lib/thinreports/core/shape/text/format.rb +25 -0
  52. data/lib/thinreports/core/shape/text/interface.rb +16 -0
  53. data/lib/thinreports/core/shape/text/internal.rb +17 -0
  54. data/lib/thinreports/core/utils.rb +48 -0
  55. data/lib/thinreports/generator.rb +30 -0
  56. data/lib/thinreports/generator/base.rb +49 -0
  57. data/lib/thinreports/generator/pdf.rb +63 -0
  58. data/lib/thinreports/generator/pdf/document.rb +171 -0
  59. data/lib/thinreports/generator/pdf/document/draw_shape.rb +74 -0
  60. data/lib/thinreports/generator/pdf/document/font.rb +59 -0
  61. data/lib/thinreports/generator/pdf/document/graphics.rb +42 -0
  62. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +92 -0
  63. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +132 -0
  64. data/lib/thinreports/generator/pdf/document/graphics/image.rb +51 -0
  65. data/lib/thinreports/generator/pdf/document/graphics/text.rb +130 -0
  66. data/lib/thinreports/generator/pdf/document/parse_color.rb +51 -0
  67. data/lib/thinreports/generator/pdf/document/parse_svg.rb +102 -0
  68. data/lib/thinreports/generator/pdf/drawer.rb +16 -0
  69. data/lib/thinreports/generator/pdf/drawer/base.rb +56 -0
  70. data/lib/thinreports/generator/pdf/drawer/list.rb +39 -0
  71. data/lib/thinreports/generator/pdf/drawer/list_section.rb +46 -0
  72. data/lib/thinreports/generator/pdf/drawer/page.rb +101 -0
  73. data/lib/thinreports/generator/pdf/prawn_ext.rb +36 -0
  74. data/lib/thinreports/generator/pxd.rb +75 -0
  75. data/lib/thinreports/generator/pxd/helper.rb +33 -0
  76. data/lib/thinreports/generator/pxd/list_renderer.rb +58 -0
  77. data/lib/thinreports/generator/pxd/page_renderer.rb +75 -0
  78. data/lib/thinreports/layout.rb +17 -0
  79. data/lib/thinreports/layout/base.rb +78 -0
  80. data/lib/thinreports/layout/configuration.rb +27 -0
  81. data/lib/thinreports/layout/format.rb +77 -0
  82. data/lib/thinreports/layout/version.rb +43 -0
  83. data/lib/thinreports/report.rb +31 -0
  84. data/lib/thinreports/report/base.rb +160 -0
  85. data/lib/thinreports/report/events.rb +32 -0
  86. data/lib/thinreports/report/internal.rb +131 -0
  87. data/resources/fonts/IPA_Font_License_Agreement_v1.0.txt +117 -0
  88. data/resources/fonts/ipag.ttf +0 -0
  89. data/resources/fonts/ipagp.ttf +0 -0
  90. data/resources/fonts/ipam.ttf +0 -0
  91. data/resources/fonts/ipamp.ttf +0 -0
  92. data/tasks/clean.rake +6 -0
  93. data/tasks/doc.rake +13 -0
  94. data/tasks/test.rake +18 -0
  95. data/test/unit/core/ext/array_spec.rb +29 -0
  96. data/test/unit/core/ext/hash_spec.rb +29 -0
  97. data/test/unit/core/ext/object_spec.rb +30 -0
  98. data/test/unit/core/format/test_base.rb +148 -0
  99. data/test/unit/core/format/test_builder.rb +114 -0
  100. data/test/unit/core/ordered_hash_spec.rb +51 -0
  101. data/test/unit/core/shape/base/test_interface.rb +52 -0
  102. data/test/unit/core/shape/base/test_internal.rb +109 -0
  103. data/test/unit/core/shape/basic/test_format.rb +59 -0
  104. data/test/unit/core/shape/basic/test_interface.rb +70 -0
  105. data/test/unit/core/shape/basic/test_internal.rb +42 -0
  106. data/test/unit/core/shape/list/test_configuration.rb +52 -0
  107. data/test/unit/core/shape/list/test_events.rb +28 -0
  108. data/test/unit/core/shape/list/test_format.rb +71 -0
  109. data/test/unit/core/shape/list/test_page.rb +10 -0
  110. data/test/unit/core/shape/list/test_page_state.rb +31 -0
  111. data/test/unit/core/shape/list/test_section_format.rb +46 -0
  112. data/test/unit/core/shape/list/test_section_interface.rb +52 -0
  113. data/test/unit/core/shape/list/test_section_internal.rb +30 -0
  114. data/test/unit/core/shape/list/test_store.rb +41 -0
  115. data/test/unit/core/shape/manager/test_format.rb +40 -0
  116. data/test/unit/core/shape/manager/test_internal.rb +137 -0
  117. data/test/unit/core/shape/manager/test_target.rb +109 -0
  118. data/test/unit/core/shape/tblock/formatter/test_basic.rb +24 -0
  119. data/test/unit/core/shape/tblock/formatter/test_datetime.rb +47 -0
  120. data/test/unit/core/shape/tblock/formatter/test_number.rb +76 -0
  121. data/test/unit/core/shape/tblock/formatter/test_padding.rb +72 -0
  122. data/test/unit/core/shape/tblock/test_format.rb +125 -0
  123. data/test/unit/core/shape/tblock/test_formatter.rb +28 -0
  124. data/test/unit/core/shape/tblock/test_interface.rb +40 -0
  125. data/test/unit/core/shape/tblock/test_internal.rb +139 -0
  126. data/test/unit/core/shape/text/test_format.rb +73 -0
  127. data/test/unit/core/shape/text/test_internal.rb +21 -0
  128. data/test/unit/core/test_events.rb +91 -0
  129. data/test/unit/core/test_shape.rb +35 -0
  130. data/test/unit/core/utils_spec.rb +56 -0
  131. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +103 -0
  132. data/test/unit/generator/pdf/document/test_font.rb +54 -0
  133. data/test/unit/generator/pdf/document/test_graphics.rb +43 -0
  134. data/test/unit/generator/pdf/document/test_parse_color.rb +30 -0
  135. data/test/unit/generator/test_base.rb +51 -0
  136. data/test/unit/helper.rb +37 -0
  137. data/test/unit/layout/test_base.rb +92 -0
  138. data/test/unit/layout/test_configuration.rb +46 -0
  139. data/test/unit/layout/test_format.rb +104 -0
  140. data/test/unit/layout/test_version.rb +62 -0
  141. data/test/unit/report/test_base.rb +187 -0
  142. data/test/unit/report/test_events.rb +22 -0
  143. data/test/unit/report/test_internal.rb +234 -0
  144. data/test/unit/test_layout.rb +12 -0
  145. data/test/unit/test_report.rb +30 -0
  146. metadata +218 -0
@@ -0,0 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestPage < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ List = ThinReports::Core::Shape::List
10
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestPageState < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ List = ThinReports::Core::Shape::List
10
+
11
+ def setup
12
+ parent = flexmock('parent')
13
+ format = flexmock('format')
14
+
15
+ @state = List::PageState.new(parent, format)
16
+ end
17
+
18
+ def test_alias_class
19
+ assert_same List::PageState, List::Internal
20
+ end
21
+
22
+ def test_type_of?
23
+ assert_equal @state.type_of?(:list), true
24
+ end
25
+
26
+ def test_finalized!
27
+ assert_equal @state.finalized?, false
28
+ @state.finalized!
29
+ assert_equal @state.finalized?, true
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestSectionFormat < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ TEST_LIST_SECTION_FORMAT = {
9
+ "height" => 47.7,
10
+ "translate" => {"x" => 0, "y" => -64.2},
11
+ "svg" => {
12
+ "tag" => "g",
13
+ "content" => "<!---SHAPE{\"type\":\"s-tblock\",\"id\":\"t1\"}SHAPE--->" +
14
+ "<!---SHAPE{\"type\":\"s-rect\",\"id\":\"r1\"}SHAPE--->" +
15
+ "<!---SHAPE{\"type\":\"s-tblock\",\"id\":\"t2\"}SHAPE--->"
16
+ }
17
+ }
18
+
19
+ Shape = ThinReports::Core::Shape
20
+
21
+ def test_build
22
+ shape_format = flexmock(:id => 'mock')
23
+
24
+ flexmock(Shape::Tblock::Format).
25
+ should_receive(:build).times(2).and_return(shape_format)
26
+ flexmock(Shape::Basic::Format).
27
+ should_receive(:build).times(1).and_return(shape_format)
28
+ begin
29
+ build_format
30
+ rescue => e
31
+ flunk exception_details(e, 'Building failed.')
32
+ end
33
+ end
34
+
35
+ def test_config_readers
36
+ format = Shape::List::SectionFormat.new(TEST_LIST_SECTION_FORMAT)
37
+
38
+ assert_equal format.height, 47.7
39
+ assert_equal format.relative_left, 0
40
+ assert_equal format.relative_top, -64.2
41
+ end
42
+
43
+ def build_format
44
+ Shape::List::SectionFormat.build(TEST_LIST_SECTION_FORMAT.dup)
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestSectionInterface < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ List = ThinReports::Core::Shape::List
10
+
11
+ def setup
12
+ parent = flexmock('parent')
13
+ format = flexmock('format')
14
+
15
+ @interface = List::SectionInterface.new(parent, format, :section)
16
+ end
17
+
18
+ def test_undef_list_method
19
+ refute_respond_to @interface, :list
20
+ end
21
+
22
+ def test_internal
23
+ assert_instance_of List::SectionInternal, @interface.internal
24
+ end
25
+
26
+ def test_properly_set_init_item_handler
27
+ shape_format = flexmock('shape_format')
28
+
29
+ flexmock(ThinReports::Core::Shape).
30
+ should_receive(:Interface).with(@interface, shape_format).once
31
+
32
+ @interface.manager.init_item(shape_format)
33
+ end
34
+
35
+ def test_copy
36
+ original_foo = flexmock('original_foo')
37
+ copied_foo = flexmock('copied_foo')
38
+
39
+ flexmock(original_foo).
40
+ should_receive(:copy).and_return(copied_foo).once
41
+ @interface.manager.shapes[:foo] = original_foo
42
+
43
+ copied_interface = @interface.copy(flexmock('new_parent'))
44
+
45
+ assert_instance_of List::SectionInterface, copied_interface
46
+ refute_equal @interface.object_id, copied_interface.object_id
47
+
48
+ assert_equal copied_interface.internal.section_name,
49
+ @interface.internal.section_name
50
+ assert_same copied_interface.manager.shapes[:foo], copied_foo
51
+ end
52
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestSectionInternal < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ List = ThinReports::Core::Shape::List
10
+
11
+ def setup
12
+ parent = flexmock('parent')
13
+ format = flexmock(:height => 100,
14
+ :relative_left => 100,
15
+ :relative_top => 200,
16
+ :svg_tag => 'g')
17
+ @internal = List::SectionInternal.new(parent, format)
18
+ end
19
+
20
+ def test_move_top_to
21
+ @internal.move_top_to(100)
22
+ assert_equal @internal.states[:relative_top], 100
23
+ end
24
+
25
+ def test_relative_position
26
+ assert_equal @internal.relative_position, [100, 200]
27
+ @internal.move_top_to(50)
28
+ assert_equal @internal.relative_position, [100, 250]
29
+ end
30
+ end
@@ -0,0 +1,41 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestStore < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ List = ThinReports::Core::Shape::List
9
+
10
+ def test_new
11
+ klass = List::Store.new(:foo => 'foo', :hoge => 0)
12
+
13
+ assert_instance_of ::Class, klass
14
+
15
+ st1 = klass.new
16
+ st2 = klass.new
17
+
18
+ refute_same st1.foo, st2.foo
19
+ # Fixnum is immutable
20
+ assert_same st1.hoge, st2.hoge
21
+ end
22
+
23
+ def test_init
24
+ store = List::Store.init(:foo => 0, :hoge => 'hoge')
25
+
26
+ assert_respond_to store, :foo
27
+ assert_respond_to store, :hoge
28
+
29
+ assert_equal store.foo, 0
30
+ assert_equal store.hoge, 'hoge'
31
+ end
32
+
33
+ def test_copy
34
+ store = List::Store.init(:foo => Time.now)
35
+
36
+ copied = store.copy
37
+
38
+ assert_equal store.foo, copied.foo
39
+ refute_same store.foo, copied.foo
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Manager::TestFormat < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ class TestFormat < ThinReports::Core::Shape::Manager::Format
9
+ end
10
+
11
+ def test_identifier_equal_the_object_id
12
+ format = TestFormat.new({})
13
+ assert_equal format.identifier, format.object_id
14
+ end
15
+
16
+ def test_identifier_equal_the_given_id
17
+ format = TestFormat.new({}, :any_id)
18
+ assert_equal format.identifier, :any_id
19
+ end
20
+
21
+ def test_shapes
22
+ format = TestFormat.new({})
23
+ assert_instance_of ThinReports::Core::OrderedHash, format.shapes
24
+ end
25
+
26
+ def test_find_shape
27
+ format = TestFormat.new({}) do |f|
28
+ f.shapes[:foo] = 'foo'
29
+ f.shapes[:boo] = 'boo'
30
+ end
31
+
32
+ assert_equal format.find_shape(:foo), 'foo'
33
+ assert_equal format.find_shape(:boo), 'boo'
34
+ end
35
+
36
+ def test_find_shape_return_nil_when_id_is_not_found
37
+ format = TestFormat.new({})
38
+ assert_nil format.find_shape(:unknown)
39
+ end
40
+ end
@@ -0,0 +1,137 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Manager::TestInternal < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ def setup
9
+ @init_item_handler = flexmock('init_item_handler')
10
+
11
+ @format_tblock = flexmock(:type => 's-tblock')
12
+ @format_list = flexmock(:type => 's-list')
13
+ @format_rect = flexmock(:type => 's-rect')
14
+
15
+ @item_tblock = flexmock(:type => 's-tblock')
16
+ @item_list = flexmock(:type => 's-list')
17
+ @item_rect = flexmock(:type => 's-rect')
18
+
19
+ layout_format = flexmock('layout_format')
20
+
21
+ layout_format.should_receive(:find_shape).
22
+ with(:tblock).and_return(@format_tblock)
23
+ layout_format.should_receive(:find_shape).
24
+ with(:list).and_return(@format_list)
25
+ layout_format.should_receive(:find_shape).
26
+ with(:rect).and_return(@format_rect)
27
+ layout_format.should_receive(:find_shape).
28
+ with(:unknown).and_return(nil)
29
+
30
+ @manager = ThinReports::Core::Shape::Manager::Internal.new(layout_format,
31
+ @init_item_handler)
32
+ end
33
+
34
+ def test_find_format
35
+ assert_same @manager.find_format(:tblock), @format_tblock
36
+ assert_same @manager.find_format('list'), @format_list
37
+ assert_nil @manager.find_format(:unknown)
38
+ end
39
+
40
+ def test_valid_type?
41
+ # Without limit options.
42
+ assert_equal @manager.valid_type?('s-list'), true
43
+ # With only limitation.
44
+ assert_equal @manager.valid_type?('s-list', :only => 's-list'), true
45
+ assert_equal @manager.valid_type?('s-list', :only => 'other'), false
46
+ # With except limitation.
47
+ assert_equal @manager.valid_type?('s-list', :except => 'other'), true
48
+ assert_equal @manager.valid_type?('s-list', :except => 's-list'), false
49
+ end
50
+
51
+ def test_find_item
52
+ flexmock(@init_item_handler).
53
+ should_receive(:call).once.and_return(@item_tblock)
54
+
55
+ # Should initialize item.
56
+ @manager.find_item(:tblock)
57
+ # Should be stored a one initialized item.
58
+ assert_equal @manager.shapes.size, 1
59
+ assert_same @manager.shapes[:tblock], @item_tblock
60
+
61
+ flexmock(@init_item_handler).
62
+ should_receive(:call).times(0)
63
+
64
+ # Should must not be initialized when given a initialized item.
65
+ assert_same @manager.find_item(:tblock), @item_tblock
66
+
67
+ # Should returnes the nil value when given unknown item.
68
+ assert_nil @manager.find_item(:unknown)
69
+ end
70
+
71
+ def test_find_item_with_limitation
72
+ # Should returns the nil value when outside limitation.
73
+ assert_nil @manager.find_item(:tblock, :only => 's-list')
74
+ assert_nil @manager.find_item(:list, :except => 's-list')
75
+
76
+ flexmock(@init_item_handler).
77
+ should_receive(:call).and_return(@item_tblock)
78
+
79
+ # Should initialize and store item.
80
+ @manager.find_item(:tblock, :except => 's-list')
81
+ assert_equal @manager.shapes[:tblock], @item_tblock
82
+
83
+ # Should returns the nil value.
84
+ assert_nil @manager.find_item(:tblock, :only => 's-list')
85
+ end
86
+
87
+ def test_final_shape_when_give_the_initialized_item_that_visibility_is_enabled
88
+ @manager.shapes[:tblock] = flexmock(:visible? => true)
89
+
90
+ assert_same @manager.final_shape(:tblock), @manager.shapes[:tblock]
91
+ end
92
+
93
+ def test_final_shape_when_give_the_initialized_item_that_visibility_is_disabled
94
+ @manager.shapes[:tblock] = flexmock(:visible? => false)
95
+
96
+ assert_nil @manager.final_shape(:tblock)
97
+ end
98
+
99
+ def test_final_shape_when_give_the_uninitialized_basic_item
100
+ flexmock(@format_rect, :display? => true)
101
+
102
+ flexmock(@init_item_handler).
103
+ should_receive(:call).once.and_return(@item_rect)
104
+
105
+ # Should initialize item.
106
+ assert_same @manager.final_shape(:rect), @item_rect
107
+ end
108
+
109
+ def test_final_shape_return_nil_when_give_the_tblock_item_that_has_no_value
110
+ flexmock(@format_tblock, :display? => true,
111
+ :has_reference? => false,
112
+ :value => '')
113
+ assert_nil @manager.final_shape(:tblock)
114
+ end
115
+
116
+ def test_final_shape_initialize_item_when_give_the_tblock_item_that_has_an_reference
117
+ flexmock(@format_tblock, :display? => true,
118
+ :has_reference? => true,
119
+ :value => '')
120
+
121
+ flexmock(@init_item_handler).
122
+ should_receive(:call).once.and_return(@item_tblock)
123
+
124
+ assert_same @manager.final_shape(:tblock), @item_tblock
125
+ end
126
+
127
+ def test_final_shape_initialize_item_when_give_the_tblock_item_that_has_a_value
128
+ flexmock(@format_tblock, :display? => true,
129
+ :has_reference? => false,
130
+ :value => 'value')
131
+
132
+ flexmock(@init_item_handler).
133
+ should_receive(:call).once.and_return(@item_tblock)
134
+
135
+ assert_same @manager.final_shape(:tblock), @item_tblock
136
+ end
137
+ end
@@ -0,0 +1,109 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Manager::TestTarget < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ Shape = ThinReports::Core::Shape
10
+
11
+ class TestFormat < Shape::Manager::Format; end
12
+
13
+ class TestManager
14
+ include Shape::Manager::Target
15
+
16
+ def initialize(format)
17
+ initialize_manager(format) do |f|
18
+ Shape::Interface(self, f)
19
+ end
20
+ end
21
+ end
22
+
23
+ def setup
24
+ tblock1_format = Shape::Tblock::Format.new('id' => 'tblock1',
25
+ 'type' => 's-tblock')
26
+ tblock2_format = Shape::Tblock::Format.new('id' => 'tblock2',
27
+ 'type' => 's-tblock')
28
+ list_format = Shape::List::Format.new('id' => 'list',
29
+ 'type' => 's-list')
30
+
31
+ @format = TestFormat.new({}) do |f|
32
+ f.shapes[:tblock1] = tblock1_format
33
+ f.shapes[:tblock2] = tblock2_format
34
+ f.shapes[:list] = list_format
35
+ end
36
+ @manager = TestManager.new(@format)
37
+ end
38
+
39
+ def test_item_with_Symbol_id
40
+ assert_instance_of Shape::Tblock::Interface, @manager.item(:tblock1)
41
+ end
42
+
43
+ def test_item_with_String_id
44
+ assert_instance_of Shape::Tblock::Interface, @manager.item('tblock1')
45
+ end
46
+
47
+ def test_item_raise_error_when_given_the_id_of_list
48
+ assert_raises ThinReports::Errors::UnknownItemId do
49
+ @manager.item(:list)
50
+ end
51
+ end
52
+
53
+ def test_item_raise_error_when_given_the_unknown_id
54
+ assert_raises ThinReports::Errors::UnknownItemId do
55
+ @manager.item(:unknown)
56
+ end
57
+ end
58
+
59
+ def test_item_with_block_that_has_no_arguments
60
+ @manager.item(:tblock1) do
61
+ value(1000)
62
+ end
63
+ assert_equal @manager.item(:tblock1).value, 1000
64
+ end
65
+
66
+ def test_item_with_block_that_has_an_argument
67
+ @manager.item(:tblock2) do |t|
68
+ t.value(1000)
69
+ end
70
+ assert_equal @manager.item(:tblock2).value, 1000
71
+ end
72
+
73
+ def test_list_raise_error_when_given_id_of_non_list
74
+ assert_raises ThinReports::Errors::UnknownItemId do
75
+ @manager.list(:tblock1)
76
+ end
77
+ end
78
+
79
+ def test_list_should_be_stored_in_the_special_store
80
+ flexmock(@manager).
81
+ should_receive(:find_item).and_return(flexmock('item_list'))
82
+
83
+ @manager.list(:list)
84
+ assert_includes @manager.manager.lists, :list
85
+ end
86
+
87
+ def test_items_should_be_warned_as_deprecated
88
+ out, err = capture_io do
89
+ @manager.items :tblock1 => 1000
90
+ end
91
+ assert_match %r!DEPRECATION!, err
92
+ end
93
+
94
+ def test_values
95
+ @manager.values :tblock1 => 1000,
96
+ :tblock2 => 2000
97
+
98
+ assert_equal @manager.item(:tblock1).value, 1000
99
+ assert_equal @manager.item(:tblock2).value, 2000
100
+ end
101
+
102
+ def test_item_exists?
103
+ assert_equal @manager.item_exists?(:tblock1), true
104
+ assert_equal @manager.item_exists?('list'), true
105
+ assert_equal @manager.item_exists?(:unknown), false
106
+ # Alias method
107
+ assert_equal @manager.exists?(:tblock1), true
108
+ end
109
+ end