summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/pydoc_mod.py10
-rw-r--r--Lib/test/test_grammar.py6
-rw-r--r--Lib/test/test_pydoc.py52
-rw-r--r--Lib/test/test_urllib.py32
4 files changed, 99 insertions, 1 deletions
diff --git a/Lib/test/pydoc_mod.py b/Lib/test/pydoc_mod.py
index f86b5c6..cda1c9e 100644
--- a/Lib/test/pydoc_mod.py
+++ b/Lib/test/pydoc_mod.py
@@ -15,6 +15,16 @@ class B(object):
NO_MEANING = "eggs"
pass
+class C(object):
+ def say_no(self):
+ return "no"
+ def get_answer(self):
+ """ Return say_no() """
+ return self.say_no()
+ def is_it_true(self):
+ """ Return self.get_answer() """
+ return self.get_answer()
+
def doc_func():
"""
This function solves all of the world's problems:
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index bba8820..f012de1 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -80,6 +80,12 @@ class TokenTests(unittest.TestCase):
x = .3e14
x = 3.1e4
+ def test_float_exponent_tokenization(self):
+ # See issue 21642.
+ self.assertEqual(1 if 1else 0, 1)
+ self.assertEqual(1 if 0else 0, 0)
+ self.assertRaises(SyntaxError, eval, "0 if 1Else 0")
+
def test_string_literals(self):
x = ''; y = ""; self.assertTrue(len(x) == 0 and x == y)
x = '\''; y = "'"; self.assertTrue(len(x) == 1 and x == y and ord(x) == 39)
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index f26fb15..542b433 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -47,6 +47,7 @@ CLASSES
builtins.object
A
B
+ C
\x20\x20\x20\x20
class A(builtins.object)
| Hello and goodbye
@@ -74,6 +75,26 @@ CLASSES
| Data and other attributes defined here:
|\x20\x20
| NO_MEANING = 'eggs'
+\x20\x20\x20\x20
+ class C(builtins.object)
+ | Methods defined here:
+ |\x20\x20
+ | get_answer(self)
+ | Return say_no()
+ |\x20\x20
+ | is_it_true(self)
+ | Return self.get_answer()
+ |\x20\x20
+ | say_no(self)
+ |\x20\x20
+ | ----------------------------------------------------------------------
+ | Data descriptors defined here:
+ |\x20\x20
+ | __dict__
+ | dictionary for instance variables (if defined)
+ |\x20\x20
+ | __weakref__
+ | list of weak references to the object (if defined)
FUNCTIONS
doc_func()
@@ -124,6 +145,7 @@ expected_html_pattern = """
<dl>
<dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#A">A</a>
</font></dt><dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#B">B</a>
+</font></dt><dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#C">C</a>
</font></dt></dl>
</dd>
</dl>
@@ -165,6 +187,28 @@ Data descriptors defined here:<br>
Data and other attributes defined here:<br>
<dl><dt><strong>NO_MEANING</strong> = 'eggs'</dl>
+</td></tr></table> <p>
+<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
+<tr bgcolor="#ffc8d8">
+<td colspan=3 valign=bottom>&nbsp;<br>
+<font color="#000000" face="helvetica, arial"><a name="C">class <strong>C</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
+\x20\x20\x20\x20
+<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
+<td width="100%%">Methods defined here:<br>
+<dl><dt><a name="C-get_answer"><strong>get_answer</strong></a>(self)</dt><dd><tt>Return&nbsp;<a href="#C-say_no">say_no</a>()</tt></dd></dl>
+
+<dl><dt><a name="C-is_it_true"><strong>is_it_true</strong></a>(self)</dt><dd><tt>Return&nbsp;self.<a href="#C-get_answer">get_answer</a>()</tt></dd></dl>
+
+<dl><dt><a name="C-say_no"><strong>say_no</strong></a>(self)</dt></dl>
+
+<hr>
+Data descriptors defined here:<br>
+<dl><dt><strong>__dict__</strong></dt>
+<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
+<dl><dt><strong>__weakref__</strong></dt>
+<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
</td></tr></table></td></tr></table><p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
@@ -402,6 +446,14 @@ class PydocDocTest(unittest.TestCase):
result, doc_loc = get_pydoc_text(xml.etree)
self.assertEqual(doc_loc, "", "MODULE DOCS incorrectly includes a link")
+ def test_getpager_with_stdin_none(self):
+ previous_stdin = sys.stdin
+ try:
+ sys.stdin = None
+ pydoc.getpager() # Shouldn't fail.
+ finally:
+ sys.stdin = previous_stdin
+
def test_non_str_name(self):
# issue14638
# Treat illegal (non-str) name like no name
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 1a40566..1a5013e 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -7,6 +7,7 @@ import http.client
import email.message
import io
import unittest
+from unittest.mock import patch
from test import support
import os
import sys
@@ -89,6 +90,26 @@ class FakeHTTPMixin(object):
http.client.HTTPConnection = self._connection_class
+class FakeFTPMixin(object):
+ def fakeftp(self):
+ class FakeFtpWrapper(object):
+ def __init__(self, user, passwd, host, port, dirs, timeout=None,
+ persistent=True):
+ pass
+
+ def retrfile(self, file, type):
+ return io.BytesIO(), 0
+
+ def close(self):
+ pass
+
+ self._ftpwrapper_class = urllib.request.ftpwrapper
+ urllib.request.ftpwrapper = FakeFtpWrapper
+
+ def unfakeftp(self):
+ urllib.request.ftpwrapper = self._ftpwrapper_class
+
+
class urlopen_FileTests(unittest.TestCase):
"""Test urlopen() opening a temporary file.
@@ -195,7 +216,7 @@ class ProxyTests(unittest.TestCase):
self.env.set('NO_PROXY', 'localhost, anotherdomain.com, newdomain.com')
self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com'))
-class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin):
+class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin, FakeFTPMixin):
"""Test urlopen() opening a fake http connection."""
def check_read(self, ver):
@@ -309,6 +330,15 @@ Content-Type: text/html; charset=iso-8859-1
self.assertFalse(e.exception.filename)
self.assertTrue(e.exception.reason)
+ @patch.object(urllib.request, 'MAXFTPCACHE', 0)
+ def test_ftp_cache_pruning(self):
+ self.fakeftp()
+ try:
+ urllib.request.ftpcache['test'] = urllib.request.ftpwrapper('user', 'pass', 'localhost', 21, [])
+ urlopen('ftp://localhost')
+ finally:
+ self.unfakeftp()
+
def test_userpass_inurl(self):
self.fakehttp(b"HTTP/1.0 200 OK\r\n\r\nHello!")