htmldoc-hulihanapplications 0.2.4
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/Gemfile +14 -0
- data/Gemfile.lock +20 -0
- data/History.txt +20 -0
- data/LICENSE.txt +21 -0
- data/Manifest.txt +12 -0
- data/README.txt +140 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/htmldoc-hulihanapplications.gemspec +64 -0
- data/init.rb +1 -0
- data/lib/htmldoc.rb +248 -0
- data/lib/htmldoc/version.rb +17 -0
- data/setup.rb +1585 -0
- data/test/basic_test.rb +101 -0
- data/test/generation_test.rb +135 -0
- data/test/test_helper.rb +2 -0
- metadata +143 -0
data/test/basic_test.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class BasicTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_options
|
6
|
+
all_options = PDF::HTMLDoc.class_eval do
|
7
|
+
class_variable_get(:@@all_options)
|
8
|
+
end
|
9
|
+
all_options.each do |option|
|
10
|
+
pdf = PDF::HTMLDoc.new
|
11
|
+
pdf.set_option option, :default
|
12
|
+
assert_equal :default, pdf.instance_variable_get(:@options)[option]
|
13
|
+
assert_equal 1, pdf.instance_variable_get(:@options).size
|
14
|
+
pdf.set_option option, nil
|
15
|
+
assert_equal 0, pdf.instance_variable_get(:@options).size
|
16
|
+
end
|
17
|
+
pdf = PDF::HTMLDoc.new
|
18
|
+
i = 0
|
19
|
+
all_options.each do |option|
|
20
|
+
pdf.set_option option, i
|
21
|
+
assert_equal i, pdf.instance_variable_get(:@options)[option]
|
22
|
+
assert_equal i + 1, pdf.instance_variable_get(:@options).size
|
23
|
+
i += 1
|
24
|
+
end
|
25
|
+
assert_raise(PDF::HTMLDocException) { pdf.set_option :test, :value }
|
26
|
+
assert_raise(PDF::HTMLDocException) { pdf.set_option "test", "value" }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_header
|
30
|
+
pdf = PDF::HTMLDoc.new
|
31
|
+
pdf.header ".t."
|
32
|
+
assert_equal ".t.", pdf.instance_variable_get(:@options)[:header]
|
33
|
+
assert_equal 1, pdf.instance_variable_get(:@options).size
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_footer
|
37
|
+
pdf = PDF::HTMLDoc.new
|
38
|
+
pdf.footer ".t."
|
39
|
+
assert_equal ".t.", pdf.instance_variable_get(:@options)[:footer]
|
40
|
+
assert_equal 1, pdf.instance_variable_get(:@options).size
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_get_final_value
|
44
|
+
# Those tests are not exhaustive, but will ensure a reasonable
|
45
|
+
# level of functionality
|
46
|
+
pdf = PDF::HTMLDoc.new
|
47
|
+
tests = [["--webpage", :webpage, true],
|
48
|
+
["--no-encryption", :encryption, :none],
|
49
|
+
["--no-encryption", :encryption, :no],
|
50
|
+
["--no-encryption", :encryption, false],
|
51
|
+
["--encryption", :encryption, true],
|
52
|
+
["--no-encryption", :encryption, :none],
|
53
|
+
["--no-jpeg", :jpeg, :no],
|
54
|
+
["--jpeg 80", :jpeg, 80],
|
55
|
+
["--bodycolor black", :bodycolor, :black],
|
56
|
+
["--left 12in", :left, "12in"],
|
57
|
+
["--cookies 'name=value;other=test'", :cookies, { :name => "value", :other => "test" }]]
|
58
|
+
tests.each do |test|
|
59
|
+
assert_equal test.first, pdf.send(:get_final_value, *test[1,2])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_get_command_options
|
64
|
+
# Those tests are not exhaustive, but should ensure a reasonable
|
65
|
+
# level of functionality.
|
66
|
+
pdf = PDF::HTMLDoc.new
|
67
|
+
tests = [["--webpage", :webpage, true],
|
68
|
+
["--no-encryption", :encryption, :none],
|
69
|
+
["--jpeg 80", :jpeg, 80],
|
70
|
+
["--bodycolor black", :bodycolor, :black],
|
71
|
+
["--left 12in", :left, "12in"],
|
72
|
+
["--cookies 'name=value;other=test'", :cookies, { :name => "value", :other => "test" }]]
|
73
|
+
tests.each do |test|
|
74
|
+
pdf.send(:set_option, *test[1,2])
|
75
|
+
end
|
76
|
+
command_options = tests.collect { |test| test.first }
|
77
|
+
command_options = (command_options + ["--format " + PDF::PDF]).sort.join(" ")
|
78
|
+
assert_equal command_options, pdf.send(:get_command_options)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_get_command_pages
|
82
|
+
# Those tests are not exhaustive, but should ensure a reasonable
|
83
|
+
# level of functionality.
|
84
|
+
pdf = PDF::HTMLDoc.new
|
85
|
+
tempfile = Tempfile.new("htmldoc.test")
|
86
|
+
pages = ["http://example.org/", tempfile.path]
|
87
|
+
tmpstring = "1234567890"
|
88
|
+
tmpstring += "1234567890" while File.exists?(tmpstring)
|
89
|
+
pages << tmpstring
|
90
|
+
pages.each do |page|
|
91
|
+
pdf << page
|
92
|
+
end
|
93
|
+
command_pages = pdf.send(:get_command_pages)
|
94
|
+
pages[2] = pdf.instance_variable_get(:@tempfiles)[0].path
|
95
|
+
assert_equal pages.join(" "), command_pages
|
96
|
+
ensure
|
97
|
+
tempfiles = pdf.instance_variable_get(:@tempfiles)
|
98
|
+
tempfiles.each { |t| t.close }
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class GenerationTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
# If you are using a different program path, you should configure
|
7
|
+
# it here.
|
8
|
+
@program_path = PDF::HTMLDoc.program_path
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_program_path
|
12
|
+
data = IO.popen(@program_path + " --version 2>&1") { |s| s.read }
|
13
|
+
assert_equal 0, $?.exitstatus
|
14
|
+
assert_match(/^1.((8.2\d)|9-current)/, data)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_generation
|
18
|
+
# Those tests are not exhaustive, but will ensure a reasonable
|
19
|
+
# level of functionality. Output to directories is not tested for
|
20
|
+
# now.
|
21
|
+
basic_test(PDF::HTML)
|
22
|
+
basic_test(PDF::HTML, "http://foo.com/\nhttp://bar.com/")
|
23
|
+
basic_test(PDF::PS)
|
24
|
+
basic_test(PDF::PDF)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_generation_results
|
28
|
+
pdf = PDF::HTMLDoc.new
|
29
|
+
pdf.set_option :webpage, true
|
30
|
+
pdf.set_option :toc, false
|
31
|
+
pdf << "<h1>Random title</h1>"
|
32
|
+
assert_kind_of String, pdf.generate
|
33
|
+
assert_not_nil pdf.result[:bytes]
|
34
|
+
assert_not_nil pdf.result[:pages]
|
35
|
+
assert_equal 0, pdf.errors.size
|
36
|
+
assert_equal 1, pdf.result[:pages]
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_invalid_program_path
|
40
|
+
PDF::HTMLDoc.program_path = @program_path + "-non-existing-path"
|
41
|
+
assert_raise(PDF::HTMLDocException) { PDF::HTMLDoc.new.generate }
|
42
|
+
ensure
|
43
|
+
PDF::HTMLDoc.program_path = @program_path
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_generation_errors
|
47
|
+
# This test can fail if the collapsing wavefront of the Internet
|
48
|
+
# somehow becomes random.
|
49
|
+
# Test invalid input
|
50
|
+
pdf = PDF::HTMLDoc.new
|
51
|
+
pdf.set_option :outfile, "test.pdf"
|
52
|
+
pdf << "http://#{simple_uid(".com")}:12345/#{simple_uid(".html")}"
|
53
|
+
pdf.generate
|
54
|
+
assert_not_equal 0, pdf.errors.size
|
55
|
+
assert_nil pdf.result[:bytes]
|
56
|
+
assert_nil pdf.result[:pages]
|
57
|
+
# Test an invalid option
|
58
|
+
pdf = PDF::HTMLDoc.new
|
59
|
+
pdf.set_option :outfile, "test.pdf"
|
60
|
+
pdf << "http://#{simple_uid(".com")}:12345/#{simple_uid(".html")} --non-existing-option"
|
61
|
+
pdf.generate
|
62
|
+
assert_not_equal 0, pdf.errors.size
|
63
|
+
assert_nil pdf.result[:bytes]
|
64
|
+
assert_nil pdf.result[:pages]
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def basic_test(format, page = %Q(<h1>Page 1</h1><p>Test.</p><h1>Page 2</h1><p>Test.</p>\nhttp://foo.com/))
|
70
|
+
# Temporary files
|
71
|
+
path1, path2 = (1..2).collect { |i| Dir.tmpdir + "/#{i}.#{format}" }
|
72
|
+
# Create a temporary file for the duration of the test
|
73
|
+
Tempfile.open("htmldoc.test") do |tempfile|
|
74
|
+
# Load the temporary file with some test datas
|
75
|
+
tempfile.binmode
|
76
|
+
tempfile.write(page)
|
77
|
+
tempfile.flush
|
78
|
+
# Simple format test
|
79
|
+
pdf = PDF::HTMLDoc.new(format)
|
80
|
+
pdf.set_option :outfile, path1
|
81
|
+
pdf.add_page tempfile.path
|
82
|
+
assert_equal true, pdf.generate
|
83
|
+
assert_equal pdf.result[:output], execute_htmldoc(path2, tempfile.path, "--format #{format}")
|
84
|
+
# Delete temporary files
|
85
|
+
File.delete(path1) if File.exists?(path1)
|
86
|
+
File.delete(path2) if File.exists?(path2)
|
87
|
+
# Simple webpag format test
|
88
|
+
pdf = PDF::HTMLDoc.new(format)
|
89
|
+
pdf.set_option :outfile, path1
|
90
|
+
pdf.set_option :webpage, true
|
91
|
+
pdf.add_page tempfile.path
|
92
|
+
assert_equal true, pdf.generate
|
93
|
+
assert_equal pdf.result[:output], execute_htmldoc(path2, tempfile.path, "--webpage --format #{format}")
|
94
|
+
# Delete temporary files
|
95
|
+
File.delete(path1) if File.exists?(path1)
|
96
|
+
File.delete(path2) if File.exists?(path2)
|
97
|
+
# Simple options test
|
98
|
+
pdf = PDF::HTMLDoc.new(format)
|
99
|
+
pdf.set_option :outfile, path1
|
100
|
+
pdf.set_option :bodycolor, :black
|
101
|
+
pdf.add_page tempfile.path
|
102
|
+
assert_equal true, pdf.generate
|
103
|
+
assert_equal pdf.result[:output], execute_htmldoc(path2, tempfile.path, "--bodycolor black --format #{format}")
|
104
|
+
# Delete temporary files
|
105
|
+
File.delete(path1) if File.exists?(path1)
|
106
|
+
File.delete(path2) if File.exists?(path2)
|
107
|
+
# Free text generate test
|
108
|
+
pdf = PDF::HTMLDoc.new(format)
|
109
|
+
pdf.add_page page
|
110
|
+
pdf.generate
|
111
|
+
assert_equal pdf.result[:output], execute_htmldoc(path2, tempfile.path, "--format #{format}")
|
112
|
+
# Delete temporary files
|
113
|
+
File.delete(path2) if File.exists?(path2)
|
114
|
+
# Inline generation test
|
115
|
+
result = PDF::HTMLDoc.create(format) do |p|
|
116
|
+
p.set_option :outfile, path1
|
117
|
+
p.set_option :bodycolor, :black
|
118
|
+
p.add_page tempfile.path
|
119
|
+
end
|
120
|
+
assert_equal true, result
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def execute_htmldoc(output, input, options)
|
125
|
+
IO.popen("#{@program_path} #{options} -f #{output} #{input} 2>&1") { |s| s.read }
|
126
|
+
end
|
127
|
+
|
128
|
+
def simple_uid(extension)
|
129
|
+
chars = ('A'..'Z').to_a + ('0'..'9').to_a
|
130
|
+
(1..100).inject("") { |r, i| r + chars[rand(chars.length)] }
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
# LocalWords: HTMLDOC
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: htmldoc-hulihanapplications
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 4
|
10
|
+
version: 0.2.4
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Hulihan Applications
|
14
|
+
- Dave Hulihan
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-09-09 00:00:00 -06:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
type: :development
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
name: shoulda
|
34
|
+
version_requirements: *id001
|
35
|
+
prerelease: false
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
type: :development
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 23
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
version: 1.0.0
|
49
|
+
name: bundler
|
50
|
+
version_requirements: *id002
|
51
|
+
prerelease: false
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
type: :development
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 7
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 6
|
63
|
+
- 4
|
64
|
+
version: 1.6.4
|
65
|
+
name: jeweler
|
66
|
+
version_requirements: *id003
|
67
|
+
prerelease: false
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
type: :development
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
name: rcov
|
80
|
+
version_requirements: *id004
|
81
|
+
prerelease: false
|
82
|
+
description: "A fork of the craigw's htmldoc: https://github.com/craigw/htmldoc."
|
83
|
+
email: dave@hulihanapplications.com
|
84
|
+
executables: []
|
85
|
+
|
86
|
+
extensions: []
|
87
|
+
|
88
|
+
extra_rdoc_files:
|
89
|
+
- LICENSE.txt
|
90
|
+
- README.txt
|
91
|
+
files:
|
92
|
+
- Gemfile
|
93
|
+
- Gemfile.lock
|
94
|
+
- History.txt
|
95
|
+
- LICENSE.txt
|
96
|
+
- Manifest.txt
|
97
|
+
- README.txt
|
98
|
+
- Rakefile
|
99
|
+
- VERSION
|
100
|
+
- htmldoc-hulihanapplications.gemspec
|
101
|
+
- init.rb
|
102
|
+
- lib/htmldoc.rb
|
103
|
+
- lib/htmldoc/version.rb
|
104
|
+
- setup.rb
|
105
|
+
- test/basic_test.rb
|
106
|
+
- test/generation_test.rb
|
107
|
+
- test/test_helper.rb
|
108
|
+
has_rdoc: true
|
109
|
+
homepage: http://github.com/hulihanapplications/htmldoc
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
hash: 3
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
version: "0"
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
hash: 3
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
requirements: []
|
136
|
+
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 1.6.2
|
139
|
+
signing_key:
|
140
|
+
specification_version: 3
|
141
|
+
summary: Wrapper around HTMLDOC (canonical repository)
|
142
|
+
test_files: []
|
143
|
+
|