osheet 0.1.0 → 0.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.
Files changed (71) hide show
  1. data/.bundle/config +2 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +33 -0
  5. data/README.rdoc +103 -61
  6. data/Rakefile +5 -56
  7. data/examples/basic.rb +73 -0
  8. data/examples/formats.rb +366 -0
  9. data/examples/trivial.rb +21 -0
  10. data/lib/osheet/associations.rb +62 -0
  11. data/lib/osheet/cell.rb +44 -10
  12. data/lib/osheet/column.rb +34 -7
  13. data/lib/osheet/format/accounting.rb +21 -0
  14. data/lib/osheet/format/currency.rb +23 -0
  15. data/lib/osheet/format/custom.rb +13 -0
  16. data/lib/osheet/format/datetime.rb +13 -0
  17. data/lib/osheet/format/fraction.rb +33 -0
  18. data/lib/osheet/format/general.rb +9 -0
  19. data/lib/osheet/format/number.rb +13 -0
  20. data/lib/osheet/format/numeric.rb +113 -0
  21. data/lib/osheet/format/percentage.rb +25 -0
  22. data/lib/osheet/format/scientific.rb +25 -0
  23. data/lib/osheet/format/special.rb +28 -0
  24. data/lib/osheet/format/text.rb +11 -0
  25. data/lib/osheet/format.rb +30 -0
  26. data/lib/osheet/row.rb +32 -7
  27. data/lib/osheet/style.rb +65 -0
  28. data/lib/osheet/style_set.rb +39 -0
  29. data/lib/osheet/styled_element.rb +18 -0
  30. data/lib/osheet/template.rb +32 -0
  31. data/lib/osheet/template_set.rb +57 -0
  32. data/lib/osheet/version.rb +1 -11
  33. data/lib/osheet/workbook.rb +32 -16
  34. data/lib/osheet/workbook_element.rb +21 -0
  35. data/lib/osheet/worksheet.rb +18 -20
  36. data/lib/osheet/worksheet_element.rb +15 -0
  37. data/lib/osheet/xmlss_writer/base.rb +42 -0
  38. data/lib/osheet/xmlss_writer/elements.rb +68 -0
  39. data/lib/osheet/xmlss_writer/styles.rb +176 -0
  40. data/lib/osheet/xmlss_writer.rb +1 -0
  41. data/lib/osheet.rb +7 -27
  42. data/osheet.gemspec +26 -0
  43. data/test/cell_test.rb +83 -0
  44. data/test/column_test.rb +81 -0
  45. data/test/env.rb +9 -0
  46. data/test/format/accounting_test.rb +158 -0
  47. data/test/format/currency_test.rb +158 -0
  48. data/test/format/custom_test.rb +22 -0
  49. data/test/format/datetime_test.rb +22 -0
  50. data/test/format/fraction_test.rb +84 -0
  51. data/test/format/general_test.rb +21 -0
  52. data/test/format/number_test.rb +93 -0
  53. data/test/format/percentage_test.rb +116 -0
  54. data/test/format/scientific_test.rb +116 -0
  55. data/test/format/special_test.rb +51 -0
  56. data/test/format/text_test.rb +18 -0
  57. data/test/format_test.rb +35 -0
  58. data/test/helper.rb +101 -0
  59. data/test/osheet_test.rb +14 -0
  60. data/test/row_test.rb +78 -0
  61. data/test/style_set_test.rb +50 -0
  62. data/test/style_test.rb +92 -0
  63. data/test/template_set_test.rb +76 -0
  64. data/test/template_test.rb +63 -0
  65. data/test/workbook_test.rb +142 -0
  66. data/test/worksheet_test.rb +77 -0
  67. data/test/xmlss_writer/base_test.rb +92 -0
  68. data/test/xmlss_writer/elements_test.rb +168 -0
  69. data/test/xmlss_writer/styles_test.rb +253 -0
  70. metadata +141 -30
  71. data/lib/osheet/base.rb +0 -95
@@ -0,0 +1,158 @@
1
+ require "test/helper"
2
+ require 'osheet/format/currency'
3
+
4
+ module Osheet::Format
5
+
6
+ class CurrencyTest < Test::Unit::TestCase
7
+ context "Currency format" do
8
+ subject { Currency.new }
9
+
10
+ should_have_accessors :decimal_places, :symbol, :comma_separator, :negative_numbers
11
+
12
+ should "provide symbol options" do
13
+ assert_equal 3, Currency.symbol_set.size
14
+ [:none, :dollar, :euro].each do |a|
15
+ assert Currency.symbol_set.include?(a)
16
+ end
17
+ end
18
+
19
+ should "provide negative numbers options" do
20
+ assert_equal 4, Currency.negative_numbers_set.size
21
+ [:black, :black_parenth, :red, :red_parenth].each do |a|
22
+ assert Currency.negative_numbers_set.include?(a)
23
+ end
24
+ end
25
+
26
+ should "set default values" do
27
+ assert_equal 2, subject.decimal_places
28
+ assert_equal :dollar, subject.symbol
29
+ assert_equal true, subject.comma_separator
30
+ assert_equal :black, subject.negative_numbers
31
+ end
32
+
33
+ should "only allow Fixnum decimal places between 0 and 30" do
34
+ assert_raises ArgumentError do
35
+ Currency.new({:decimal_places => -1})
36
+ end
37
+ assert_raises ArgumentError do
38
+ Currency.new({:decimal_places => 31})
39
+ end
40
+ assert_raises ArgumentError do
41
+ Currency.new({:decimal_places => 'poo'})
42
+ end
43
+ assert_nothing_raised do
44
+ Currency.new({:decimal_places => 1})
45
+ end
46
+ end
47
+
48
+ should "generate decimal place style strings" do
49
+ assert_equal "0", Currency.new({
50
+ :decimal_places => 0,
51
+ :comma_separator => false,
52
+ :symbol => :none
53
+ }).style
54
+ (1..5).each do |n|
55
+ assert_equal "0.#{'0'*n}", Currency.new({
56
+ :decimal_places => n,
57
+ :comma_separator => false,
58
+ :symbol => :none
59
+ }).style
60
+ end
61
+ end
62
+
63
+ should "generate comma separator style strings" do
64
+ assert_equal "0", Currency.new({
65
+ :comma_separator => false,
66
+ :decimal_places => 0,
67
+ :symbol => :none
68
+ }).style
69
+ assert_equal "#,##0", Currency.new({
70
+ :comma_separator => true,
71
+ :decimal_places => 0,
72
+ :symbol => :none
73
+ }).style
74
+ end
75
+
76
+ should "generate parenth negative numbers style strings" do
77
+ assert_equal "0", Currency.new({
78
+ :negative_numbers => :black,
79
+ :decimal_places => 0,
80
+ :comma_separator => false,
81
+ :symbol => :none
82
+ }).style
83
+ assert_equal "0_);\(0\)", Currency.new({
84
+ :negative_numbers => :black_parenth,
85
+ :decimal_places => 0,
86
+ :comma_separator => false,
87
+ :symbol => :none
88
+ }).style
89
+ end
90
+
91
+ should "generate red negative numbers style strings" do
92
+ assert_equal "0;[Red]0", Currency.new({
93
+ :negative_numbers => :red,
94
+ :decimal_places => 0,
95
+ :comma_separator => false,
96
+ :symbol => :none
97
+ }).style
98
+ assert_equal "0_);[Red]\(0\)", Currency.new({
99
+ :negative_numbers => :red_parenth,
100
+ :decimal_places => 0,
101
+ :comma_separator => false,
102
+ :symbol => :none
103
+ }).style
104
+ end
105
+
106
+ should "generate symbol style strings" do
107
+ assert_equal "0", Currency.new({
108
+ :decimal_places => 0,
109
+ :comma_separator => false,
110
+ :symbol => :none
111
+ }).style
112
+ assert_equal "\"$\"0", Currency.new({
113
+ :decimal_places => 0,
114
+ :comma_separator => false,
115
+ :symbol => :dollar
116
+ }).style
117
+ assert_equal "[$€-2]\ 0", Currency.new({
118
+ :decimal_places => 0,
119
+ :comma_separator => false,
120
+ :symbol => :euro
121
+ }).style
122
+ end
123
+
124
+ should "generate complex style string" do
125
+ assert_equal("\"$\"0.00_);\(\"$\"0.00\)", Currency.new({
126
+ :symbol => :dollar,
127
+ :decimal_places => 2,
128
+ :negative_numbers => :black_parenth,
129
+ :comma_separator => false
130
+ }).style)
131
+ assert_equal("[$€-2]\ #,##0.0000_);[Red]\([$€-2]\ #,##0.0000\)", Currency.new({
132
+ :symbol => :euro,
133
+ :decimal_places => 4,
134
+ :negative_numbers => :red_parenth,
135
+ :comma_separator => true
136
+ }).style)
137
+ end
138
+
139
+ should "provide unique format keys" do
140
+ assert_equal("currency_dollar_2_nocomma_blackparenth", Currency.new({
141
+ :decimal_places => 2,
142
+ :negative_numbers => :black_parenth,
143
+ :comma_separator => false
144
+ }).key)
145
+ assert_equal("currency_none_4_comma_redparenth", Currency.new({
146
+ :symbol => :none,
147
+ :decimal_places => 4,
148
+ :negative_numbers => :red_parenth,
149
+ :comma_separator => true
150
+ }).key)
151
+ end
152
+
153
+
154
+
155
+ end
156
+ end
157
+
158
+ end
@@ -0,0 +1,22 @@
1
+ require "test/helper"
2
+ require 'osheet/format/custom'
3
+
4
+ module Osheet::Format
5
+
6
+ class CustomTest < Test::Unit::TestCase
7
+ context "Custom format" do
8
+ should "generate a basic style string and key" do
9
+ f = Custom.new '@'
10
+ assert_equal "@", f.style
11
+ assert_equal "custom_@", f.key
12
+ end
13
+
14
+ should "generate a more complex style string and key" do
15
+ f = Custom.new 'm/d/yy'
16
+ assert_equal 'm/d/yy', f.style
17
+ assert_equal "custom_m/d/yy", f.key
18
+ end
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ require "test/helper"
2
+ require 'osheet/format/datetime'
3
+
4
+ module Osheet::Format
5
+
6
+ class DatetimeTest < Test::Unit::TestCase
7
+ context "Datetime format" do
8
+ should "generate a basic style string and key" do
9
+ f = Datetime.new 'mm/dd/yyyy'
10
+ assert_equal "mm/dd/yyyy", f.style
11
+ assert_equal "datetime_mm/dd/yyyy", f.key
12
+ end
13
+
14
+ should "generate a more complex style string and key" do
15
+ f = Datetime.new 'yy-m'
16
+ assert_equal 'yy-m', f.style
17
+ assert_equal "datetime_yy-m", f.key
18
+ end
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,84 @@
1
+ require "test/helper"
2
+ require 'osheet/format/fraction'
3
+
4
+ module Osheet::Format
5
+
6
+ class FractionTest < Test::Unit::TestCase
7
+ context "Fraction format" do
8
+ subject { Fraction.new }
9
+
10
+ should_have_accessors :type
11
+
12
+ should "provide options for type" do
13
+ assert_equal 9, Fraction.type_set.size
14
+ [ :one_digit, :two_digits, :three_digits,
15
+ :halves, :quarters, :eighths, :sixteenths,
16
+ :tenths, :hundredths
17
+ ].each do |a|
18
+ assert Fraction.type_set.include?(a)
19
+ end
20
+ end
21
+
22
+ should "set default values" do
23
+ assert_equal '??/??', subject.type
24
+ assert_equal :two_digits, subject.type_key
25
+ end
26
+
27
+ should "generate a one_digit type style strings and key" do
28
+ f = Fraction.new(:type => :one_digit)
29
+ assert_equal "#\ ?/?", f.style
30
+ assert_equal "fraction_onedigit", f.key
31
+ end
32
+
33
+ should "generate a two_digit type style strings and key" do
34
+ f = Fraction.new(:type => :two_digits)
35
+ assert_equal "#\ ??/??", f.style
36
+ assert_equal "fraction_twodigits", f.key
37
+ end
38
+
39
+ should "generate a three_digit type style strings and key" do
40
+ f = Fraction.new(:type => :three_digits)
41
+ assert_equal "#\ ???/???", f.style
42
+ assert_equal "fraction_threedigits", f.key
43
+ end
44
+
45
+ should "generate a halves type style strings and key" do
46
+ f = Fraction.new(:type => :halves)
47
+ assert_equal "#\ ?/2", f.style
48
+ assert_equal "fraction_halves", f.key
49
+ end
50
+
51
+ should "generate a quarters type style strings and key" do
52
+ f = Fraction.new(:type => :quarters)
53
+ assert_equal "#\ ?/4", f.style
54
+ assert_equal "fraction_quarters", f.key
55
+ end
56
+
57
+ should "generate a eighths type style strings and key" do
58
+ f = Fraction.new(:type => :eighths)
59
+ assert_equal "#\ ?/8", f.style
60
+ assert_equal "fraction_eighths", f.key
61
+ end
62
+
63
+ should "generate a sixteenths type style strings and key" do
64
+ f = Fraction.new(:type => :sixteenths)
65
+ assert_equal "#\ ??/16", f.style
66
+ assert_equal "fraction_sixteenths", f.key
67
+ end
68
+
69
+ should "generate a tenths type style strings and key" do
70
+ f = Fraction.new(:type => :tenths)
71
+ assert_equal "#\ ?/10", f.style
72
+ assert_equal "fraction_tenths", f.key
73
+ end
74
+
75
+ should "generate a hundredths type style strings and key" do
76
+ f = Fraction.new(:type => :hundredths)
77
+ assert_equal "#\ ??/100", f.style
78
+ assert_equal "fraction_hundredths", f.key
79
+ end
80
+
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,21 @@
1
+ require "test/helper"
2
+ require 'osheet/format/general'
3
+
4
+ module Osheet::Format
5
+
6
+ class GeneralTest < Test::Unit::TestCase
7
+ context "General format" do
8
+ subject { General.new }
9
+
10
+ should "always provide a nil style string" do
11
+ assert_equal nil, subject.style
12
+ end
13
+
14
+ should "always provide and empty format key" do
15
+ assert_equal '', subject.key
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,93 @@
1
+ require "test/helper"
2
+ require 'osheet/format/number'
3
+
4
+ module Osheet::Format
5
+
6
+ class NumberTest < Test::Unit::TestCase
7
+ context "Number format" do
8
+ subject { Number.new }
9
+
10
+ should_have_accessors :decimal_places, :comma_separator, :negative_numbers
11
+
12
+ should "provide options for negative numbers" do
13
+ assert_equal 4, Number.negative_numbers_set.size
14
+ [:black, :black_parenth, :red, :red_parenth].each do |a|
15
+ assert Number.negative_numbers_set.include?(a)
16
+ end
17
+ end
18
+
19
+ should "set default values" do
20
+ assert_equal 0, subject.decimal_places
21
+ assert_equal false, subject.comma_separator
22
+ assert_equal :black, subject.negative_numbers
23
+ end
24
+
25
+ should "only allow Fixnum decimal places between 0 and 30" do
26
+ assert_raises ArgumentError do
27
+ Number.new({:decimal_places => -1})
28
+ end
29
+ assert_raises ArgumentError do
30
+ Number.new({:decimal_places => 31})
31
+ end
32
+ assert_raises ArgumentError do
33
+ Number.new({:decimal_places => 'poo'})
34
+ end
35
+ assert_nothing_raised do
36
+ Number.new({:decimal_places => 1})
37
+ end
38
+ end
39
+
40
+ should "generate decimal place style strings" do
41
+ assert_equal "0", Number.new({:decimal_places => 0}).style
42
+ (1..5).each do |n|
43
+ assert_equal "0.#{'0'*n}", Number.new({:decimal_places => n}).style
44
+ end
45
+ end
46
+
47
+ should "generate comma separator style strings" do
48
+ assert_equal "0", Number.new({:comma_separator => false}).style
49
+ assert_equal "#,##0", Number.new({:comma_separator => true}).style
50
+ end
51
+
52
+ should "generate parenth negative numbers style strings" do
53
+ assert_equal "0", Number.new({:negative_numbers => :black}).style
54
+ assert_equal "0_);\(0\)", Number.new({:negative_numbers => :black_parenth}).style
55
+ end
56
+
57
+ should "generate red negative numbers style strings" do
58
+ assert_equal "0;[Red]0", Number.new({:negative_numbers => :red}).style
59
+ assert_equal "0_);[Red]\(0\)", Number.new({:negative_numbers => :red_parenth}).style
60
+ end
61
+
62
+ should "generate complex style string" do
63
+ assert_equal("0.00_);\(0.00\)", Number.new({
64
+ :decimal_places => 2,
65
+ :negative_numbers => :black_parenth,
66
+ :comma_separator => false
67
+ }).style)
68
+ assert_equal("#,##0.0000_);[Red]\(#,##0.0000\)", Number.new({
69
+ :decimal_places => 4,
70
+ :negative_numbers => :red_parenth,
71
+ :comma_separator => true
72
+ }).style)
73
+ end
74
+
75
+ should "provide unique format keys" do
76
+ assert_equal("number_none_2_nocomma_blackparenth", Number.new({
77
+ :decimal_places => 2,
78
+ :negative_numbers => :black_parenth,
79
+ :comma_separator => false
80
+ }).key)
81
+ assert_equal("number_none_4_comma_redparenth", Number.new({
82
+ :decimal_places => 4,
83
+ :negative_numbers => :red_parenth,
84
+ :comma_separator => true
85
+ }).key)
86
+ end
87
+
88
+
89
+
90
+ end
91
+ end
92
+
93
+ end
@@ -0,0 +1,116 @@
1
+ require "test/helper"
2
+ require 'osheet/format/percentage'
3
+
4
+ module Osheet::Format
5
+
6
+ class PercentageTest < Test::Unit::TestCase
7
+ context "Percentage format" do
8
+ subject { Percentage.new }
9
+
10
+ should_have_accessors :decimal_places, :symbol, :comma_separator, :negative_numbers
11
+
12
+ should "provide negative numbers options" do
13
+ assert_equal 4, Percentage.negative_numbers_set.size
14
+ [:black, :black_parenth, :red, :red_parenth].each do |a|
15
+ assert Percentage.negative_numbers_set.include?(a)
16
+ end
17
+ end
18
+
19
+ should "set default values" do
20
+ assert_equal 2, subject.decimal_places
21
+ assert_equal false, subject.comma_separator
22
+ assert_equal :black, subject.negative_numbers
23
+ end
24
+
25
+ should "only allow Fixnum decimal places between 0 and 30" do
26
+ assert_raises ArgumentError do
27
+ Percentage.new({:decimal_places => -1})
28
+ end
29
+ assert_raises ArgumentError do
30
+ Percentage.new({:decimal_places => 31})
31
+ end
32
+ assert_raises ArgumentError do
33
+ Percentage.new({:decimal_places => 'poo'})
34
+ end
35
+ assert_nothing_raised do
36
+ Percentage.new({:decimal_places => 1})
37
+ end
38
+ end
39
+
40
+ should "generate decimal place style strings" do
41
+ assert_equal "0%", Percentage.new({
42
+ :decimal_places => 0
43
+ }).style
44
+ (1..5).each do |n|
45
+ assert_equal "0.#{'0'*n}%", Percentage.new({
46
+ :decimal_places => n
47
+ }).style
48
+ end
49
+ end
50
+
51
+ should "generate comma separator style strings" do
52
+ assert_equal "0%", Percentage.new({
53
+ :comma_separator => false,
54
+ :decimal_places => 0
55
+ }).style
56
+ assert_equal "#,##0%", Percentage.new({
57
+ :comma_separator => true,
58
+ :decimal_places => 0
59
+ }).style
60
+ end
61
+
62
+ should "generate parenth negative numbers style strings" do
63
+ assert_equal "0%", Percentage.new({
64
+ :negative_numbers => :black,
65
+ :decimal_places => 0
66
+ }).style
67
+ assert_equal "0%_);\(0%\)", Percentage.new({
68
+ :negative_numbers => :black_parenth,
69
+ :decimal_places => 0
70
+ }).style
71
+ end
72
+
73
+ should "generate red negative numbers style strings" do
74
+ assert_equal "0%;[Red]0%", Percentage.new({
75
+ :negative_numbers => :red,
76
+ :decimal_places => 0
77
+ }).style
78
+ assert_equal "0%_);[Red]\(0%\)", Percentage.new({
79
+ :negative_numbers => :red_parenth,
80
+ :decimal_places => 0
81
+ }).style
82
+ end
83
+
84
+ should "generate complex style string" do
85
+ assert_equal("0.00%_);\(0.00%\)", Percentage.new({
86
+ :decimal_places => 2,
87
+ :negative_numbers => :black_parenth,
88
+ :comma_separator => false
89
+ }).style)
90
+ assert_equal("#,##0.0000%_);[Red]\(#,##0.0000%\)", Percentage.new({
91
+ :decimal_places => 4,
92
+ :negative_numbers => :red_parenth,
93
+ :comma_separator => true
94
+ }).style)
95
+ end
96
+
97
+ should "provide unique format keys" do
98
+ assert_equal("percentage_none_2_nocomma_blackparenth", Percentage.new({
99
+ :decimal_places => 2,
100
+ :negative_numbers => :black_parenth,
101
+ :comma_separator => false
102
+ }).key)
103
+ assert_equal("percentage_none_4_comma_redparenth", Percentage.new({
104
+ :symbol => :none,
105
+ :decimal_places => 4,
106
+ :negative_numbers => :red_parenth,
107
+ :comma_separator => true
108
+ }).key)
109
+ end
110
+
111
+
112
+
113
+ end
114
+ end
115
+
116
+ end
@@ -0,0 +1,116 @@
1
+ require "test/helper"
2
+ require 'osheet/format/scientific'
3
+
4
+ module Osheet::Format
5
+
6
+ class ScientificTest < Test::Unit::TestCase
7
+ context "Scientific format" do
8
+ subject { Scientific.new }
9
+
10
+ should_have_accessors :decimal_places, :symbol, :comma_separator, :negative_numbers
11
+
12
+ should "provide negative numbers options" do
13
+ assert_equal 4, Scientific.negative_numbers_set.size
14
+ [:black, :black_parenth, :red, :red_parenth].each do |a|
15
+ assert Scientific.negative_numbers_set.include?(a)
16
+ end
17
+ end
18
+
19
+ should "set default values" do
20
+ assert_equal 2, subject.decimal_places
21
+ assert_equal false, subject.comma_separator
22
+ assert_equal :black, subject.negative_numbers
23
+ end
24
+
25
+ should "only allow Fixnum decimal places between 0 and 30" do
26
+ assert_raises ArgumentError do
27
+ Scientific.new({:decimal_places => -1})
28
+ end
29
+ assert_raises ArgumentError do
30
+ Scientific.new({:decimal_places => 31})
31
+ end
32
+ assert_raises ArgumentError do
33
+ Scientific.new({:decimal_places => 'poo'})
34
+ end
35
+ assert_nothing_raised do
36
+ Scientific.new({:decimal_places => 1})
37
+ end
38
+ end
39
+
40
+ should "generate decimal place style strings" do
41
+ assert_equal "0E+00", Scientific.new({
42
+ :decimal_places => 0
43
+ }).style
44
+ (1..5).each do |n|
45
+ assert_equal "0.#{'0'*n}E+00", Scientific.new({
46
+ :decimal_places => n
47
+ }).style
48
+ end
49
+ end
50
+
51
+ should "generate comma separator style strings" do
52
+ assert_equal "0E+00", Scientific.new({
53
+ :comma_separator => false,
54
+ :decimal_places => 0
55
+ }).style
56
+ assert_equal "#,##0E+00", Scientific.new({
57
+ :comma_separator => true,
58
+ :decimal_places => 0
59
+ }).style
60
+ end
61
+
62
+ should "generate parenth negative numbers style strings" do
63
+ assert_equal "0E+00", Scientific.new({
64
+ :negative_numbers => :black,
65
+ :decimal_places => 0
66
+ }).style
67
+ assert_equal "0E+00_);\(0E+00\)", Scientific.new({
68
+ :negative_numbers => :black_parenth,
69
+ :decimal_places => 0
70
+ }).style
71
+ end
72
+
73
+ should "generate red negative numbers style strings" do
74
+ assert_equal "0E+00;[Red]0E+00", Scientific.new({
75
+ :negative_numbers => :red,
76
+ :decimal_places => 0
77
+ }).style
78
+ assert_equal "0E+00_);[Red]\(0E+00\)", Scientific.new({
79
+ :negative_numbers => :red_parenth,
80
+ :decimal_places => 0
81
+ }).style
82
+ end
83
+
84
+ should "generate complex style string" do
85
+ assert_equal("0.00E+00_);\(0.00E+00\)", Scientific.new({
86
+ :decimal_places => 2,
87
+ :negative_numbers => :black_parenth,
88
+ :comma_separator => false
89
+ }).style)
90
+ assert_equal("#,##0.0000E+00_);[Red]\(#,##0.0000E+00\)", Scientific.new({
91
+ :decimal_places => 4,
92
+ :negative_numbers => :red_parenth,
93
+ :comma_separator => true
94
+ }).style)
95
+ end
96
+
97
+ should "provide unique format keys" do
98
+ assert_equal("scientific_none_2_nocomma_blackparenth", Scientific.new({
99
+ :decimal_places => 2,
100
+ :negative_numbers => :black_parenth,
101
+ :comma_separator => false
102
+ }).key)
103
+ assert_equal("scientific_none_4_comma_redparenth", Scientific.new({
104
+ :symbol => :none,
105
+ :decimal_places => 4,
106
+ :negative_numbers => :red_parenth,
107
+ :comma_separator => true
108
+ }).key)
109
+ end
110
+
111
+
112
+
113
+ end
114
+ end
115
+
116
+ end
@@ -0,0 +1,51 @@
1
+ require "test/helper"
2
+ require 'osheet/format/special'
3
+
4
+ module Osheet::Format
5
+
6
+ class SpecialTest < Test::Unit::TestCase
7
+ context "Special format" do
8
+ subject { Special.new }
9
+
10
+ should_have_accessors :type
11
+
12
+ should "provide options for type" do
13
+ assert_equal 4, Special.type_set.size
14
+ [ :zip_code, :zip_code_plus_4, :phone_number, :social_security_number].each do |a|
15
+ assert Special.type_set.include?(a)
16
+ end
17
+ end
18
+
19
+ should "set default values" do
20
+ assert_equal nil, subject.type
21
+ assert_equal nil, subject.type_key
22
+ end
23
+
24
+ should "generate a zip_code type style strings and key" do
25
+ f = Special.new(:type => :zip_code)
26
+ assert_equal "00000", f.style
27
+ assert_equal "special_zipcode", f.key
28
+ end
29
+
30
+ should "generate a zip_code_plus_4 type style strings and key" do
31
+ f = Special.new(:type => :zip_code_plus_4)
32
+ assert_equal "00000-0000", f.style
33
+ assert_equal "special_zipcodeplus4", f.key
34
+ end
35
+
36
+ should "generate a phone_number type style strings and key" do
37
+ f = Special.new(:type => :phone_number)
38
+ assert_equal "[<=9999999]###-####;(###) ###-####", f.style
39
+ assert_equal "special_phonenumber", f.key
40
+ end
41
+
42
+ should "generate a social_security_number type style strings and key" do
43
+ f = Special.new(:type => :social_security_number)
44
+ assert_equal "000-00-0000", f.style
45
+ assert_equal "special_socialsecuritynumber", f.key
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ end