[pypy-svn] rev 1061 - in pypy/trunk/src/pypy/objspace/std: . test
guenter at codespeak.net
guenter at codespeak.net
Tue Jun 24 21:14:43 CEST 2003
Author: guenter
Date: Tue Jun 24 21:14:42 2003
New Revision: 1061
Modified:
pypy/trunk/src/pypy/objspace/std/stringobject.py
pypy/trunk/src/pypy/objspace/std/test/test_stringobject.py
Log:
__repr__ implemented
Modified: pypy/trunk/src/pypy/objspace/std/stringobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/stringobject.py (original)
+++ pypy/trunk/src/pypy/objspace/std/stringobject.py Tue Jun 24 21:14:42 2003
@@ -119,7 +119,10 @@
def _islower(ch):
o = ord(ch)
return (o>=97 and o<=122)
-
+
+def _isreadable(ch): #following CPython string_repr
+ o = ord(ch)
+ return (o>=32 and o <127)
def _is_generic(self, fun):
space = w_self.space
@@ -880,13 +883,78 @@
import iterobject
return iterobject.W_SeqIterObject(space, w_list)
+
+#for comparison and understandiong of the underlying algorithm the unrestricted implementation
+#def repr__String(space, w_str):
+# u_str = space.unwrap(w_str)
+#
+# quote = '\''
+# if '\'' in u_str and not '"' in u_str:
+# quote = '"'
+#
+# u_repr = quote
+#
+# for i in range(len(u_str)):
+# c = u_str[i]
+# if c == '\\' or c == quote: u_repr+= '\\'+c
+# elif c == '\t': u_repr+= '\\t'
+# elif c == '\r': u_repr+= '\\r'
+# elif c == '\n': u_repr+= '\\n'
+# elif not _isreadable(c) :
+# u_repr+= '\\' + hex(ord(c))[-3:]
+# else:
+# u_repr += c
+#
+# u_repr += quote
+#
+# return space.wrap(u_repr)
+
def repr__String(space, w_str):
- # XXX this is bogus -- mwh
- return space.wrap(repr(space.unwrap(w_str)))
- a = space.add
- q = space.wrap("'")
- return a(a(q, w_str), q)
+ u_str = space.unwrap(w_str)
+ quote = '\''
+ if '\'' in u_str and not '"' in u_str:
+ quote = '"'
+
+ buflen = 2
+ for i in range(len(u_str)):
+ c = u_str[i]
+ if c in quote+"\\\r\t\n" :
+ buflen+= 2
+ elif _isreadable(c) :
+ buflen+= 1
+ else:
+ buflen+= 4
+
+ buf = [' ']* buflen
+
+ buf[0] = quote
+ j=1
+ for i in range(len(u_str)):
+ #print buflen-j
+ c = u_str[i]
+ if c in quote+"\\\r\t\n" :
+ buf[j]= '\\'
+ j+=1
+ if c == quote or c=='\\': buf[j] = c
+ elif c == '\t': buf[j] = 't'
+ elif c == '\r': buf[j] = 'r'
+ elif c == '\n': buf[j] = 'n'
+ j +=1
+ elif not _isreadable(c) :
+ buf[j]= '\\'
+ j+=1
+ for x in hex(ord(c))[-3:]:
+ buf[j] = x
+ j+=1
+ else:
+ buf[j] = c
+ j+=1
+
+ buf[j] = quote
+ return space.wrap("".join(buf))
+
+
def ord__String(space, w_str):
return space.wrap(ord(space.unwrap(w_str)))
Modified: pypy/trunk/src/pypy/objspace/std/test/test_stringobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/test/test_stringobject.py (original)
+++ pypy/trunk/src/pypy/objspace/std/test/test_stringobject.py Tue Jun 24 21:14:42 2003
@@ -13,7 +13,7 @@
def tearDown(self):
pass
- def test_order_rich(self):
+ def qqqtest_order_rich(self):
space = self.space
def w(txt):
return W_StringObject(space, txt)
@@ -40,12 +40,12 @@
w(str2),
pypyconst))
- def test_equality(self):
+ def qqqtest_equality(self):
w = self.space.wrap
self.assertEqual_w(w('abc'), w('abc'))
self.assertNotEqual_w(w('abc'), w('def'))
- def test_order_cmp(self):
+ def qqqtest_order_cmp(self):
space = self.space
w = space.wrap
self.failUnless_w(space.lt(w('a'), w('b')))
@@ -53,12 +53,12 @@
self.failUnless_w(space.le(w('a'), w('a')))
self.failUnless_w(space.gt(w('a'), w('')))
- def test_truth(self):
+ def qqqtest_truth(self):
w = self.space.wrap
self.failUnless_w(w('non-empty'))
self.failIf_w(w(''))
- def test_getitem(self):
+ def qqqtest_getitem(self):
space = self.space
w = space.wrap
w_str = w('abc')
@@ -69,7 +69,7 @@
w_str,
w(3))
- def test_slice(self):
+ def qqqtest_slice(self):
space = self.space
w = space.wrap
w_str = w('abc')
@@ -92,7 +92,7 @@
w_slice = space.newslice(w(-1), space.w_None, None)
self.assertEqual_w(space.getitem(w_str, w_slice), w('c'))
- def test_extended_slice(self):
+ def qqqtest_extended_slice(self):
space = self.space
if self.space.__class__.__name__.startswith('Trivial'):
import sys
@@ -116,7 +116,7 @@
#AttributeError: W_StringObject instance has no attribute 'ljust'
-# def test_ljust(self):
+# def qqqtest_ljust(self):
# w = self.space.wrap
# s = "abc"
#
@@ -129,7 +129,7 @@
def setUp(self):
self.space = test.objspace('std')
- def test_split(self):
+ def qqqtest_split(self):
self.assertEquals("".split(), [])
self.assertEquals("a".split(), ['a'])
self.assertEquals(" a ".split(), ['a'])
@@ -148,13 +148,13 @@
self.assertEquals('endcase test'.split('test'), ['endcase ', ''])
- def test_split_splitchar(self):
+ def qqqtest_split_splitchar(self):
self.assertEquals("/a/b/c".split('/'), ['','a','b','c'])
- def test_title(self):
+ def qqqtest_title(self):
self.assertEquals("brown fox".title(), "Brown Fox")
- def test_capitalize(self):
+ def qqqtest_capitalize(self):
self.assertEquals("brown fox".capitalize(), "Brown fox")
self.assertEquals(' hello '.capitalize(), ' hello ')
self.assertEquals('Hello '.capitalize(), 'Hello ')
@@ -162,7 +162,7 @@
self.assertEquals('aaaa'.capitalize(), 'Aaaa')
self.assertEquals('AaAa'.capitalize(), 'Aaaa')
- def test_rjust(self):
+ def qqqtest_rjust(self):
s = "abc"
self.assertEquals(s.rjust(2), s)
self.assertEquals(s.rjust(3), s)
@@ -174,7 +174,7 @@
self.assertEquals('abc'.rjust(2), 'abc')
- def test_ljust(self):
+ def qqqtest_ljust(self):
s = "abc"
self.assertEquals(s.ljust(2), s)
self.assertEquals(s.ljust(3), s)
@@ -185,7 +185,7 @@
self.assertEquals('abc'.ljust(3), 'abc')
self.assertEquals('abc'.ljust(2), 'abc')
- def test_replace(self):
+ def qqqtest_replace(self):
self.assertEquals('one!two!three!'.replace('!', '@', 1), 'one at two!three!')
self.assertEquals('one!two!three!'.replace('!', ''), 'onetwothree')
self.assertEquals('one!two!three!'.replace('!', '@', 2), 'one at two@three!')
@@ -206,7 +206,7 @@
self.assertEquals('123x123'.replace('123', ''), 'x')
- def test_strip(self):
+ def qqqtest_strip(self):
s = " a b "
self.assertEquals(s.strip(), "a b")
self.assertEquals(s.rstrip(), " a b")
@@ -215,7 +215,7 @@
self.assertEquals('xyzzyhelloxyzzy'.lstrip('xyz'), 'helloxyzzy')
self.assertEquals('xyzzyhelloxyzzy'.rstrip('xyz'), 'xyzzyhello')
- def test_zfill(self):
+ def qqqtest_zfill(self):
self.assertEquals('123'.zfill(2), '123')
self.assertEquals('123'.zfill(3), '123')
self.assertEquals('123'.zfill(4), '0123')
@@ -229,7 +229,7 @@
self.assertEquals('34'.zfill(1), '34')
self.assertEquals('34'.zfill(4), '0034')
- def test_center(self):
+ def qqqtest_center(self):
s="a b"
self.assertEquals(s.center(0), "a b")
self.assertEquals(s.center(1), "a b")
@@ -247,7 +247,7 @@
self.assertEquals('abc'.center(2), 'abc')
- def test_count(self):
+ def qqqtest_count(self):
self.assertEquals("".count("x"),0)
self.assertEquals("".count(""),1)
self.assertEquals("Python".count(""),7)
@@ -260,7 +260,7 @@
self.assertEquals('aaa'.count('a', 0, -10), 0)
- def test_startswith(self):
+ def qqqtest_startswith(self):
self.assertEquals('ab'.startswith('ab'),1)
self.assertEquals('ab'.startswith('a'),1)
self.assertEquals('ab'.startswith(''),1)
@@ -272,7 +272,7 @@
self.assertEquals('y'.startswith('xx'),0)
- def test_endswith(self):
+ def qqqtest_endswith(self):
self.assertEquals('ab'.endswith('ab'),1)
self.assertEquals('ab'.endswith('b'),1)
self.assertEquals('ab'.endswith(''),1)
@@ -283,7 +283,7 @@
self.assertEquals('x'.endswith('xx'),0)
self.assertEquals('y'.endswith('xx'),0)
- def test_expandtabs(self):
+ def qqqtest_expandtabs(self):
self.assertEquals('abc\rab\tdef\ng\thi'.expandtabs(), 'abc\rab def\ng hi')
self.assertEquals('abc\rab\tdef\ng\thi'.expandtabs(8), 'abc\rab def\ng hi')
self.assertEquals('abc\rab\tdef\ng\thi'.expandtabs(4), 'abc\rab def\ng hi')
@@ -305,7 +305,7 @@
self.assertEquals(''.expandtabs(),'')
- def test_splitlines(self):
+ def qqqtest_splitlines(self):
s="ab\nab\n \n x\n\n\n"
self.assertEquals(s.splitlines(),['ab', 'ab', ' ', ' x', '', ''])
self.assertEquals(s.splitlines(),s.splitlines(0))
@@ -314,12 +314,12 @@
self.assertEquals(s.splitlines(),['', 'one', '\two', 'three', ''])
self.assertEquals(s.splitlines(1),['\n', 'one\n', '\two\n', 'three\n', '\n'])
- def test_find(self):
+ def qqqtest_find(self):
self.assertEquals('abcdefghiabc'.find('abc'), 0)
self.assertEquals('abcdefghiabc'.find('abc', 1), 9)
self.assertEquals('abcdefghiabc'.find('def', 4), -1)
- def test_index(self):
+ def qqqtest_index(self):
self.assertEquals('abcdefghiabc'.index(''), 0)
self.assertEquals('abcdefghiabc'.index('def'), 3)
self.assertEquals('abcdefghiabc'.index('abc'), 0)
@@ -330,13 +330,13 @@
#self.assertRaises(ValueError, 'abcdefghi'.index('ghi', 8))
#self.assertRaises(ValueError, 'abcdefghi'.index('ghi', -1))
- def test_rfind(self):
+ def qqqtest_rfind(self):
self.assertEquals('abcdefghiabc'.rfind('abc'), 9)
self.assertEquals('abcdefghiabc'.rfind(''), 12)
self.assertEquals('abcdefghiabc'.rfind('abcd'), 0)
self.assertEquals('abcdefghiabc'.rfind('abcz'), -1)
- def test_rindex(self):
+ def qqqtest_rindex(self):
self.assertEquals('abcdefghiabc'.rindex(''), 12)
self.assertEquals('abcdefghiabc'.rindex('def'), 3)
self.assertEquals('abcdefghiabc'.rindex('abc'), 9)
@@ -349,7 +349,7 @@
#self.assertRaises(ValueError, 'abcdefghi'.rindex('ghi', 0, -1))
- def test_split_maxsplit(self):
+ def qqqtest_split_maxsplit(self):
self.assertEquals("/a/b/c".split('/', 2), ['','a','b/c'])
self.assertEquals("a/b/c".split("/"), ['a', 'b', 'c'])
self.assertEquals(" a ".split(None, 0), ['a '])
@@ -357,28 +357,47 @@
self.assertEquals(" a a ".split(" ", 0), [' a a '])
self.assertEquals(" a a ".split(" ", 1), ['', 'a a '])
- def test_join(self):
+ def qqqtest_join(self):
self.assertEquals(", ".join(['a', 'b', 'c']), "a, b, c")
self.assertEquals("".join([]), "")
self.assertEquals("-".join(['a', 'b']), 'a-b')
- def test_lower(self):
+ def qqqtest_lower(self):
self.assertEquals("aaa AAA".lower(), "aaa aaa")
self.assertEquals("".lower(), "")
- def test_upper(self):
+ def qqqtest_upper(self):
self.assertEquals("aaa AAA".upper(), "AAA AAA")
self.assertEquals("".upper(), "")
- def test_swapcase(self):
+ def qqqtest_swapcase(self):
self.assertEquals("aaa AAA 111".swapcase(), "AAA aaa 111")
self.assertEquals("".swapcase(), "")
- def test_iter(self):
+ def qqqtest_iter(self):
l=[]
for i in iter("42"):
l.append(i)
self.assertEquals(l, ['4','2'])
+
+ def test_repr(self):
+ self.assertEquals(repr("") ,"''")
+ self.assertEquals(repr("a") ,"'a'")
+ self.assertEquals(repr("'") ,'"\'"')
+ self.assertEquals(repr("\'") ,"\"\'\"")
+ self.assertEquals(repr("\"") ,'\'"\'')
+ self.assertEquals(repr("\t") ,"'\\t'")
+ self.assertEquals(repr("\\") ,"'\\\\'")
+ self.assertEquals(repr('') ,"''")
+ self.assertEquals(repr('a') ,"'a'")
+ self.assertEquals(repr('"') ,"'\"'")
+ self.assertEquals(repr('\'') ,'"\'"')
+ self.assertEquals(repr('\"') ,"'\"'")
+ self.assertEquals(repr('\t') ,"'\\t'")
+ self.assertEquals(repr('\\') ,"'\\\\'")
+ self.assertEquals(repr("'''\"") ,'\'\\\'\\\'\\\'"\'')
+ self.assertEquals(repr(chr(19)) ,"'\\x13'")
+
if __name__ == '__main__':
test.main()
More information about the Pypy-commit
mailing list