metanorma-standoc 2.0.3 → 2.0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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"