require "spec_helper" RSpec.describe Asciidoctor::ISO do it "removes empty text elements" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == {blank} INPUT #{BLANK_HDR} OUTPUT end it "processes stem-only terms as admitted" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Terms and Definitions === stem:[t_90] stem:[t_91] Time INPUT #{BLANK_HDR} Terms and definitions #{TERM_BOILERPLATE} t90t91

Time

OUTPUT end it "moves term domains out of the term definition paragraph" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Terms and Definitions === Tempus domain:[relativity] Time INPUT #{BLANK_HDR} Terms and definitions #{TERM_BOILERPLATE} Tempus relativity

Time

OUTPUT end it "permits multiple blocks in term definition paragraph" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") = Document title Author :docfile: test.adoc :nodoc: :novalid: :stem: :no-isobib: == Terms and Definitions === stem:[t_90] [stem] ++++ t_A ++++ This paragraph is extraneous INPUT #{BLANK_HDR} Terms and definitions #{TERM_BOILERPLATE} t90 tA

This paragraph is extraneous

OUTPUT end it "strips any initial boilerplate from terms and definitions" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Terms and Definitions I am boilerplate * So am I === Time This paragraph is extraneous INPUT #{BLANK_HDR} Terms and definitions #{TERM_BOILERPLATE} Time

This paragraph is extraneous

OUTPUT end it "moves notes inside preceding blocks, if they are not at clause end, and the blocks are not delimited" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [stem] ++++ r = 1 % r = 1 % ++++ NOTE: That formula does not do much Indeed. INPUT #{BLANK_HDR} r=1%r=1%

That formula does not do much

Indeed.

OUTPUT end it "does not move notes inside preceding blocks, if they are at clause end" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [source,ruby] [1...x].each do |y| puts y end NOTE: That loop does not do much INPUT #{BLANK_HDR} [1...x].each do |y| puts y end

That loop does not do much

OUTPUT end it "converts xrefs to references into erefs" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} <> [bibliography] == Normative References * [[[iso216,ISO 216:2001]]], _Reference_ INPUT #{BLANK_HDR} Foreword

Normative References

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

Reference ISO 216:2001 2001 International Organization for Standardization ISO
OUTPUT end it "extracts localities from erefs" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} <> [bibliography] == Normative References * [[[iso216,ISO 216]]], _Reference_ INPUT #{BLANK_HDR} Foreword

391133the reference

Normative References

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

Reference ISO 216 International Organization for Standardization ISO
OUTPUT end it "strips type from xrefs" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} <> [bibliography] == Clause * [[[iso216,ISO 216]]], _Reference_ INPUT #{BLANK_HDR} Foreword

Bibliography Reference ISO 216 International Organization for Standardization ISO OUTPUT end it "processes localities in term sources" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Terms and Definitions === Term1 [.source] <> INPUT #{BLANK_HDR} Terms and definitions #{TERM_BOILERPLATE} Term1 1 OUTPUT end it "removes extraneous material from Normative References" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [bibliography] == Normative References This is extraneous information * [[[iso216,ISO 216]]], _Reference_ INPUT #{BLANK_HDR} Normative References

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

Reference ISO 216 International Organization for Standardization ISO
OUTPUT end it "inserts IDs into paragraphs" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} Paragraph INPUT #{BLANK_HDR}

Paragraph

OUTPUT end it "inserts IDs into notes" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [example] ==== NOTE: This note has no ID ==== INPUT #{BLANK_HDR}

This note has no ID

OUTPUT end it "moves table key inside table" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} |=== |a |b |c |=== Key a:: b INPUT #{BLANK_HDR}
a

b

a b c
OUTPUT end it "processes headerrows attribute for table without header rows" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [headerrows=3] |=== |a |b |c |a |b |c |a |b |c |a |b |c |=== INPUT #{BLANK_HDR}
a b c
a b c
a b c
a b c
OUTPUT end it "processes headerrows attribute for table with header rows" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [headerrows=3] |=== |a |b |c |a |b |c |a |b |c |a |b |c |=== INPUT #{BLANK_HDR}
a b c
a b c
a b c
a b c
OUTPUT end it "moves table notes inside table" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} |=== |a |b |c |=== NOTE: Note 1 NOTE: Note 2 INPUT #{BLANK_HDR}

Note 1

Note 2

a b c
OUTPUT end it "moves formula key inside formula" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} [stem] ++++ Formula ++++ where a:: b INPUT #{BLANK_HDR} Forμla
a

b

OUTPUT end it "moves footnotes inside figures" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} image::spec/examples/rice_images/rice_image1.png[] footnote:[This is a footnote to a figure] footnote:[This is another footnote to a figure] INPUT #{BLANK_HDR}

This is a footnote to a figure

This is another footnote to a figure

OUTPUT end it "moves figure key inside figure" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} image::spec/examples/rice_images/rice_image1.png[] Key a:: b INPUT #{BLANK_HDR}
a

b

OUTPUT end it "numbers bibliographic notes and footnotes sequentially" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} footnote:[Footnote] [bibliography] == Normative References * [[[iso123,ISO 123:--]]] footnote:[The standard is in press] _Standard_ == Clause footnote:[Footnote2] INPUT #{BLANK_HDR} Foreword

Footnote

Clause

Footnote2

Normative References

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

Standard ISO 123:— International Organization for Standardization ISO ISO DATE: The standard is in press
OUTPUT end it "defaults section obligations" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Clause Text [appendix] == Clause Text INPUT #{BLANK_HDR} Clause

Text

Clause

Text

OUTPUT end it "extends clause levels past 5" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Clause1 === Clause2 ==== Clause3 ===== Clause4 ====== Clause 5 [level=6] ====== Clause 6 [level=7] ====== Clause 7A [level=7] ====== Clause 7B [level=6] ====== Clause 6B ====== Clause 5B INPUT #{BLANK_HDR} Clause1 Clause2 Clause3 Clause4 Clause 5 Clause 6 Clause 7A Clause 7B Clause 6B Clause 5B OUTPUT end it "reorders references in bibliography, and renumbers citations accordingly" do expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") #{ASCIIDOC_BLANK_HDR} == Clause 1 <> <> <> <> <> <> <> <> <> <> [bibliography] == Bibliography [bibliography] === Clause 1 * [[[ref3,IEC 123]]], _Standard IEC 123_ * [[[ref5,20]]], _Standard 10_ * [[[ref1,ISO 123]]], _Standard ISO 123_ * [[[ref4,GB 123]]], _Standard GB 123_ * [[[ref2,ISO/IEC 123]]], _Standard ISO/IEC 123_ * [[[ref6,(B)]]], _Standard 20_ * [[[ref7,(A)]]], _Standard 30_ [bibliography] === {blank} * [[[ref15,20]]], _Standard 10_ * [[[ref14,GB 123]]], _Standard GB 123_ * [[[ref13,IEC 123]]], _Standard IEC 123_ * [[[ref11,ISO 123]]], _Standard ISO 123_ * [[[ref10,ISO/IEC 123]]], _Standard ISO/IEC 123_ * [[[ref16,(B)]]], _Standard 20_ * [[[ref17,(A)]]], _Standard 30_ INPUT #{BLANK_HDR} Clause 1

Bibliography Clause 1 Standard ISO 123 ISO 123 International Organization for Standardization ISO Standard ISO/IEC 123 ISO/IEC 123 International Organization for Standardization ISO International Electrotechnical Commission IEC Standard IEC 123 IEC 123 International Electrotechnical Commission IEC Standard 10 [4] Standard GB 123 GB 123 Standard 30 [A] Standard 20 [B] Standard ISO 123 ISO 123 International Organization for Standardization ISO Standard ISO/IEC 123 ISO/IEC 123 International Organization for Standardization ISO International Electrotechnical Commission IEC Standard IEC 123 IEC 123 International Electrotechnical Commission IEC Standard 10 [11] Standard GB 123 GB 123 Standard 30 [A] Standard 20 [B] OUTPUT end end