155 lines · python
1#!/usr/bin/env python2# ===- test.py - ---------------------------------------------*- python -*--===#3#4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5# See https://llvm.org/LICENSE.txt for license information.6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7#8# ===------------------------------------------------------------------------===#9 10from cppreference_parser import _ParseSymbolPage, _ParseIndexPage11 12import unittest13 14 15class TestStdGen(unittest.TestCase):16 def testParseIndexPage(self):17 html = """18 <a href="abs.html" title="abs"><tt>abs()</tt></a> (int) <br>19 <a href="complex/abs.html" title="abs"><tt>abs<>()</tt></a> (std::complex) <br>20 <a href="acos.html" title="acos"><tt>acos()</tt></a> <br>21 <a href="acosh.html" title="acosh"><tt>acosh()</tt></a> <span class="t-mark-rev">(since C++11)</span> <br>22 <a href="as_bytes.html" title="as bytes"><tt>as_bytes<>()</tt></a> <span class="t-mark-rev t-since-cxx20">(since C++20)</span> <br>23 """24 25 actual = _ParseIndexPage(html)26 expected = [27 ("abs", "abs.html", "int"),28 ("abs", "complex/abs.html", "std::complex"),29 ("acos", "acos.html", None),30 ("acosh", "acosh.html", None),31 ("as_bytes", "as_bytes.html", None),32 ]33 self.assertEqual(len(actual), len(expected))34 for i in range(0, len(actual)):35 self.assertEqual(expected[i][0], actual[i][0])36 self.assertTrue(actual[i][1].endswith(expected[i][1]))37 self.assertEqual(expected[i][2], actual[i][2])38 39 def testParseSymbolPage_SingleHeader(self):40 # Defined in header <cmath>41 html = """42 <table class="t-dcl-begin"><tbody>43 <tr class="t-dsc-header">44 <td> <div>Defined in header <code><a href="cmath.html" title="cmath"><cmath></a></code>45 </div></td>46 <td></td>47 <td></td>48 </tr>49 <tr class="t-dcl">50 <td>void foo()</td>51 <td>this is matched</td>52 </tr>53</tbody></table>54"""55 self.assertEqual(_ParseSymbolPage(html, "foo", "foo"), set(["<cmath>"]))56 57 def testParseSymbolPage_MulHeaders(self):58 # Defined in header <cstddef>59 # Defined in header <cstdio>60 # Defined in header <cstdlib>61 html = """62<table class="t-dcl-begin"><tbody>63 <tr class="t-dsc-header">64 <td> <div>Defined in header <code><a href="cstddef.html" title="cstddef"><cstddef></a></code>65 </div></td>66 <td></td>67 <td></td>68 </tr>69 <tr class="t-dcl">70 <td>void bar()</td>71 <td>this mentions foo, but isn't matched</td>72 </tr>73 <tr class="t-dsc-header">74 <td> <div>Defined in header <code><a href="cstdio.html" title="cstdio"><cstdio></a></code>75 </div></td>76 <td></td>77 <td></td>78 </tr>79 <tr class="t-dsc-header">80 <td> <div>Defined in header <code><a href=".cstdlib.html" title="ccstdlib"><cstdlib></a></code>81 </div></td>82 <td></td>83 <td></td>84 </tr>85 <tr class="t-dcl">86 <td>87 <span>void</span>88 foo89 <span>()</span>90 </td>91 <td>this is matched</td>92 </tr>93</tbody></table>94"""95 self.assertEqual(96 _ParseSymbolPage(html, "foo", "foo"), set(["<cstdio>", "<cstdlib>"])97 )98 99 def testParseSymbolPage_MulHeadersInSameDiv(self):100 # Multile <code> blocks in a Div.101 # Defined in header <algorithm>102 # Defined in header <utility>103 html = """104<table class="t-dcl-begin"><tbody>105<tr class="t-dsc-header">106<td><div>107 Defined in header <code><a href="../header/algorithm.html" title="cpp/header/algorithm"><algorithm></a></code><br>108 Defined in header <code><a href="../header/utility.html" title="cpp/header/utility"><utility></a></code>109</div></td>110<td></td>111</tr>112<tr class="t-dcl">113 <td>114 <span>void</span>115 foo116 <span>()</span>117 </td>118 <td>this is matched</td>119</tr>120</tbody></table>121"""122 self.assertEqual(123 _ParseSymbolPage(html, "foo", "foo"), set(["<algorithm>", "<utility>"])124 )125 126 def testParseSymbolPage_MulSymbolsInSameTd(self):127 # defined in header <cstdint>128 # int8_t129 # int16_t130 html = """131<table class="t-dcl-begin"><tbody>132<tr class="t-dsc-header">133<td><div>134 Defined in header <code><a href="cstdint.html" title="cstdint"><cstdint></a></code><br>135</div></td>136<td></td>137</tr>138<tr class="t-dcl">139 <td>140 <span>int8_t</span>141 <span>int16_t</span>142 </td>143 <td>this is matched</td>144</tr>145</tbody></table>146"""147 self.assertEqual(_ParseSymbolPage(html, "int8_t", "int8_t"), set(["<cstdint>"]))148 self.assertEqual(149 _ParseSymbolPage(html, "int16_t", "int16_t"), set(["<cstdint>"])150 )151 152 153if __name__ == "__main__":154 unittest.main()155