@@ -25,29 +25,44 @@ NORM_RULE_EXPECTED_DIR := $(NORM_RULE_TESTS_DIR)/expected
2525
2626# Ruby scripts being tested.
2727TAGS_BACKEND := tags.rb
28- CREATE_NORM_RULE_TOOL := create_normative_rules.rb
28+ CREATE_NORM_RULE_TOOL := $(TOOLS_DIR ) /create_normative_rules.rb
29+ CREATE_NORM_RULE_RUBY := ruby $(CREATE_NORM_RULE_TOOL )
30+
31+ # Stuff for building mock standards document in HTML to have links into it.
32+ DOCS = "test"
33+ DOCS_HTML := $(addprefix $(BUILD_DIR ) /, $(addsuffix .html, $(DOCS ) ) )
34+ ENV := LANG=C.utf8
35+ ASCIIDOCTOR_HTML := $(ENV ) asciidoctor
2936
3037# Input and output file names
38+ DOC_NORM_TAG_SUFFIX := -norm-tags.json
3139MAIN_TEST_ADOC_INPUT_FNAME := test.adoc
40+ MAIN_TEST_HTML_FNAME := test.html
3241DUPLICATE_TEST_ADOC_INPUT_FNAME := duplicate.adoc
33- MAIN_NORM_TAGS_OUTPUT_FNAME := test-norm-tags.json
42+ MAIN_NORM_TAGS_OUTPUT_FNAME := test$( DOC_NORM_TAG_SUFFIX )
3443DUPLICATE_NORM_TAGS_OUTPUT_FNAME := duplicate-tags.json
3544NORM_RULE_JSON_OUTPUT_FNAME := test-norm-rules.json
3645NORM_RULE_XLSX_OUTPUT_FNAME := test-norm-rules.xlsx
46+ NORM_RULE_ADOC_OUTPUT_FNAME := test-norm-rules.adoc
47+ NORM_RULE_HTML_OUTPUT_FNAME := test-norm-rules.html
3748NORM_RULE_TAGS_NO_RULES_OUTPUT_FNAME := test-norm-rules_tags_no_rules.json
3849
3950# Built output files
51+ BUILT_MAIN_TEST_HTML := $(BUILD_DIR ) /$(MAIN_TEST_HTML_FNAME )
4052BUILT_NORM_TAGS_MAIN := $(BUILD_DIR ) /$(MAIN_NORM_TAGS_OUTPUT_FNAME )
4153BUILT_NORM_TAGS_DUPLICATE := $(BUILD_DIR ) /$(DUPLICATE_NORM_TAGS_OUTPUT_FNAME )
4254BUILT_NORM_RULES_JSON := $(BUILD_DIR ) /$(NORM_RULE_JSON_OUTPUT_FNAME )
4355BUILT_NORM_RULES_XLSX := $(BUILD_DIR ) /$(NORM_RULE_XLSX_OUTPUT_FNAME )
56+ BUILT_NORM_RULES_ADOC := $(BUILD_DIR ) /$(NORM_RULE_ADOC_OUTPUT_FNAME )
57+ BUILT_NORM_RULES_HTML := $(BUILD_DIR ) /$(NORM_RULE_HTML_OUTPUT_FNAME )
4458BUILT_NORM_RULES_TAGS_NO_RULES := $(BUILD_DIR ) /$(NORM_RULE_TAGS_NO_RULES_OUTPUT_FNAME )
4559
4660# Copies of expected output files.
4761# Use make target "update-expected" to update from build dir contents.
4862EXPECTED_NORM_TAGS := $(NORM_RULE_EXPECTED_DIR ) /$(MAIN_NORM_TAGS_OUTPUT_FNAME )
4963EXPECTED_NORM_RULES_JSON := $(NORM_RULE_EXPECTED_DIR ) /$(NORM_RULE_JSON_OUTPUT_FNAME )
5064EXPECTED_NORM_RULES_XLSX := $(NORM_RULE_EXPECTED_DIR ) /$(NORM_RULE_XLSX_OUTPUT_FNAME )
65+ EXPECTED_NORM_RULES_ADOC := $(NORM_RULE_EXPECTED_DIR ) /$(NORM_RULE_ADOC_OUTPUT_FNAME )
5166
5267# All normative rule definition input YAML files
5368NORM_RULE_DEF_FILES := $(wildcard $(NORM_RULE_DEF_DIR ) /* .yaml)
@@ -58,6 +73,9 @@ NORM_TAG_FILE_ARGS := $(foreach relative_pname,$(BUILT_NORM_TAGS_MAIN),-t /$(rel
5873# Add -d to each normative rule definition filename
5974NORM_RULE_DEF_ARGS := $(foreach relative_pname,$(NORM_RULE_DEF_FILES ) ,-d $(relative_pname ) )
6075
76+ # Provide mapping from an standard's norm tags JSON file to its corresponding HTML file. Used to create links into standard's HTML files.
77+ NORM_RULE_DOC2HTML_ARGS := $(foreach doc_name,$(DOCS ) ,-tag2html /$(BUILD_DIR ) /$(doc_name )$(DOC_NORM_TAG_SUFFIX ) $(doc_name ) .html)
78+
6179# Docker stuff
6280DOCKER_BIN ?= docker
6381SKIP_DOCKER ?= $(shell if command -v ${DOCKER_BIN} >/dev/null 2>&1 ; then echo false; else echo true; fi)
@@ -124,15 +142,17 @@ test: build-tests compare-tests
124142
125143# Build tests
126144.PHONY : build-tests build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx
127- build-tests : build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx build-test-tags-without-rules
145+ build-tests : build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx build-test-norm-rules-adoc build-test-norm-rules-html build-test- tags-without-rules
128146build-test-tags : $(BUILT_NORM_TAGS_MAIN ) $(BUILT_NORM_TAGS_DUPLICATE )
129147build-test-norm-rules-json : $(BUILT_NORM_RULES_JSON )
130148build-test-norm-rules-xlsx : $(BUILT_NORM_RULES_XLSX )
149+ build-test-norm-rules-adoc : $(BUILT_NORM_RULES_ADOC )
150+ build-test-norm-rules-html : $(BUILT_NORM_RULES_HTML )
131151build-test-tags-without-rules : $(BUILT_NORM_RULES_TAGS_NO_RULES )
132152
133153# Compare tests against expected
134154.PHONY : compare-tests
135- compare-tests : compare-test-tags compare-test-norm-rules-json
155+ compare-tests : compare-test-tags compare-test-norm-rules-json compare-test-norm-rules-adoc
136156
137157compare-test-tags : $(EXPECTED_NORM_TAGS ) $(BUILT_NORM_TAGS_MAIN )
138158 @echo " CHECKING BUILT TAGS AGAINST EXPECTED TAGS"
@@ -144,9 +164,13 @@ compare-test-norm-rules-json: $(EXPECTED_NORM_RULES_JSON) $(BUILT_NORM_RULES_JSO
144164 @echo " CHECKING JSON BUILT NORM RULES AGAINST EXPECTED NORM RULES"
145165 diff $(EXPECTED_NORM_RULES_JSON ) $(BUILT_NORM_RULES_JSON ) && echo " diff PASSED" || (echo " diff FAILED" ; exit 1)
146166
167+ compare-test-norm-rules-adoc : $(EXPECTED_NORM_RULES_ADOC ) $(BUILT_NORM_RULES_ADOC )
168+ @echo " CHECKING ADOC BUILT NORM RULES AGAINST EXPECTED NORM RULES"
169+ diff $(EXPECTED_NORM_RULES_ADOC ) $(BUILT_NORM_RULES_ADOC ) && echo " diff PASSED" || (echo " diff FAILED" ; exit 1)
170+
147171# Update expected files from built files
148172.PHONY : update-expected
149- update-expected : update-test-tags update-test-norm-rules-json update-test-norm-rules-xlsx
173+ update-expected : update-test-tags update-test-norm-rules-json update-test-norm-rules-xlsx update-test-norm-rules-adoc
150174
151175update-test-tags : $(BUILT_NORM_TAGS_MAIN )
152176 cp -f $(BUILT_NORM_TAGS_MAIN ) $(EXPECTED_NORM_TAGS )
@@ -157,6 +181,9 @@ update-test-norm-rules-json: $(BUILT_NORM_RULES_JSON)
157181update-test-norm-rules-xlsx : $(BUILT_NORM_RULES_XLSX )
158182 cp -f $(BUILT_NORM_RULES_XLSX ) $(EXPECTED_NORM_RULES_XLSX )
159183
184+ update-test-norm-rules-adoc : $(BUILT_NORM_RULES_ADOC )
185+ cp -f $(BUILT_NORM_RULES_ADOC ) $(EXPECTED_NORM_RULES_ADOC )
186+
160187# Build normative tags with main adoc input
161188$(BUILT_NORM_TAGS_MAIN ) : $(NORM_RULE_TESTS_DIR ) /$(MAIN_TEST_ADOC_INPUT_FNAME ) $(CONVERTERS_DIR ) /$(TAGS_BACKEND )
162189 $(WORKDIR_SETUP )
@@ -175,15 +202,36 @@ $(BUILT_NORM_RULES_JSON): $(BUILT_NORM_TAGS_MAIN) $(NORM_RULE_DEF_FILES)
175202 $(WORKDIR_SETUP )
176203 cp -f $(BUILT_NORM_TAGS_MAIN ) $@ .workdir
177204 mkdir -p $@ .workdir/build
178- $(DOCKER_CMD ) $(DOCKER_QUOTE ) ruby $( TOOLS_DIR ) / $( CREATE_NORM_RULE_TOOL ) -w $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $@ $(DOCKER_QUOTE )
205+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $( CREATE_NORM_RULE_RUBY ) -w -j $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $@ $(DOCKER_QUOTE )
179206 $(WORKDIR_TEARDOWN )
180207
181208# Build normative rules with XLSX output format
182209$(BUILT_NORM_RULES_XLSX ) : $(BUILT_NORM_TAGS_MAIN ) $(NORM_RULE_DEF_FILES )
183210 $(WORKDIR_SETUP )
184211 cp -f $(BUILT_NORM_TAGS_MAIN ) $@ .workdir
185212 mkdir -p $@ .workdir/build
186- $(DOCKER_CMD ) $(DOCKER_QUOTE ) ruby $(TOOLS_DIR ) /$(CREATE_NORM_RULE_TOOL ) -w -x $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $@ $(DOCKER_QUOTE )
213+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $(CREATE_NORM_RULE_RUBY ) -w -x $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $@ $(DOCKER_QUOTE )
214+ $(WORKDIR_TEARDOWN )
215+
216+ $(BUILT_NORM_RULES_ADOC ) : $(BUILT_NORM_TAGS_MAIN ) $(NORM_RULE_DEF_FILES )
217+ $(WORKDIR_SETUP )
218+ cp -f $(BUILT_NORM_TAGS_MAIN ) $@ .workdir
219+ mkdir -p $@ .workdir/build
220+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $(CREATE_NORM_RULE_RUBY ) -w -a $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $(NORM_RULE_DOC2HTML_ARGS ) $@ $(DOCKER_QUOTE )
221+ $(WORKDIR_TEARDOWN )
222+
223+ $(BUILT_NORM_RULES_HTML ) : $(BUILT_NORM_RULES_ADOC ) $(BUILT_MAIN_TEST_HTML )
224+ $(WORKDIR_SETUP )
225+ mkdir -p $@ .workdir/build
226+ cp -f $(BUILT_NORM_RULES_ADOC ) $@ .workdir/build
227+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $(ASCIIDOCTOR_HTML ) $< $(DOCKER_QUOTE )
228+ $(WORKDIR_TEARDOWN )
229+
230+ # This is the HTML file that represents the standards doc. THe norm rule HTML links into this HTML.
231+ $(BUILT_MAIN_TEST_HTML ) : $(NORM_RULE_TESTS_DIR ) /$(MAIN_TEST_ADOC_INPUT_FNAME )
232+ $(WORKDIR_SETUP )
233+ mkdir -p $@ .workdir/build
234+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $(ASCIIDOCTOR_HTML ) -o $@ $< $(DOCKER_QUOTE )
187235 $(WORKDIR_TEARDOWN )
188236
189237# Build normative rules that should create an error due to tags without norm rules referencing them
@@ -192,7 +240,7 @@ $(BUILT_NORM_RULES_TAGS_NO_RULES): $(BUILT_NORM_TAGS_MAIN) $(NORM_RULE_DEF_FILES
192240 $(WORKDIR_SETUP )
193241 cp -f $(BUILT_NORM_TAGS_MAIN ) $@ .workdir
194242 mkdir -p $@ .workdir/build
195- $(DOCKER_CMD ) $(DOCKER_QUOTE ) ruby $( TOOLS_DIR ) / $( CREATE_NORM_RULE_TOOL ) $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $(BUILD_DIR ) /bogus || touch $(BUILT_NORM_RULES_TAGS_NO_RULES ) $(DOCKER_QUOTE )
243+ $(DOCKER_CMD ) $(DOCKER_QUOTE ) $( CREATE_NORM_RULE_RUBY ) $(NORM_TAG_FILE_ARGS ) $(NORM_RULE_DEF_ARGS ) $(BUILD_DIR ) /bogus || touch $(BUILT_NORM_RULES_TAGS_NO_RULES ) $(DOCKER_QUOTE )
196244 $(WORKDIR_TEARDOWN )
197245
198246# Update docker image to latest
0 commit comments