require "simplecov" SimpleCov.start do add_filter "/spec/" end require "bundler/setup" require "asciidoctor" require "metanorma-iso" require "rspec/matchers" require "equivalent-xml" require "metanorma" require "metanorma/iso" require "iev" 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 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 BLANK_HDR = <<~"HDR" <?xml version="1.0" encoding="UTF-8"?> <iso-standard xmlns="http://riboseinc.com/isoxml"> <bibdata type="standard"> <contributor> <role type="author"/> <organization> <name>International Organization for Standardization</name> <abbreviation>ISO</abbreviation> </organization> </contributor> <contributor> <role type="publisher"/> <organization> <name>International Organization for Standardization</name> <abbreviation>ISO</abbreviation> </organization> </contributor> <language>en</language> <script>Latn</script> <status> <stage>60</stage> <substage>60</substage> </status> <copyright> <from>#{Time.new.year}</from> <owner> <organization> <name>International Organization for Standardization</name> <abbreviation>ISO</abbreviation> </organization> </owner> </copyright> <ext> <doctype>article</doctype> <editorialgroup> <technical-committee/> <subcommittee/> <workgroup/> </editorialgroup> </ext> </bibdata> HDR HTML_HDR = <<~END <html xmlns:epub="http://www.idpf.org/2007/ops"> <head/> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="title-section"> <p> </p> </div> <br/> <div class="prefatory-section"> <p> </p> </div> <br/> <div class="main-section"> END WORD_HDR = <<~END <html xmlns:epub="http://www.idpf.org/2007/ops"> <head> <title>test</title> </head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection2"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> 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