[MediaWiki-commits] [Gerrit] pywikibot/core[master]: Change to use assertRaisesRegex in link_tests.py

2017-12-01 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/394520 )

Change subject: Change to use assertRaisesRegex in link_tests.py
..


Change to use assertRaisesRegex in link_tests.py

assertRaises is not as good of a test as asserRaisesRegex. The latter
has an extra parameter to match the exception message, allowing more
more precision when checking an error.

Also bump the Pywikibot license to 2014-2017 in `link_tests.py`.

Bug: T154281
Change-Id: Ie2dd6a0e5828be51fd500a2f0a14f552a9ed917e
---
M tests/link_tests.py
1 file changed, 99 insertions(+), 30 deletions(-)

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



diff --git a/tests/link_tests.py b/tests/link_tests.py
index 8bacdc1..9fba7c1 100644
--- a/tests/link_tests.py
+++ b/tests/link_tests.py
@@ -1,11 +1,13 @@
 # -*- coding: utf-8 -*-
 """Test Link functionality."""
 #
-# (C) Pywikibot team, 2014-2015
+# (C) Pywikibot team, 2014-2017
 #
 # Distributed under the terms of the MIT license.
 #
 from __future__ import absolute_import, unicode_literals
+
+import re
 
 import pywikibot
 
@@ -103,43 +105,104 @@
 
 def test_invalid(self):
 """Test that invalid titles raise InvalidTitle exception."""
-self.assertRaises(InvalidTitle, Link('', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link(':', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('__  __', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('  __  ', self.get_site()).parse)
+exception_message_regex = (
+r'^The link does not contain a page title$'
+)
+
+texts_to_test = ['', ':', '__  __', '  __  ']
+
+for text in texts_to_test:
+with self.assertRaisesRegex(
+InvalidTitle,
+exception_message_regex):
+Link(text, self.get_site()).parse()
+
 # Bad characters forbidden regardless of wgLegalTitleChars
-self.assertRaises(InvalidTitle, Link('A [ B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A ] B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A { B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A } B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A < B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A > B', self.get_site()).parse)
+def generate_contains_illegal_chars_exc_regex(text):
+exc_regex = (
+r'^(u|)\'%s\' contains illegal char\(s\) (u|)\'%s\'$' % (
+re.escape(text), re.escape(text[2])
+))
+return exc_regex
+
+texts_to_test = ['A [ B', 'A ] B', 'A { B', 'A } B', 'A < B', 'A > B']
+
+for text in texts_to_test:
+with self.assertRaisesRegex(
+InvalidTitle,
+generate_contains_illegal_chars_exc_regex(text)):
+Link(text, self.get_site()).parse()
+
 # URL encoding
 # %XX is understood by wikimedia but not %
-self.assertRaises(InvalidTitle, Link('A%2523B', self.get_site()).parse)
+with self.assertRaisesRegex(
+InvalidTitle,
+r'^(u|)\'A%23B\' contains illegal char\(s\) (u|)\'%23\'$'):
+Link('A%2523B', self.get_site()).parse()
+
 # A link is invalid if their (non-)talk page would be in another
 # namespace than the link's "other" namespace
-self.assertRaises(InvalidTitle, Link('Talk:File:Example.svg', 
self.get_site()).parse)
+with self.assertRaisesRegex(
+InvalidTitle,
+(r'The \(non-\)talk page of (u|)\'Talk:File:Example.svg\''
+ r' is a valid title in another namespace.')):
+Link('Talk:File:Example.svg', self.get_site()).parse()
+
 # Directory navigation
-self.assertRaises(InvalidTitle, Link('.', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('..', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('./Sandbox', 
self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('../Sandbox', 
self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('Foo/./Sandbox', 
self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('Foo/../Sandbox', 
self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('Sandbox/.', 
self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('Sandbox/..', 
self.get_site()).parse)
+def generate_contains_dot_combinations_exc_regex(text):
+exc_regex = (
+r'^\(contains \. / combinations\): (u|)\'%s\'$' % re.escape(
+text)
+)
+return exc_regex
+
+texts_to_test = ['.', '..', './Sandbox', 

[MediaWiki-commits] [Gerrit] pywikibot/core[master]: Change to use assertRaisesRegex in link_tests.py

2017-11-30 Thread Rafidaslam (Code Review)
Rafidaslam has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/394520 )

Change subject: Change to use assertRaisesRegex in link_tests.py
..

Change to use assertRaisesRegex in link_tests.py

assertRaises is not as good of a test as asserRaisesRegex. The latter
has an extra parameter to match the exception message, allowing more
more precision when checking an error.

Bug: T154281
Change-Id: Ie2dd6a0e5828be51fd500a2f0a14f552a9ed917e
---
M tests/link_tests.py
1 file changed, 149 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/20/394520/1

diff --git a/tests/link_tests.py b/tests/link_tests.py
index 8bacdc1..0cee603 100644
--- a/tests/link_tests.py
+++ b/tests/link_tests.py
@@ -7,6 +7,8 @@
 #
 from __future__ import absolute_import, unicode_literals
 
+import re
+
 import pywikibot
 
 from pywikibot import config2 as config
@@ -103,43 +105,155 @@
 
 def test_invalid(self):
 """Test that invalid titles raise InvalidTitle exception."""
-self.assertRaises(InvalidTitle, Link('', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link(':', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('__  __', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('  __  ', self.get_site()).parse)
+exception_message_regex = re.escape(
+'The link does not contain a page title')
+
+with self.assertRaisesRegex(
+InvalidTitle,
+exception_message_regex):
+Link('', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+exception_message_regex):
+Link(':', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+exception_message_regex):
+Link('__  __', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+exception_message_regex):
+Link('  __  ', self.get_site()).parse()
 # Bad characters forbidden regardless of wgLegalTitleChars
-self.assertRaises(InvalidTitle, Link('A [ B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A ] B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A { B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A } B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A < B', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('A > B', self.get_site()).parse)
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \[ B\' contains illegal char\(s\) (u|)\'\[\''):
+Link('A [ B', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \] B\' contains illegal char\(s\) (u|)\'\]\''):
+Link('A ] B', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \{ B\' contains illegal char\(s\) (u|)\'\{\''):
+Link('A { B', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \} B\' contains illegal char\(s\) (u|)\'\}\''):
+Link('A } B', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \< B\' contains illegal char\(s\) (u|)\'\<\''):
+Link('A < B', self.get_site()).parse()
+
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A \> B\' contains illegal char\(s\) (u|)\'\>\''):
+Link('A > B', self.get_site()).parse()
+
 # URL encoding
 # %XX is understood by wikimedia but not %
-self.assertRaises(InvalidTitle, Link('A%2523B', self.get_site()).parse)
+with self.assertRaisesRegex(
+InvalidTitle,
+r'(u|)\'A%23B\' contains illegal char\(s\) (u|)\'%23\''):
+Link('A%2523B', self.get_site()).parse()
 # A link is invalid if their (non-)talk page would be in another
 # namespace than the link's "other" namespace
-self.assertRaises(InvalidTitle, Link('Talk:File:Example.svg', 
self.get_site()).parse)
+with self.assertRaisesRegex(
+InvalidTitle,
+(r'The \(non-\)talk page of (u|)\'Talk:File:Example.svg\''
+ r' is a valid title in another namespace.')):
+Link('Talk:File:Example.svg', self.get_site()).parse()
 # Directory navigation
-self.assertRaises(InvalidTitle, Link('.', self.get_site()).parse)
-self.assertRaises(InvalidTitle, Link('..', self.get_site()).parse)
-self.assertRaises(InvalidTitle,