integtest/spec/helper/dsl/file_contexts.rb (42 lines of code) (raw):

# frozen_string_literal: true require 'json' module Dsl ## # Methods to create contexts for asserting things about files and # their contents. module FileContexts ## # Create a context to assert things about an html page. By default it just # asserts that the page was created but if you pass a block you can add # assertions on `contents, `body`, and `title`. def page_context(name, file_name = name, &block) context "for #{name}" do include_context 'Dsl_page', file_name # Yield to the block to add more tests. class_exec(&block) if block end end shared_context 'Dsl_page' do |file_name| include_context 'Dsl_file', file_name let(:head) do return unless contents contents.sub(/.+<head>/m, '').sub(%r{</head>.+}m, '') end let(:head_title) do m = head&.match %r{<title>(.+?)</title>}m raise "can't find title in #{head}" unless m m[1] end let(:body) do return unless contents contents.sub(/.+<!-- start body -->/m, '') .sub(/<!-- end body -->.+/m, '') end let(:title) do return unless body m = body.match( %r{<h\d class="title"><a id="[^"]+"></a>([^<]+)(<a.+?)?</h\d>} ) raise "Can't find title in #{body}" unless m m[1] end let(:language) do return unless contents m = contents.match(/<section id="guide" lang="([^"]+)">/) raise "Can't find language in #{contents}" unless m m[1] end end end end