hydrus/include/TestClientListBoxes.py

225 lines
6.4 KiB
Python

import ClientConstants as CC
import ClientDefaults
import ClientGUIListBoxes
import collections
import HydrusConstants as HC
import os
import random
import TestConstants
import time
import unittest
import wx
import HydrusGlobals as HG
def DoClick( click, panel, do_delayed_ok_afterwards = False ):
wx.QueueEvent( panel, click )
if do_delayed_ok_afterwards:
HG.test_controller.CallLaterWXSafe( panel, 1, PressKeyOnFocusedWindow, wx.WXK_RETURN )
wx.YieldIfNeeded()
time.sleep( 0.1 )
def GetAllClickableIndices( panel ):
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
current_y = 5
click.SetX( 10 )
click.SetY( current_y )
all_clickable_indices = {}
while panel._GetIndexUnderMouse( click ) is not None:
index = panel._GetIndexUnderMouse( click )
if index not in all_clickable_indices:
all_clickable_indices[ index ] = current_y
current_y += 5
click.SetY( current_y )
return all_clickable_indices
def PressKey( window, key ):
window.SetFocus()
uias = wx.UIActionSimulator()
uias.Char( key )
def PressKeyOnFocusedWindow( key ):
uias = wx.UIActionSimulator()
uias.Char( key )
class TestListBoxes( unittest.TestCase ):
def test_listbox_colour_options( self ):
frame = TestConstants.TestFrame()
try:
initial_namespace_colours = { 'series' : ( 153, 101, 21 ), '' : ( 0, 111, 250 ), None : ( 114, 160, 193 ), 'creator' : ( 170, 0, 0 ) }
panel = ClientGUIListBoxes.ListBoxTagsColourOptions( frame, initial_namespace_colours )
frame.SetPanel( panel )
self.assertEqual( panel.GetNamespaceColours(), initial_namespace_colours )
#
new_namespace_colours = dict( initial_namespace_colours )
new_namespace_colours[ 'character' ] = ( 0, 170, 0 )
colour = wx.Colour( 0, 170, 0 )
panel.SetNamespaceColour( 'character', colour )
self.assertEqual( panel.GetNamespaceColours(), new_namespace_colours )
#
terms = set( panel._terms )
ordered_terms = list( panel._ordered_terms )
self.assertEqual( len( terms ), len( ordered_terms ) )
#
all_clickable_indices = GetAllClickableIndices( panel )
self.assertEqual( len( all_clickable_indices.keys() ), len( terms ) )
self.assertEqual( set( all_clickable_indices.keys() ), set( range( len( all_clickable_indices.keys() ) ) ) )
#
for ( index, y ) in all_clickable_indices.items():
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
click.SetX( 10 )
click.SetY( y )
DoClick( click, panel )
self.assertEqual( panel.GetSelectedNamespaceColours(), dict( [ ordered_terms[ index ] ] ) )
#
current_y = 5
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
click.SetX( 10 )
click.SetY( current_y )
while panel._GetIndexUnderMouse( click ) is not None:
current_y += 5
click.SetY( current_y )
DoClick( click, panel )
self.assertEqual( panel.GetSelectedNamespaceColours(), {} )
#
if len( all_clickable_indices.keys() ) > 2:
indices = random.sample( all_clickable_indices.keys(), len( all_clickable_indices.keys() ) - 1 )
for index in indices:
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
click.SetControlDown( True )
click.SetX( 10 )
click.SetY( all_clickable_indices[ index ] )
DoClick( click, panel )
expected_selected_terms = [ ordered_terms[ index ] for index in indices ]
self.assertEqual( panel.GetSelectedNamespaceColours(), dict( expected_selected_terms ) )
#
random_index = random.choice( all_clickable_indices.keys() )
while ordered_terms[ random_index ][0] in panel.PROTECTED_TERMS:
random_index = random.choice( all_clickable_indices.keys() )
del new_namespace_colours[ ordered_terms[ random_index ][0] ]
# select nothing
current_y = 5
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
click.SetX( 10 )
click.SetY( current_y )
while panel._GetIndexUnderMouse( click ) is not None:
current_y += 5
click.SetY( current_y )
DoClick( click, panel )
# select the random index
click = wx.MouseEvent( wx.wxEVT_LEFT_DOWN )
click.SetX( 10 )
click.SetY( all_clickable_indices[ random_index ] )
DoClick( click, panel )
# now double-click to activate and hence remove
doubleclick = wx.MouseEvent( wx.wxEVT_LEFT_DCLICK )
doubleclick.SetX( 5 )
doubleclick.SetY( all_clickable_indices[ random_index ] )
DoClick( doubleclick, panel, do_delayed_ok_afterwards = True )
self.assertEqual( panel.GetNamespaceColours(), new_namespace_colours )
finally:
frame.Hide()
frame.Destroy()