rtf 0.1.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/doc/README +177 -0
- data/doc/makedoc.bat +2 -0
- data/examples/example01.rb +51 -0
- data/examples/example02.rb +45 -0
- data/examples/example03.rb +66 -0
- data/examples/example03.rtf +164 -0
- data/lib/rtf.rb +34 -0
- data/lib/rtf/colour.rb +173 -0
- data/lib/rtf/font.rb +173 -0
- data/lib/rtf/information.rb +112 -0
- data/lib/rtf/node.rb +1398 -0
- data/lib/rtf/paper.rb +55 -0
- data/lib/rtf/style.rb +305 -0
- data/test/CharacterStyleTest.rb +142 -0
- data/test/ColourTableTest.rb +98 -0
- data/test/ColourTest.rb +122 -0
- data/test/CommandNodeTest.rb +220 -0
- data/test/ContainerNodeTest.rb +70 -0
- data/test/DocumentStyleTest.rb +85 -0
- data/test/DocumentTest.rb +112 -0
- data/test/FontTableTest.rb +96 -0
- data/test/FontTest.rb +53 -0
- data/test/FooterNodeTest.rb +36 -0
- data/test/HeaderNodeTest.rb +36 -0
- data/test/InformationTest.rb +133 -0
- data/test/NodeTest.rb +31 -0
- data/test/ParagraphStyleTest.rb +87 -0
- data/test/StyleTest.rb +22 -0
- data/test/TableCellNodeTest.rb +95 -0
- data/test/TableNodeTest.rb +89 -0
- data/test/TableRowNodeTest.rb +65 -0
- data/test/TextNodeTest.rb +56 -0
- data/test/run.bat +2 -0
- data/test/unittest.bat +2 -0
- data/test/unittest.rb +21 -0
- metadata +78 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtf'
|
6
|
+
|
7
|
+
include RTF
|
8
|
+
|
9
|
+
# Information class unit test class.
|
10
|
+
class DocumentStyleTest < Test::Unit::TestCase
|
11
|
+
def test_basics
|
12
|
+
style = DocumentStyle.new
|
13
|
+
|
14
|
+
assert(style.is_character_style? == false)
|
15
|
+
assert(style.is_document_style? == true)
|
16
|
+
assert(style.is_paragraph_style? == false)
|
17
|
+
assert(style.is_table_style? == false)
|
18
|
+
|
19
|
+
assert(style.prefix(nil, nil) == '\paperw11907\paperh16840\margl1800'\
|
20
|
+
'\margr1800\margt1440\margb1440')
|
21
|
+
assert(style.suffix(nil, nil) == nil)
|
22
|
+
|
23
|
+
assert(style.bottom_margin == DocumentStyle::DEFAULT_BOTTOM_MARGIN)
|
24
|
+
assert(style.gutter == nil)
|
25
|
+
assert(style.left_margin == DocumentStyle::DEFAULT_LEFT_MARGIN)
|
26
|
+
assert(style.orientation == DocumentStyle::PORTRAIT)
|
27
|
+
assert(style.paper == Paper::A4)
|
28
|
+
assert(style.right_margin == DocumentStyle::DEFAULT_RIGHT_MARGIN)
|
29
|
+
assert(style.top_margin == DocumentStyle::DEFAULT_TOP_MARGIN)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_mutators
|
33
|
+
style = DocumentStyle.new
|
34
|
+
|
35
|
+
style.bottom_margin = 200
|
36
|
+
assert(style.bottom_margin == 200)
|
37
|
+
|
38
|
+
style.gutter = 1000
|
39
|
+
assert(style.gutter == 1000)
|
40
|
+
|
41
|
+
style.left_margin = 34
|
42
|
+
assert(style.left_margin == 34)
|
43
|
+
|
44
|
+
style.orientation = DocumentStyle::LANDSCAPE
|
45
|
+
assert(style.orientation == DocumentStyle::LANDSCAPE)
|
46
|
+
|
47
|
+
style.paper = Paper::LETTER
|
48
|
+
assert(style.paper == Paper::LETTER)
|
49
|
+
|
50
|
+
style.right_margin = 345
|
51
|
+
assert(style.right_margin == 345)
|
52
|
+
|
53
|
+
style.top_margin = 819
|
54
|
+
assert(style.top_margin == 819)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_prefix
|
58
|
+
style = DocumentStyle.new
|
59
|
+
|
60
|
+
style.left_margin = style.right_margin = 200
|
61
|
+
style.top_margin = style.bottom_margin = 100
|
62
|
+
style.gutter = 300
|
63
|
+
style.orientation = DocumentStyle::LANDSCAPE
|
64
|
+
style.paper = Paper::A5
|
65
|
+
|
66
|
+
assert(style.prefix(nil, nil) == '\paperw11907\paperh8392\margl200'\
|
67
|
+
'\margr200\margt100\margb100\gutter300'\
|
68
|
+
'\sectd\lndscpsxn')
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_body_method
|
72
|
+
style = DocumentStyle.new
|
73
|
+
|
74
|
+
lr_margin = style.left_margin + style.right_margin
|
75
|
+
tb_margin = style.top_margin + style.bottom_margin
|
76
|
+
|
77
|
+
assert(style.body_width == Paper::A4.width - lr_margin)
|
78
|
+
assert(style.body_height == Paper::A4.height - tb_margin)
|
79
|
+
|
80
|
+
style.orientation = DocumentStyle::LANDSCAPE
|
81
|
+
|
82
|
+
assert(style.body_width == Paper::A4.height - lr_margin)
|
83
|
+
assert(style.body_height == Paper::A4.width - tb_margin)
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtf'
|
6
|
+
|
7
|
+
include RTF
|
8
|
+
|
9
|
+
# Information class unit test class.
|
10
|
+
class DocumentTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@fonts = FontTable.new
|
13
|
+
|
14
|
+
@fonts << Font.new(Font::ROMAN, 'Arial')
|
15
|
+
@fonts << Font.new(Font::MODERN, 'Courier')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_basics
|
19
|
+
documents = []
|
20
|
+
style = DocumentStyle.new
|
21
|
+
|
22
|
+
documents << Document.new(@fonts[0])
|
23
|
+
documents << Document.new(@fonts[1], style)
|
24
|
+
documents << Document.new(@fonts[0], nil, Document::CS_MAC)
|
25
|
+
documents << Document.new(@fonts[1], style, Document::CS_PC,
|
26
|
+
Document::LC_ENGLISH_US)
|
27
|
+
|
28
|
+
lr_margin = DocumentStyle::DEFAULT_LEFT_MARGIN +
|
29
|
+
DocumentStyle::DEFAULT_RIGHT_MARGIN
|
30
|
+
tb_margin = DocumentStyle::DEFAULT_TOP_MARGIN +
|
31
|
+
DocumentStyle::DEFAULT_BOTTOM_MARGIN
|
32
|
+
|
33
|
+
fonts = []
|
34
|
+
fonts << FontTable.new(@fonts[0])
|
35
|
+
fonts << FontTable.new(@fonts[1])
|
36
|
+
|
37
|
+
assert(documents[0].character_set == Document::CS_ANSI)
|
38
|
+
assert(documents[1].character_set == Document::CS_ANSI)
|
39
|
+
assert(documents[2].character_set == Document::CS_MAC)
|
40
|
+
assert(documents[3].character_set == Document::CS_PC)
|
41
|
+
|
42
|
+
assert(documents[0].fonts.size == 1)
|
43
|
+
assert(documents[1].fonts.size == 1)
|
44
|
+
assert(documents[2].fonts.size == 1)
|
45
|
+
assert(documents[3].fonts.size == 1)
|
46
|
+
|
47
|
+
assert(documents[0].fonts[0] == @fonts[0])
|
48
|
+
assert(documents[1].fonts[0] == @fonts[1])
|
49
|
+
assert(documents[2].fonts[0] == @fonts[0])
|
50
|
+
assert(documents[3].fonts[0] == @fonts[1])
|
51
|
+
|
52
|
+
assert(documents[0].colours.size == 0)
|
53
|
+
assert(documents[1].colours.size == 0)
|
54
|
+
assert(documents[2].colours.size == 0)
|
55
|
+
assert(documents[3].colours.size == 0)
|
56
|
+
|
57
|
+
assert(documents[0].language == Document::LC_ENGLISH_UK)
|
58
|
+
assert(documents[1].language == Document::LC_ENGLISH_UK)
|
59
|
+
assert(documents[2].language == Document::LC_ENGLISH_UK)
|
60
|
+
assert(documents[3].language == Document::LC_ENGLISH_US)
|
61
|
+
|
62
|
+
assert(documents[0].style != nil)
|
63
|
+
assert(documents[1].style == style)
|
64
|
+
assert(documents[2].style != nil)
|
65
|
+
assert(documents[3].style == style)
|
66
|
+
|
67
|
+
assert(documents[0].body_width == Paper::A4.width - lr_margin)
|
68
|
+
assert(documents[0].body_height == Paper::A4.height - tb_margin)
|
69
|
+
assert(documents[0].default_font == @fonts[0])
|
70
|
+
assert(documents[0].paper == Paper::A4)
|
71
|
+
assert(documents[0].header == nil)
|
72
|
+
assert(documents[0].header(HeaderNode::UNIVERSAL) == nil)
|
73
|
+
assert(documents[0].header(HeaderNode::LEFT_PAGE) == nil)
|
74
|
+
assert(documents[0].header(HeaderNode::RIGHT_PAGE) == nil)
|
75
|
+
assert(documents[0].header(HeaderNode::FIRST_PAGE) == nil)
|
76
|
+
assert(documents[0].footer == nil)
|
77
|
+
assert(documents[0].footer(FooterNode::UNIVERSAL) == nil)
|
78
|
+
assert(documents[0].footer(FooterNode::LEFT_PAGE) == nil)
|
79
|
+
assert(documents[0].footer(FooterNode::RIGHT_PAGE) == nil)
|
80
|
+
assert(documents[0].footer(FooterNode::FIRST_PAGE) == nil)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_mutators
|
84
|
+
document = Document.new(@fonts[0])
|
85
|
+
|
86
|
+
document.default_font = @fonts[1]
|
87
|
+
assert(document.default_font == @fonts[1])
|
88
|
+
|
89
|
+
document.character_set = Document::CS_PCA
|
90
|
+
assert(document.character_set == Document::CS_PCA)
|
91
|
+
|
92
|
+
document.language = Document::LC_CZECH
|
93
|
+
assert(document.language == Document::LC_CZECH)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_page_break
|
97
|
+
document = Document.new(@fonts[0])
|
98
|
+
|
99
|
+
assert(document.page_break == nil)
|
100
|
+
assert(document.size == 1)
|
101
|
+
assert(document[0].prefix == '\page')
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_exceptions
|
105
|
+
document = Document.new(@fonts[0])
|
106
|
+
begin
|
107
|
+
document.parent = document
|
108
|
+
flunk("Successfully change the parent of a Document object.")
|
109
|
+
rescue
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rtf'
|
5
|
+
|
6
|
+
include RTF
|
7
|
+
|
8
|
+
# FontTable class unit test class.
|
9
|
+
class FontTableTest < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
@fonts = []
|
12
|
+
@fonts.push(Font.new(Font::MODERN, "Courier New"))
|
13
|
+
@fonts.push(Font.new(Font::ROMAN, "Arial"))
|
14
|
+
@fonts.push(Font.new(Font::SWISS, "Tahoma"))
|
15
|
+
@fonts.push(Font.new(Font::NIL, "La La La"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_01
|
19
|
+
tables = []
|
20
|
+
tables.push(FontTable.new)
|
21
|
+
tables.push(FontTable.new(@fonts[0], @fonts[2]))
|
22
|
+
tables.push(FontTable.new(*@fonts))
|
23
|
+
tables.push(FontTable.new(@fonts[0], @fonts[2], @fonts[0]))
|
24
|
+
|
25
|
+
assert(tables[0].size == 0)
|
26
|
+
assert(tables[1].size == 2)
|
27
|
+
assert(tables[2].size == 4)
|
28
|
+
assert(tables[3].size == 2)
|
29
|
+
|
30
|
+
assert(tables[0][2] == nil)
|
31
|
+
assert(tables[1][1] == @fonts[2])
|
32
|
+
assert(tables[2][3] == @fonts[3])
|
33
|
+
assert(tables[3][2] == nil)
|
34
|
+
|
35
|
+
assert(tables[0].index(@fonts[0]) == nil)
|
36
|
+
assert(tables[1].index(@fonts[2]) == 1)
|
37
|
+
assert(tables[2].index(@fonts[2]) == 2)
|
38
|
+
assert(tables[3].index(@fonts[1]) == nil)
|
39
|
+
|
40
|
+
tables[0].add(@fonts[0])
|
41
|
+
assert(tables[0].size == 1)
|
42
|
+
assert(tables[0].index(@fonts[0]) == 0)
|
43
|
+
|
44
|
+
tables[0] << @fonts[1]
|
45
|
+
assert(tables[0].size == 2)
|
46
|
+
assert(tables[0].index(@fonts[1]) == 1)
|
47
|
+
|
48
|
+
tables[0].add(@fonts[0])
|
49
|
+
assert(tables[0].size == 2)
|
50
|
+
assert([tables[0][0], tables[0][1]] == [@fonts[0], @fonts[1]])
|
51
|
+
|
52
|
+
tables[0] << @fonts[1]
|
53
|
+
assert(tables[0].size == 2)
|
54
|
+
assert([tables[0][0], tables[0][1]] == [@fonts[0], @fonts[1]])
|
55
|
+
|
56
|
+
flags = [false, false, false, false]
|
57
|
+
tables[2].each do |font|
|
58
|
+
flags[@fonts.index(font)] = true if @fonts.index(font) != nil
|
59
|
+
end
|
60
|
+
assert(flags.index(false) == nil)
|
61
|
+
|
62
|
+
assert(tables[0].to_s == "Font Table (2 fonts)\n"\
|
63
|
+
" Family: modern, Name: Courier New\n"\
|
64
|
+
" Family: roman, Name: Arial")
|
65
|
+
assert(tables[1].to_s(6) == " Font Table (2 fonts)\n"\
|
66
|
+
" Family: modern, Name: Courier New\n"\
|
67
|
+
" Family: swiss, Name: Tahoma")
|
68
|
+
assert(tables[2].to_s(3) == " Font Table (4 fonts)\n"\
|
69
|
+
" Family: modern, Name: Courier New\n"\
|
70
|
+
" Family: roman, Name: Arial\n"\
|
71
|
+
" Family: swiss, Name: Tahoma\n"\
|
72
|
+
" Family: nil, Name: La La La")
|
73
|
+
assert(tables[3].to_s(-10) == "Font Table (2 fonts)\n"\
|
74
|
+
" Family: modern, Name: Courier New\n"\
|
75
|
+
" Family: swiss, Name: Tahoma")
|
76
|
+
|
77
|
+
assert(tables[0].to_rtf == "{\\fonttbl\n"\
|
78
|
+
"{\\f0\\fmodern Courier New;}\n"\
|
79
|
+
"{\\f1\\froman Arial;}\n"\
|
80
|
+
"}")
|
81
|
+
assert(tables[1].to_rtf(4) == " {\\fonttbl\n"\
|
82
|
+
" {\\f0\\fmodern Courier New;}\n"\
|
83
|
+
" {\\f1\\fswiss Tahoma;}\n"\
|
84
|
+
" }")
|
85
|
+
assert(tables[2].to_rtf(2) == " {\\fonttbl\n"\
|
86
|
+
" {\\f0\\fmodern Courier New;}\n"\
|
87
|
+
" {\\f1\\froman Arial;}\n"\
|
88
|
+
" {\\f2\\fswiss Tahoma;}\n"\
|
89
|
+
" {\\f3\\fnil La La La;}\n"\
|
90
|
+
" }")
|
91
|
+
assert(tables[3].to_rtf(-6) == "{\\fonttbl\n"\
|
92
|
+
"{\\f0\\fmodern Courier New;}\n"\
|
93
|
+
"{\\f1\\fswiss Tahoma;}\n"\
|
94
|
+
"}")
|
95
|
+
end
|
96
|
+
end
|
data/test/FontTest.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rtf'
|
5
|
+
|
6
|
+
include RTF
|
7
|
+
|
8
|
+
# Font class unit test class.
|
9
|
+
class FontTest < Test::Unit::TestCase
|
10
|
+
def test_01
|
11
|
+
fonts = []
|
12
|
+
fonts.push(Font.new(Font::MODERN, "Courier New"))
|
13
|
+
fonts.push(Font.new(Font::ROMAN, "Arial"))
|
14
|
+
fonts.push(Font.new(Font::SWISS, "Tahoma"))
|
15
|
+
fonts.push(Font.new(Font::NIL, "La La La"))
|
16
|
+
|
17
|
+
assert(fonts[0] == fonts[0])
|
18
|
+
assert(!(fonts[0] == fonts[1]))
|
19
|
+
assert(!(fonts[1] == 'a string of text'))
|
20
|
+
assert(fonts[2] == Font.new(Font::SWISS, "Tahoma"))
|
21
|
+
|
22
|
+
assert(fonts[0].family == Font::MODERN)
|
23
|
+
assert(fonts[1].family == Font::ROMAN)
|
24
|
+
assert(fonts[2].family == Font::SWISS)
|
25
|
+
assert(fonts[3].family == Font::NIL)
|
26
|
+
|
27
|
+
assert(fonts[0].name == 'Courier New')
|
28
|
+
assert(fonts[1].name == 'Arial')
|
29
|
+
assert(fonts[2].name == 'Tahoma')
|
30
|
+
assert(fonts[3].name == 'La La La')
|
31
|
+
|
32
|
+
assert(fonts[0].to_s == 'Family: modern, Name: Courier New')
|
33
|
+
assert(fonts[1].to_s(3) == ' Family: roman, Name: Arial')
|
34
|
+
assert(fonts[2].to_s(6) == ' Family: swiss, Name: Tahoma')
|
35
|
+
assert(fonts[3].to_s(-1) == 'Family: nil, Name: La La La')
|
36
|
+
|
37
|
+
assert(fonts[0].to_rtf == '\fmodern Courier New;')
|
38
|
+
assert(fonts[1].to_rtf(2) == ' \froman Arial;')
|
39
|
+
assert(fonts[2].to_rtf(4) == ' \fswiss Tahoma;')
|
40
|
+
assert(fonts[3].to_rtf(-6) == '\fnil La La La;')
|
41
|
+
|
42
|
+
begin
|
43
|
+
Font.new(12345, "Ningy")
|
44
|
+
flunk("Created a Font object with an invalid family setting.")
|
45
|
+
rescue RTFError
|
46
|
+
rescue Test::Unit::AssertionFailedError => error
|
47
|
+
raise error
|
48
|
+
rescue => error
|
49
|
+
flunk("Unexpected exception caught checking font creation with "\
|
50
|
+
"an invalid family. Exception type #{error.class.name}.")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtf'
|
6
|
+
|
7
|
+
include RTF
|
8
|
+
|
9
|
+
# Information class unit test class.
|
10
|
+
class FooterNodeTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@document = Document.new(Font.new(Font::ROMAN, 'Arial'))
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_basics
|
16
|
+
footers = []
|
17
|
+
|
18
|
+
footers << FooterNode.new(@document)
|
19
|
+
footers << FooterNode.new(@document, FooterNode::LEFT_PAGE)
|
20
|
+
|
21
|
+
assert(footers[0].parent == @document)
|
22
|
+
assert(footers[1].parent == @document)
|
23
|
+
|
24
|
+
assert(footers[0].type == FooterNode::UNIVERSAL)
|
25
|
+
assert(footers[1].type == FooterNode::LEFT_PAGE)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_exceptions
|
29
|
+
footer = FooterNode.new(@document)
|
30
|
+
begin
|
31
|
+
footer.footnote("La la la.")
|
32
|
+
flunk("Successfully added a footnote to a footer.")
|
33
|
+
rescue
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtf'
|
6
|
+
|
7
|
+
include RTF
|
8
|
+
|
9
|
+
# Information class unit test class.
|
10
|
+
class HeaderNodeTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@document = Document.new(Font.new(Font::ROMAN, 'Arial'))
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_basics
|
16
|
+
headers = []
|
17
|
+
|
18
|
+
headers << HeaderNode.new(@document)
|
19
|
+
headers << HeaderNode.new(@document, HeaderNode::LEFT_PAGE)
|
20
|
+
|
21
|
+
assert(headers[0].parent == @document)
|
22
|
+
assert(headers[1].parent == @document)
|
23
|
+
|
24
|
+
assert(headers[0].type == HeaderNode::UNIVERSAL)
|
25
|
+
assert(headers[1].type == HeaderNode::LEFT_PAGE)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_exceptions
|
29
|
+
headers = HeaderNode.new(@document)
|
30
|
+
begin
|
31
|
+
headers.footnote("La la la.")
|
32
|
+
flunk("Successfully added a footnote to a header.")
|
33
|
+
rescue
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rtf'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
include RTF
|
8
|
+
|
9
|
+
# Information class unit test class.
|
10
|
+
class InformationTest < Test::Unit::TestCase
|
11
|
+
def test_01
|
12
|
+
date = Time.local(1985, 6, 22, 14, 33, 22)
|
13
|
+
info = []
|
14
|
+
info.push(Information.new)
|
15
|
+
info.push(Information.new('Title 1'))
|
16
|
+
info.push(Information.new('Title 2', 'Peter Wood'))
|
17
|
+
info.push(Information.new('La la la', '', 'Nowhere Ltd.'))
|
18
|
+
info.push(Information.new('', 'N. O. Body', 'Oobly', 'Joobly'))
|
19
|
+
info.push(Information.new('Title 5', 'J. Bloggs', '', '', date))
|
20
|
+
info.push(Information.new('Title 6', 'J. Bloggs', '', '', '1985-06-22 14:33:22 GMT'))
|
21
|
+
|
22
|
+
assert(info[0].title == nil)
|
23
|
+
assert(info[0].author == nil)
|
24
|
+
assert(info[0].company == nil)
|
25
|
+
assert(info[0].comments == nil)
|
26
|
+
|
27
|
+
assert(info[1].title == 'Title 1')
|
28
|
+
assert(info[1].author == nil)
|
29
|
+
assert(info[1].company == nil)
|
30
|
+
assert(info[1].comments == nil)
|
31
|
+
|
32
|
+
assert(info[2].title == 'Title 2')
|
33
|
+
assert(info[2].author == 'Peter Wood')
|
34
|
+
assert(info[2].company == nil)
|
35
|
+
assert(info[2].comments == nil)
|
36
|
+
|
37
|
+
assert(info[3].title == 'La la la')
|
38
|
+
assert(info[3].author == '')
|
39
|
+
assert(info[3].company == 'Nowhere Ltd.')
|
40
|
+
assert(info[3].comments == nil)
|
41
|
+
|
42
|
+
assert(info[4].title == '')
|
43
|
+
assert(info[4].author == 'N. O. Body')
|
44
|
+
assert(info[4].company == 'Oobly')
|
45
|
+
assert(info[4].comments == 'Joobly')
|
46
|
+
|
47
|
+
assert(info[5].title == 'Title 5')
|
48
|
+
assert(info[5].author == 'J. Bloggs')
|
49
|
+
assert(info[5].company == '')
|
50
|
+
assert(info[5].comments == '')
|
51
|
+
assert(info[5].created == date)
|
52
|
+
|
53
|
+
assert(info[6].title == 'Title 6')
|
54
|
+
assert(info[6].author == 'J. Bloggs')
|
55
|
+
assert(info[6].company == '')
|
56
|
+
assert(info[6].comments == '')
|
57
|
+
assert(info[6].created == date)
|
58
|
+
|
59
|
+
info[6].title = 'Alternative Title'
|
60
|
+
assert(info[6].title == 'Alternative Title')
|
61
|
+
|
62
|
+
info[6].author = 'A. Person'
|
63
|
+
assert(info[6].author == 'A. Person')
|
64
|
+
|
65
|
+
info[6].company = nil
|
66
|
+
assert(info[6].company == nil)
|
67
|
+
|
68
|
+
info[6].comments = 'New information comment text.'
|
69
|
+
assert(info[6].comments == 'New information comment text.')
|
70
|
+
|
71
|
+
date = Time.new
|
72
|
+
info[6].created = date
|
73
|
+
assert(info[6].created == date)
|
74
|
+
|
75
|
+
date = Time.local(1985, 6, 22, 14, 33, 22)
|
76
|
+
info[6].created = '1985-06-22 14:33:22 GMT'
|
77
|
+
assert(info[6].created == date)
|
78
|
+
|
79
|
+
assert(info[0].to_s(2) == " Information\n Created: "\
|
80
|
+
"#{info[0].created}")
|
81
|
+
assert(info[1].to_s(4) == " Information\n Title: Title 1\n"\
|
82
|
+
" Created: #{info[1].created}")
|
83
|
+
assert(info[2].to_s(-10) == "Information\n Title: Title 2\n "\
|
84
|
+
"Author: Peter Wood\n Created: "\
|
85
|
+
"#{info[2].created}")
|
86
|
+
assert(info[3].to_s == "Information\n Title: La la la\n "\
|
87
|
+
"Author: \n Company: Nowhere Ltd.\n "\
|
88
|
+
"Created: #{info[3].created}")
|
89
|
+
assert(info[4].to_s == "Information\n Title: \n Author: "\
|
90
|
+
"N. O. Body\n Company: Oobly\n Comments: "\
|
91
|
+
"Joobly\n Created: #{info[4].created}")
|
92
|
+
assert(info[5].to_s == "Information\n Title: Title 5\n Author: "\
|
93
|
+
"J. Bloggs\n Company: \n Comments: \n "\
|
94
|
+
"Created: #{date}")
|
95
|
+
assert(info[6].to_s == "Information\n Title: Alternative Title"\
|
96
|
+
"\n Author: A. Person\n Comments: New "\
|
97
|
+
"information comment text.\n Created: #{date}")
|
98
|
+
|
99
|
+
assert(info[0].to_rtf(3) == " {\\info\n #{to_rtf(info[0].created)}"\
|
100
|
+
"\n }")
|
101
|
+
assert(info[1].to_rtf(6) == " {\\info\n {\\title Title 1}\n"\
|
102
|
+
" #{to_rtf(info[1].created)}\n }")
|
103
|
+
assert(info[2].to_rtf(-5) == "{\\info\n{\\title Title 2}\n"\
|
104
|
+
"{\\author Peter Wood}\n"\
|
105
|
+
"#{to_rtf(info[2].created)}\n}")
|
106
|
+
assert(info[3].to_rtf == "{\\info\n{\\title La la la}\n"\
|
107
|
+
"{\\author }\n"\
|
108
|
+
"{\\company Nowhere Ltd.}\n"\
|
109
|
+
"#{to_rtf(info[3].created)}\n}")
|
110
|
+
assert(info[4].to_rtf == "{\\info\n{\\title }\n"\
|
111
|
+
"{\\author N. O. Body}\n"\
|
112
|
+
"{\\company Oobly}\n"\
|
113
|
+
"{\\doccomm Joobly}\n"\
|
114
|
+
"#{to_rtf(info[4].created)}\n}")
|
115
|
+
assert(info[5].to_rtf(3) == " {\\info\n {\\title Title 5}\n"\
|
116
|
+
" {\\author J. Bloggs}\n"\
|
117
|
+
" {\\company }\n"\
|
118
|
+
" {\\doccomm }\n"\
|
119
|
+
" #{to_rtf(date)}\n }")
|
120
|
+
assert(info[6].to_rtf == "{\\info\n{\\title Alternative Title}\n"\
|
121
|
+
"{\\author A. Person}\n"\
|
122
|
+
"{\\doccomm New information comment text.}\n"\
|
123
|
+
"#{to_rtf(date)}\n}")
|
124
|
+
end
|
125
|
+
|
126
|
+
def to_rtf(time)
|
127
|
+
text = StringIO.new
|
128
|
+
text << "{\\createim\\yr#{time.year}"
|
129
|
+
text << "\\mo#{time.month}\\dy#{time.day}"
|
130
|
+
text << "\\hr#{time.hour}\\min#{time.min}}"
|
131
|
+
text.string
|
132
|
+
end
|
133
|
+
end
|