Make the regex align to the spec better; add unit tests for name variations

This commit is contained in:
Andrew Baxter 2019-05-27 23:30:23 +09:00
parent 144afcee79
commit 72b7d3e90a
2 changed files with 24 additions and 2 deletions

View File

@ -9,7 +9,7 @@ from scrapy.utils.python import to_unicode, to_native_str
from scrapy.utils.misc import load_object
private_name_regex = re.compile('^__[^_](.*[^_])?_?$')
private_name_regex = re.compile('^__.*[^_]_?$')
def request_to_dict(request, spider=None):

View File

@ -3,7 +3,7 @@ import unittest
from scrapy.http import Request, FormRequest
from scrapy.spiders import Spider
from scrapy.utils.reqser import request_to_dict, request_from_dict
from scrapy.utils.reqser import request_to_dict, request_from_dict, private_name_regex
class RequestSerializationTest(unittest.TestCase):
@ -74,6 +74,28 @@ class RequestSerializationTest(unittest.TestCase):
errback=self.spider.handle_error)
self._assert_serializes_ok(r, spider=self.spider)
def test_private_callback_name_matching(self):
self.assertTrue(private_name_regex.search('__a'))
self.assertTrue(private_name_regex.search('__a_'))
self.assertTrue(private_name_regex.search('__a_a'))
self.assertTrue(private_name_regex.search('__a_a_'))
self.assertTrue(private_name_regex.search('__a__a'))
self.assertTrue(private_name_regex.search('__a__a_'))
self.assertTrue(private_name_regex.search('__a___a'))
self.assertTrue(private_name_regex.search('__a___a_'))
self.assertTrue(private_name_regex.search('___a'))
self.assertTrue(private_name_regex.search('___a_'))
self.assertTrue(private_name_regex.search('___a_a'))
self.assertTrue(private_name_regex.search('___a_a_'))
self.assertTrue(private_name_regex.search('____a_a_'))
self.assertFalse(private_name_regex.search('_a'))
self.assertFalse(private_name_regex.search('_a_'))
self.assertFalse(private_name_regex.search('__a__'))
self.assertFalse(private_name_regex.search('__'))
self.assertFalse(private_name_regex.search('___'))
self.assertFalse(private_name_regex.search('____'))
def test_unserializable_callback1(self):
r = Request("http://www.example.com", callback=lambda x: x)
self.assertRaises(ValueError, request_to_dict, r)