jenkins-bot has submitted this change and it was merged.

Change subject: tests: Add pywikibot.diff.html_comparator() tests
......................................................................


tests: Add pywikibot.diff.html_comparator() tests

Add tests which ensure that html_comparator() is working as expected.

Bug: T134341
Change-Id: I165d79e8d0f4c817580baf6e4fdc07ba34c171b7
---
M tests/__init__.py
A tests/data/html/diff.html
A tests/diff_tests.py
3 files changed, 133 insertions(+), 0 deletions(-)

Approvals:
  John Vandenberg: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/tests/__init__.py b/tests/__init__.py
index e61f37c..8c7e393 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -66,6 +66,7 @@
 
 join_images_path = create_path_func(join_data_path, 'images')
 join_xml_data_path = create_path_func(join_data_path, 'xml')
+join_html_data_path = create_path_func(join_data_path, 'html')
 
 # Find the root directory of the checkout
 _pwb_py = join_root_path('pwb.py')
@@ -86,6 +87,7 @@
     'tools_ip',
     'xmlreader',
     'textlib',
+    'diff',
     'http',
     'namespace',
     'dry_api',
diff --git a/tests/data/html/diff.html b/tests/data/html/diff.html
new file mode 100644
index 0000000..7b0c36a
--- /dev/null
+++ b/tests/data/html/diff.html
@@ -0,0 +1,16 @@
+<!-- Example at https://www.mediawiki.org/wiki/API:Compare -->
+<tr>
+  <td colspan="2" class="diff-lineno">Line 1:</td>
+  <td colspan="2" class="diff-lineno">Line 1:</td>
+</tr>
+<tr>
+  <td class="diff-marker">\u2212</td>
+  <td class="diff-deletedline"><div><del class="diffchange 
diffchange-inline">&lt;small&gt;&lt;span 
class="autosigned"&gt;\u2014&amp;nbsp;Preceding</del> [[<del class="diffchange 
diffchange-inline">Wikipedia</del>:<del class="diffchange 
diffchange-inline">Signatures|unsigned]]</del> <del class="diffchange 
diffchange-inline">comment added by [[User:{{{1}}}|{{{1}}}</del>]]<del 
class="diffchange diffchange-inline"> ([[User talk:{{{1}}}|talk]] \u2022 
[[Special:Contributions/{{{1}}}|contribs]]) 
{{{2|}}}&lt;/span&gt;&lt;/small&gt;&lt;!-- Template:Unsigned 
--&gt;&lt;noinclude&gt;</del></div></td>
+  <td class="diff-marker">+</td>
+  <td class="diff-addedline"><div><ins class="diffchange 
diffchange-inline">#REDIRECT</ins> [[<ins class="diffchange 
diffchange-inline">Template</ins>:<ins class="diffchange 
diffchange-inline">Unsigned</ins> <ins class="diffchange 
diffchange-inline">IP</ins>]]</div></td>
+</tr>
+<tr>
+  <td class="diff-marker">\u2212</td>
+  <td class="diff-deletedline"><div>{{documentation}} &lt;!-- add categories 
to the /doc page, not here --&gt;&lt;/noinclude&gt;</div></td>
+  <td colspan="2" class="diff-empty">&#160;</td>
+</tr>
diff --git a/tests/diff_tests.py b/tests/diff_tests.py
new file mode 100644
index 0000000..402ad74
--- /dev/null
+++ b/tests/diff_tests.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# -*- coding: utf-8  -*-
+"""Test diff module."""
+#
+# (C) Pywikibot team, 2016
+#
+# Distributed under the terms of the MIT license.
+from __future__ import absolute_import, unicode_literals
+
+__version__ = '$Id$'
+
+import sys
+
+from pywikibot.diff import html_comparator
+from pywikibot.tools import PY2
+
+from tests import join_html_data_path
+from tests.aspects import TestCase, require_modules, unittest
+
+if sys.version_info[0] > 2:
+    from unittest.mock import patch
+else:
+    from mock import patch
+
+
+@require_modules('bs4')
+class TestDryHTMLComparator(TestCase):
+
+    """Test html_comparator method with given strings as test cases."""
+
+    net = False
+
+    def test_added_context(self):
+        """Test html_comparator's detection of added-context."""
+        output = html_comparator('''
+<tr>
+  <td class="diff-addedline">line 1a</td>
+  <td class="diff-addedline">line \n2a</td>
+</tr>
+<tr>
+  <td class="diff-addedline"><span>line 1b</span></td>
+  <td class="diff-addedline">line 2b<i><span></i></span></td>
+</tr>''')
+        self.assertEqual(output['added-context'],
+                         ['line 1a', 'line \n2a', 'line 1b', 'line 2b'])
+
+    def test_deleted_context(self):
+        """Test html_comparator's detection of deleted-context."""
+        output = html_comparator('''
+<tr>
+  <td class="diff-deletedline">line 1a</td>
+  <td class="diff-deletedline">line \n2a</td>
+</tr>
+<tr>
+  <td class="diff-deletedline"><span>line 1b</span></td>
+  <td class="diff-deletedline">line 2b<i><span></i></span></td>
+</tr>''')
+        self.assertEqual(output['deleted-context'],
+                         ['line 1a', 'line \n2a', 'line 1b', 'line 2b'])
+
+    def test_run(self):
+        """Test html_comparator using examples given in mw-api docs."""
+        with open(join_html_data_path('diff.html')) as filed:
+            diff_html = filed.read()
+        output = html_comparator(diff_html)
+        self.assertEqual(
+            output,
+            {'added-context': ['#REDIRECT [[Template:Unsigned IP]]'],
+             'deleted-context': [
+                '<small><span class="autosigned">\\u2014&nbsp;Preceding '
+                '[[Wikipedia:Signatures|unsigned]] comment added by '
+                '[[User:{{{1}}}|{{{1}}}]] ([[User talk:{{{1}}}|talk]] \\u2022 '
+                '[[Special:Contributions/{{{1}}}|contribs]]) {{{2|}}}</span>'
+                '</small><!-- Template:Unsigned --><noinclude>',
+                '{{documentation}} <!-- add categories to the /doc page, '
+                'not here --></noinclude>']})
+
+
+@require_modules('bs4')
+class TestHTMLComparator(TestCase):
+
+    """Test html_comparator using api.php in en:wiki."""
+
+    family = 'wikipedia'
+    code = 'en'
+
+    def test_wikipedia_rev_139992(self):
+        """Test html_comparator with revision 139992 in en:wikipedia."""
+        site = self.get_site()
+        diff_html = site.compare(139992, 139993)
+        output = html_comparator(diff_html)
+        self.assertEqual(len(output['added-context']), 1)
+        self.assertEqual(len(output['deleted-context']), 1)
+
+
+@patch('{0}.__import__'.format('__builtin__' if PY2 else 'builtins'),
+       side_effect=ImportError)
+class TestNoBeautifulSoup(TestCase):
+
+    """Test functions when BeautifulSoup is not installes."""
+
+    net = False
+
+    def test_html_comparator(self, mocked_import):
+        """Test html_comparator when bs4 not installed."""
+        self.assertRaises(ImportError, html_comparator, '')
+        mocked_import.assert_called_once()
+        self.assertIn('bs4', mocked_import.call_args[0])
+
+
+if __name__ == '__main__':
+    try:
+        unittest.main()
+    except SystemExit:
+        pass

-- 
To view, visit https://gerrit.wikimedia.org/r/286791
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I165d79e8d0f4c817580baf6e4fdc07ba34c171b7
Gerrit-PatchSet: 5
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: AbdealiJK <abdealikoth...@gmail.com>
Gerrit-Reviewer: AbdealiJK <abdealikoth...@gmail.com>
Gerrit-Reviewer: John Vandenberg <jay...@gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.w...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to