require "simplecov" SimpleCov.start do add_filter "/spec/" end require "bundler/setup" require "asciidoctor" require "metanorma-iec" require "rspec/matchers" require "equivalent-xml" require "metanorma" require "metanorma/iec" require "iev" require "rexml/document" RSpec.configure do |config| # Enable flags like --only-failures and --next-failure config.example_status_persistence_file_path = ".rspec_status" # Disable RSpec exposing methods globally on `Module` and `main` config.disable_monkey_patching! config.expect_with :rspec do |c| c.syntax = :expect end end def strip_guid(x) x.gsub(%r{ id="_[^"]+"}, ' id="_"').gsub(%r{ target="_[^"]+"}, ' target="_"') end def xmlpp(x) s = "" f = REXML::Formatters::Pretty.new(2) f.compact = true f.write(REXML::Document.new(x),s) s end ASCIIDOC_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :novalid: :no-isobib: HDR ISOBIB_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :novalid: :no-isobib-cache: HDR FLUSH_CACHE_ISOBIB_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :novalid: :flush-caches: HDR CACHED_ISOBIB_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :novalid: HDR LOCAL_CACHED_ISOBIB_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :novalid: :local-cache: HDR VALIDATING_BLANK_HDR = <<~"HDR" = Document title Author :docfile: test.adoc :nodoc: :no-isobib: HDR TERMS_BOILERPLATE = <<~"BOILERPLATE"

ISO and IEC maintain terminological databases for use in standardization at the following addresses:

BOILERPLATE BOILERPLATE = HTMLEntities.new.decode( File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iec", "iec_intro_en.xml"), encoding: "utf-8"). gsub(/\{\{ agency \}\}/, "IEC").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s). gsub(/\{% if unpublished %\}.*\{% endif %\}/m, ""). gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’"). gsub(/

/, "

"). gsub(/

    /, "
      ") ) BOILERPLATE_LICENSE = <<~END Warning for CDs, CDVs and FDISs

      This document is not an IEC International Standard. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an International Standard.

      Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.

      END UNPUBLISHED_BOILERPLATE = BOILERPLATE.sub(/<\/boilerplate>/, "#{BOILERPLATE_LICENSE}") BLANK_HDR = <<~"HDR" International Electrotechnical Commission IEC International Electrotechnical Commission IEC en 60 60 #{Time.new.year} International Electrotechnical Commission IEC article #{BOILERPLATE} HDR IEC_TITLE = <<~END

      INTERNATIONAL ELECTROTECHNICAL COMMISSION

      ____________

       

       

      END HTML_HDR = <<~END

       


       



      #{IEC_TITLE} END WORD_HDR = <<~END test

       


       


      END def stub_fetch_ref(**opts) xml = "" hit = double("hit") expect(hit).to receive(:"[]").with("title") do Nokogiri::XML(xml).at("//docidentifier").content end.at_least(:once) hit_instance = double("hit_instance") expect(hit_instance).to receive(:hit).and_return(hit).at_least(:once) expect(hit_instance).to receive(:to_xml) do |builder, opt| expect(builder).to be_instance_of Nokogiri::XML::Builder expect(opt).to eq opts builder << xml end.at_least :once hit_page = double("hit_page") expect(hit_page).to receive(:first).and_return(hit_instance).at_least :once hit_pages = double("hit_pages") expect(hit_pages).to receive(:first).and_return(hit_page).at_least :once expect(Isobib::IsoBibliography).to receive(:search). and_wrap_original do |search, *args| code = args[0] expect(code).to be_instance_of String xml = get_xml(search, code, opts) hit_pages end.at_least :once end private def get_xml(search, code, opts) c = code.gsub(%r{[\/\s:-]}, "_").sub(%r{_+$}, "").downcase o = opts.keys.join "_" file = "spec/examples/#{[c, o].join '_'}.xml" if File.exist? file File.read file else result = search.call(code) hit = result&.first&.first xml = hit.to_xml nil, opts File.write file, xml xml end end def mock_open_uri(code) #expect(OpenURI).to receive(:open_uri).and_wrap_original do |m, *args| expect(Iev).to receive(:get).with(code, "en") do |m, *args| file = "spec/examples/#{code.tr('-', '_')}.html" File.write file, m.call(*args).read unless File.exist? file File.read file end.at_least :once end