summaryrefslogtreecommitdiffstats
path: root/test/test_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_helper.rb')
-rw-r--r--test/test_helper.rb156
1 files changed, 156 insertions, 0 deletions
diff --git a/test/test_helper.rb b/test/test_helper.rb
new file mode 100644
index 0000000..96af546
--- /dev/null
+++ b/test/test_helper.rb
@@ -0,0 +1,156 @@
+# encoding: utf-8
+require "simplecov"
+require "tmpdir"
+require "fileutils"
+require "minitest/autorun"
+require "shoulda"
+require "timeout"
+require "logger"
+require "date"
+
+# require gem files
+require "roo"
+require "minitest/reporters"
+if ENV["USE_REPORTERS"]
+ Minitest::Reporters.use!(
+ [
+ Minitest::Reporters::DefaultReporter.new,
+ Minitest::Reporters::SpecReporter.new
+ ]
+ )
+end
+
+TESTDIR = File.join(File.dirname(__FILE__), "files")
+ROO_FORMATS = [
+ :excelx,
+ :excelxm,
+ :openoffice,
+ :libreoffice
+]
+
+require "helpers/test_accessing_files"
+require "helpers/test_comments"
+require "helpers/test_formulas"
+require "helpers/test_labels"
+require "helpers/test_sheets"
+require "helpers/test_styles"
+
+
+# very simple diff implementation
+# output is an empty string if the files are equal
+# otherwise differences a printen (not compatible to
+# the diff command)
+def file_diff(fn1,fn2)
+ result = ""
+ File.open(fn1) do |f1|
+ File.open(fn2) do |f2|
+ while f1.eof? == false and f2.eof? == false
+ line1 = f1.gets.chomp
+ line2 = f2.gets.chomp
+ result << "<#{line1}\n>#{line2}\n" if line1 != line2
+ end
+ if f1.eof? == false
+ while f1.eof? == false
+ line1 = f1.gets
+ result << "<#{line1}\n"
+ end
+ end
+ if f2.eof? == false
+ while f2.eof? == false
+ line2 = f2.gets
+ result << ">#{line2}\n"
+ end
+ end
+ end
+ end
+ result
+end
+
+class File
+ def File.delete_if_exist(filename)
+ if File.exist?(filename)
+ File.delete(filename)
+ end
+ end
+end
+
+def local_server(port)
+ raise ArgumentError unless port.to_i > 0
+ "http://0.0.0.0:#{port}"
+end
+
+def start_local_server(filename, port = nil)
+ require "rack"
+ content_type = filename.split(".").last
+ port ||= TEST_RACK_PORT
+
+ web_server = Proc.new do |env|
+ [
+ "200",
+ { "Content-Type" => content_type },
+ [File.read("#{TESTDIR}/#{filename}")]
+ ]
+ end
+
+ t = Thread.new { Rack::Handler::WEBrick.run web_server, Host: "0.0.0.0", Port: port , Logger: WEBrick::BasicLog.new(nil,1) }
+ # give the app a chance to startup
+ sleep(0.2)
+
+ yield
+ensure
+ t.kill
+end
+
+# call a block of code for each spreadsheet type
+# and yield a reference to the roo object
+def with_each_spreadsheet(options)
+ if options[:format]
+ formats = Array(options[:format])
+ invalid_formats = formats - ROO_FORMATS
+ unless invalid_formats.empty?
+ raise "invalid spreadsheet types: #{invalid_formats.join(', ')}"
+ end
+ else
+ formats = ROO_FORMATS
+ end
+ formats.each do |format|
+ begin
+ yield Roo::Spreadsheet.open(File.join(TESTDIR,
+ fixture_filename(options[:name], format)))
+ rescue => e
+ raise e, "#{e.message} for #{format}", e.backtrace unless options[:ignore_errors]
+ end
+ end
+end
+
+def get_extension(oo)
+ case oo
+ when Roo::OpenOffice
+ ".ods"
+ when Roo::Excelx
+ ".xlsx"
+ end
+end
+
+def fixture_filename(name, format)
+ case format
+ when :excelx
+ "#{name}.xlsx"
+ when :excelxm
+ "#{name}.xlsm"
+ when :openoffice, :libreoffice
+ "#{name}.ods"
+ else
+ raise ArgumentError, "unexpected format #{format}"
+ end
+end
+
+def skip_long_test
+ msg = "This is very slow, test use `LONG_RUN=true bundle exec rake` to run it"
+ skip(msg) unless ENV["LONG_RUN"]
+end
+
+def skip_jruby_incompatible_test
+ msg = "This test uses a feature incompatible with JRuby"
+ skip(msg) if defined?(JRUBY_VERSION)
+end