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{