Author: Tobias Pape <[email protected]>
Branch: 
Changeset: r61072:3df200e8f904
Date: 2013-01-28 11:07 +0100
http://bitbucket.org/pypy/pypy/changeset/3df200e8f904/

Log:    add missing tests. factor magic constant into RAW_ENCODING

diff --git a/dotviewer/drawgraph.py b/dotviewer/drawgraph.py
--- a/dotviewer/drawgraph.py
+++ b/dotviewer/drawgraph.py
@@ -9,6 +9,7 @@
 from pygame.locals import *
 
 
+RAW_ENCODING = "utf-8"
 this_dir = os.path.dirname(os.path.abspath(__file__))
 FONT = os.path.join(this_dir, 'font', 'DroidSans.ttf')
 FIXEDFONT = os.path.join(this_dir, 'font', 'DroidSansMono.ttf')
@@ -52,10 +53,10 @@
         return default
 
 def forceunicode(name):
-    return name if isinstance(name, unicode) else name.decode("utf-8")
+    return name if isinstance(name, unicode) else name.decode(RAW_ENCODING)
 
 def forcestr(name):
-    return name if isinstance(name, str) else name.encode("utf-8")
+    return name if isinstance(name, str) else name.encode(RAW_ENCODING)
 
 
 class GraphLayout:
diff --git a/dotviewer/graphdisplay.py b/dotviewer/graphdisplay.py
--- a/dotviewer/graphdisplay.py
+++ b/dotviewer/graphdisplay.py
@@ -285,7 +285,7 @@
                     if e.key == K_ESCAPE:
                         return None
                     elif e.key == K_RETURN:
-                        return forcestr(text) # return utf-8 encoded
+                        return forcestr(text) # return encoded unicode
                     elif e.key == K_BACKSPACE:
                         text = text[:-1]
                     elif e.unicode and ord(e.unicode) >= ord(' '):
diff --git a/dotviewer/graphpage.py b/dotviewer/graphpage.py
--- a/dotviewer/graphpage.py
+++ b/dotviewer/graphpage.py
@@ -44,7 +44,8 @@
 
 class DotFileGraphPage(GraphPage):
     def compute(self, dotfile):
-        from drawgraph import forceunicode
-        f = open(dotfile, 'r')
-        self.source = forceunicode(f.read())
+        import codecs
+        from drawgraph import RAW_ENCODING
+        f = codecs.open(dotfile, 'r', RAW_ENCODING)
+        self.source = f.read()
         f.close()
diff --git a/dotviewer/test/test_interactive_unicode.py 
b/dotviewer/test/test_interactive_unicode.py
new file mode 100755
--- /dev/null
+++ b/dotviewer/test/test_interactive_unicode.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+import py
+import sys, os, signal, thread, time, codecs
+from dotviewer.conftest import option
+from dotviewer.drawgraph import RAW_ENCODING
+
+SOURCE1 = u"""digraph G{
+&#955; -> b
+b -> &#956;
+}
+"""
+
+FILENAME = 'graph1.dot'
+
+def setup_module(mod):
+    if not option.pygame:
+        py.test.skip("--pygame not enabled")
+    udir = py.path.local.make_numbered_dir(prefix='usession-dot-', keep=3)
+    f = codecs.open(str(udir.join(FILENAME)), 'wb', RAW_ENCODING)
+    f.write(SOURCE1)
+    f.close()
+
+    from dotviewer import graphclient
+    mod.pkgdir = py.path.local(graphclient.this_dir)
+    mod.udir = udir
+
+    try:
+        del os.environ['GRAPHSERVER']
+    except KeyError:
+        pass
+
+
+def test_dotviewer():
+    print "=== dotviewer.py %s" % FILENAME
+    err = os.system('"%s" "%s"' % (pkgdir.join('dotviewer.py'),
+                                   udir.join(FILENAME)))
+    assert err == 0
+
+    plain_name = FILENAME.replace('.dot','.plain')
+    
+    os.system('dot -Tplain "%s" > "%s"' % (udir.join(FILENAME),
+                                           udir.join(plain_name)))
+    print "=== dotviewer.py %s" % plain_name
+    err = os.system('"%s" "%s"' % (pkgdir.join('dotviewer.py'),
+                                   udir.join(plain_name)))
+    assert err == 0
+
+def test_display_dot_file():
+    from dotviewer.graphclient import display_dot_file
+    print "=== display_dot_file(%s) with GRAPHSERVER=%s" % (
+        FILENAME, os.environ.get('GRAPHSERVER', ''),)
+    display_dot_file(udir.join(FILENAME))
+    print "=== display_dot_file finished"
+
+
+def test_graphserver():
+    import socket
+    s = socket.socket()
+    s.listen(1)
+    host, port = s.getsockname()     # pick a random free port
+    s.close()
+
+    if hasattr(sys, 'pypy_objspaceclass'):
+        python = 'python'
+    else:
+        python = sys.executable
+
+    cmdargs = [python, str(pkgdir.join('graphserver.py')),
+               str(port)]
+    print '* starting:', ' '.join(cmdargs)
+    pid = os.spawnv(os.P_NOWAIT, cmdargs[0], cmdargs)
+    try:
+        time.sleep(1)    # hack - wait a bit to make sure the server is up
+        os.environ['GRAPHSERVER'] = '%s:%d' % (host, port)
+        try:
+            test_display_dot_file()
+        finally:
+            del os.environ['GRAPHSERVER']
+    finally:
+        os.kill(pid, signal.SIGTERM)
+
+def test_colors():
+    from dotviewer import graphpage, graphclient
+    class MyPage(graphpage.DotFileGraphPage):
+        def compute(self, dotfile):
+            super(MyPage, self).compute(dotfile)
+            self.links = {'v2721': 'Hello world',
+                          'v2720': ('Something green', (0, 192, 0)),
+                          }
+    dotfile = str(udir.join(FILENAME))
+    page = MyPage(dotfile)
+    graphclient.display_page(page)
+
+def test_fixedfont():
+    from dotviewer import graphpage, graphclient
+    class MyPage(graphpage.DotFileGraphPage):
+        fixedfont = True
+    dotfile = str(udir.join(FILENAME))
+    page = MyPage(dotfile)
+    page.fixedfont = True
+    graphclient.display_page(page)
diff --git a/dotviewer/test/test_unicode_util.py 
b/dotviewer/test/test_unicode_util.py
new file mode 100755
--- /dev/null
+++ b/dotviewer/test/test_unicode_util.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+import py
+import codecs
+from dotviewer.drawgraph import RAW_ENCODING, forcestr, forceunicode
+
+SOURCE1 = u"""digraph G{
+&#955; -> b
+b -> &#956;
+}
+"""
+
+FILENAME = 'test.dot'
+
+class TestUnicodeUtil(object):
+
+    def test_idempotent(self):
+        x = u"a"
+        assert forceunicode(forcestr(x)) == x
+        
+        x = u"&#955;"
+        assert forceunicode(forcestr(x)) == x
+
+        assert forceunicode(forcestr(SOURCE1)) == SOURCE1
+
+        x = "a"
+        assert forcestr(forceunicode(x)) == x
+
+        # utf-8 encoded.
+        # fragile, does not consider RAW_ENCODING
+        # x = "\xef\xbb\xbf\xce\xbb"
+        # assert forcestr(forceunicode(x)) == x
+
+    def test_does_not_double_encode(self):
+        x = u"&#955;"
+        x_e = forcestr(x)
+        assert forcestr(x_e) == x_e
+
+        x_u = forceunicode(x_e)
+        assert forceunicode(x_u) == x_u
+
+    def test_file(self):       
+        udir = py.path.local.make_numbered_dir(prefix='usession-dot-', keep=3)
+        full_filename = str(udir.join(FILENAME))
+        f = codecs.open(full_filename, 'wb', RAW_ENCODING)
+        f.write(SOURCE1)
+        f.close()
+
+        with open(full_filename) as f1:
+            assert forceunicode(f1.read()) == SOURCE1
+
+        f3 = codecs.open(full_filename, 'r', RAW_ENCODING)
+        c = f3.read()
+        f3.close()
+        result = (c == SOURCE1)
+        assert result
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to