Move HtmlTextView test into test folder
This commit is contained in:
parent
ced39dab56
commit
fb42136be1
|
@ -44,10 +44,6 @@ from gi.repository import Gtk
|
||||||
from gi.repository import Gdk
|
from gi.repository import Gdk
|
||||||
from gi.repository import GdkPixbuf
|
from gi.repository import GdkPixbuf
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from gajim.common import configpaths
|
|
||||||
configpaths.init()
|
|
||||||
|
|
||||||
from gajim.common import app
|
from gajim.common import app
|
||||||
from gajim.common import helpers
|
from gajim.common import helpers
|
||||||
from gajim.common.i18n import _
|
from gajim.common.i18n import _
|
||||||
|
@ -1086,185 +1082,3 @@ class HtmlTextView(Gtk.TextView):
|
||||||
self.add_child_at_anchor(emoji, anchor)
|
self.add_child_at_anchor(emoji, anchor)
|
||||||
buffer_.delete_mark(start_mark)
|
buffer_.delete_mark(start_mark)
|
||||||
buffer_.delete_mark(end_mark)
|
buffer_.delete_mark(end_mark)
|
||||||
|
|
||||||
change_cursor = None
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from gajim.conversation_textview import ConversationTextview
|
|
||||||
from gajim.gui_interface import Interface
|
|
||||||
|
|
||||||
Interface()
|
|
||||||
|
|
||||||
# create fake app.plugin_manager.gui_extension_point method for tests
|
|
||||||
def extension_point(*args):
|
|
||||||
pass
|
|
||||||
def gui_extension_point(*args):
|
|
||||||
pass
|
|
||||||
app.plugin_manager = Interface()
|
|
||||||
app.plugin_manager.extension_point = extension_point
|
|
||||||
app.plugin_manager.gui_extension_point = gui_extension_point
|
|
||||||
|
|
||||||
htmlview = ConversationTextview(None)
|
|
||||||
|
|
||||||
def on_textview_motion_notify_event(widget, event):
|
|
||||||
"""
|
|
||||||
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.tv.hyperlink_handler = htmlview.hyperlink_handler
|
|
||||||
|
|
||||||
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'>
|
|
||||||
<p xmlns='http://www.w3.org/1999/xhtml'>a:b
|
|
||||||
<a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google
|
|
||||||
</a>
|
|
||||||
</p><br/>
|
|
||||||
</body>''')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<p style='font-size:large'>
|
|
||||||
<span style='font-style: italic'>O
|
|
||||||
<span style='font-size:larger'>M</span>G</span>,
|
|
||||||
I'm <span style='color:green'>green</span>
|
|
||||||
with <span style='font-weight: bold'>envy</span>!
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
http://test.com/ testing links autolinkifying
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<p>As Emerson said in his essay <span style='
|
|
||||||
font-style: italic; background-color:cyan'>Self-Reliance</span>:</p>
|
|
||||||
<p style='margin-left: 5px; margin-right: 2%'>
|
|
||||||
"A foolish consistency is the hobgoblin of little minds."
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<p style='text-align:center'>
|
|
||||||
Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>?
|
|
||||||
</p>
|
|
||||||
<p style='text-align:right'>
|
|
||||||
<img src='http://www.xmpp.org/images/psa-license.jpg'
|
|
||||||
alt='A License to Jabber' width='50%' height='50%'/>
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<ul style='background-color:rgb(120,140,100)'>
|
|
||||||
<li> One </li>
|
|
||||||
<li> Two </li>
|
|
||||||
<li> Three </li>
|
|
||||||
</ul><hr /><pre style="background-color:rgb(120,120,120)">def fac(n):
|
|
||||||
def faciter(n,acc):
|
|
||||||
if n==0: return acc
|
|
||||||
return faciter(n-1, acc*n)
|
|
||||||
if n<0: raise ValueError('Must be non-negative')
|
|
||||||
return faciter(n,1)</pre>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<ol style='background-color:rgb(120,140,100)'>
|
|
||||||
<li> One </li>
|
|
||||||
<li> Two is nested: <ul style='background-color:rgb(200,200,100)'>
|
|
||||||
<li> One </li>
|
|
||||||
<li style='font-size:50%'> Two </li>
|
|
||||||
<li style='font-size:200%'> Three </li>
|
|
||||||
<li style='font-size:9999pt'> Four </li>
|
|
||||||
</ul></li>
|
|
||||||
<li> Three </li></ol>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<p>
|
|
||||||
<strong>
|
|
||||||
<a href='xmpp:example@example.org'>xmpp link</a>
|
|
||||||
</strong>: </p>
|
|
||||||
<div xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<cite style='margin: 7px;' title='xmpp:examples@example.org'>
|
|
||||||
<p>
|
|
||||||
<strong>examples@example.org wrote:</strong>
|
|
||||||
</p>
|
|
||||||
<p>this cite - bla bla bla, smile- :-) …</p>
|
|
||||||
</cite>
|
|
||||||
<div>
|
|
||||||
<p>some text</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p/>
|
|
||||||
<p>#232/1</p>
|
|
||||||
</body>
|
|
||||||
''')
|
|
||||||
htmlview.print_real_text(None, xhtml='<hr />')
|
|
||||||
htmlview.print_real_text(None, xhtml='''
|
|
||||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
|
||||||
<br/>
|
|
||||||
<img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\
|
|
||||||
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\
|
|
||||||
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\
|
|
||||||
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\
|
|
||||||
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\
|
|
||||||
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\
|
|
||||||
hhx4dbgYKAAA7' alt='Larry'/>
|
|
||||||
</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)
|
|
||||||
sw.add(htmlview.tv)
|
|
||||||
sw.show()
|
|
||||||
frame = Gtk.Frame()
|
|
||||||
frame.set_shadow_type(Gtk.ShadowType.IN)
|
|
||||||
frame.show()
|
|
||||||
frame.add(sw)
|
|
||||||
win = Gtk.Window()
|
|
||||||
win.add(frame)
|
|
||||||
win.set_default_size(400, 300)
|
|
||||||
win.show_all()
|
|
||||||
win.connect('destroy', lambda win: Gtk.main_quit())
|
|
||||||
Gtk.main()
|
|
||||||
|
|
|
@ -0,0 +1,188 @@
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
|
||||||
|
|
||||||
|
from gi.repository import Gtk, Gdk
|
||||||
|
|
||||||
|
from gajim.common import app
|
||||||
|
from gajim.common import configpaths
|
||||||
|
configpaths.init()
|
||||||
|
from gajim.common import caps_cache
|
||||||
|
|
||||||
|
from gajim.gtk.util import get_cursor
|
||||||
|
from gajim.conversation_textview import ConversationTextview
|
||||||
|
from gajim.gui_interface import Interface
|
||||||
|
|
||||||
|
|
||||||
|
caps_cache.capscache = MagicMock()
|
||||||
|
app.plugin_manager = MagicMock()
|
||||||
|
app.logger = MagicMock()
|
||||||
|
app.interface = Interface()
|
||||||
|
|
||||||
|
change_cursor = None
|
||||||
|
htmlview = ConversationTextview(None)
|
||||||
|
|
||||||
|
def on_textview_motion_notify_event(widget, event):
|
||||||
|
"""
|
||||||
|
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.tv.hyperlink_handler = htmlview.hyperlink_handler
|
||||||
|
|
||||||
|
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'>
|
||||||
|
<p xmlns='http://www.w3.org/1999/xhtml'>a:b
|
||||||
|
<a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google
|
||||||
|
</a>
|
||||||
|
</p><br/>
|
||||||
|
</body>''')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<p style='font-size:large'>
|
||||||
|
<span style='font-style: italic'>O
|
||||||
|
<span style='font-size:larger'>M</span>G</span>,
|
||||||
|
I'm <span style='color:green'>green</span>
|
||||||
|
with <span style='font-weight: bold'>envy</span>!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
http://test.com/ testing links autolinkifying
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<p>As Emerson said in his essay <span style='
|
||||||
|
font-style: italic; background-color:cyan'>Self-Reliance</span>:</p>
|
||||||
|
<p style='margin-left: 5px; margin-right: 2%'>
|
||||||
|
"A foolish consistency is the hobgoblin of little minds."
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<p style='text-align:center'>
|
||||||
|
Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>?
|
||||||
|
</p>
|
||||||
|
<p style='text-align:right'>
|
||||||
|
<img src='http://www.xmpp.org/images/psa-license.jpg'
|
||||||
|
alt='A License to Jabber' width='50%' height='50%'/>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<ul style='background-color:rgb(120,140,100)'>
|
||||||
|
<li> One </li>
|
||||||
|
<li> Two </li>
|
||||||
|
<li> Three </li>
|
||||||
|
</ul><hr /><pre style="background-color:rgb(120,120,120)">def fac(n):
|
||||||
|
def faciter(n,acc):
|
||||||
|
if n==0: return acc
|
||||||
|
return faciter(n-1, acc*n)
|
||||||
|
if n<0: raise ValueError('Must be non-negative')
|
||||||
|
return faciter(n,1)</pre>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<ol style='background-color:rgb(120,140,100)'>
|
||||||
|
<li> One </li>
|
||||||
|
<li> Two is nested: <ul style='background-color:rgb(200,200,100)'>
|
||||||
|
<li> One </li>
|
||||||
|
<li style='font-size:50%'> Two </li>
|
||||||
|
<li style='font-size:200%'> Three </li>
|
||||||
|
<li style='font-size:9999pt'> Four </li>
|
||||||
|
</ul></li>
|
||||||
|
<li> Three </li></ol>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<p>
|
||||||
|
<strong>
|
||||||
|
<a href='xmpp:example@example.org'>xmpp link</a>
|
||||||
|
</strong>: </p>
|
||||||
|
<div xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<cite style='margin: 7px;' title='xmpp:examples@example.org'>
|
||||||
|
<p>
|
||||||
|
<strong>examples@example.org wrote:</strong>
|
||||||
|
</p>
|
||||||
|
<p>this cite - bla bla bla, smile- :-) …</p>
|
||||||
|
</cite>
|
||||||
|
<div>
|
||||||
|
<p>some text</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p/>
|
||||||
|
<p>#232/1</p>
|
||||||
|
</body>
|
||||||
|
''')
|
||||||
|
htmlview.print_real_text(None, xhtml='<hr />')
|
||||||
|
htmlview.print_real_text(None, xhtml='''
|
||||||
|
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<br/>
|
||||||
|
<img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\
|
||||||
|
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\
|
||||||
|
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\
|
||||||
|
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\
|
||||||
|
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\
|
||||||
|
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\
|
||||||
|
hhx4dbgYKAAA7' alt='Larry'/>
|
||||||
|
</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)
|
||||||
|
sw.add(htmlview.tv)
|
||||||
|
sw.show()
|
||||||
|
frame = Gtk.Frame()
|
||||||
|
frame.set_shadow_type(Gtk.ShadowType.IN)
|
||||||
|
frame.show()
|
||||||
|
frame.add(sw)
|
||||||
|
win = Gtk.Window()
|
||||||
|
win.add(frame)
|
||||||
|
win.set_default_size(400, 300)
|
||||||
|
win.show_all()
|
||||||
|
win.connect('destroy', lambda win: Gtk.main_quit())
|
||||||
|
Gtk.main()
|
Loading…
Reference in New Issue