axlsx 1.1.6 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +5 -2
- data/CHANGELOG.md +39 -0
- data/README.md +97 -46
- data/Rakefile +3 -2
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +18 -3
- data/examples/example.rb +118 -42
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_view.rb +34 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +21 -12
- data/lib/axlsx/content_type/override.rb +22 -11
- data/lib/axlsx/doc_props/app.rb +36 -32
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +7 -6
- data/lib/axlsx/drawing/axis.rb +64 -25
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +1 -0
- data/lib/axlsx/drawing/cat_axis.rb +43 -39
- data/lib/axlsx/drawing/chart.rb +65 -54
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +7 -5
- data/lib/axlsx/drawing/graphic_frame.rb +2 -2
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/num_data.rb +2 -2
- data/lib/axlsx/drawing/num_data_source.rb +1 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +41 -9
- data/lib/axlsx/drawing/view_3D.rb +41 -31
- data/lib/axlsx/drawing/vml_drawing.rb +1 -1
- data/lib/axlsx/package.rb +20 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/util/constants.rb +4 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -8
- data/lib/axlsx/util/validators.rb +28 -4
- data/lib/axlsx/version.rb +2 -7
- data/lib/axlsx/workbook/defined_name.rb +174 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/workbook.rb +46 -17
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +28 -1
- data/lib/axlsx/workbook/worksheet/col.rb +15 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +8 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +10 -1
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +1 -1
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +315 -291
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +24 -16
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_core.rb +1 -1
- data/test/drawing/tc_axis.rb +27 -2
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +1 -2
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_chart.rb +8 -6
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +5 -4
- data/test/drawing/tc_line_series.rb +1 -1
- data/test/drawing/tc_num_data.rb +5 -1
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +1 -1
- data/test/drawing/tc_scatter_series.rb +1 -1
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/tc_package.rb +41 -4
- data/test/util/tc_validators.rb +68 -11
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/table/tc_table.rb +0 -8
- data/test/workbook/worksheet/tc_cell.rb +2 -4
- data/test/workbook/worksheet/tc_page_setup.rb +20 -3
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +2 -2
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +53 -41
- metadata +104 -97
- data/examples/chart_colors.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/doc/_index.html +0 -84
- data/examples/doc/class_list.html +0 -47
- data/examples/doc/css/common.css +0 -1
- data/examples/doc/css/full_list.css +0 -55
- data/examples/doc/css/style.css +0 -322
- data/examples/doc/file_list.html +0 -46
- data/examples/doc/frames.html +0 -13
- data/examples/doc/index.html +0 -84
- data/examples/doc/js/app.js +0 -205
- data/examples/doc/js/full_list.js +0 -173
- data/examples/doc/js/jquery.js +0 -16
- data/examples/doc/method_list.html +0 -46
- data/examples/doc/top-level-namespace.html +0 -95
- data/examples/examples_saved.xlsx +0 -0
- data/examples/fish.xlsx +0 -0
- data/examples/pareto.rb +0 -28
- data/examples/pareto.xlsx +0 -0
- data/examples/pie_chart.rb +0 -16
- data/examples/pie_chart.xlsx +0 -0
- data/examples/pie_chart_saved.xlsx +0 -0
- data/examples/sheet_protection.xlsx +0 -0
- data/examples/two_cell_anchor_image.xlsx +0 -0
- data/examples/~$pie_chart_saved.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
- data/lib/axlsx/drawing/data_source.rb~ +0 -51
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/num_data.rb~ +0 -51
- data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
- data/lib/axlsx/drawing/num_val.rb~ +0 -40
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/ref.rb~ +0 -41
- data/lib/axlsx/drawing/str_data.rb~ +0 -58
- data/lib/axlsx/drawing/str_val.rb~ +0 -35
- data/lib/axlsx/drawing/vml_drawing.rb~ +0 -6
- data/lib/axlsx/drawing/vml_shape.rb~ +0 -61
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/font_tables.rb~ +0 -0
- data/lib/axlsx/util/ms_off_crypto.rb +0 -189
- data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
- data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
- data/lib/axlsx/util/parser.rb~ +0 -6
- data/lib/axlsx/util/storage.rb~ +0 -0
- data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
- data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
- data/lib/axlsx/workbook/worksheet/comment.rb~ +0 -91
- data/lib/axlsx/workbook/worksheet/comments.rb~ +0 -86
- data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
- data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
- data/lib/schema/dc.xsd~ +0 -118
- data/lib/schema/dcterms.xsd~ +0 -331
- data/lib/schema/opc-coreProperties.xsd~ +0 -50
- data/test/drawing/tc_data_source.rb~ +0 -30
- data/test/drawing/tc_num_data.rb~ +0 -35
- data/test/drawing/tc_num_val.rb~ +0 -29
- data/test/drawing/tc_str_data.rb~ +0 -30
- data/test/drawing/tc_str_val.rb~ +0 -26
- data/test/drawing/tc_vml_drawing.rb~ +0 -0
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
- data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
- data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
- data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# A wraper class for comments that defines its on worksheet
|
|
4
|
+
# serailization
|
|
5
|
+
class WorksheetComments
|
|
6
|
+
|
|
7
|
+
# Creates a new WorksheetComments object
|
|
8
|
+
# param [Worksheet] worksheet The worksheet comments in thes object belong to
|
|
9
|
+
def initialize(worksheet)
|
|
10
|
+
raise ArugumentError, 'You must provide a worksheet' unless worksheet.is_a?(Worksheet)
|
|
11
|
+
@worksheet = worksheet
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_reader :worksheet
|
|
15
|
+
|
|
16
|
+
# The comments for this worksheet.
|
|
17
|
+
# @return [Comments]
|
|
18
|
+
def comments
|
|
19
|
+
@comments ||= Comments.new(worksheet)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Adds a comment
|
|
23
|
+
# @param [Hash] options
|
|
24
|
+
# @see Comments#add_comment
|
|
25
|
+
def add_comment(options={})
|
|
26
|
+
comments.add_comment(options)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# The relationships defined by this objects comments collection
|
|
30
|
+
# @return [Relationships]
|
|
31
|
+
def relationships
|
|
32
|
+
return [] unless has_comments?
|
|
33
|
+
comments.relationships
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Helper method to tell us if there are comments in the comments collection
|
|
38
|
+
# @return [Boolean]
|
|
39
|
+
def has_comments?
|
|
40
|
+
!comments.empty?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# The index in the worksheet's relationships for the VML drawing that will render the comments
|
|
44
|
+
# @return [Integer]
|
|
45
|
+
def index
|
|
46
|
+
worksheet.relationships.index { |r| r.Type == VML_DRAWING_R } + 1
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Seraalize the object
|
|
50
|
+
# @param [String] str
|
|
51
|
+
# @return [String]
|
|
52
|
+
def to_xml_string(str = '')
|
|
53
|
+
return unless has_comments?
|
|
54
|
+
str << "<legacyDrawing r:id='rId#{index}' />"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# This is a utility class for serialing the drawing node in a
|
|
4
|
+
# worksheet. Drawing objects have their own serialization that exports
|
|
5
|
+
# a drawing document. This is only for the single node in the
|
|
6
|
+
# worksheet
|
|
7
|
+
class WorksheetDrawing
|
|
8
|
+
|
|
9
|
+
# Creates a new WorksheetDrawing
|
|
10
|
+
# @param [Worksheet] worksheet
|
|
11
|
+
def initialize(worksheet)
|
|
12
|
+
raise ArgumentError, 'you must provide a worksheet' unless worksheet.is_a?(Worksheet)
|
|
13
|
+
@worksheet = worksheet
|
|
14
|
+
@drawing = nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_reader :worksheet
|
|
18
|
+
|
|
19
|
+
attr_reader :drawing
|
|
20
|
+
|
|
21
|
+
# adds a chart to the drawing object
|
|
22
|
+
# @param [Class] chart_type The type of chart to add
|
|
23
|
+
# @param [Hash] options Options to pass on to the drawing and chart
|
|
24
|
+
# @see Worksheet#add_chart
|
|
25
|
+
def add_chart(chart_type, options)
|
|
26
|
+
@drawing ||= Drawing.new worksheet
|
|
27
|
+
drawing.add_chart(chart_type, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# adds an image to the drawing object
|
|
31
|
+
# @param [Hash] options Options to pass on to the drawing and image
|
|
32
|
+
# @see Worksheet#add_image
|
|
33
|
+
def add_image(options)
|
|
34
|
+
@drawing ||= Drawing.new worksheet
|
|
35
|
+
drawing.add_image(options)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# helper method to tell us if the drawing has something in it or not
|
|
39
|
+
# @return [Boolean]
|
|
40
|
+
def has_drawing?
|
|
41
|
+
@drawing.is_a? Drawing
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# The relationship required by this object
|
|
45
|
+
# @return [Relationship]
|
|
46
|
+
def relationship
|
|
47
|
+
return unless has_drawing?
|
|
48
|
+
Relationship.new(DRAWING_R, "../#{drawing.pn}")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# returns the index of the worksheet releationship that defines this drawing.
|
|
52
|
+
# @return [Integer]
|
|
53
|
+
def index
|
|
54
|
+
worksheet.relationships.index{ |r| r.Type == DRAWING_R } +1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Serialize the drawing for the worksheet
|
|
58
|
+
# @param [String] str
|
|
59
|
+
def to_xml_string(str = '')
|
|
60
|
+
return unless has_drawing?
|
|
61
|
+
str << "<drawing r:id='rId#{index}'/>"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/axlsx.rb
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
+
require 'htmlentities'
|
|
2
3
|
require 'axlsx/version.rb'
|
|
3
4
|
|
|
4
5
|
require 'axlsx/util/simple_typed_list.rb'
|
|
5
6
|
require 'axlsx/util/constants.rb'
|
|
6
7
|
require 'axlsx/util/validators.rb'
|
|
7
8
|
|
|
8
|
-
#not even close to being ready but it does not break anything so it stays for now.
|
|
9
|
-
# needs a full re-write to use agile-encryption properly
|
|
10
|
-
# require 'axlsx/util/storage.rb'
|
|
11
|
-
# require 'axlsx/util/cbf.rb'
|
|
12
|
-
# require 'axlsx/util/ms_off_crypto.rb'
|
|
13
|
-
|
|
14
9
|
# to be included with parsable intitites.
|
|
15
10
|
#require 'axlsx/util/parser.rb'
|
|
16
11
|
|
|
@@ -44,24 +39,36 @@ end
|
|
|
44
39
|
|
|
45
40
|
# xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine.
|
|
46
41
|
module Axlsx
|
|
42
|
+
|
|
47
43
|
# determines the cell range for the items provided
|
|
48
|
-
def self.cell_range(
|
|
49
|
-
return "" unless
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
def self.cell_range(cells, absolute=true)
|
|
45
|
+
return "" unless cells.first.is_a? Cell
|
|
46
|
+
sort_cells(cells)
|
|
47
|
+
reference = "#{cells.first.reference(absolute)}:#{cells.last.reference(absolute)}"
|
|
48
|
+
absolute ? "'#{cells.first.row.worksheet.name}'!#{reference}" : reference
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# sorts the array of cells provided to start from the minimum x,y to
|
|
52
|
+
# the maximum x.y#
|
|
53
|
+
# @param [Array] cells
|
|
54
|
+
# @return [Array]
|
|
55
|
+
def self.sort_cells(cells)
|
|
56
|
+
cells.sort { |x, y| [x.index, x.row.index] <=> [y.index, y.row.index] }
|
|
54
57
|
end
|
|
55
58
|
|
|
59
|
+
#global reference html entity encoding
|
|
60
|
+
# @return [HtmlEntities]
|
|
61
|
+
def self.coder
|
|
62
|
+
@@coder ||= ::HTMLEntities.new
|
|
63
|
+
end
|
|
64
|
+
|
|
56
65
|
# returns the x, y position of a cell
|
|
57
66
|
def self.name_to_indices(name)
|
|
58
67
|
raise ArgumentError, 'invalid cell name' unless name.size > 1
|
|
59
68
|
v = name[/[A-Z]+/].reverse.chars.reduce({:base=>1, :i=>0}) do |val, c|
|
|
60
69
|
val[:i] += ((c.bytes.first - 64) * val[:base]); val[:base] *= 26; val
|
|
61
70
|
end
|
|
62
|
-
|
|
63
71
|
[v[:i]-1, ((name[/[1-9][0-9]*/]).to_i)-1]
|
|
64
|
-
|
|
65
72
|
end
|
|
66
73
|
|
|
67
74
|
# converts the column index into alphabetical values.
|
|
@@ -87,8 +94,9 @@ module Axlsx
|
|
|
87
94
|
# performs the increadible feat of changing snake_case to CamelCase
|
|
88
95
|
# @param [String] s The snake case string to camelize
|
|
89
96
|
# @return [String]
|
|
90
|
-
def self.camel(s="")
|
|
91
|
-
s = s.capitalize
|
|
97
|
+
def self.camel(s="", all_caps = true)
|
|
98
|
+
s = s.capitalize if all_caps
|
|
99
|
+
s.gsub(/_(.)/){ $1.upcase }
|
|
92
100
|
end
|
|
93
101
|
|
|
94
102
|
end
|
|
@@ -9,12 +9,7 @@ class TestContentType < Test::Unit::TestCase
|
|
|
9
9
|
|
|
10
10
|
def test_valid_document
|
|
11
11
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::CONTENT_TYPES_XSD))
|
|
12
|
-
|
|
13
|
-
schema.validate(@doc).each do |error|
|
|
14
|
-
puts error.message
|
|
15
|
-
errors << error
|
|
16
|
-
end
|
|
17
|
-
assert_equal(errors.size, 0, "[Content Types].xml Invalid" + errors.map{ |e| e.message }.to_s)
|
|
12
|
+
assert(schema.validate(@doc).map{ |e| puts e.message; e.message }.empty?)
|
|
18
13
|
end
|
|
19
14
|
|
|
20
15
|
def test_pre_built_types
|
data/test/doc_props/tc_core.rb
CHANGED
|
@@ -5,7 +5,7 @@ class TestCore < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
@core = Axlsx::Core.new
|
|
7
7
|
# could still see some false positives if the second changes between the next two calls
|
|
8
|
-
@time = Time.now.strftime('%Y-%m-%dT%H:%M:%
|
|
8
|
+
@time = Time.now.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
9
9
|
@doc = Nokogiri::XML(@core.to_xml_string)
|
|
10
10
|
end
|
|
11
11
|
|
data/test/drawing/tc_axis.rb
CHANGED
|
@@ -2,8 +2,10 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestAxis < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
@axis = Axlsx::Axis.new 12345, 54321, :gridlines => false, :title => 'Foo'
|
|
6
7
|
end
|
|
8
|
+
|
|
7
9
|
def teardown
|
|
8
10
|
end
|
|
9
11
|
|
|
@@ -14,6 +16,29 @@ class TestAxis < Test::Unit::TestCase
|
|
|
14
16
|
assert_equal(@axis.crosses, :autoZero, "tick label position default incorrect")
|
|
15
17
|
assert(@axis.scaling.is_a?(Axlsx::Scaling) && @axis.scaling.orientation == :minMax, "scaling default incorrect")
|
|
16
18
|
assert_raise(ArgumentError) { Axlsx::Axis.new( -1234, 'abcd') }
|
|
19
|
+
assert_equal('Foo', @axis.title.text)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_color
|
|
23
|
+
@axis.color = "00FF00"
|
|
24
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
25
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
|
|
26
|
+
doc = Nokogiri::XML(@axis.to_xml_string(str))
|
|
27
|
+
assert(doc.xpath("//a:srgbClr[@val='00FF00']"))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_cell_based_axis_title
|
|
31
|
+
p = Axlsx::Package.new
|
|
32
|
+
p.workbook.add_worksheet(:name=>'foosheet') do |sheet|
|
|
33
|
+
sheet.add_row ['battle victories']
|
|
34
|
+
sheet.add_row ['bird', 1, 2, 1]
|
|
35
|
+
sheet.add_row ['cat', 7, 9, 10]
|
|
36
|
+
sheet.add_chart(Axlsx::Line3DChart) do |chart|
|
|
37
|
+
chart.add_series :data => sheet['B2:D2'], :labels => sheet['B1']
|
|
38
|
+
chart.valAxis.title = sheet['A1']
|
|
39
|
+
assert_equal('battle victories', chart.valAxis.title.text)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
17
42
|
end
|
|
18
43
|
|
|
19
44
|
def test_axis_position
|
|
@@ -57,6 +82,6 @@ class TestAxis < Test::Unit::TestCase
|
|
|
57
82
|
assert(doc.xpath("//c:crosses[@val='#{@axis.crosses.to_s}']"))
|
|
58
83
|
assert(doc.xpath("//c:crossAx[@val='#{@axis.crossAx.to_s}']"))
|
|
59
84
|
assert(doc.xpath("//a:bodyPr[@rot='#{@axis.label_rotation.to_s}']"))
|
|
60
|
-
|
|
85
|
+
assert(doc.xpath("//a:t[text()='Foo']"))
|
|
61
86
|
end
|
|
62
87
|
end
|
|
@@ -15,15 +15,15 @@ class TestBar3DChart < Test::Unit::TestCase
|
|
|
15
15
|
def test_initialization
|
|
16
16
|
assert_equal(@chart.grouping, :clustered, "grouping defualt incorrect")
|
|
17
17
|
assert_equal(@chart.series_type, Axlsx::BarSeries, "series type incorrect")
|
|
18
|
-
assert_equal(@chart.
|
|
19
|
-
assert(@chart.
|
|
20
|
-
assert(@chart.
|
|
18
|
+
assert_equal(@chart.bar_dir, :bar, " bar direction incorrect")
|
|
19
|
+
assert(@chart.cat_axis.is_a?(Axlsx::CatAxis), "category axis not created")
|
|
20
|
+
assert(@chart.val_axis.is_a?(Axlsx::ValAxis), "value access not created")
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def test_bar_direction
|
|
24
|
-
assert_raise(ArgumentError, "require valid bar direction") { @chart.
|
|
25
|
-
assert_nothing_raised("allow valid bar direction") { @chart.
|
|
26
|
-
assert(@chart.
|
|
24
|
+
assert_raise(ArgumentError, "require valid bar direction") { @chart.bar_dir = :left }
|
|
25
|
+
assert_nothing_raised("allow valid bar direction") { @chart.bar_dir = :col }
|
|
26
|
+
assert(@chart.bar_dir == :col)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def test_grouping
|
|
@@ -34,15 +34,15 @@ class TestBar3DChart < Test::Unit::TestCase
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
def test_gapWidth
|
|
37
|
-
assert_raise(ArgumentError, "require valid gap width") { @chart.
|
|
38
|
-
assert_nothing_raised("allow valid gapWidth") { @chart.
|
|
39
|
-
assert(@chart.
|
|
37
|
+
assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 200 }
|
|
38
|
+
assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = "200%" }
|
|
39
|
+
assert(@chart.gap_width == "200%")
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def test_gapDepth
|
|
43
|
-
assert_raise(ArgumentError, "require valid
|
|
44
|
-
assert_nothing_raised("allow valid
|
|
45
|
-
assert(@chart.
|
|
43
|
+
assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 200 }
|
|
44
|
+
assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = "200%" }
|
|
45
|
+
assert(@chart.gap_depth == "200%")
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def test_shape
|
|
@@ -5,7 +5,7 @@ class TestBarSeries < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
|
-
@chart = @ws.
|
|
8
|
+
@chart = @ws.add_chart Axlsx::Bar3DChart, :title => "fishery"
|
|
9
9
|
@series = @chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ['FF0000', '00FF00', '0000FF'], :shape => :cone
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -33,6 +33,5 @@ class TestBarSeries < Test::Unit::TestCase
|
|
|
33
33
|
assert_equal(doc.xpath("//c:dPt/c:idx[@val='#{index}']").size,1)
|
|
34
34
|
assert_equal(doc.xpath("//c:dPt/c:spPr/a:solidFill/a:srgbClr[@val='#{@series.colors[index]}']").size,1)
|
|
35
35
|
end
|
|
36
|
-
assert_equal(doc.xpath("//c:shape[@val='#{@series.shape.to_s}']").size, 1)
|
|
37
36
|
end
|
|
38
37
|
end
|
data/test/drawing/tc_cat_axis.rb
CHANGED
|
@@ -10,7 +10,7 @@ class TestCatAxis < Test::Unit::TestCase
|
|
|
10
10
|
def test_initialization
|
|
11
11
|
assert_equal(@axis.auto, 1, "axis auto default incorrect")
|
|
12
12
|
assert_equal(@axis.lblAlgn, :ctr, "label align default incorrect")
|
|
13
|
-
assert_equal(@axis.lblOffset, "100
|
|
13
|
+
assert_equal(@axis.lblOffset, "100", "label offset default incorrect")
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def test_auto
|
|
@@ -24,8 +24,8 @@ class TestCatAxis < Test::Unit::TestCase
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def test_lblOffset
|
|
27
|
-
assert_raise(ArgumentError, "requires valid label offset") { @axis.lblOffset =
|
|
28
|
-
assert_nothing_raised("accepts valid label offset") { @axis.lblOffset = "20
|
|
27
|
+
assert_raise(ArgumentError, "requires valid label offset") { @axis.lblOffset = 'foo' }
|
|
28
|
+
assert_nothing_raised("accepts valid label offset") { @axis.lblOffset = "20" }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
end
|
data/test/drawing/tc_chart.rb
CHANGED
|
@@ -73,15 +73,17 @@ class TestChart < Test::Unit::TestCase
|
|
|
73
73
|
def test_pn
|
|
74
74
|
assert_equal(@chart.pn, "charts/chart1.xml")
|
|
75
75
|
end
|
|
76
|
-
|
|
76
|
+
|
|
77
|
+
def test_d_lbls
|
|
78
|
+
assert_equal(nil, @chart.instance_values[:d_lbls])
|
|
79
|
+
@chart.d_lbls.d_lbl_pos = :t
|
|
80
|
+
assert(@chart.d_lbls.is_a?(Axlsx::DLbls), 'DLbls instantiated on access')
|
|
81
|
+
end
|
|
82
|
+
|
|
77
83
|
def test_to_xml_string
|
|
78
84
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
|
79
85
|
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
80
|
-
errors =
|
|
81
|
-
schema.validate(doc).each do |error|
|
|
82
|
-
errors.push error
|
|
83
|
-
puts error.message
|
|
84
|
-
end
|
|
86
|
+
errors = schema.validate(doc).map { |error| puts error.message; error }
|
|
85
87
|
assert(errors.empty?, "error free validation")
|
|
86
88
|
end
|
|
87
89
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'tc_helper'
|
|
2
|
+
|
|
3
|
+
class TestDLbls < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_initialization
|
|
10
|
+
assert_equal(:bestFit, @d_lbls.d_lbl_pos)
|
|
11
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
|
12
|
+
assert_equal(false, @d_lbls.send(attr))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_initialization_with_optoins
|
|
17
|
+
options_hash = Hash[*[Axlsx::DLbls::BOOLEAN_ATTRIBUTES.map { |name| [name, true] }] ]
|
|
18
|
+
d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart, options_hash.merge( { :d_lbl_pos => :t }))
|
|
19
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
|
20
|
+
assert_equal(true, d_lbls.send(attr), "boolean attributes set by options")
|
|
21
|
+
end
|
|
22
|
+
assert_equal(:t, d_lbls.d_lbl_pos, "d_lbl_pos set by options")
|
|
23
|
+
end
|
|
24
|
+
def test_d_lbl_pos
|
|
25
|
+
assert_raise(ArgumentError, 'invlaid label positions are rejected') { @d_lbls.d_lbl_pos = :upside_down }
|
|
26
|
+
assert_nothing_raised('accepts valid label position') { @d_lbls.d_lbl_pos = :ctr }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_boolean_attributes
|
|
30
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
|
31
|
+
assert_raise(ArgumentError, "rejects non boolean value for #{attr}") { @d_lbls.send("#{attr}=", :foo) }
|
|
32
|
+
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", true) }
|
|
33
|
+
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", false) }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_to_xml_string
|
|
38
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
39
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '" xmlns:r="' << Axlsx::XML_NS_R << '">'
|
|
40
|
+
@d_lbls.to_xml_string(str)
|
|
41
|
+
str << '</c:chartSpace>'
|
|
42
|
+
doc = Nokogiri::XML(str)
|
|
43
|
+
@d_lbls.instance_values.each do |name, value|
|
|
44
|
+
assert(doc.xpath("//c:#{Axlsx::camel(name, false)}[@val='#{value}']"), "#{name} is properly serialized")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/test/drawing/tc_drawing.rb
CHANGED
|
@@ -9,8 +9,6 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
9
9
|
|
|
10
10
|
def test_initialization
|
|
11
11
|
assert(@ws.workbook.drawings.empty?)
|
|
12
|
-
assert_equal(@ws.drawing, @ws.workbook.drawings.last, "drawing is added to workbook")
|
|
13
|
-
assert(@ws.drawing.anchors.is_a?(Axlsx::SimpleTypedList) && @ws.drawing.anchors.empty?, "anchor list is created and empty")
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
def test_add_chart
|
|
@@ -39,7 +37,6 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
39
37
|
assert(image.is_a?(Axlsx::Pic))
|
|
40
38
|
end
|
|
41
39
|
def test_charts
|
|
42
|
-
assert(@ws.drawing.charts.empty?)
|
|
43
40
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
|
44
41
|
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
|
45
42
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
|
@@ -47,23 +44,26 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
47
44
|
end
|
|
48
45
|
|
|
49
46
|
def test_pn
|
|
47
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
50
48
|
assert_equal(@ws.drawing.pn, "drawings/drawing1.xml")
|
|
51
49
|
end
|
|
52
50
|
|
|
53
51
|
def test_rels_pn
|
|
52
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
54
53
|
assert_equal(@ws.drawing.rels_pn, "drawings/_rels/drawing1.xml.rels")
|
|
55
54
|
end
|
|
56
55
|
|
|
57
56
|
def test_rId
|
|
57
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
58
58
|
assert_equal(@ws.drawing.rId, "rId1")
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def test_index
|
|
62
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
62
63
|
assert_equal(@ws.drawing.index, @ws.workbook.drawings.index(@ws.drawing))
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
def test_relationships
|
|
66
|
-
assert(@ws.drawing.relationships.empty?)
|
|
67
67
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
|
68
68
|
assert_equal(@ws.drawing.relationships.size, 1, "adding a chart adds a relationship")
|
|
69
69
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
|
@@ -72,6 +72,7 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
72
72
|
|
|
73
73
|
def test_to_xml
|
|
74
74
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
|
75
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
75
76
|
doc = Nokogiri::XML(@ws.drawing.to_xml_string)
|
|
76
77
|
errors = []
|
|
77
78
|
schema.validate(doc).each do |error|
|
|
@@ -5,7 +5,7 @@ class TestLineSeries < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
|
-
chart = @ws.
|
|
8
|
+
chart = @ws.add_chart Axlsx::Line3DChart, :title => "fishery"
|
|
9
9
|
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :color => "#FF0000"
|
|
10
10
|
end
|
|
11
11
|
|
data/test/drawing/tc_num_data.rb
CHANGED
|
@@ -9,7 +9,11 @@ class TestNumData < Test::Unit::TestCase
|
|
|
9
9
|
def test_initialize
|
|
10
10
|
assert_equal(@num_data.format_code, "General")
|
|
11
11
|
end
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
def test_formula_based_cell
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
def test_format_code
|
|
14
18
|
assert_raise(ArgumentError) {@num_data.format_code = 7}
|
|
15
19
|
assert_nothing_raised {@num_data.format_code = 'foo_bar'}
|
|
@@ -6,26 +6,22 @@ class TestPie3DChart < Test::Unit::TestCase
|
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
ws = p.workbook.add_worksheet
|
|
8
8
|
@row = ws.add_row ["one", 1, Time.now]
|
|
9
|
-
@chart = ws.
|
|
9
|
+
@chart = ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def teardown
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def test_initialization
|
|
16
|
-
assert_equal(@chart.
|
|
17
|
-
assert_equal(@chart.
|
|
16
|
+
assert_equal(@chart.view_3D.rot_x, 30, "view 3d default rot_x incorrect")
|
|
17
|
+
assert_equal(@chart.view_3D.perspective, 30, "view_3d default perspective incorrect")
|
|
18
18
|
assert_equal(@chart.series_type, Axlsx::PieSeries, "series type incorrect")
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def test_to_xml
|
|
22
22
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
|
23
23
|
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
24
|
-
errors =
|
|
25
|
-
schema.validate(doc).each do |error|
|
|
26
|
-
errors.push error
|
|
27
|
-
puts error.message
|
|
28
|
-
end
|
|
24
|
+
errors = schema.validate(doc).map {|error| puts error.message; error }
|
|
29
25
|
assert(errors.empty?, "error free validation")
|
|
30
26
|
end
|
|
31
27
|
|
|
@@ -5,7 +5,7 @@ class TestPieSeries < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
|
-
chart = @ws.
|
|
8
|
+
chart = @ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
|
|
9
9
|
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ["FF0000", "00FF00", "0000FF"]
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ class TestScatterSeries < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
|
-
@chart = @ws.
|
|
8
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Scatter Chart"
|
|
9
9
|
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents", :color => 'FF0000'
|
|
10
10
|
end
|
|
11
11
|
|
data/test/drawing/tc_series.rb
CHANGED
|
@@ -5,7 +5,7 @@ class TestSeries < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
|
-
chart = @ws.
|
|
8
|
+
chart = @ws.add_chart Axlsx::Chart, :title => "fishery"
|
|
9
9
|
@series = chart.add_series :title=>"bob"
|
|
10
10
|
end
|
|
11
11
|
|
data/test/drawing/tc_title.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../"
|
|
2
|
+
|
|
1
3
|
require 'tc_helper.rb'
|
|
2
4
|
|
|
3
5
|
class TestTitle < Test::Unit::TestCase
|
|
@@ -30,4 +32,18 @@ class TestTitle < Test::Unit::TestCase
|
|
|
30
32
|
assert(@title.text == "one")
|
|
31
33
|
end
|
|
32
34
|
|
|
35
|
+
def test_to_xml_string_text
|
|
36
|
+
@chart.title.text = 'foo'
|
|
37
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
38
|
+
assert_equal(1, doc.xpath('//c:rich').size)
|
|
39
|
+
assert_equal(1, doc.xpath("//a:t[text()='foo']").size)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_to_xml_string_cell
|
|
43
|
+
@chart.title.cell = @row.cells.first
|
|
44
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
45
|
+
assert_equal(1, doc.xpath('//c:strCache').size)
|
|
46
|
+
assert_equal(1, doc.xpath('//c:v[text()="one"]').size)
|
|
47
|
+
end
|
|
48
|
+
|
|
33
49
|
end
|
data/test/drawing/tc_view_3D.rb
CHANGED
|
@@ -9,33 +9,33 @@ class TestView3D < Test::Unit::TestCase
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def test_options
|
|
12
|
-
v = Axlsx::View3D.new :
|
|
13
|
-
assert_equal(v.
|
|
14
|
-
assert_equal(v.
|
|
15
|
-
assert_equal(v.
|
|
16
|
-
assert_equal(v.
|
|
17
|
-
assert_equal(v.
|
|
12
|
+
v = Axlsx::View3D.new :rot_x => 10, :rot_y => 5, :h_percent => "30%", :depth_percent => "45%", :r_ang_ax => false, :perspective => 10
|
|
13
|
+
assert_equal(v.rot_x, 10)
|
|
14
|
+
assert_equal(v.rot_y, 5)
|
|
15
|
+
assert_equal(v.h_percent, "30%")
|
|
16
|
+
assert_equal(v.depth_percent, "45%")
|
|
17
|
+
assert_equal(v.r_ang_ax, false)
|
|
18
18
|
assert_equal(v.perspective, 10)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def
|
|
22
|
-
assert_raise(ArgumentError) {@view.
|
|
23
|
-
assert_nothing_raised {@view.
|
|
21
|
+
def test_rot_x
|
|
22
|
+
assert_raise(ArgumentError) {@view.rot_x = "bob"}
|
|
23
|
+
assert_nothing_raised {@view.rot_x = -90}
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def
|
|
27
|
-
assert_raise(ArgumentError) {@view.
|
|
28
|
-
assert_nothing_raised {@view.
|
|
26
|
+
def test_rot_y
|
|
27
|
+
assert_raise(ArgumentError) {@view.rot_y = "bob"}
|
|
28
|
+
assert_nothing_raised {@view.rot_y = 90}
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def
|
|
32
|
-
assert_raise(ArgumentError) {@view.
|
|
33
|
-
assert_nothing_raised {@view.
|
|
31
|
+
def test_h_percent
|
|
32
|
+
assert_raise(ArgumentError) {@view.h_percent = "bob"}
|
|
33
|
+
assert_nothing_raised {@view.h_percent = "500%"}
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
def
|
|
37
|
-
assert_raise(ArgumentError) {@view.
|
|
38
|
-
assert_nothing_raised {@view.
|
|
36
|
+
def test_depth_percent
|
|
37
|
+
assert_raise(ArgumentError) {@view.depth_percent = "bob"}
|
|
38
|
+
assert_nothing_raised {@view.depth_percent = "20%"}
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
|