Refactor htmltextview test

This commit is contained in:
Philipp Hörist 2018-11-11 22:54:43 +01:00
parent 5271f19294
commit 4979bcf675
1 changed files with 183 additions and 162 deletions

View File

@ -1,17 +1,14 @@
import sys
import os
from unittest.mock import MagicMock from unittest.mock import MagicMock
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk from gi.repository import Gtk
from gajim.common import app from gajim.common import app
from gajim.common import configpaths from gajim.common import configpaths
configpaths.init() configpaths.init()
from gajim.common import caps_cache from gajim.common import caps_cache
from gajim.gtk.util import get_cursor
from gajim.conversation_textview import ConversationTextview from gajim.conversation_textview import ConversationTextview
from gajim.gui_interface import Interface from gajim.gui_interface import Interface
@ -20,70 +17,58 @@ app.plugin_manager = MagicMock()
app.logger = MagicMock() app.logger = MagicMock()
app.interface = Interface() app.interface = Interface()
change_cursor = None
htmlview = ConversationTextview(None)
XHTML = [
'''
<div>
<span style="color: red; text-decoration:underline">Hello</span>
<br/>\n
<img src="http://images.slashdot.org/topics/topicsoftware.gif"/>
<br/>\n
<span style="font-size: 500%; font-family: serif">World</span>\n
</div>
\n
''',
def on_textview_motion_notify_event(widget, event): '''
""" <hr />
Change the cursor to a hand when we are over a mail or an url ''',
"""
global change_cursor
w = htmlview.tv.get_window(Gtk.TextWindowType.TEXT)
device = w.get_display().get_device_manager().get_client_pointer()
pointer = w.get_device_position(device)
x = pointer[1]
y = pointer[2]
tags = htmlview.tv.get_iter_at_location(x, y)[1].get_tags()
if change_cursor:
w.set_cursor(get_cursor('XTERM'))
change_cursor = None
for tag in tags:
try:
if tag.is_anchor:
w.set_cursor(get_cursor('HAND2'))
change_cursor = tag
except Exception:
pass
htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event) '''
def handler(texttag, widget, event, iter_, kind):
if event.type == Gdk.EventType.BUTTON_PRESS:
pass
htmlview.print_real_text(None, xhtml='<div>'
'<span style="color: red; text-decoration:underline">Hello</span><br/>\n'
' <img src="http://images.slashdot.org/topics/topicsoftware.gif"/><br/>\n'
'<span style="font-size: 500%; font-family: serif">World</span>\n'
'</div>\n')
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml='''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<p xmlns='http://www.w3.org/1999/xhtml'>a:b <p xmlns='http://www.w3.org/1999/xhtml'>a:b
<a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google <a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google</a>
</a> </p>
</p><br/> <br/>
</body>''') </body>
htmlview.print_real_text(None, xhtml=''' ''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<p style='font-size:large'> <p style='font-size:large'>
<span style='font-style: italic'>O <span style='font-style: italic'>O
<span style='font-size:larger'>M</span>G</span>, <span style='font-size:larger'>M</span>G
I&apos;m <span style='color:green'>green</span> </span>, I&apos;m <span style='color:green'>green</span>with
with <span style='font-weight: bold'>envy</span>! <span style='font-weight: bold'>envy</span>!
</p> </p>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
http://test.com/ testing links autolinkifying http://test.com/ testing links autolinkifying
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<p>As Emerson said in his essay <span style=' <p>As Emerson said in his essay <span style='
font-style: italic; background-color:cyan'>Self-Reliance</span>:</p> font-style: italic; background-color:cyan'>Self-Reliance</span>:</p>
@ -91,9 +76,13 @@ htmlview.print_real_text(None, xhtml='''
&quot;A foolish consistency is the hobgoblin of little minds.&quot; &quot;A foolish consistency is the hobgoblin of little minds.&quot;
</p> </p>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<p style='text-align:center'> <p style='text-align:center'>
Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>? Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>?
@ -103,43 +92,62 @@ htmlview.print_real_text(None, xhtml='''
alt='A License to Jabber' width='50%' height='50%'/> alt='A License to Jabber' width='50%' height='50%'/>
</p> </p>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<ul style='background-color:rgb(120,140,100)'> <ul style='background-color:rgb(120,140,100)'>
<li> One </li> <li> One </li>
<li> Two </li> <li> Two </li>
<li> Three </li> <li> Three </li>
</ul><hr /><pre style="background-color:rgb(120,120,120)">def fac(n): </ul>
<hr />
<pre style="background-color:rgb(120,120,120)">def fac(n):
def faciter(n,acc): def faciter(n,acc):
if n==0: return acc if n==0: return acc
return faciter(n-1, acc*n) return faciter(n-1, acc*n)
if n&lt;0: raise ValueError('Must be non-negative') if n&lt;0: raise ValueError('Must be non-negative')
return faciter(n,1)</pre> return faciter(n,1)</pre>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<ol style='background-color:rgb(120,140,100)'> <ol style='background-color:rgb(120,140,100)'>
<li> One </li> <li> One </li>
<li> Two is nested: <ul style='background-color:rgb(200,200,100)'> <li>
Two is nested:
<ul style='background-color:rgb(200,200,100)'>
<li> One </li> <li> One </li>
<li style='font-size:50%'> Two </li> <li style='font-size:50%'> Two </li>
<li style='font-size:200%'> Three </li> <li style='font-size:200%'> Three </li>
<li style='font-size:9999pt'> Four </li> <li style='font-size:9999pt'> Four </li>
</ul></li> </ul>
<li> Three </li></ol> </li>
<li> Three </li>
</ol>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<p> <p>
<strong> <strong>
<a href='xmpp:example@example.org'>xmpp link</a> <a href='xmpp:example@example.org'>xmpp link</a>
</strong>: </p> </strong>:
</p>
<div xmlns='http://www.w3.org/1999/xhtml'> <div xmlns='http://www.w3.org/1999/xhtml'>
<cite style='margin: 7px;' title='xmpp:examples@example.org'> <cite style='margin: 7px;' title='xmpp:examples@example.org'>
<p> <p>
@ -154,9 +162,13 @@ htmlview.print_real_text(None, xhtml='''
<p/> <p/>
<p>#232/1</p> <p>#232/1</p>
</body> </body>
''') ''',
htmlview.print_real_text(None, xhtml='<hr />')
htmlview.print_real_text(None, xhtml=''' '''
<hr />
''',
'''
<body xmlns='http://www.w3.org/1999/xhtml'> <body xmlns='http://www.w3.org/1999/xhtml'>
<br/> <br/>
<img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ <img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\
@ -167,21 +179,30 @@ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\
hhx4dbgYKAAA7' alt='Larry'/> hhx4dbgYKAAA7' alt='Larry'/>
</body> </body>
''') ''',
htmlview.tv.show()
sw = Gtk.ScrolledWindow() ]
sw.set_property('hscrollbar-policy', Gtk.PolicyType.AUTOMATIC)
sw.set_property('vscrollbar-policy', Gtk.PolicyType.AUTOMATIC)
sw.set_property('border-width', 0) class TextviewWindow(Gtk.Window):
sw.add(htmlview.tv) def __init__(self):
sw.show() Gtk.Window.__init__(self, title="Textview Test")
frame = Gtk.Frame() self.set_default_size(600, 600)
frame.set_shadow_type(Gtk.ShadowType.IN)
frame.show() self._textview = ConversationTextview(None)
frame.add(sw)
win = Gtk.Window() scrolled = Gtk.ScrolledWindow()
win.add(frame) scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
win.set_default_size(400, 300) scrolled.add(self._textview.tv)
self.add(scrolled)
self.show()
self._print_xhtml()
def _print_xhtml(self):
for xhtml in XHTML:
self._textview.print_real_text(None, xhtml=xhtml)
win = TextviewWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all() win.show_all()
win.connect('destroy', lambda win: Gtk.main_quit())
Gtk.main() Gtk.main()