예제 #1
0
    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")
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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),
            )