test_docs.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. import os
  3. import subprocess
  4. import sys
  5. import unittest
  6. CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
  7. ESP32_DOC = 'esp32_page'
  8. ESP32_S2_DOC = 'esp32s2_page'
  9. BT_DOC = 'bt_page'
  10. LINK_ROLES_DOC = 'link_roles'
  11. IDF_FORMAT_DOC = 'idf_target_format'
  12. class DocBuilder():
  13. build_docs_py_path = os.path.join(CURRENT_DIR, '..', 'build_docs.py')
  14. def __init__(self, src_dir, build_dir, target, language):
  15. self.language = language
  16. self.target = target
  17. self.src_dir = src_dir
  18. self.build_dir = build_dir
  19. self.html_out_dir = os.path.join(CURRENT_DIR, build_dir, language, target, 'html')
  20. def build(self, opt_args=[]):
  21. args = [sys.executable, self.build_docs_py_path, '-b', self.build_dir, '-s', self.src_dir, '-t', self.target, '-l', self.language]
  22. args.extend(opt_args)
  23. return subprocess.call(args)
  24. class TestDocs(unittest.TestCase):
  25. @classmethod
  26. def setUpClass(cls):
  27. cls.builder = DocBuilder('test', '_build/test_docs', 'esp32s2', 'en')
  28. cls.build_ret_flag = cls.builder.build()
  29. def setUp(self):
  30. if self.build_ret_flag:
  31. self.fail('Build docs failed with return: {}'.format(self.build_ret_flag))
  32. def assert_str_not_in_doc(self, doc_name, str_to_find):
  33. with open(os.path.join(self.builder.html_out_dir, doc_name)) as f:
  34. content = f.read()
  35. self.assertFalse(str_to_find in content, 'Found {} in {}'.format(str_to_find, doc_name))
  36. def assert_str_in_doc(self, doc_name, str_to_find):
  37. with open(os.path.join(self.builder.html_out_dir, doc_name)) as f:
  38. content = f.read()
  39. self.assertTrue(str_to_find in content, 'Did not find {} in {}'.format(str_to_find, doc_name))
  40. def test_only_dir(self):
  41. # Test that ESP32 content was excluded
  42. self.assert_str_not_in_doc(ESP32_S2_DOC + '.html', '!ESP32_CONTENT!')
  43. # Test that ESP32 S2 content was included
  44. self.assert_str_in_doc(ESP32_S2_DOC + '.html', '!ESP32_S2_CONTENT!')
  45. # Test that BT content was excluded
  46. self.assert_str_not_in_doc(ESP32_S2_DOC + '.html', '!BT_CONTENT!')
  47. def test_toctree_filter(self):
  48. # ESP32 page should NOT be built
  49. esp32_doc = os.path.join(self.builder.html_out_dir, ESP32_DOC + '.html')
  50. self.assertFalse(os.path.isfile(esp32_doc), 'Found {}'.format(esp32_doc))
  51. self.assert_str_not_in_doc('index.html', '!ESP32_CONTENT!')
  52. esp32s2_doc = os.path.join(self.builder.html_out_dir, ESP32_S2_DOC + '.html')
  53. self.assertTrue(os.path.isfile(esp32s2_doc), '{} not found'.format(esp32s2_doc))
  54. # Spot check a few other tags
  55. # No Bluetooth on ESP32 S2
  56. bt_doc = os.path.join(self.builder.html_out_dir, BT_DOC + '.html')
  57. self.assertFalse(os.path.isfile(bt_doc), 'Found {}'.format(bt_doc))
  58. self.assert_str_not_in_doc('index.html', '!BT_CONTENT!')
  59. def test_link_roles(self):
  60. print('test')
  61. class TestBuildSubset(unittest.TestCase):
  62. def test_build_subset(self):
  63. builder = DocBuilder('test', '_build/test_build_subset', 'esp32', 'en')
  64. docs_to_build = 'esp32_page.rst'
  65. self.assertFalse(builder.build(['-i', docs_to_build]))
  66. # Check that we only built the input docs
  67. bt_doc = os.path.join(builder.html_out_dir, BT_DOC + '.html')
  68. esp32_doc = os.path.join(builder.html_out_dir, ESP32_DOC + '.html')
  69. self.assertFalse(os.path.isfile(bt_doc), 'Found {}'.format(bt_doc))
  70. self.assertTrue(os.path.isfile(esp32_doc), 'Found {}'.format(esp32_doc))
  71. if __name__ == '__main__':
  72. unittest.main()