docx_generator 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,89 +1,89 @@
1
- require 'spec_helper'
2
-
3
- describe DocxGenerator::DSL::Document do
4
- after do
5
- File.delete("word.docx") if File.exists?("word.docx")
6
- end
7
-
8
- it "should create a new docx document with the filename specified" do
9
- document = DocxGenerator::DSL::Document.new("word")
10
- document.filename.should eq("word.docx")
11
- end
12
-
13
- it "should pass itself to a block if a block is given" do
14
- inner_doc = nil
15
- document = DocxGenerator::DSL::Document.new("word") do |doc|
16
- inner_doc = doc
17
- end
18
- inner_doc.should be(document)
19
- end
20
-
21
- describe "#save" do
22
- let(:document) { DocxGenerator::DSL::Document.new("word") }
23
-
24
- it "should save the document" do
25
- document.save
26
- File.exists?("word.docx").should be_true
27
- end
28
-
29
- describe "required documents" do
30
- before { DocxGenerator::DSL::Document.new("word").save }
31
-
32
- it "should generate a [Content_Types].xml file" do
33
- Zip::ZipFile.open("word.docx") do |docx|
34
- expect { docx.read("[Content_Types].xml") }.to_not raise_error
35
- end
36
- end
37
-
38
- it "should generate a _rels/.rels file" do
39
- Zip::ZipFile.open("word.docx") do |docx|
40
- expect { docx.read("_rels/.rels") }.to_not raise_error
41
- end
42
- end
43
-
44
- it "should generate a word/document.xml" do
45
- Zip::ZipFile.open("word.docx") do |docx|
46
- expect { docx.read("word/document.xml") }.to_not raise_error
47
- end
48
- end
49
- end
50
- end
51
-
52
- describe "#paragraph" do
53
- it "should pass a DocxGenerator::DSL::Paragraph object to a block" do
54
- document = DocxGenerator::DSL::Document.new("word") do |doc|
55
- par_class = nil
56
- doc.paragraph { |par| par_class = par.class }
57
- par_class.should be(DocxGenerator::DSL::Paragraph)
58
- end
59
- end
60
-
61
- it "should add a paragraph to the document" do
62
- document = DocxGenerator::DSL::Document.new("word") do |doc|
63
- doc.paragraph { |par| }
64
- doc.save
65
- end
66
- open_file("word/document.xml").should include("<w:p")
67
- end
68
-
69
- it "should allow options as optional arguments" do
70
- document = DocxGenerator::DSL::Document.new("word") do |doc|
71
- doc.paragraph(alignment: :center) { |par| }
72
- end
73
- end
74
- end
75
-
76
- describe "#add" do
77
- it "should add the object(s) to the document" do
78
- doc = DocxGenerator::DSL::Document.new("word")
79
- doc.add DocxGenerator::DSL::Paragraph.new
80
- doc.save
81
- open_file("word/document.xml").should include("<w:p />")
82
- end
83
-
84
- it "should return the document object" do
85
- document = DocxGenerator::DSL::Document.new("word")
86
- document.add(DocxGenerator::DSL::Paragraph.new, DocxGenerator::DSL::Paragraph.new).should be(document)
87
- end
88
- end
89
- end
1
+ require 'spec_helper'
2
+
3
+ describe DocxGenerator::DSL::Document do
4
+ after do
5
+ File.delete("word.docx") if File.exists?("word.docx")
6
+ end
7
+
8
+ it "should create a new docx document with the filename specified" do
9
+ document = DocxGenerator::DSL::Document.new("word")
10
+ document.filename.should eq("word.docx")
11
+ end
12
+
13
+ it "should pass itself to a block if a block is given" do
14
+ inner_doc = nil
15
+ document = DocxGenerator::DSL::Document.new("word") do |doc|
16
+ inner_doc = doc
17
+ end
18
+ inner_doc.should be(document)
19
+ end
20
+
21
+ describe "#save" do
22
+ let(:document) { DocxGenerator::DSL::Document.new("word") }
23
+
24
+ it "should save the document" do
25
+ document.save
26
+ File.exists?("word.docx").should be_true
27
+ end
28
+
29
+ describe "required documents" do
30
+ before { DocxGenerator::DSL::Document.new("word").save }
31
+
32
+ it "should generate a [Content_Types].xml file" do
33
+ Zip::File.open("word.docx") do |docx|
34
+ expect { docx.read("[Content_Types].xml") }.to_not raise_error
35
+ end
36
+ end
37
+
38
+ it "should generate a _rels/.rels file" do
39
+ Zip::File.open("word.docx") do |docx|
40
+ expect { docx.read("_rels/.rels") }.to_not raise_error
41
+ end
42
+ end
43
+
44
+ it "should generate a word/document.xml" do
45
+ Zip::File.open("word.docx") do |docx|
46
+ expect { docx.read("word/document.xml") }.to_not raise_error
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "#paragraph" do
53
+ it "should pass a DocxGenerator::DSL::Paragraph object to a block" do
54
+ document = DocxGenerator::DSL::Document.new("word") do |doc|
55
+ par_class = nil
56
+ doc.paragraph { |par| par_class = par.class }
57
+ par_class.should be(DocxGenerator::DSL::Paragraph)
58
+ end
59
+ end
60
+
61
+ it "should add a paragraph to the document" do
62
+ document = DocxGenerator::DSL::Document.new("word") do |doc|
63
+ doc.paragraph { |par| }
64
+ doc.save
65
+ end
66
+ open_file("word/document.xml").should include("<w:p")
67
+ end
68
+
69
+ it "should allow options as optional arguments" do
70
+ document = DocxGenerator::DSL::Document.new("word") do |doc|
71
+ doc.paragraph(alignment: :center) { |par| }
72
+ end
73
+ end
74
+ end
75
+
76
+ describe "#add" do
77
+ it "should add the object(s) to the document" do
78
+ doc = DocxGenerator::DSL::Document.new("word")
79
+ doc.add DocxGenerator::DSL::Paragraph.new
80
+ doc.save
81
+ open_file("word/document.xml").should include("<w:p />")
82
+ end
83
+
84
+ it "should return the document object" do
85
+ document = DocxGenerator::DSL::Document.new("word")
86
+ document.add(DocxGenerator::DSL::Paragraph.new, DocxGenerator::DSL::Paragraph.new).should be(document)
87
+ end
88
+ end
89
+ end
@@ -1,71 +1,107 @@
1
- require 'spec_helper'
2
-
3
- describe DocxGenerator::DSL::Paragraph do
4
- describe "#new" do
5
- context "with a block" do
6
- it "should pass itself to a block" do
7
- inner_par = nil
8
- paragraph = DocxGenerator::DSL::Paragraph.new do |par|
9
- inner_par = par
10
- end
11
- inner_par.should be(paragraph)
12
- end
13
- end
14
- end
15
-
16
- describe "#text" do
17
- context "with a block" do
18
- it "should pass a DocxGenerator::DSL::Text object to a block" do
19
- paragraph = DocxGenerator::DSL::Paragraph.new do |par|
20
- text_class = nil
21
- par.text("") { |t| text_class = t.class }
22
- text_class.should be(DocxGenerator::DSL::Text)
23
- end
24
- end
25
- end
26
-
27
- it "should allow options as optional arguments" do
28
- paragraph = DocxGenerator::DSL::Paragraph.new do |par|
29
- par.text "Title", underline: { style: "double" }, size: 20
30
- end
31
- end
32
- end
33
-
34
- describe "#generate" do
35
- it "should return a new paragraph with rich text fragments in it separated by a space" do
36
- paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones."))
37
- paragraph.generate.to_s.should eq("<w:p><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
38
- end
39
-
40
- it "should not add a space when it encounters a NoSpace object" do
41
- paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("CO"), DocxGenerator::Word::Extensions::NoSpace.new, DocxGenerator::DSL::Text.new("2"))
42
- paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:t>2</w:t></w:r></w:p>")
43
-
44
- paragraph = DocxGenerator::DSL::Paragraph.new do |p|
45
- p.text "CO"
46
- p.no_space
47
- p.text "2"
48
- end
49
- paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:t>2</w:t></w:r></w:p>")
50
- end
51
-
52
- context "with styles" do
53
- it "should align the paragraph" do
54
- DocxGenerator::DSL::Paragraph.new(alignment: "center").add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:jc w:val=\"center\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
55
- (DocxGenerator::DSL::Paragraph.new { |p| p.alignment "center" }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:jc w:val=\"center\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
56
- end
57
- end
58
- end
59
-
60
- describe "#add" do
61
- it "should add the object(s) to the paragraph" do
62
- paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones."))
63
- paragraph.generate.to_s.should eq("<w:p><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
64
- end
65
-
66
- it "should return the paragraph object" do
67
- paragraph = DocxGenerator::DSL::Paragraph.new
68
- paragraph.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).should be(paragraph)
69
- end
70
- end
71
- end
1
+ require 'spec_helper'
2
+
3
+ describe DocxGenerator::DSL::Paragraph do
4
+ describe "#new" do
5
+ context "with a block" do
6
+ it "should pass itself to a block" do
7
+ inner_par = nil
8
+ paragraph = DocxGenerator::DSL::Paragraph.new do |par|
9
+ inner_par = par
10
+ end
11
+ inner_par.should be(paragraph)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe "#text" do
17
+ context "with a block" do
18
+ it "should pass a DocxGenerator::DSL::Text object to a block" do
19
+ paragraph = DocxGenerator::DSL::Paragraph.new do |par|
20
+ text_class = nil
21
+ par.text("") { |t| text_class = t.class }
22
+ text_class.should be(DocxGenerator::DSL::Text)
23
+ end
24
+ end
25
+ end
26
+
27
+ it "should allow options as optional arguments" do
28
+ paragraph = DocxGenerator::DSL::Paragraph.new do |par|
29
+ par.text "Title", underline: { style: "double" }, size: 20
30
+ end
31
+ end
32
+ end
33
+
34
+ describe "#generate" do
35
+ it "should return a new paragraph with rich text fragments in it separated by a space" do
36
+ paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones."))
37
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
38
+ end
39
+
40
+ it "should not add a space when it encounters a NoSpace object" do
41
+ paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("CO"), DocxGenerator::Word::Extensions::NoSpace.new, DocxGenerator::DSL::Text.new("2"))
42
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:t>2</w:t></w:r></w:p>")
43
+
44
+ paragraph = DocxGenerator::DSL::Paragraph.new do |p|
45
+ p.text "CO"
46
+ p.no_space
47
+ p.text "2"
48
+ end
49
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:t>2</w:t></w:r></w:p>")
50
+ end
51
+
52
+ it "should add a newline when it encouters a Newline object" do
53
+ paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("CO"), DocxGenerator::Word::Extensions::Newline.new, DocxGenerator::DSL::Text.new("2"))
54
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:br /></w:r><w:r><w:t>2</w:t></w:r></w:p>")
55
+
56
+ paragraph = DocxGenerator::DSL::Paragraph.new do |p|
57
+ p.text "CO"
58
+ p.newline
59
+ p.text "2"
60
+ end
61
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>CO</w:t></w:r><w:r><w:br /></w:r><w:r><w:t>2</w:t></w:r></w:p>")
62
+ end
63
+
64
+ it "should add a tab when it encouters a Tab object" do
65
+ raise
66
+ end
67
+
68
+ context "with styles" do
69
+ it "should align the paragraph" do
70
+ DocxGenerator::DSL::Paragraph.new(alignment: "center").add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:jc w:val=\"center\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
71
+ (DocxGenerator::DSL::Paragraph.new { |p| p.alignment "center" }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:jc w:val=\"center\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
72
+ end
73
+
74
+ it "should adjust the spacing between lines in the paragraph and between paragraphs" do
75
+ DocxGenerator::DSL::Paragraph.new(spacing: { before: 12, after: 12, lines: 1.15 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:spacing w:before=\"240\" w:after=\"240\" w:lines=\"276\" w:lineRule=\"auto\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
76
+ (DocxGenerator::DSL::Paragraph.new { |p| p.spacing before: 12, after: 12, lines: 1.15 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:spacing w:before=\"240\" w:after=\"240\" w:lines=\"276\" w:lineRule=\"auto\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
77
+ end
78
+
79
+ it "should indent the paragraph" do
80
+ DocxGenerator::DSL::Paragraph.new(indentation: { start: 20, end: 20, first_line: 20 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:ind w:start=\"400\" w:end=\"400\" w:firstLine=\"400\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
81
+ (DocxGenerator::DSL::Paragraph.new { |p| p.indentation start: 20, end: 20, first_line: 20 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:ind w:start=\"400\" w:end=\"400\" w:firstLine=\"400\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
82
+
83
+ DocxGenerator::DSL::Paragraph.new(indentation: { start: 20, end: 20, hanging: 20 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:ind w:start=\"400\" w:end=\"400\" w:hanging=\"400\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
84
+ (DocxGenerator::DSL::Paragraph.new { |p| p.indentation start: 20, end: 20, hanging: 20 }).add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).generate.to_s.should eq("<w:p><w:pPr><w:ind w:start=\"400\" w:end=\"400\" w:hanging=\"400\" /></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
85
+ end
86
+
87
+ it "should add tabulations" do
88
+ result = "<w:p><w:pPr><w:tabs><w:tab w:leader=\"dot\" w:pos=\"1440\" w:val=\"end\" /><w:tab w:leader=\"underscore\" w:pos=\"2880\" w:val=\"start\" /></w:tabs></w:pPr><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>"
89
+ text_fragments = [DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")]
90
+ DocxGenerator::DSL::Paragraph.new(tabs: [{ leader: "dot", pos: 72, val: "end" }, { leader: "underscore", pos: 144, val: "start" }]).add(*text_fragments).generate.to_s.should eq(result)
91
+ (DocxGenerator::DSL::Paragraph.new { |p| p.tabs [{ leader: "dot", pos: 72, val: "end" }, { leader: "underscore", pos: 144, val: "start" }] }).add(*text_fragments).generate.to_s.should eq(result)
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "#add" do
97
+ it "should add the object(s) to the paragraph" do
98
+ paragraph = DocxGenerator::DSL::Paragraph.new.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones."))
99
+ paragraph.generate.to_s.should eq("<w:p><w:r><w:t>The first characters</w:t></w:r><w:r><w:t xml:space=\"preserve\"> </w:t></w:r><w:r><w:t>and the last ones.</w:t></w:r></w:p>")
100
+ end
101
+
102
+ it "should return the paragraph object" do
103
+ paragraph = DocxGenerator::DSL::Paragraph.new
104
+ paragraph.add(DocxGenerator::DSL::Text.new("The first characters"), DocxGenerator::DSL::Text.new("and the last ones.")).should be(paragraph)
105
+ end
106
+ end
107
+ end
@@ -1,65 +1,91 @@
1
- require 'spec_helper'
2
-
3
- describe DocxGenerator::DSL::Text do
4
- describe "#new" do
5
- it "should require some text" do
6
- expect { DocxGenerator::DSL::Text.new }.to raise_error
7
- end
8
-
9
- context "with a block" do
10
- it "should pass itself to a block" do
11
- inner_text = nil
12
- text = DocxGenerator::DSL::Text.new("") do |t|
13
- inner_text = t
14
- end
15
- inner_text.should be(text)
16
- end
17
- end
18
- end
19
-
20
- describe "#generate" do
21
- it "should return a new Run with text in it" do
22
- text_fragment = DocxGenerator::DSL::Text.new("Title")
23
- text_fragment.generate.to_s.should eq("<w:r><w:t>Title</w:t></w:r>")
24
- end
25
-
26
- context "with styles" do
27
- it "should return a text in bold" do
28
- DocxGenerator::DSL::Text.new("Text", bold: true).generate.to_s.should eq("<w:r><w:rPr><w:b w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
29
- (DocxGenerator::DSL::Text.new("Text") { |t| t.bold true }).generate.to_s.should eq("<w:r><w:rPr><w:b w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
30
- end
31
-
32
- it "should return a text in italics" do
33
- DocxGenerator::DSL::Text.new("Text", italics: true).generate.to_s.should eq("<w:r><w:rPr><w:i w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
34
- (DocxGenerator::DSL::Text.new("Text") { |t| t.italics true }).generate.to_s.should eq("<w:r><w:rPr><w:i w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
35
- end
36
-
37
- it "should return an underlined text" do
38
- DocxGenerator::DSL::Text.new("Text", underline: { style: "single" }).generate.to_s.should eq("<w:r><w:rPr><w:u w:val=\"single\" /></w:rPr><w:t>Text</w:t></w:r>")
39
- (DocxGenerator::DSL::Text.new("Text") { |t| t.underline style: "single" }).generate.to_s.should eq("<w:r><w:rPr><w:u w:val=\"single\" /></w:rPr><w:t>Text</w:t></w:r>")
40
- end
41
-
42
- it "should return a text with a font size" do
43
- DocxGenerator::DSL::Text.new("Text", size: 20).generate.to_s.should eq("<w:r><w:rPr><w:sz w:val=\"40\" /></w:rPr><w:t>Text</w:t></w:r>")
44
- (DocxGenerator::DSL::Text.new("Text") { |t| t.size 20 }).generate.to_s.should eq("<w:r><w:rPr><w:sz w:val=\"40\" /></w:rPr><w:t>Text</w:t></w:r>")
45
- end
46
-
47
- it "should render a text in superscript" do
48
- DocxGenerator::DSL::Text.new("Text", superscript: true).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"superscript\" /></w:rPr><w:t>Text</w:t></w:r>")
49
- (DocxGenerator::DSL::Text.new("Text") { |t| t.superscript true }).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"superscript\" /></w:rPr><w:t>Text</w:t></w:r>")
50
- end
51
-
52
- it "should render a text in subscript" do
53
- DocxGenerator::DSL::Text.new("Text", subscript: true).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"subscript\" /></w:rPr><w:t>Text</w:t></w:r>")
54
- (DocxGenerator::DSL::Text.new("Text") { |t| t.subscript true }).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"subscript\" /></w:rPr><w:t>Text</w:t></w:r>")
55
- end
56
- end
57
- end
58
-
59
- describe "#to_s" do
60
- it "should render the XML representation" do
61
- text_fragment = DocxGenerator::DSL::Text.new("Title")
62
- text_fragment.to_s.should eq("<w:r><w:t>Title</w:t></w:r>")
63
- end
64
- end
65
- end
1
+ require 'spec_helper'
2
+
3
+ describe DocxGenerator::DSL::Text do
4
+ describe "#new" do
5
+ it "should require some text" do
6
+ expect { DocxGenerator::DSL::Text.new }.to raise_error
7
+ end
8
+
9
+ context "with a block" do
10
+ it "should pass itself to a block" do
11
+ inner_text = nil
12
+ text = DocxGenerator::DSL::Text.new("") do |t|
13
+ inner_text = t
14
+ end
15
+ inner_text.should be(text)
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "#generate" do
21
+ it "should return a new Run with text in it" do
22
+ text_fragment = DocxGenerator::DSL::Text.new("Title")
23
+ text_fragment.generate.to_s.should eq("<w:r><w:t>Title</w:t></w:r>")
24
+ end
25
+
26
+ context "with styles" do
27
+ it "should return a text in bold" do
28
+ DocxGenerator::DSL::Text.new("Text", bold: true).generate.to_s.should eq("<w:r><w:rPr><w:b w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
29
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.bold true }).generate.to_s.should eq("<w:r><w:rPr><w:b w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
30
+ end
31
+
32
+ it "should return a text in italics" do
33
+ DocxGenerator::DSL::Text.new("Text", italics: true).generate.to_s.should eq("<w:r><w:rPr><w:i w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
34
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.italics true }).generate.to_s.should eq("<w:r><w:rPr><w:i w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
35
+ end
36
+
37
+ it "should return an underlined text" do
38
+ DocxGenerator::DSL::Text.new("Text", underline: { style: "single" }).generate.to_s.should eq("<w:r><w:rPr><w:u w:val=\"single\" /></w:rPr><w:t>Text</w:t></w:r>")
39
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.underline style: "single" }).generate.to_s.should eq("<w:r><w:rPr><w:u w:val=\"single\" /></w:rPr><w:t>Text</w:t></w:r>")
40
+ end
41
+
42
+ it "should return a text with a font size" do
43
+ DocxGenerator::DSL::Text.new("Text", size: 20).generate.to_s.should eq("<w:r><w:rPr><w:sz w:val=\"40\" /></w:rPr><w:t>Text</w:t></w:r>")
44
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.size 20 }).generate.to_s.should eq("<w:r><w:rPr><w:sz w:val=\"40\" /></w:rPr><w:t>Text</w:t></w:r>")
45
+ end
46
+
47
+ it "should render a text in superscript" do
48
+ DocxGenerator::DSL::Text.new("Text", superscript: true).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"superscript\" /></w:rPr><w:t>Text</w:t></w:r>")
49
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.superscript true }).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"superscript\" /></w:rPr><w:t>Text</w:t></w:r>")
50
+ end
51
+
52
+ it "should render a text in subscript" do
53
+ DocxGenerator::DSL::Text.new("Text", subscript: true).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"subscript\" /></w:rPr><w:t>Text</w:t></w:r>")
54
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.subscript true }).generate.to_s.should eq("<w:r><w:rPr><w:vertAlign w:val=\"subscript\" /></w:rPr><w:t>Text</w:t></w:r>")
55
+ end
56
+
57
+ it "shoud render a text as capital letters" do
58
+ DocxGenerator::DSL::Text.new("Text", caps: true).generate.to_s.should eq("<w:r><w:rPr><w:caps w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
59
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.caps true }).generate.to_s.should eq("<w:r><w:rPr><w:caps w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
60
+ end
61
+
62
+ it "shoud render a text as small capital letters" do
63
+ DocxGenerator::DSL::Text.new("Text", small_caps: true).generate.to_s.should eq("<w:r><w:rPr><w:smallCaps w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
64
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.small_caps true }).generate.to_s.should eq("<w:r><w:rPr><w:smallCaps w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
65
+ end
66
+
67
+ xit "shoud render a text with a single horizontal line through the center of the line" do
68
+ DocxGenerator::DSL::Text.new("Text", strike: true).generate.to_s.should eq("<w:r><w:rPr><w:strike w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
69
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.strike true }).generate.to_s.should eq("<w:r><w:rPr><w:strike w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
70
+ end
71
+
72
+ xit "shoud render a text with two horizontal lines through the center of the line" do
73
+ DocxGenerator::DSL::Text.new("Text", dstrike: true).generate.to_s.should eq("<w:r><w:rPr><w:dstrike w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
74
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.dstrike true }).generate.to_s.should eq("<w:r><w:rPr><w:dstrike w:val=\"true\" /></w:rPr><w:t>Text</w:t></w:r>")
75
+ end
76
+
77
+ it "should render the name of the font" do
78
+ result = "<w:r><w:rPr><w:rFonts w:ascii=\"Arial\" /></w:rPr><w:t>Text</w:t></w:r>"
79
+ DocxGenerator::DSL::Text.new("Text", font: "Arial").generate.to_s.should eq(result)
80
+ (DocxGenerator::DSL::Text.new("Text") { |t| t.font "Arial" }).generate.to_s.should eq(result)
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "#to_s" do
86
+ it "should render the XML representation" do
87
+ text_fragment = DocxGenerator::DSL::Text.new("Title")
88
+ text_fragment.to_s.should eq("<w:r><w:t>Title</w:t></w:r>")
89
+ end
90
+ end
91
+ end