code: def test_print_html(self):
      table = Table(self.rows, self.column_names, self.column_types)
      table_html = StringIO()
      table.print_html(output=table_html)
      table_html = table_html.getvalue()
  
      parser = TableHTMLParser()
      parser.feed(table_html)
  
      self.assertIs(parser.has_table, True)
      self.assertIs(parser.has_tbody, True)
      self.assertIs(parser.has_thead, True)
      self.assertEqual(len(parser.header_rows), 1)
      self.assertEqual(len(parser.body_rows), len(table.rows))
  
      header_cols = parser.header_rows[0]
  
      self.assertEqual(len(header_cols), len(table.column_names))
  
      for i, column_name in enumerate(table.column_names):
          self.assertEqual(header_cols[i], column_name)
  
      for row_num, row in enumerate(table.rows):
          html_row = parser.body_rows[row_num]
  
          self.assertEqual(len(html_row), len(row))
  
file_path: agate/tests/test_table/test_print_html.py
imports: import warnings
  from html.parser import HTMLParser
  from io import StringIO
  from agate import Table
  from agate.data_types import Number, Text
  from agate.testcase import AgateTestCase
label_desc: Use image node_id 2 for calling the TestPrintHTML obj's underlying member method code with example usage: obj.test_print_html() without return types