def test_find_toc_by_id(self): """ Test finding the relevant TOC item by the tag ID. """ index = search_index.SearchIndex() md = dedent(""" # Heading 1 ## Heading 2 ### Heading 3 """) toc = get_toc(get_markdown_toc(md)) toc_item = index._find_toc_by_id(toc, "heading-1") self.assertEqual(toc_item.url, "#heading-1") self.assertEqual(toc_item.title, "Heading 1") toc_item2 = index._find_toc_by_id(toc, "heading-2") self.assertEqual(toc_item2.url, "#heading-2") self.assertEqual(toc_item2.title, "Heading 2") toc_item3 = index._find_toc_by_id(toc, "heading-3") self.assertEqual(toc_item3.url, "#heading-3") self.assertEqual(toc_item3.title, "Heading 3")
def test_prebuild_index_python(self, mock_lunr): mock_lunr.return_value.serialize.return_value = {'mock': 'index'} index = search_index.SearchIndex(prebuild_index='python', lang='en') expected = { 'docs': [], 'config': { 'prebuild_index': 'python', 'lang': 'en' }, 'index': { 'mock': 'index' }, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_lunr.call_count, 1) self.assertEqual(result, expected)
def test_prebuild_index_false(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('', '') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=False) expected = { 'docs': [], 'config': { 'prebuild_index': False }, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 0) self.assertEqual(mock_popen_obj.communicate.call_count, 0) self.assertEqual(result, expected)
def test_prebuild_index_raises_ioerror(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.side_effect = OSError mock_popen_obj.returncode = 1 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': { 'prebuild_index': True }, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected)
def test_prebuild_index_node(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('{"mock": "index"}', None) mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index='node') expected = { 'docs': [], 'config': { 'prebuild_index': 'node' }, 'index': { 'mock': 'index' }, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected)
def test_create_search_index(self): html_content = """ <h1 id="heading-1">Heading 1</h1> <p>Content 1</p> <h2 id="heading-2">Heading 2</h1> <p>Content 2</p> <h3 id="heading-3">Heading 3</h1> <p>Content 3</p> """ cfg = load_config() pages = [ Page( 'Home', File( 'index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'], ), cfg, ), Page( 'About', File( 'about.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'], ), cfg, ), ] md = dedent(""" # Heading 1 ## Heading 2 ### Heading 3 """) toc = get_toc(get_markdown_toc(md)) full_content = ''.join("""Heading{0}Content{0}""".format(i) for i in range(1, 4)) for page in pages: # Fake page.read_source() and page.render() page.source = md page.toc = toc page.content = html_content index = search_index.SearchIndex() index.add_entry_from_context(page) self.assertEqual(len(index._entries), 4) loc = page.url self.assertEqual(index._entries[0]['title'], page.title) self.assertEqual( strip_whitespace(index._entries[0]['text'], ), full_content, ) self.assertEqual(index._entries[0]['location'], loc) self.assertEqual(index._entries[1]['title'], "Heading 1") self.assertEqual(index._entries[1]['text'], "Content 1") self.assertEqual( index._entries[1]['location'], "{}#heading-1".format(loc), ) self.assertEqual(index._entries[2]['title'], "Heading 2") self.assertEqual( strip_whitespace(index._entries[2]['text'], ), "Content2", ) self.assertEqual( index._entries[2]['location'], "{}#heading-2".format(loc), ) self.assertEqual(index._entries[3]['title'], "Heading 3") self.assertEqual( strip_whitespace(index._entries[3]['text'], ), "Content3", ) self.assertEqual( index._entries[3]['location'], "{}#heading-3".format(loc), )