Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
1b50c4d6
Commit
1b50c4d6
authored
Jun 02, 2016
by
R David Murray
Browse files
Options
Browse Files
Download
Plain Diff
Merge: #27185: move test_pep292 into test_string.
parents
ca4589e9
a32c738a
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
241 additions
and
248 deletions
+241
-248
Lib/test/test_pep292.py
Lib/test/test_pep292.py
+0
-248
Lib/test/test_string.py
Lib/test/test_string.py
+240
-0
Misc/ACKS
Misc/ACKS
+1
-0
No files found.
Lib/test/test_pep292.py
deleted
100644 → 0
View file @
ca4589e9
# Copyright (C) 2004 Python Software Foundation
# Author: barry@python.org (Barry Warsaw)
# License: http://www.opensource.org/licenses/PythonSoftFoundation.php
import
unittest
from
string
import
Template
class
Bag
:
pass
class
Mapping
:
def
__getitem__
(
self
,
name
):
obj
=
self
for
part
in
name
.
split
(
'.'
):
try
:
obj
=
getattr
(
obj
,
part
)
except
AttributeError
:
raise
KeyError
(
name
)
return
obj
class
TestTemplate
(
unittest
.
TestCase
):
def
test_regular_templates
(
self
):
s
=
Template
(
'$who likes to eat a bag of $what worth $$100'
)
self
.
assertEqual
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of ham worth $100'
)
self
.
assertRaises
(
KeyError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
self
.
assertRaises
(
TypeError
,
Template
.
substitute
)
def
test_regular_templates_with_braces
(
self
):
s
=
Template
(
'$who likes ${what} for ${meal}'
)
d
=
dict
(
who
=
'tim'
,
what
=
'ham'
,
meal
=
'dinner'
)
self
.
assertEqual
(
s
.
substitute
(
d
),
'tim likes ham for dinner'
)
self
.
assertRaises
(
KeyError
,
s
.
substitute
,
dict
(
who
=
'tim'
,
what
=
'ham'
))
def
test_escapes
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'$who likes to eat a bag of $$what worth $$100'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of $what worth $100'
)
s
=
Template
(
'$who likes $$'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes $'
)
def
test_percents
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'%(foo)s $foo ${foo}'
)
d
=
dict
(
foo
=
'baz'
)
eq
(
s
.
substitute
(
d
),
'%(foo)s baz baz'
)
eq
(
s
.
safe_substitute
(
d
),
'%(foo)s baz baz'
)
def
test_stringification
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'tim has eaten $count bags of ham today'
)
d
=
dict
(
count
=
7
)
eq
(
s
.
substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
eq
(
s
.
safe_substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
s
=
Template
(
'tim has eaten ${count} bags of ham today'
)
eq
(
s
.
substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
def
test_tupleargs
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'$who ate ${meal}'
)
d
=
dict
(
who
=
(
'tim'
,
'fred'
),
meal
=
(
'ham'
,
'kung pao'
))
eq
(
s
.
substitute
(
d
),
"('tim', 'fred') ate ('ham', 'kung pao')"
)
eq
(
s
.
safe_substitute
(
d
),
"('tim', 'fred') ate ('ham', 'kung pao')"
)
def
test_SafeTemplate
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'$who likes ${what} for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
)),
'tim likes ${what} for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
what
=
'ham'
)),
'$who likes ham for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
what
=
'ham'
,
meal
=
'dinner'
)),
'$who likes ham for dinner'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes ham for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
,
meal
=
'dinner'
)),
'tim likes ham for dinner'
)
def
test_invalid_placeholders
(
self
):
raises
=
self
.
assertRaises
s
=
Template
(
'$who likes $'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
s
=
Template
(
'$who likes ${what)'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
s
=
Template
(
'$who likes $100'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
def
test_idpattern_override
(
self
):
class
PathPattern
(
Template
):
idpattern
=
r'[_a-z][._a-z0-9]*'
m
=
Mapping
()
m
.
bag
=
Bag
()
m
.
bag
.
foo
=
Bag
()
m
.
bag
.
foo
.
who
=
'tim'
m
.
bag
.
what
=
'ham'
s
=
PathPattern
(
'$bag.foo.who likes to eat a bag of $bag.what'
)
self
.
assertEqual
(
s
.
substitute
(
m
),
'tim likes to eat a bag of ham'
)
def
test_pattern_override
(
self
):
class
MyPattern
(
Template
):
pattern
=
r"""
(?P<escaped>@{2}) |
@(?P<named>[_a-z][._a-z0-9]*) |
@{(?P<braced>[_a-z][._a-z0-9]*)} |
(?P<invalid>@)
"""
m
=
Mapping
()
m
.
bag
=
Bag
()
m
.
bag
.
foo
=
Bag
()
m
.
bag
.
foo
.
who
=
'tim'
m
.
bag
.
what
=
'ham'
s
=
MyPattern
(
'@bag.foo.who likes to eat a bag of @bag.what'
)
self
.
assertEqual
(
s
.
substitute
(
m
),
'tim likes to eat a bag of ham'
)
class
BadPattern
(
Template
):
pattern
=
r"""
(?P<badname>.*) |
(?P<escaped>@{2}) |
@(?P<named>[_a-z][._a-z0-9]*) |
@{(?P<braced>[_a-z][._a-z0-9]*)} |
(?P<invalid>@) |
"""
s
=
BadPattern
(
'@bag.foo.who likes to eat a bag of @bag.what'
)
self
.
assertRaises
(
ValueError
,
s
.
substitute
,
{})
self
.
assertRaises
(
ValueError
,
s
.
safe_substitute
,
{})
def
test_braced_override
(
self
):
class
MyTemplate
(
Template
):
pattern
=
r"""
\
$(?:
(?P<escaped>$) |
(?P<named>[_a-z][_a-z0-9]*) |
@@(?P<braced>[_a-z][_a-z0-9]*)@@ |
(?P<invalid>) |
)
"""
tmpl
=
'PyCon in $@@location@@'
t
=
MyTemplate
(
tmpl
)
self
.
assertRaises
(
KeyError
,
t
.
substitute
,
{})
val
=
t
.
substitute
({
'location'
:
'Cleveland'
})
self
.
assertEqual
(
val
,
'PyCon in Cleveland'
)
def
test_braced_override_safe
(
self
):
class
MyTemplate
(
Template
):
pattern
=
r"""
\
$(?:
(?P<escaped>$) |
(?P<named>[_a-z][_a-z0-9]*) |
@@(?P<braced>[_a-z][_a-z0-9]*)@@ |
(?P<invalid>) |
)
"""
tmpl
=
'PyCon in $@@location@@'
t
=
MyTemplate
(
tmpl
)
self
.
assertEqual
(
t
.
safe_substitute
(),
tmpl
)
val
=
t
.
safe_substitute
({
'location'
:
'Cleveland'
})
self
.
assertEqual
(
val
,
'PyCon in Cleveland'
)
def
test_invalid_with_no_lines
(
self
):
# The error formatting for invalid templates
# has a special case for no data that the default
# pattern can't trigger (always has at least '$')
# So we craft a pattern that is always invalid
# with no leading data.
class
MyTemplate
(
Template
):
pattern
=
r"""
(?P<invalid>) |
unreachable(
(?P<named>) |
(?P<braced>) |
(?P<escaped>)
)
"""
s
=
MyTemplate
(
''
)
with
self
.
assertRaises
(
ValueError
)
as
err
:
s
.
substitute
({})
self
.
assertIn
(
'line 1, col 1'
,
str
(
err
.
exception
))
def
test_unicode_values
(
self
):
s
=
Template
(
'$who likes $what'
)
d
=
dict
(
who
=
't
\
xff
m'
,
what
=
'f
\
xfe
\
f
ed'
)
self
.
assertEqual
(
s
.
substitute
(
d
),
't
\
xff
m likes f
\
xfe
\
x0c
ed'
)
def
test_keyword_arguments
(
self
):
eq
=
self
.
assertEqual
s
=
Template
(
'$who likes $what'
)
eq
(
s
.
substitute
(
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
),
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
substitute
(
dict
(
who
=
'fred'
,
what
=
'kung pao'
),
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
s
=
Template
(
'the mapping is $mapping'
)
eq
(
s
.
substitute
(
dict
(
foo
=
'none'
),
mapping
=
'bozo'
),
'the mapping is bozo'
)
eq
(
s
.
substitute
(
dict
(
mapping
=
'one'
),
mapping
=
'two'
),
'the mapping is two'
)
s
=
Template
(
'the self is $self'
)
eq
(
s
.
substitute
(
self
=
'bozo'
),
'the self is bozo'
)
def
test_keyword_arguments_safe
(
self
):
eq
=
self
.
assertEqual
raises
=
self
.
assertRaises
s
=
Template
(
'$who likes $what'
)
eq
(
s
.
safe_substitute
(
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
),
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'fred'
,
what
=
'kung pao'
),
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
s
=
Template
(
'the mapping is $mapping'
)
eq
(
s
.
safe_substitute
(
dict
(
foo
=
'none'
),
mapping
=
'bozo'
),
'the mapping is bozo'
)
eq
(
s
.
safe_substitute
(
dict
(
mapping
=
'one'
),
mapping
=
'two'
),
'the mapping is two'
)
d
=
dict
(
mapping
=
'one'
)
raises
(
TypeError
,
s
.
substitute
,
d
,
{})
raises
(
TypeError
,
s
.
safe_substitute
,
d
,
{})
s
=
Template
(
'the self is $self'
)
eq
(
s
.
safe_substitute
(
self
=
'bozo'
),
'the self is bozo'
)
def
test_delimiter_override
(
self
):
eq
=
self
.
assertEqual
raises
=
self
.
assertRaises
class
AmpersandTemplate
(
Template
):
delimiter
=
'&'
s
=
AmpersandTemplate
(
'this &gift is for &{who} &&'
)
eq
(
s
.
substitute
(
gift
=
'bud'
,
who
=
'you'
),
'this bud is for you &'
)
raises
(
KeyError
,
s
.
substitute
)
eq
(
s
.
safe_substitute
(
gift
=
'bud'
,
who
=
'you'
),
'this bud is for you &'
)
eq
(
s
.
safe_substitute
(),
'this &gift is for &{who} &'
)
s
=
AmpersandTemplate
(
'this &gift is for &{who} &'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
gift
=
'bud'
,
who
=
'you'
))
eq
(
s
.
safe_substitute
(),
'this &gift is for &{who} &'
)
class
PieDelims
(
Template
):
delimiter
=
'@'
s
=
PieDelims
(
'@who likes to eat a bag of @{what} worth $100'
)
self
.
assertEqual
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of ham worth $100'
)
if
__name__
==
'__main__'
:
unittest
.
main
()
Lib/test/test_string.py
View file @
1b50c4d6
...
...
@@ -187,5 +187,245 @@ class ModuleTest(unittest.TestCase):
self
.
assertIn
(
"recursion"
,
str
(
err
.
exception
))
# Template tests (formerly housed in test_pep292.py)
class
Bag
:
pass
class
Mapping
:
def
__getitem__
(
self
,
name
):
obj
=
self
for
part
in
name
.
split
(
'.'
):
try
:
obj
=
getattr
(
obj
,
part
)
except
AttributeError
:
raise
KeyError
(
name
)
return
obj
class
TestTemplate
(
unittest
.
TestCase
):
def
test_regular_templates
(
self
):
s
=
string
.
Template
(
'$who likes to eat a bag of $what worth $$100'
)
self
.
assertEqual
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of ham worth $100'
)
self
.
assertRaises
(
KeyError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
self
.
assertRaises
(
TypeError
,
string
.
Template
.
substitute
)
def
test_regular_templates_with_braces
(
self
):
s
=
string
.
Template
(
'$who likes ${what} for ${meal}'
)
d
=
dict
(
who
=
'tim'
,
what
=
'ham'
,
meal
=
'dinner'
)
self
.
assertEqual
(
s
.
substitute
(
d
),
'tim likes ham for dinner'
)
self
.
assertRaises
(
KeyError
,
s
.
substitute
,
dict
(
who
=
'tim'
,
what
=
'ham'
))
def
test_escapes
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'$who likes to eat a bag of $$what worth $$100'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of $what worth $100'
)
s
=
string
.
Template
(
'$who likes $$'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes $'
)
def
test_percents
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'%(foo)s $foo ${foo}'
)
d
=
dict
(
foo
=
'baz'
)
eq
(
s
.
substitute
(
d
),
'%(foo)s baz baz'
)
eq
(
s
.
safe_substitute
(
d
),
'%(foo)s baz baz'
)
def
test_stringification
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'tim has eaten $count bags of ham today'
)
d
=
dict
(
count
=
7
)
eq
(
s
.
substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
eq
(
s
.
safe_substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
s
=
string
.
Template
(
'tim has eaten ${count} bags of ham today'
)
eq
(
s
.
substitute
(
d
),
'tim has eaten 7 bags of ham today'
)
def
test_tupleargs
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'$who ate ${meal}'
)
d
=
dict
(
who
=
(
'tim'
,
'fred'
),
meal
=
(
'ham'
,
'kung pao'
))
eq
(
s
.
substitute
(
d
),
"('tim', 'fred') ate ('ham', 'kung pao')"
)
eq
(
s
.
safe_substitute
(
d
),
"('tim', 'fred') ate ('ham', 'kung pao')"
)
def
test_SafeTemplate
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'$who likes ${what} for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
)),
'tim likes ${what} for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
what
=
'ham'
)),
'$who likes ham for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
what
=
'ham'
,
meal
=
'dinner'
)),
'$who likes ham for dinner'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes ham for ${meal}'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
,
meal
=
'dinner'
)),
'tim likes ham for dinner'
)
def
test_invalid_placeholders
(
self
):
raises
=
self
.
assertRaises
s
=
string
.
Template
(
'$who likes $'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
s
=
string
.
Template
(
'$who likes ${what)'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
s
=
string
.
Template
(
'$who likes $100'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
who
=
'tim'
))
def
test_idpattern_override
(
self
):
class
PathPattern
(
string
.
Template
):
idpattern
=
r'[_a-z][._a-z0-9]*'
m
=
Mapping
()
m
.
bag
=
Bag
()
m
.
bag
.
foo
=
Bag
()
m
.
bag
.
foo
.
who
=
'tim'
m
.
bag
.
what
=
'ham'
s
=
PathPattern
(
'$bag.foo.who likes to eat a bag of $bag.what'
)
self
.
assertEqual
(
s
.
substitute
(
m
),
'tim likes to eat a bag of ham'
)
def
test_pattern_override
(
self
):
class
MyPattern
(
string
.
Template
):
pattern
=
r"""
(?P<escaped>@{2}) |
@(?P<named>[_a-z][._a-z0-9]*) |
@{(?P<braced>[_a-z][._a-z0-9]*)} |
(?P<invalid>@)
"""
m
=
Mapping
()
m
.
bag
=
Bag
()
m
.
bag
.
foo
=
Bag
()
m
.
bag
.
foo
.
who
=
'tim'
m
.
bag
.
what
=
'ham'
s
=
MyPattern
(
'@bag.foo.who likes to eat a bag of @bag.what'
)
self
.
assertEqual
(
s
.
substitute
(
m
),
'tim likes to eat a bag of ham'
)
class
BadPattern
(
string
.
Template
):
pattern
=
r"""
(?P<badname>.*) |
(?P<escaped>@{2}) |
@(?P<named>[_a-z][._a-z0-9]*) |
@{(?P<braced>[_a-z][._a-z0-9]*)} |
(?P<invalid>@) |
"""
s
=
BadPattern
(
'@bag.foo.who likes to eat a bag of @bag.what'
)
self
.
assertRaises
(
ValueError
,
s
.
substitute
,
{})
self
.
assertRaises
(
ValueError
,
s
.
safe_substitute
,
{})
def
test_braced_override
(
self
):
class
MyTemplate
(
string
.
Template
):
pattern
=
r"""
\
$(?:
(?P<escaped>$) |
(?P<named>[_a-z][_a-z0-9]*) |
@@(?P<braced>[_a-z][_a-z0-9]*)@@ |
(?P<invalid>) |
)
"""
tmpl
=
'PyCon in $@@location@@'
t
=
MyTemplate
(
tmpl
)
self
.
assertRaises
(
KeyError
,
t
.
substitute
,
{})
val
=
t
.
substitute
({
'location'
:
'Cleveland'
})
self
.
assertEqual
(
val
,
'PyCon in Cleveland'
)
def
test_braced_override_safe
(
self
):
class
MyTemplate
(
string
.
Template
):
pattern
=
r"""
\
$(?:
(?P<escaped>$) |
(?P<named>[_a-z][_a-z0-9]*) |
@@(?P<braced>[_a-z][_a-z0-9]*)@@ |
(?P<invalid>) |
)
"""
tmpl
=
'PyCon in $@@location@@'
t
=
MyTemplate
(
tmpl
)
self
.
assertEqual
(
t
.
safe_substitute
(),
tmpl
)
val
=
t
.
safe_substitute
({
'location'
:
'Cleveland'
})
self
.
assertEqual
(
val
,
'PyCon in Cleveland'
)
def
test_invalid_with_no_lines
(
self
):
# The error formatting for invalid templates
# has a special case for no data that the default
# pattern can't trigger (always has at least '$')
# So we craft a pattern that is always invalid
# with no leading data.
class
MyTemplate
(
string
.
Template
):
pattern
=
r"""
(?P<invalid>) |
unreachable(
(?P<named>) |
(?P<braced>) |
(?P<escaped>)
)
"""
s
=
MyTemplate
(
''
)
with
self
.
assertRaises
(
ValueError
)
as
err
:
s
.
substitute
({})
self
.
assertIn
(
'line 1, col 1'
,
str
(
err
.
exception
))
def
test_unicode_values
(
self
):
s
=
string
.
Template
(
'$who likes $what'
)
d
=
dict
(
who
=
't
\
xff
m'
,
what
=
'f
\
xfe
\
f
ed'
)
self
.
assertEqual
(
s
.
substitute
(
d
),
't
\
xff
m likes f
\
xfe
\
x0c
ed'
)
def
test_keyword_arguments
(
self
):
eq
=
self
.
assertEqual
s
=
string
.
Template
(
'$who likes $what'
)
eq
(
s
.
substitute
(
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
substitute
(
dict
(
who
=
'tim'
),
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
substitute
(
dict
(
who
=
'fred'
,
what
=
'kung pao'
),
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
s
=
string
.
Template
(
'the mapping is $mapping'
)
eq
(
s
.
substitute
(
dict
(
foo
=
'none'
),
mapping
=
'bozo'
),
'the mapping is bozo'
)
eq
(
s
.
substitute
(
dict
(
mapping
=
'one'
),
mapping
=
'two'
),
'the mapping is two'
)
s
=
string
.
Template
(
'the self is $self'
)
eq
(
s
.
substitute
(
self
=
'bozo'
),
'the self is bozo'
)
def
test_keyword_arguments_safe
(
self
):
eq
=
self
.
assertEqual
raises
=
self
.
assertRaises
s
=
string
.
Template
(
'$who likes $what'
)
eq
(
s
.
safe_substitute
(
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'tim'
),
what
=
'ham'
),
'tim likes ham'
)
eq
(
s
.
safe_substitute
(
dict
(
who
=
'fred'
,
what
=
'kung pao'
),
who
=
'tim'
,
what
=
'ham'
),
'tim likes ham'
)
s
=
string
.
Template
(
'the mapping is $mapping'
)
eq
(
s
.
safe_substitute
(
dict
(
foo
=
'none'
),
mapping
=
'bozo'
),
'the mapping is bozo'
)
eq
(
s
.
safe_substitute
(
dict
(
mapping
=
'one'
),
mapping
=
'two'
),
'the mapping is two'
)
d
=
dict
(
mapping
=
'one'
)
raises
(
TypeError
,
s
.
substitute
,
d
,
{})
raises
(
TypeError
,
s
.
safe_substitute
,
d
,
{})
s
=
string
.
Template
(
'the self is $self'
)
eq
(
s
.
safe_substitute
(
self
=
'bozo'
),
'the self is bozo'
)
def
test_delimiter_override
(
self
):
eq
=
self
.
assertEqual
raises
=
self
.
assertRaises
class
AmpersandTemplate
(
string
.
Template
):
delimiter
=
'&'
s
=
AmpersandTemplate
(
'this &gift is for &{who} &&'
)
eq
(
s
.
substitute
(
gift
=
'bud'
,
who
=
'you'
),
'this bud is for you &'
)
raises
(
KeyError
,
s
.
substitute
)
eq
(
s
.
safe_substitute
(
gift
=
'bud'
,
who
=
'you'
),
'this bud is for you &'
)
eq
(
s
.
safe_substitute
(),
'this &gift is for &{who} &'
)
s
=
AmpersandTemplate
(
'this &gift is for &{who} &'
)
raises
(
ValueError
,
s
.
substitute
,
dict
(
gift
=
'bud'
,
who
=
'you'
))
eq
(
s
.
safe_substitute
(),
'this &gift is for &{who} &'
)
class
PieDelims
(
string
.
Template
):
delimiter
=
'@'
s
=
PieDelims
(
'@who likes to eat a bag of @{what} worth $100'
)
self
.
assertEqual
(
s
.
substitute
(
dict
(
who
=
'tim'
,
what
=
'ham'
)),
'tim likes to eat a bag of ham worth $100'
)
if
__name__
==
"__main__"
:
unittest
.
main
()
Misc/ACKS
View file @
1b50c4d6
...
...
@@ -176,6 +176,7 @@ Monty Brandenberg
Georg Brandl
Christopher Brannon
Terrence Brannon
Erin Braswell
Sven Brauch
Germán M. Bravo
Erik Bray
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment