metanorma-standoc 2.0.3 → 2.0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/base.rb +73 -23
  3. data/lib/metanorma/standoc/blocks.rb +1 -1
  4. data/lib/metanorma/standoc/blocks_notes.rb +2 -2
  5. data/lib/metanorma/standoc/cleanup_amend.rb +33 -30
  6. data/lib/metanorma/standoc/cleanup_boilerplate.rb +29 -5
  7. data/lib/metanorma/standoc/cleanup_ref.rb +31 -2
  8. data/lib/metanorma/standoc/cleanup_ref_dl.rb +25 -16
  9. data/lib/metanorma/standoc/cleanup_section.rb +1 -1
  10. data/lib/metanorma/standoc/cleanup_terms_designations.rb +4 -2
  11. data/lib/metanorma/standoc/cleanup_text.rb +39 -17
  12. data/lib/metanorma/standoc/cleanup_xref.rb +70 -8
  13. data/lib/metanorma/standoc/converter.rb +2 -1
  14. data/lib/metanorma/standoc/inline.rb +21 -12
  15. data/lib/metanorma/standoc/isodoc.rng +63 -3
  16. data/lib/metanorma/standoc/macros.rb +14 -2
  17. data/lib/metanorma/standoc/macros_embed.rb +35 -14
  18. data/lib/metanorma/standoc/macros_note.rb +4 -3
  19. data/lib/metanorma/standoc/processor.rb +6 -1
  20. data/lib/metanorma/standoc/ref.rb +14 -15
  21. data/lib/metanorma/standoc/ref_utility.rb +6 -5
  22. data/lib/metanorma/standoc/render.rb +7 -3
  23. data/lib/metanorma/standoc/table.rb +8 -10
  24. data/lib/metanorma/standoc/term_lookup_cleanup.rb +10 -6
  25. data/lib/metanorma/standoc/utils.rb +3 -1
  26. data/lib/metanorma/standoc/validate.rb +79 -10
  27. data/lib/metanorma/standoc/version.rb +1 -1
  28. data/metanorma-standoc.gemspec +2 -2
  29. data/spec/assets/a2.adoc +4 -2
  30. data/spec/assets/a3.adoc +2 -2
  31. data/spec/assets/a3a.adoc +7 -0
  32. data/spec/metanorma/base_spec.rb +1 -1
  33. data/spec/metanorma/cleanup_spec.rb +31 -20
  34. data/spec/metanorma/cleanup_terms_spec.rb +16 -4
  35. data/spec/metanorma/inline_spec.rb +31 -0
  36. data/spec/metanorma/macros_plantuml_spec.rb +41 -42
  37. data/spec/metanorma/macros_spec.rb +206 -4
  38. data/spec/metanorma/processor_spec.rb +17 -13
  39. data/spec/metanorma/refs_spec.rb +129 -2
  40. data/spec/metanorma/validate_spec.rb +108 -0
  41. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +45 -45
  42. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +10 -10
  43. data/spec/vcr_cassettes/hide_refs.yml +39 -39
  44. data/spec/vcr_cassettes/isobib_get_123.yml +12 -12
  45. data/spec/vcr_cassettes/isobib_get_123_1.yml +23 -23
  46. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +28 -28
  47. data/spec/vcr_cassettes/isobib_get_123_2001.yml +11 -11
  48. data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
  49. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +18 -18
  50. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +75 -65
  51. metadata +10 -9
@@ -748,7 +748,7 @@ RSpec.describe Metanorma::Standoc do
748
748
  <definitions id='clause1' obligation='normative'>
749
749
  <title>Symbols and abbreviated terms</title>
750
750
  <dl id='_'>
751
- <dt id='symbol-_-__x230a_x__x230b_-'>
751
+ <dt id='symbol-__x230a_-x-__x230b_'>
752
752
  <stem type='MathML'>
753
753
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
754
754
  <mo>&#8970;</mo>
@@ -770,7 +770,7 @@ RSpec.describe Metanorma::Standoc do
770
770
  function.
771
771
  </p>
772
772
  </dd>
773
- <dt id='symbol-_-__x2308_x__x2309_-'>
773
+ <dt id='symbol-__x2308_-x-__x2309_'>
774
774
  <stem type='MathML'>
775
775
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
776
776
  <mo>&#8968;</mo>
@@ -1364,8 +1364,70 @@ RSpec.describe Metanorma::Standoc do
1364
1364
  embed::spec/assets/a1.adoc[]
1365
1365
  INPUT
1366
1366
  output = <<~OUTPUT
1367
- #{BLANK_HDR}
1368
- <sections>
1367
+ <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
1368
+ <bibdata type='standard'>
1369
+ <title language='en' format='text/plain'>Document title</title>
1370
+ <language>en</language>
1371
+ <script>Latn</script>
1372
+ <status>
1373
+ <stage>published</stage>
1374
+ </status>
1375
+ <copyright>
1376
+ <from>2022</from>
1377
+ </copyright>
1378
+ <ext>
1379
+ <doctype>article</doctype>
1380
+ </ext>
1381
+ <relation type='derivedFrom'>
1382
+ <bibitem>
1383
+ <title language='en' format='text/plain'>A2</title>
1384
+ <language>en</language>
1385
+ <script>Latn</script>
1386
+ <status>
1387
+ <stage>published</stage>
1388
+ </status>
1389
+ <copyright>
1390
+ <from>2022</from>
1391
+ </copyright>
1392
+ <ext>
1393
+ <doctype>article</doctype>
1394
+ </ext>
1395
+ <relation type='derivedFrom'>
1396
+ <bibitem>
1397
+ <title language='en' format='text/plain'>A3</title>
1398
+ <language>en</language>
1399
+ <script>Latn</script>
1400
+ <status>
1401
+ <stage>published</stage>
1402
+ </status>
1403
+ <copyright>
1404
+ <from>2022</from>
1405
+ </copyright>
1406
+ <ext>
1407
+ <doctype>article</doctype>
1408
+ </ext>
1409
+ </bibitem>
1410
+ </relation>
1411
+ <relation type='derivedFrom'>
1412
+ <bibitem>
1413
+ <title language='en' format='text/plain'>A3a</title>
1414
+ <language>en</language>
1415
+ <script>Latn</script>
1416
+ <status>
1417
+ <stage>published</stage>
1418
+ </status>
1419
+ <copyright>
1420
+ <from>2022</from>
1421
+ </copyright>
1422
+ <ext>
1423
+ <doctype>article</doctype>
1424
+ </ext>
1425
+ </bibitem>
1426
+ </relation>
1427
+ </bibitem>
1428
+ </relation>
1429
+ </bibdata>
1430
+ <sections>
1369
1431
  <clause id='clause1' inline-header='false' obligation='normative'>
1370
1432
  <title>Clause</title>
1371
1433
  </clause>
@@ -1381,6 +1443,10 @@ RSpec.describe Metanorma::Standoc do
1381
1443
  <title>Clause 3</title>
1382
1444
  <p id='_'>X</p>
1383
1445
  </clause>
1446
+ <clause id='_' inline-header='false' obligation='normative'>
1447
+ <title>Clause 3a</title>
1448
+ <p id='_'>X</p>
1449
+ </clause>
1384
1450
  <clause id='_' inline-header='false' obligation='normative'>
1385
1451
  <title>Clause 4</title>
1386
1452
  <p id='_'>X</p>
@@ -1392,6 +1458,142 @@ RSpec.describe Metanorma::Standoc do
1392
1458
  .to be_equivalent_to xmlpp(output)
1393
1459
  end
1394
1460
 
1461
+ it "processes std-link macro" do
1462
+ VCR.use_cassette "std-link" do
1463
+ input = <<~INPUT
1464
+ #{ISOBIB_BLANK_HDR}
1465
+
1466
+ [[clause1]]
1467
+ == Clause
1468
+
1469
+ std-link:[ISO 131]
1470
+ std-link:[iso:std:iso:13485:en,droploc%clause=4,text]
1471
+ INPUT
1472
+ output = <<~OUTPUT
1473
+ #{BLANK_HDR}
1474
+ <sections>
1475
+ <clause id='clause1' inline-header='false' obligation='normative'>
1476
+ <title>Clause</title>
1477
+ <p id='_'>
1478
+ <eref type='inline' bibitemid='_' citeas='ISO 131'/>
1479
+ <eref type='inline' droploc='true' bibitemid='_' citeas='iso:std:iso:13485:en'>
1480
+ <localityStack>
1481
+ <locality type='clause'>
1482
+ <referenceFrom>4</referenceFrom>
1483
+ </locality>
1484
+ </localityStack>
1485
+ text
1486
+ </eref>
1487
+ </p>
1488
+ </clause>
1489
+ </sections>
1490
+ <bibliography>
1491
+ <references hidden='true' normative='true'>
1492
+ <bibitem id='_' type='standard' hidden="true">
1493
+ <fetched/>
1494
+ <title type='title-intro' format='text/plain' language='en' script='Latn'>Acoustics</title>
1495
+ <title type='title-main' format='text/plain' language='en' script='Latn'>Expression of physical and subjective magnitudes of sound or noise in air</title>
1496
+ <title type='main' format='text/plain' language='en' script='Latn'>
1497
+ Acoustics — Expression of physical and subjective magnitudes of sound
1498
+ or noise in air
1499
+ </title>
1500
+ <uri type='src'>https://www.iso.org/standard/3944.html</uri>
1501
+ <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
1502
+ <docidentifier type='ISO' primary='true'>ISO 131</docidentifier>
1503
+ <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1:en</docidentifier>
1504
+ <docnumber>131</docnumber>
1505
+ <contributor>
1506
+ <role type='publisher'/>
1507
+ <organization>
1508
+ <name>International Organization for Standardization</name>
1509
+ <abbreviation>ISO</abbreviation>
1510
+ <uri>www.iso.org</uri>
1511
+ </organization>
1512
+ </contributor>
1513
+ <edition>1</edition>
1514
+ <language>en</language>
1515
+ <script>Latn</script>
1516
+ <status>
1517
+ <stage>95</stage>
1518
+ <substage>99</substage>
1519
+ </status>
1520
+ <copyright>
1521
+ <from>1979</from>
1522
+ <owner>
1523
+ <organization>
1524
+ <name>ISO</name>
1525
+ </organization>
1526
+ </owner>
1527
+ </copyright>
1528
+ <relation type='obsoletes'>
1529
+ <bibitem type='standard'>
1530
+ <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1531
+ </bibitem>
1532
+ </relation>
1533
+ <relation type='instance'>
1534
+ <bibitem type='standard'>
1535
+ <fetched/>
1536
+ <title type='title-intro' format='text/plain' language='en' script='Latn'>Acoustics</title>
1537
+ <title type='title-main' format='text/plain' language='en' script='Latn'>Expression of physical and subjective magnitudes of sound or noise in air</title>
1538
+ <title type='main' format='text/plain' language='en' script='Latn'>
1539
+ Acoustics — Expression of physical and subjective magnitudes of
1540
+ sound or noise in air
1541
+ </title>
1542
+ <uri type='src'>https://www.iso.org/standard/3944.html</uri>
1543
+ <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
1544
+ <docidentifier type='ISO' primary='true'>ISO 131:1979</docidentifier>
1545
+ <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1:en</docidentifier>
1546
+ <docnumber>131</docnumber>
1547
+ <date type='published'>
1548
+ <on>1979-11</on>
1549
+ </date>
1550
+ <contributor>
1551
+ <role type='publisher'/>
1552
+ <organization>
1553
+ <name>International Organization for Standardization</name>
1554
+ <abbreviation>ISO</abbreviation>
1555
+ <uri>www.iso.org</uri>
1556
+ </organization>
1557
+ </contributor>
1558
+ <edition>1</edition>
1559
+ <language>en</language>
1560
+ <script>Latn</script>
1561
+ <status>
1562
+ <stage>95</stage>
1563
+ <substage>99</substage>
1564
+ </status>
1565
+ <copyright>
1566
+ <from>1979</from>
1567
+ <owner>
1568
+ <organization>
1569
+ <name>ISO</name>
1570
+ </organization>
1571
+ </owner>
1572
+ </copyright>
1573
+ <relation type='obsoletes'>
1574
+ <bibitem type='standard'>
1575
+ <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1576
+ </bibitem>
1577
+ </relation>
1578
+ <place>Geneva</place>
1579
+ </bibitem>
1580
+ </relation>
1581
+ <place>Geneva</place>
1582
+ </bibitem>
1583
+ <bibitem id='_' hidden="true">
1584
+ <formattedref format='application/x-isodoc+xml'/>
1585
+ <docidentifier type='ISO'>iso:std:iso:13485:en</docidentifier>
1586
+ <docnumber>13485:en</docnumber>
1587
+ </bibitem>
1588
+ </references>
1589
+ </bibliography>
1590
+ </standard-document>
1591
+ OUTPUT
1592
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))
1593
+ .gsub(%r{ bibitemid="_[^"]+"}, ' bibitemid="_"')))
1594
+ .to be_equivalent_to xmlpp(output)
1595
+ end
1596
+ end
1395
1597
 
1396
1598
  describe "term inline macros" do
1397
1599
  subject(:convert) do
@@ -23,13 +23,16 @@ RSpec.describe Metanorma::Standoc::Processor do
23
23
  end
24
24
 
25
25
  it "generates IsoDoc XML from a blank document" do
26
- expect(processor.input_to_isodoc(<<~"INPUT", "test")).to be_equivalent_to <<~"OUTPUT"
26
+ input = <<~INPUT
27
27
  #{ASCIIDOC_BLANK_HDR}
28
28
  INPUT
29
+ output = <<~"OUTPUT"
29
30
  #{BLANK_HDR}
30
31
  <sections/>
31
32
  </iso-standard>
32
33
  OUTPUT
34
+ expect(processor.input_to_isodoc(input, "test"))
35
+ .to be_equivalent_to output
33
36
  end
34
37
 
35
38
  it "generates HTML from IsoDoc XML" do
@@ -45,16 +48,17 @@ RSpec.describe Metanorma::Standoc::Processor do
45
48
  </sections>
46
49
  </iso-standard>
47
50
  INPUT
48
- expect(File.read("test.html", encoding: "utf-8").gsub(%r{^.*<main}m, "<main").gsub(
49
- %r{</main>.*}m, "</main>"
50
- )).to be_equivalent_to <<~"OUTPUT"
51
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
52
- <p class="zzSTDTitle1"></p>
53
- <div id="H"><h1>Terms, Definitions, Symbols and Abbreviated Terms</h1><h2 class="TermNum" id="J"></h2>
54
- <p class="Terms" style="text-align:left;">Term2</p>
55
- </div>
56
- </main>
57
- OUTPUT
51
+ expect(File.read("test.html", encoding: "utf-8")
52
+ .gsub(%r{^.*<main}m, "<main")
53
+ .gsub(%r{</main>.*}m, "</main>"))
54
+ .to be_equivalent_to <<~"OUTPUT"
55
+ <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
56
+ <p class="zzSTDTitle1"></p>
57
+ <div id="H"><h1>Terms, Definitions, Symbols and Abbreviated Terms</h1><h2 class="TermNum" id="J"></h2>
58
+ <p class="Terms" style="text-align:left;">Term2</p>
59
+ </div>
60
+ </main>
61
+ OUTPUT
58
62
  end
59
63
 
60
64
  it "generates HTML from IsoDoc XML" do
@@ -70,8 +74,8 @@ RSpec.describe Metanorma::Standoc::Processor do
70
74
  </sections>
71
75
  </iso-standard>
72
76
  INPUT
73
- expect(File.read("test.doc",
74
- encoding: "utf-8")).to match(/Terms, Definitions, Symbols and Abbreviated Terms/)
77
+ expect(File.read("test.doc", encoding: "utf-8"))
78
+ .to match(/Terms, Definitions, Symbols and Abbreviated Terms/)
75
79
  end
76
80
 
77
81
  it "generates XML from IsoDoc XML" do
@@ -2496,12 +2496,12 @@ RSpec.describe Metanorma::Standoc do
2496
2496
  * [[[iso124,(*A*.footnote:[hello])XYZ]]] _Standard_
2497
2497
  INPUT
2498
2498
  output = <<~OUTPUT
2499
- #{BLANK_HDR}
2499
+ #{BLANK_HDR}
2500
2500
  <preface>
2501
2501
  <foreword id='_' obligation='informative'>
2502
2502
  <title>Foreword</title>
2503
2503
  <p id='_'>
2504
- <eref type='inline' bibitemid='iso124' citeas='[&amp;#x3c;strong&amp;#x3e;A&amp;#x3c;/strong&amp;#x3e;.&amp;#x3c;fn reference=&amp;#x22;1&amp;#x22;&amp;#x3e;&amp;#xa; &amp;#x3c;p&amp;#x3e;hello&amp;#x3c;/p&amp;#x3e;&amp;#xa;&amp;#x3c;/fn&amp;#x3e;]'/>
2504
+ <eref type='inline' bibitemid='iso124' citeas='[&amp;#x3c;strong&amp;#x3e;A&amp;#x3c;/strong&amp;#x3e;.&amp;#x3c;fn reference=&amp;#x22;1&amp;#x22;&amp;#x3e;&amp;#x3c;p&amp;#x3e;hello&amp;#x3c;/p&amp;#x3e;&amp;#xa;&amp;#x3c;/fn&amp;#x3e;]'/>
2505
2505
  </p>
2506
2506
  </foreword>
2507
2507
  </preface>
@@ -2532,6 +2532,133 @@ RSpec.describe Metanorma::Standoc do
2532
2532
  .to be_equivalent_to xmlpp(output)
2533
2533
  end
2534
2534
 
2535
+ it "processes combinations of crossreferences" do
2536
+ input = <<~INPUT
2537
+ #{ASCIIDOC_BLANK_HDR}
2538
+ == Section
2539
+
2540
+ <<ref1,clause=3;to!clause=5>>
2541
+ <<ref1,from!clause=3;to!clause=5,text>>
2542
+ <<ref1,clause=3;clause=5>>
2543
+ <<ref1,clause=3;and!clause=5>>
2544
+ <<ref1,clause=3;or!clause=5,text>>
2545
+ <<ref1,from!clause=3;to!clause=5;and!clause=8;to!clause=10>>
2546
+
2547
+ [bibliography]
2548
+ == Bibliography
2549
+
2550
+ * [[[ref1,XYZ]]] _Standard_
2551
+ INPUT
2552
+ output = <<~OUTPUT
2553
+ #{BLANK_HDR}
2554
+ <sections>
2555
+ <clause id='_' inline-header='false' obligation='normative'>
2556
+ <title>Section</title>
2557
+ <p id='_'>
2558
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2559
+ <localityStack connective='from'>
2560
+ <locality type='clause'>
2561
+ <referenceFrom>3</referenceFrom>
2562
+ </locality>
2563
+ </localityStack>
2564
+ <localityStack connective='to'>
2565
+ <locality type='clause'>
2566
+ <referenceFrom>5</referenceFrom>
2567
+ </locality>
2568
+ </localityStack>
2569
+ </eref>
2570
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2571
+ <localityStack connective='from'>
2572
+ <locality type='clause'>
2573
+ <referenceFrom>3</referenceFrom>
2574
+ </locality>
2575
+ </localityStack>
2576
+ <localityStack connective='to'>
2577
+ <locality type='clause'>
2578
+ <referenceFrom>5</referenceFrom>
2579
+ </locality>
2580
+ </localityStack>
2581
+ text
2582
+ </eref>
2583
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2584
+ <localityStack connective='and'>
2585
+ <locality type='clause'>
2586
+ <referenceFrom>3</referenceFrom>
2587
+ </locality>
2588
+ </localityStack>
2589
+ <localityStack connective='and'>
2590
+ <locality type='clause'>
2591
+ <referenceFrom>5</referenceFrom>
2592
+ </locality>
2593
+ </localityStack>
2594
+ </eref>
2595
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2596
+ <localityStack connective='and'>
2597
+ <locality type='clause'>
2598
+ <referenceFrom>3</referenceFrom>
2599
+ </locality>
2600
+ </localityStack>
2601
+ <localityStack connective='and'>
2602
+ <locality type='clause'>
2603
+ <referenceFrom>5</referenceFrom>
2604
+ </locality>
2605
+ </localityStack>
2606
+ </eref>
2607
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2608
+ <localityStack connective='and'>
2609
+ <locality type='clause'>
2610
+ <referenceFrom>3</referenceFrom>
2611
+ </locality>
2612
+ </localityStack>
2613
+ <localityStack connective='or'>
2614
+ <locality type='clause'>
2615
+ <referenceFrom>5</referenceFrom>
2616
+ </locality>
2617
+ </localityStack>
2618
+ text
2619
+ </eref>
2620
+ <eref type='inline' bibitemid='ref1' citeas='XYZ'>
2621
+ <localityStack connective='from'>
2622
+ <locality type='clause'>
2623
+ <referenceFrom>3</referenceFrom>
2624
+ </locality>
2625
+ </localityStack>
2626
+ <localityStack connective='to'>
2627
+ <locality type='clause'>
2628
+ <referenceFrom>5</referenceFrom>
2629
+ </locality>
2630
+ </localityStack>
2631
+ <localityStack connective='and'>
2632
+ <locality type='clause'>
2633
+ <referenceFrom>8</referenceFrom>
2634
+ </locality>
2635
+ </localityStack>
2636
+ <localityStack connective='to'>
2637
+ <locality type='clause'>
2638
+ <referenceFrom>10</referenceFrom>
2639
+ </locality>
2640
+ </localityStack>
2641
+ </eref>
2642
+ </p>
2643
+ </clause>
2644
+ </sections>
2645
+ <bibliography>
2646
+ <references id='_' normative='false' obligation='informative'>
2647
+ <title>Bibliography</title>
2648
+ <bibitem id='ref1'>
2649
+ <formattedref format='application/x-isodoc+xml'>
2650
+ <em>Standard</em>
2651
+ </formattedref>
2652
+ <docidentifier>XYZ</docidentifier>
2653
+ </bibitem>
2654
+ </references>
2655
+ </bibliography>
2656
+ </standard-document>
2657
+ OUTPUT
2658
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
2659
+ .to be_equivalent_to xmlpp(output)
2660
+ end
2661
+
2535
2662
  private
2536
2663
 
2537
2664
  def mock_isobib_get_123
@@ -478,6 +478,114 @@ RSpec.describe Metanorma::Standoc do
478
478
  expect(File.exist?("test.xml")).to be false
479
479
  end
480
480
 
481
+ it "does not warn and abort if columns and rows not out of bounds" do
482
+ FileUtils.rm_f "test.xml"
483
+ FileUtils.rm_f "test.err"
484
+ begin
485
+ input = <<~INPUT
486
+ = Document title
487
+ Author
488
+ :docfile: test.adoc
489
+ :nodoc:
490
+
491
+ == Clause
492
+
493
+ [cols="1,1,1,1"]
494
+ |===
495
+ 3.2+| a | a
496
+
497
+ | a
498
+ | a | a | a | a
499
+ |===
500
+ INPUT
501
+ expect { Asciidoctor.convert(input, *OPTIONS) }.not_to raise_error(SystemExit)
502
+ rescue SystemExit
503
+ end
504
+ expect(File.read("test.err"))
505
+ .not_to include "Table exceeds maximum number of columns defined"
506
+ expect(File.read("test.err"))
507
+ .not_to include "Table rows in table are inconsistent: check rowspan"
508
+ end
509
+
510
+ xit "warns and aborts if columns out of bounds against colgroup" do
511
+ FileUtils.rm_f "test.xml"
512
+ FileUtils.rm_f "test.err"
513
+ begin
514
+ input = <<~INPUT
515
+ = Document title
516
+ Author
517
+ :docfile: test.adoc
518
+ :nodoc:
519
+
520
+ [cols="1,1,1,1"]
521
+ |===
522
+ 5+| a
523
+
524
+ | a 4+| a
525
+ | a | a |a |a
526
+ |===
527
+ INPUT
528
+ expect { Asciidoctor.convert(input, *OPTIONS) }.to raise_error(SystemExit)
529
+ rescue SystemExit
530
+ end
531
+ expect(File.read("test.err"))
532
+ .to include "Table exceeds maximum number of columns defined (4)"
533
+ expect(File.read("test.err"))
534
+ .not_to include "Table rows in table are inconsistent: check rowspan"
535
+ end
536
+
537
+ xit "warns and aborts if columns out of bounds against cell count per row" do
538
+ FileUtils.rm_f "test.xml"
539
+ FileUtils.rm_f "test.err"
540
+ begin
541
+ input = <<~INPUT
542
+ = Document title
543
+ Author
544
+ :docfile: test.adoc
545
+ :nodoc:
546
+
547
+ |===
548
+ 2.3+| a | a
549
+
550
+ | a | a | a
551
+ | a | a | a
552
+ |===
553
+ INPUT
554
+ expect { Asciidoctor.convert(input, *OPTIONS) }.to raise_error(SystemExit)
555
+ rescue SystemExit
556
+ end
557
+ expect(File.read("test.err"))
558
+ .to include "Table exceeds maximum number of columns defined (3)"
559
+ expect(File.read("test.err"))
560
+ .not_to include "Table rows in table are inconsistent: check rowspan"
561
+ end
562
+
563
+ it "warns and aborts if rows out of bounds" do
564
+ FileUtils.rm_f "test.xml"
565
+ FileUtils.rm_f "test.err"
566
+ begin
567
+ input = <<~INPUT
568
+ = Document title
569
+ Author
570
+ :docfile: test.adoc
571
+ :nodoc:
572
+
573
+ |===
574
+ .4+| a | a | a | a
575
+
576
+ | a | a | a
577
+ | a | a | a
578
+ |===
579
+ INPUT
580
+ expect { Asciidoctor.convert(input, *OPTIONS) }.to raise_error(SystemExit)
581
+ rescue SystemExit
582
+ end
583
+ expect(File.read("test.err"))
584
+ .not_to include "Table exceeds maximum number of columns defined"
585
+ expect(File.read("test.err"))
586
+ .to include "Table rows in table are inconsistent: check rowspan"
587
+ end
588
+
481
589
  it "err file succesfully created for docfile path" do
482
590
  FileUtils.rm_rf "test"
483
591
  FileUtils.mkdir_p "test"