# encoding: UTF-8 require 'helper' require 'mocha' class TestRbST < Test::Unit::TestCase def setup [:rst, :html, :latex].each do |f| instance_variable_set( :"@#{f}_file", File.join(File.dirname(__FILE__), 'files', "test.#{f}") ) end @rst2parts_path = File.expand_path( File.join(File.dirname(__FILE__), '..', 'lib', 'rst2parts') ) end should "call bare rest2parts when passed no options" do converter = RbST.new(@rst_file) converter \ .expects(:execute) \ .with("python #{@rst2parts_path}/rst2html.py") \ .returns(true) assert converter.convert end should "convert with custom executable" do executables = {:html => "/some/path/2html.py"} default_executables = RbST.executables RbST.executables = executables converter = RbST.new(@file) converter \ .expects(:execute) \ .with("python #{executables[:html]}") \ .returns(true) assert converter.to_html RbST.executables = default_executables end should "raise error when passed bad executable key" do executables = {:markdown => "/some/path/2markdown.py"} begin RbST.executables = executables flunk rescue ArgumentError assert true end end should "convert ReST to html" do html = RbST.new(@rst_file).to_html assert_equal( File.read(@html_file), html ) end should "convert ReST to LaTeX" do latex = RbST.new(@rst_file).to_latex assert_equal( File.read(@latex_file), latex ) end [:html, :latex].each do |f| should "accept options on #to_#{f}" do converter = RbST.new(@rst_file) converter \ .expects(:execute) \ .with("python #{@rst2parts_path}/rst2#{f}.py --raw-enabled") \ .returns(true) assert converter.send("to_#{f}", :raw_enabled) end end should "recognize strip_comments option" do html_with_comment = RbST.convert(".. comment") assert_equal( html_with_comment, %Q{
\n\n
\n} ) html_without_comment = RbST.convert(".. comment", 'strip-comments') assert_equal( html_without_comment, %Q{
\n
\n} ) end should "recognize cloak_email_addresses option" do html_with_uncloaked_email = RbST.convert("steve@mac.com") assert_equal( %Q{
\n

steve@mac.com

\n
\n}, html_with_uncloaked_email ) html_with_cloaked_email = RbST.convert("steve@mac.com", 'cloak-email-addresses') assert_equal( %Q{
\n

steve@mac.com

\n
\n}, html_with_cloaked_email ) end should "recognize part option" do html_body = RbST.convert("hello world", :part => :html_body) assert_equal( %Q{
\n

hello world

\n
\n}, html_body ) fragment = RbST.convert("hello world", :part => :fragment) assert_equal( %Q{

hello world

\n}, fragment ) end should "convert to html with unicode" do test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_html(:part => :fragment) assert_equal( %Q{

#{test_string}

\n}, output ) end should "convert to latex with unicode" do test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_latex(:part => :body) assert_equal( %Q{\n#{test_string}\n}, output ) end should "execute with custom python path" do RbST.python_path = "/usr/bin/env python3" converter = RbST.new(@rst_file) converter \ .expects(:execute) \ .with("/usr/bin/env python3 #{@rst2parts_path}/rst2html.py") \ .returns(true) assert converter.convert RbST.python_path = "python" end should "convert to html with python3" do RbST.python_path = "/usr/bin/env python3" test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_html(:part => :fragment) assert_equal( %Q{

#{test_string}

\n}, output ) RbST.python_path = "python" end should "convert to latex with python3" do RbST.python_path = "/usr/bin/env python3" test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_latex(:part => :body) assert_equal( %Q{\n#{test_string}\n}, output ) RbST.python_path = "python" end should "convert to html with python2" do RbST.python_path = "/usr/bin/env python2" test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_html(:part => :fragment) assert_equal( %Q{

#{test_string}

\n}, output ) RbST.python_path = "python" end should "convert to latex with python2" do RbST.python_path = "/usr/bin/env python2" test_string = "Hello ☃".force_encoding("utf-8") output = RbST.new(test_string).to_latex(:part => :body) assert_equal( %Q{\n#{test_string}\n}, output ) RbST.python_path = "python" end end