require "spec_helper"
require "fileutils"
RSpec.describe Asciidoctor::BSI do
before(:all) do
@blank_hdr = blank_hdr_gen
end
it "has a version number" do
expect(Metanorma::BSI::VERSION).not_to be nil
end
it "processes a blank document" do
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
#{ASCIIDOC_BLANK_HDR}
INPUT
#{@blank_hdr}
OUTPUT
end
it "converts a blank document" do
FileUtils.rm_f "test.doc"
FileUtils.rm_f "test.html"
FileUtils.rm_f "test.pdf"
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:novalid:
:no-isobib:
INPUT
#{@blank_hdr}
OUTPUT
expect(File.exist?("test.pdf")).to be true
expect(File.exist?("test.html")).to be true
expect(File.exist?("test.doc")).to be true
expect(File.exist?("htmlstyle.css")).to be false
end
it "processes default metadata" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:partnumber: 1
:edition: 2
:revdate: 2000-01-01
:draft: 0.3.4
:technical-committee: TC
:technical-committee-number: 1
:technical-committee-type: A
:subcommittee: SC
:subcommittee-number: 2
:subcommittee-type: B
:workgroup: WG
:workgroup-number: 3
:workgroup-type: C
:technical-committee_2: TC1
:technical-committee-number_2: 11
:technical-committee-type_2: A1
:subcommittee_2: SC1
:subcommittee-number_2: 21
:subcommittee-type_2: B1
:workgroup_2: WG1
:workgroup-number_2: 31
:workgroup-type_2: C1
:secretariat: SECRETARIAT
:docstage: 10
:docsubstage: 20
:iteration: 3
:language: en
:title-intro-en: Introduction
:title-main-en: Main Title -- Title
:title-part-en: Title Part
:title-intro-fr: Introduction Française
:title-main-fr: Titre Principal
:title-part-fr: Part du Titre
:library-ics: 1,2,3
:accessibility-color-inside: true
:price-code: XC
:cen-processing: true
:secretary: Fred Nerk
:interest-to-committees: TC 6121, SC 12
:obsoletes: ABC; DEF
INPUT
Introduction — Main Title — Title — Title Part
Introduction
Main Title — Title
Title Part
Introduction Française — Titre Principal — Part du Titre
Introduction Française
Titre Principal
Part du Titre
BS/PreNP 1000-1
1000
British Standards Institute
BSI
British Standards Institute
BSI
2
2000-01-01
0.3.4
en
10
20
3
#{Date.today.year}
British Standards Institute
BSI
--
ABC
--
DEF
article
TC
TC1
SC
SC1
WG
WG1
SECRETARIAT
1
2
3
BS 1000
New work item proposal
OUTPUT
end
it "processes complex metadata" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:partnumber: 1-1
:tc-docnumber: 2000
:language: el
:script: Grek
:publisher: BSI;IETF;ISO
:copyright-year: 2001
:docstage: 50
:doctype: technical-specification
:function: emc
:horizontal: true
INPUT
BS/IETF/ISO/FDTS TS 1000-1-1
2000
1000
British Standards Institute
BSI
IETF
International Organization for Standardization
ISO
British Standards Institute
BSI
IETF
International Organization for Standardization
ISO
el
50
00
2001
British Standards Institute
BSI
2001
IETF
2001
International Organization for Standardization
ISO
technical-specification
BS/IETF/ISO 1000
Final draft
OUTPUT
end
it "processes adoption of ISO standards" do
VCR.use_cassette "iso-639" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:docnumber: ISO 639
:partnumber: 2
:nodoc:
:novalid:
:adopted-from: ISO 639-2
:copyright-year: 2001
INPUT
BS ISO 639-2:2001
ISO 639
British Standards Institute
BSI
British Standards Institute
BSI
en
60
60
2001
British Standards Institute
BSI
2021-04-25
Codes for the representation of names of languages
Part 2: Alpha-3 code
Codes for the representation of names of
languages — Part 2: Alpha-3 code
Codes pour la représentation des noms de langue
Partie 2: Code alpha-3
Codes pour la représentation des noms de
langue — Partie 2: Code alpha-3
https://www.iso.org/standard/4767.html
https://www.iso.org/obp/ui/#!iso:std:4767:en
https://www.iso.org/contents/data/standard/00/47/4767.detail.rss
ISO 639-2
urn:iso:std:iso:639:-2:stage-90.20:ed-1:en,fr
639
International Organization for Standardization
ISO
www.iso.org
1
en
fr
90
20
1998
ISO
2021-04-25
Codes for the representation of names of languages
Part 2: Alpha-3 code
Codes for the representation of names of
languages — Part 2: Alpha-3 code
Codes pour la représentation des noms de langue
Partie 2: Code alpha-3
Codes pour la représentation des noms de
langue — Partie 2: Code alpha-3
https://www.iso.org/standard/4767.html
https://www.iso.org/obp/ui/#!iso:std:4767:en
https://www.iso.org/contents/data/standard/00/47/4767.detail.rss
ISO 639-2:1998
urn:iso:std:iso:639:-2:stage-90.20:ed-1:en,fr
639
1998-11
International Organization for Standardization
ISO
www.iso.org
1
en
fr
La présente partie de l’ISO 639 fournit deux jeux de
codets à trois caractères pour la représentation des
noms de langue, l’un destiné à des applications en
terminologie, l’autre destiné à des applications
bibliographiques. Les deux jeux de codets sont les mêmes,
excepté pour vingt-cinq langues qui ont des codets
différents à cause du critère utilisé pour les
former . À l’origine, des codets de langues ont
été créés à l’usage des
bibliothèques, des services documentaires et des éditeurs,
pour indiquer la langue dans l’échange
d’information, particulièrement entre des systèmes
informatisés. Ces codets ont été utilisés
largement à l’intérieur de la communauté des
bibliothèques, et ils peuvent être adoptés pour toute
application qui requiert l’expression de la langue sous forme
codée, en terminologie ou en lexicographie. Le code alpha-2 a
été créé pour un usage pratique pour la plupart
des grandes langues du monde, langues qui sont les plus souvent
représentées dans le corpus de la littérature
mondiale. De nouveaux codets sont créés quand il devient
évident qu’il existe un corpus significatif de
littérature dans une langue particulière. Les langages
créés pour être utilisés exclusivement par des
machines, comme les langages de programmation, ne sont pas inclus
dans le présent code.
90
20
1998
ISO
Geneva
Geneva
article
BS ISO 639
International standard
OUTPUT
end
end
it "processes boilerplate in English" do
doc = (strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:partnumber: 1-1
:tc-docnumber: 2000
:language: en
:script: Latn
:publisher: IEC,IETF,ISO
:copyright-year: 2001
INPUT
expect(doc).to include "Unless otherwise specified"
end
it "defaults substage" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:docstage: 50
INPUT
BS/FDIS 1000
1000
British Standards Institute
BSI
British Standards Institute
BSI
en
50
00
#{Date.today.year}
British Standards Institute
BSI
article
BS 1000
Final draft
OUTPUT
end
it "defaults substage for stage 60" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:docstage: 60
INPUT
BS 1000
1000
British Standards Institute
BSI
British Standards Institute
BSI
en
60
60
#{Date.today.year}
British Standards Institute
BSI
article
BS 1000
International standard
OUTPUT
end
it "populates metadata for PRF" do
expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
= Document title
Author
:docfile: test.adoc
:nodoc:
:novalid:
:no-isobib:
:docnumber: 1000
:docstage: 60
:docsubstage: 00
INPUT
BS 1000
1000
British Standards Institute
BSI
British Standards Institute
BSI
en
60
00
#{Date.today.year}
British Standards Institute
BSI
article
BS 1000
Proof
OUTPUT
end
it "reads scripts into blank HTML document" do
FileUtils.rm_f "test.html"
Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
= Document title
Author
:docfile: test.adoc
:novalid:
:no-isobib:
:no-pdf:
INPUT
html = File.read("test.html", encoding: "utf-8")
expect(html).to match(%r{