# encoding=utf-8 require 'spec_helper' describe Polytexnic::Pipeline do before(:all) do FileUtils.rm('.highlight_cache') if File.exist?('.highlight_cache') end describe '#to_latex' do subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_latex } describe "for vanilla LaTeX" do let(:polytex) { '\emph{foo}' } it { should include(polytex) } end describe "with source code highlighting" do let(:polytex) do <<-'EOS' %= lang:ruby \begin{code} def hello "hello, world!" end \end{code} Make a code listing as in Listing~\ref{code:hello}. \begin{codelisting} \label{code:hello} \codecaption{A hello program in Ruby.} %= lang:ruby \begin{code} def hello "hello, world!" end \end{code} \end{codelisting} \noindent lorem ipsum EOS end it { should resemble '\begin{framed_shaded}' + "\n" } it { should resemble "\n" + '\end{framed_shaded}' } it { should_not resemble "\n" + '\end{framed_shaded})' } it { should resemble "commandchars=\\\\\\{" } it { should resemble '\begin{Verbatim}' } it { should resemble 'commandchars' } it { should resemble '\end{Verbatim}' } it { should_not resemble 'def hello' } it { should resemble '\noindent lorem ipsum' } describe "in the middle of a line" do let(:polytex) { 'Use \verb+%= lang:ruby+ to highlight Ruby code' } it { should resemble '\verb' } it { should_not resemble '
' } end end context "with the metacode environment" do let(:polytex) do <<-'EOS' %= lang:latex \begin{metacode} %= lang:ruby \begin{code} def foo "bar" end \end{code} \end{metacode} \noindent lorem ipsum EOS end it { should resemble '\begin{framed_shaded}' + "\n" } it { should resemble "\n" + '\end{framed_shaded}' } it { should resemble "commandchars=\\\\\\{" } it { should_not resemble '%= lang:ruby' } end describe "verbatim environments" do let(:polytex) do <<-'EOS' \begin{verbatim} def foo "bar" end \end{verbatim} \begin{Verbatim} def foo "bar" end \end{Verbatim} \begin{Verbatim} x \end{equation} \end{Verbatim} EOS end it { should resemble polytex } context "containing an example of highlighted code" do let(:polytex) do <<-'EOS' \begin{verbatim} %= lang:ruby def foo "bar" end \end{verbatim} EOS end it { should resemble polytex } end context "with an equation" do let(:polytex) do <<-'EOS' \begin{equation} \label{eq:x_y} x_y \end{equation} EOS end it { should resemble polytex } it { should_not resemble 'xmlelement' } it { should_not resemble 'xbox' } it "should have only one '\end{equation}'" do n_ends = processed_text.scan(/\\end{equation}/).length expect(n_ends).to eq 1 end end end describe "hyperref links" do let(:polytex) do <<-'EOS' Chapter~\ref{cha:foo} EOS end let(:output) { '\hyperref[cha:foo]{Chapter~\ref{cha:foo}' } it { should resemble output } end describe "asides" do context "with headings and labels" do let(:polytex) do <<-'EOS' \begin{aside} \label{aside:foo} \heading{Foo \emph{are} bar.} lorem ipsum \end{aside} EOS end let(:output) do <<-'EOS' \begin{shaded_aside}{Foo \emph{are} bar.}{aside:foo} lorem ipsum \end{shaded_aside} EOS end it { should resemble output } end end describe "tables" do let(:polytex) do <<-'EOS' \begin{table} lorem ipsum \end{table} EOS end let(:output) do <<-'EOS' \begin{table} \begin{center} \small lorem ipsum \end{center} \end{table} EOS end it { should resemble output } end end end