2019-01-09 22:59:03 +00:00
from . import ClientCaches
from . import ClientConstants as CC
from . import ClientData
from . import ClientDefaults
from . import ClientDownloading
from . import ClientDuplicates
from . import ClientGUIShortcuts
from . import ClientImporting
from . import ClientImportOptions
from . import ClientImportSubscriptions
from . import ClientMedia
from . import ClientNetworkingDomain
from . import ClientRatings
from . import ClientSearch
from . import ClientTags
from . import HydrusConstants as HC
from . import HydrusData
from . import HydrusNetwork
from . import HydrusSerialisable
2019-03-13 21:04:21 +00:00
from . import TestController as TC
2017-03-15 20:13:04 +00:00
import os
2017-03-08 23:23:12 +00:00
import unittest
2019-11-14 03:56:30 +00:00
from qtpy import QtCore as QC
2017-03-08 23:23:12 +00:00
2017-03-29 19:39:34 +00:00
class TestSerialisables ( unittest . TestCase ) :
2017-03-08 23:23:12 +00:00
def _dump_and_load_and_test ( self , obj , test_func ) :
serialisable_tuple = obj . GetSerialisableTuple ( )
self . assertIsInstance ( serialisable_tuple , tuple )
if isinstance ( obj , HydrusSerialisable . SerialisableBaseNamed ) :
( serialisable_type , name , version , serialisable_info ) = serialisable_tuple
elif isinstance ( obj , HydrusSerialisable . SerialisableBase ) :
( serialisable_type , version , serialisable_info ) = serialisable_tuple
self . assertEqual ( serialisable_type , obj . SERIALISABLE_TYPE )
self . assertEqual ( version , obj . SERIALISABLE_VERSION )
dupe_obj = HydrusSerialisable . CreateFromSerialisableTuple ( serialisable_tuple )
self . assertIsNot ( obj , dupe_obj )
test_func ( obj , dupe_obj )
#
json_string = obj . DumpToString ( )
self . assertIsInstance ( json_string , str )
dupe_obj = HydrusSerialisable . CreateFromString ( json_string )
self . assertIsNot ( obj , dupe_obj )
test_func ( obj , dupe_obj )
#
2019-01-09 22:59:03 +00:00
network_bytes = obj . DumpToNetworkBytes ( )
2017-03-08 23:23:12 +00:00
2019-01-09 22:59:03 +00:00
self . assertIsInstance ( network_bytes , bytes )
2017-03-08 23:23:12 +00:00
2019-01-09 22:59:03 +00:00
dupe_obj = HydrusSerialisable . CreateFromNetworkBytes ( network_bytes )
2017-03-08 23:23:12 +00:00
self . assertIsNot ( obj , dupe_obj )
test_func ( obj , dupe_obj )
def test_basics ( self ) :
2017-03-15 20:13:04 +00:00
def test ( obj , dupe_obj ) :
2019-01-09 22:59:03 +00:00
self . assertEqual ( len ( list ( obj . items ( ) ) ) , len ( list ( dupe_obj . items ( ) ) ) )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key , value ) in list ( obj . items ( ) ) :
2017-03-15 20:13:04 +00:00
self . assertEqual ( value , dupe_obj [ key ] )
#
2017-03-08 23:23:12 +00:00
d = HydrusSerialisable . SerialisableDictionary ( )
d [ 1 ] = 2
d [ 3 ] = ' test1 '
d [ ' test2 ' ] = 4
d [ ' test3 ' ] = 5
d [ 6 ] = HydrusSerialisable . SerialisableDictionary ( { i : ' test ' + str ( i ) for i in range ( 20 ) } )
d [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' test pred 1 ' ) ] = 56
d [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' test pred 2 ' ) ] = HydrusSerialisable . SerialisableList ( [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' test ' + str ( i ) ) for i in range ( 10 ) ] )
2019-01-09 22:59:03 +00:00
self . assertEqual ( len ( list ( d . keys ( ) ) ) , 7 )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key , value ) in list ( d . items ( ) ) :
2017-03-15 20:13:04 +00:00
self . assertEqual ( d [ key ] , value )
self . _dump_and_load_and_test ( d , test )
#
db = HydrusSerialisable . SerialisableBytesDictionary ( )
db [ HydrusData . GenerateKey ( ) ] = HydrusData . GenerateKey ( )
db [ HydrusData . GenerateKey ( ) ] = [ HydrusData . GenerateKey ( ) for i in range ( 10 ) ]
db [ 1 ] = HydrusData . GenerateKey ( )
db [ 2 ] = [ HydrusData . GenerateKey ( ) for i in range ( 10 ) ]
2019-01-09 22:59:03 +00:00
self . assertEqual ( len ( list ( db . keys ( ) ) ) , 4 )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key , value ) in list ( db . items ( ) ) :
2017-03-15 20:13:04 +00:00
self . assertEqual ( db [ key ] , value )
self . _dump_and_load_and_test ( db , test )
2017-04-12 21:46:46 +00:00
def test_SERIALISABLE_TYPE_APPLICATION_COMMAND ( self ) :
2017-03-15 20:13:04 +00:00
2017-03-08 23:23:12 +00:00
def test ( obj , dupe_obj ) :
2017-04-12 21:46:46 +00:00
self . assertEqual ( obj . GetCommandType ( ) , dupe_obj . GetCommandType ( ) )
2017-03-08 23:23:12 +00:00
2017-04-12 21:46:46 +00:00
self . assertEqual ( obj . GetData ( ) , dupe_obj . GetData ( ) )
2017-03-08 23:23:12 +00:00
2017-04-12 21:46:46 +00:00
acs = [ ]
2017-03-15 20:13:04 +00:00
2017-04-19 20:58:30 +00:00
acs . append ( ( ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_SIMPLE , ' archive_file ' ) , ' archive_file ' ) )
2017-04-12 21:46:46 +00:00
acs . append ( ( ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_CONTENT , ( HydrusData . GenerateKey ( ) , HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_FLIP , ' test ' ) ) , ' flip on/off mappings " test " for unknown service! ' ) )
2019-09-18 22:40:39 +00:00
acs . append ( ( ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_CONTENT , ( CC . DEFAULT_LOCAL_TAG_SERVICE_KEY , HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_FLIP , ' test ' ) ) , ' flip on/off mappings " test " for my tags ' ) )
2017-04-12 21:46:46 +00:00
acs . append ( ( ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_CONTENT , ( HydrusData . GenerateKey ( ) , HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_SET , 0.4 ) ) , ' set ratings " 0.4 " for unknown service! ' ) )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
for ( ac , s ) in acs :
self . _dump_and_load_and_test ( ac , test )
self . assertEqual ( ac . ToString ( ) , s )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
2017-04-26 21:58:12 +00:00
def test_SERIALISABLE_TYPE_DUPLICATE_ACTION_OPTIONS ( self ) :
def test ( obj , dupe_obj ) :
self . assertEqual ( obj . ToTuple ( ) , dupe_obj . ToTuple ( ) )
2019-09-18 22:40:39 +00:00
duplicate_action_options_delete_and_move = ClientDuplicates . DuplicateActionOptions ( [ ( CC . DEFAULT_LOCAL_TAG_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_MOVE , ClientTags . TagFilter ( ) ) ] , [ ( TC . LOCAL_RATING_LIKE_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_MOVE ) , ( TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_MOVE ) ] )
duplicate_action_options_copy = ClientDuplicates . DuplicateActionOptions ( [ ( CC . DEFAULT_LOCAL_TAG_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_COPY , ClientTags . TagFilter ( ) ) ] , [ ( TC . LOCAL_RATING_LIKE_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_COPY ) , ( TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_COPY ) ] )
duplicate_action_options_merge = ClientDuplicates . DuplicateActionOptions ( [ ( CC . DEFAULT_LOCAL_TAG_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_TWO_WAY_MERGE , ClientTags . TagFilter ( ) ) ] , [ ( TC . LOCAL_RATING_LIKE_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_TWO_WAY_MERGE ) , ( TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY , HC . CONTENT_MERGE_ACTION_TWO_WAY_MERGE ) ] )
2017-04-26 21:58:12 +00:00
inbox = True
size = 40960
mime = HC . IMAGE_JPEG
width = 640
height = 480
duration = None
num_frames = None
2019-08-07 22:59:53 +00:00
has_audio = False
2017-04-26 21:58:12 +00:00
num_words = None
2017-05-31 21:50:53 +00:00
local_locations_manager = ClientMedia . LocationsManager ( { CC . LOCAL_FILE_SERVICE_KEY , CC . COMBINED_LOCAL_FILE_SERVICE_KEY } , set ( ) , set ( ) , set ( ) , inbox )
trash_locations_manager = ClientMedia . LocationsManager ( { CC . TRASH_SERVICE_KEY , CC . COMBINED_LOCAL_FILE_SERVICE_KEY } , set ( ) , set ( ) , set ( ) , inbox )
deleted_locations_manager = ClientMedia . LocationsManager ( set ( ) , { CC . COMBINED_LOCAL_FILE_SERVICE_KEY } , set ( ) , set ( ) , inbox )
2017-04-26 21:58:12 +00:00
# duplicate to generate proper dicts
2019-09-18 22:40:39 +00:00
one_tags_manager = ClientMedia . TagsManager ( { CC . DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC . CONTENT_STATUS_CURRENT : { ' one ' } } } ) . Duplicate ( )
two_tags_manager = ClientMedia . TagsManager ( { CC . DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC . CONTENT_STATUS_CURRENT : { ' two ' } } } ) . Duplicate ( )
substantial_tags_manager = ClientMedia . TagsManager ( { CC . DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC . CONTENT_STATUS_CURRENT : { ' test tag ' , ' series:namespaced test tag ' } } } ) . Duplicate ( )
2017-04-26 21:58:12 +00:00
empty_tags_manager = ClientMedia . TagsManager ( { } ) . Duplicate ( )
one_ratings_manager = ClientRatings . RatingsManager ( { TC . LOCAL_RATING_LIKE_SERVICE_KEY : 1.0 , TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.8 } )
two_ratings_manager = ClientRatings . RatingsManager ( { TC . LOCAL_RATING_LIKE_SERVICE_KEY : 0.0 , TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.6 } )
substantial_ratings_manager = ClientRatings . RatingsManager ( { TC . LOCAL_RATING_LIKE_SERVICE_KEY : 1.0 , TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.8 } )
empty_ratings_manager = ClientRatings . RatingsManager ( { } )
2018-12-05 22:35:30 +00:00
file_viewing_stats_manager = ClientMedia . FileViewingStatsManager . STATICGenerateEmptyManager ( )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
local_hash_has_values = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 1 , local_hash_has_values , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , substantial_tags_manager , local_locations_manager , substantial_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
local_media_has_values = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
other_local_hash_has_values = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 2 , other_local_hash_has_values , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , substantial_tags_manager , local_locations_manager , substantial_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
other_local_media_has_values = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
local_hash_empty = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 3 , local_hash_empty , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , empty_tags_manager , local_locations_manager , empty_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
local_media_empty = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
trashed_hash_empty = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 4 , trashed_hash_empty , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , empty_tags_manager , trash_locations_manager , empty_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
trashed_media_empty = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
deleted_hash_empty = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 5 , deleted_hash_empty , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , empty_tags_manager , deleted_locations_manager , empty_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
deleted_media_empty = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
one_hash = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 6 , one_hash , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , one_tags_manager , local_locations_manager , one_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
one_media = ClientMedia . MediaSingleton ( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
two_hash = HydrusData . GenerateKey ( )
2019-08-07 22:59:53 +00:00
file_info_manager = ClientMedia . FileInfoManager ( 7 , two_hash , size , mime , width , height , duration , num_frames , has_audio , num_words )
2017-05-31 21:50:53 +00:00
2018-12-05 22:35:30 +00:00
media_result = ClientMedia . MediaResult ( file_info_manager , two_tags_manager , local_locations_manager , two_ratings_manager , file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
two_media = ClientMedia . MediaSingleton ( media_result )
#
self . _dump_and_load_and_test ( duplicate_action_options_delete_and_move , test )
self . _dump_and_load_and_test ( duplicate_action_options_copy , test )
self . _dump_and_load_and_test ( duplicate_action_options_merge , test )
#
def assertSCUEqual ( one , two ) :
self . assertEqual ( TC . ConvertServiceKeysToContentUpdatesToComparable ( one ) , TC . ConvertServiceKeysToContentUpdatesToComparable ( two ) )
2019-04-10 22:50:53 +00:00
file_deletion_reason = ' test delete '
2017-04-26 21:58:12 +00:00
#
2019-05-22 22:35:06 +00:00
result = duplicate_action_options_delete_and_move . ProcessPairIntoContentUpdates ( local_media_has_values , local_media_empty , delete_second = True , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-04-10 22:50:53 +00:00
scu [ CC . LOCAL_FILE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , { local_hash_empty } , reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
2019-05-22 22:35:06 +00:00
result = duplicate_action_options_delete_and_move . ProcessPairIntoContentUpdates ( local_media_has_values , trashed_media_empty , delete_second = True , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-04-10 22:50:53 +00:00
scu [ CC . TRASH_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , { trashed_hash_empty } , reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
2019-05-22 22:35:06 +00:00
result = duplicate_action_options_delete_and_move . ProcessPairIntoContentUpdates ( local_media_has_values , deleted_media_empty , delete_second = True , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
self . assertEqual ( result , { } )
2017-04-26 21:58:12 +00:00
#
2019-05-22 22:35:06 +00:00
result = duplicate_action_options_delete_and_move . ProcessPairIntoContentUpdates ( local_media_has_values , other_local_media_has_values , delete_second = True , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_DELETE , ( ' test tag ' , { other_local_hash_has_values } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_DELETE , ( ' series:namespaced test tag ' , { other_local_hash_has_values } ) ) ]
2017-04-26 21:58:12 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( None , { other_local_hash_has_values } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( None , { other_local_hash_has_values } ) ) ]
2019-04-10 22:50:53 +00:00
scu [ CC . LOCAL_FILE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , { other_local_hash_has_values } , reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
2019-05-22 22:35:06 +00:00
result = duplicate_action_options_delete_and_move . ProcessPairIntoContentUpdates ( local_media_empty , other_local_media_has_values , delete_second = True , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' test tag ' , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:namespaced test tag ' , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_DELETE , ( ' test tag ' , { other_local_hash_has_values } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_DELETE , ( ' series:namespaced test tag ' , { other_local_hash_has_values } ) ) ]
2017-04-26 21:58:12 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( None , { other_local_hash_has_values } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.8 , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( None , { other_local_hash_has_values } ) ) ]
2019-04-10 22:50:53 +00:00
scu [ CC . LOCAL_FILE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , { other_local_hash_has_values } , reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
#
2019-04-10 22:50:53 +00:00
result = duplicate_action_options_copy . ProcessPairIntoContentUpdates ( local_media_has_values , local_media_empty , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
self . assertEqual ( result , { } )
2017-04-26 21:58:12 +00:00
#
2019-04-10 22:50:53 +00:00
result = duplicate_action_options_copy . ProcessPairIntoContentUpdates ( local_media_empty , other_local_media_has_values , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' test tag ' , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:namespaced test tag ' , { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , { local_hash_empty } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.8 , { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
#
2019-04-10 22:50:53 +00:00
result = duplicate_action_options_merge . ProcessPairIntoContentUpdates ( local_media_has_values , local_media_empty , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' test tag ' , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:namespaced test tag ' , { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , { local_hash_empty } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.8 , { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
2019-04-10 22:50:53 +00:00
result = duplicate_action_options_merge . ProcessPairIntoContentUpdates ( local_media_empty , other_local_media_has_values , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' test tag ' , { local_hash_empty } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:namespaced test tag ' , { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , { local_hash_empty } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.8 , { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
#
2019-04-10 22:50:53 +00:00
result = duplicate_action_options_merge . ProcessPairIntoContentUpdates ( one_media , two_media , file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = { }
2019-09-18 22:40:39 +00:00
scu [ CC . DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' one ' , { two_hash } ) ) , HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' two ' , { one_hash } ) ) ]
2019-02-27 23:03:30 +00:00
scu [ TC . LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , { two_hash } ) ) ]
scu [ TC . LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.8 , { two_hash } ) ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual ( result , scu )
2017-04-26 21:58:12 +00:00
2017-04-12 21:46:46 +00:00
def test_SERIALISABLE_TYPE_SHORTCUT ( self ) :
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
def test ( obj , dupe_obj ) :
self . assertEqual ( dupe_obj . __hash__ ( ) , ( dupe_obj . _shortcut_type , dupe_obj . _shortcut_key , tuple ( dupe_obj . _modifiers ) ) . __hash__ ( ) )
self . assertEqual ( obj , dupe_obj )
shortcuts = [ ]
2017-03-15 20:13:04 +00:00
2018-05-16 20:09:50 +00:00
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( ) , ' f7 ' ) )
2017-03-15 20:13:04 +00:00
2019-11-14 03:56:30 +00:00
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_SPECIAL , CC . SHORTCUT_KEY_SPECIAL_SPACE , [ ] ) , ' space ' ) )
2019-12-11 23:18:37 +00:00
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_CHARACTER , ord ( ' a ' ) , [ CC . SHORTCUT_MODIFIER_CTRL ] ) , ' ctrl+a ' ) )
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_CHARACTER , ord ( ' A ' ) , [ CC . SHORTCUT_MODIFIER_CTRL ] ) , ' ctrl+a ' ) )
2019-11-14 03:56:30 +00:00
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_SPECIAL , CC . SHORTCUT_KEY_SPECIAL_HOME , [ CC . SHORTCUT_MODIFIER_ALT , CC . SHORTCUT_MODIFIER_CTRL ] ) , ' ctrl+alt+home ' ) )
2017-04-12 21:46:46 +00:00
2018-05-16 20:09:50 +00:00
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_LEFT , [ ] ) , ' left-click ' ) )
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_MIDDLE , [ CC . SHORTCUT_MODIFIER_CTRL ] ) , ' ctrl+middle-click ' ) )
shortcuts . append ( ( ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_SCROLL_DOWN , [ CC . SHORTCUT_MODIFIER_ALT , CC . SHORTCUT_MODIFIER_SHIFT ] ) , ' alt+shift+scroll down ' ) )
2017-04-12 21:46:46 +00:00
for ( shortcut , s ) in shortcuts :
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
self . _dump_and_load_and_test ( shortcut , test )
self . assertEqual ( shortcut . ToString ( ) , s )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
def test_SERIALISABLE_TYPE_SHORTCUT_SET ( self ) :
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
def test ( obj , dupe_obj ) :
for ( shortcut , command ) in obj :
self . assertEqual ( dupe_obj . GetCommand ( shortcut ) . GetData ( ) , command . GetData ( ) )
default_shortcuts = ClientDefaults . GetDefaultShortcuts ( )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
for shortcuts in default_shortcuts :
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
self . _dump_and_load_and_test ( shortcuts , test )
2017-03-15 20:13:04 +00:00
2017-03-08 23:23:12 +00:00
2017-04-19 20:58:30 +00:00
command_1 = ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_SIMPLE , ' archive_file ' )
2017-04-12 21:46:46 +00:00
command_2 = ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_CONTENT , ( HydrusData . GenerateKey ( ) , HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_FLIP , ' test ' ) )
2019-09-18 22:40:39 +00:00
command_3 = ClientData . ApplicationCommand ( CC . APPLICATION_COMMAND_TYPE_CONTENT , ( CC . DEFAULT_LOCAL_TAG_SERVICE_KEY , HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_FLIP , ' test ' ) )
2017-04-12 21:46:46 +00:00
2019-11-14 03:56:30 +00:00
k_shortcut_1 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_SPECIAL , CC . SHORTCUT_KEY_SPECIAL_SPACE , [ ] )
2019-12-11 23:18:37 +00:00
k_shortcut_2 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_CHARACTER , ord ( ' a ' ) , [ CC . SHORTCUT_MODIFIER_CTRL ] )
k_shortcut_3 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_CHARACTER , ord ( ' A ' ) , [ CC . SHORTCUT_MODIFIER_CTRL ] )
2019-11-14 03:56:30 +00:00
k_shortcut_4 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_KEYBOARD_SPECIAL , CC . SHORTCUT_KEY_SPECIAL_HOME , [ CC . SHORTCUT_MODIFIER_ALT , CC . SHORTCUT_MODIFIER_CTRL ] )
2017-04-12 21:46:46 +00:00
2018-05-16 20:09:50 +00:00
m_shortcut_1 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_LEFT , [ ] )
m_shortcut_2 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_MIDDLE , [ CC . SHORTCUT_MODIFIER_CTRL ] )
m_shortcut_3 = ClientGUIShortcuts . Shortcut ( CC . SHORTCUT_TYPE_MOUSE , CC . SHORTCUT_MOUSE_SCROLL_DOWN , [ CC . SHORTCUT_MODIFIER_ALT , CC . SHORTCUT_MODIFIER_SHIFT ] )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set = ClientGUIShortcuts . ShortcutSet ( ' test ' )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set . SetCommand ( k_shortcut_1 , command_1 )
shortcut_set . SetCommand ( k_shortcut_2 , command_2 )
shortcut_set . SetCommand ( k_shortcut_3 , command_2 )
shortcut_set . SetCommand ( k_shortcut_4 , command_3 )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set . SetCommand ( m_shortcut_1 , command_1 )
shortcut_set . SetCommand ( m_shortcut_2 , command_2 )
shortcut_set . SetCommand ( m_shortcut_3 , command_3 )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
self . _dump_and_load_and_test ( shortcut_set , test )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
self . assertEqual ( shortcut_set . GetCommand ( k_shortcut_1 ) . GetData ( ) , command_1 . GetData ( ) )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set . SetCommand ( k_shortcut_1 , command_3 )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
self . assertEqual ( shortcut_set . GetCommand ( k_shortcut_1 ) . GetData ( ) , command_3 . GetData ( ) )
2017-04-12 21:46:46 +00:00
2017-03-29 19:39:34 +00:00
def test_SERIALISABLE_TYPE_SUBSCRIPTION ( self ) :
def test ( obj , dupe_obj ) :
self . assertEqual ( obj . GetName ( ) , dupe_obj . GetName ( ) )
2018-09-05 20:52:32 +00:00
self . assertEqual ( obj . _gug_key_and_name , dupe_obj . _gug_key_and_name )
2017-11-08 22:07:12 +00:00
self . assertEqual ( len ( obj . _queries ) , len ( dupe_obj . _queries ) )
2017-03-29 19:39:34 +00:00
self . assertEqual ( obj . _initial_file_limit , dupe_obj . _initial_file_limit )
self . assertEqual ( obj . _periodic_file_limit , dupe_obj . _periodic_file_limit )
self . assertEqual ( obj . _paused , dupe_obj . _paused )
2017-09-13 20:50:41 +00:00
self . assertEqual ( obj . _file_import_options . GetSerialisableTuple ( ) , dupe_obj . _file_import_options . GetSerialisableTuple ( ) )
2017-09-20 19:47:31 +00:00
self . assertEqual ( obj . _tag_import_options . GetSerialisableTuple ( ) , dupe_obj . _tag_import_options . GetSerialisableTuple ( ) )
2017-03-29 19:39:34 +00:00
2017-11-08 22:07:12 +00:00
self . assertEqual ( obj . _no_work_until , dupe_obj . _no_work_until )
2017-03-29 19:39:34 +00:00
2018-08-01 20:44:57 +00:00
sub = ClientImportSubscriptions . Subscription ( ' test sub ' )
2017-03-29 19:39:34 +00:00
self . _dump_and_load_and_test ( sub , test )
2018-09-05 20:52:32 +00:00
gug_key_and_name = ( HydrusData . GenerateKey ( ) , ' muh test gug ' )
2018-08-01 20:44:57 +00:00
queries = [ ClientImportSubscriptions . SubscriptionQuery ( ' test query ' ) , ClientImportSubscriptions . SubscriptionQuery ( ' test query 2 ' ) ]
2018-05-16 20:09:50 +00:00
checker_options = ClientImportOptions . CheckerOptions ( )
2017-03-29 19:39:34 +00:00
initial_file_limit = 100
periodic_file_limit = 50
paused = False
2018-04-18 22:10:15 +00:00
file_import_options = ClientImportOptions . FileImportOptions ( )
2018-06-27 19:27:05 +00:00
2018-08-08 20:29:54 +00:00
service_tag_import_options = ClientImportOptions . ServiceTagImportOptions ( get_tags = False , additional_tags = { ' test additional tag ' , ' and another ' } )
2018-06-27 19:27:05 +00:00
tag_import_options = ClientImportOptions . TagImportOptions ( service_keys_to_service_tag_import_options = { HydrusData . GenerateKey ( ) : service_tag_import_options } )
2017-03-29 19:39:34 +00:00
2017-11-08 22:07:12 +00:00
no_work_until = HydrusData . GetNow ( ) - 86400 * 20
2017-03-29 19:39:34 +00:00
2018-09-05 20:52:32 +00:00
sub . SetTuple ( gug_key_and_name , queries , checker_options , initial_file_limit , periodic_file_limit , paused , file_import_options , tag_import_options , no_work_until )
2017-03-29 19:39:34 +00:00
2018-09-05 20:52:32 +00:00
self . assertEqual ( sub . GetGUGKeyAndName ( ) , gug_key_and_name )
2017-09-20 19:47:31 +00:00
self . assertEqual ( sub . GetTagImportOptions ( ) , tag_import_options )
2017-11-08 22:07:12 +00:00
self . assertEqual ( sub . GetQueries ( ) , queries )
2017-03-29 19:39:34 +00:00
self . assertEqual ( sub . _paused , False )
sub . PauseResume ( )
self . assertEqual ( sub . _paused , True )
sub . PauseResume ( )
self . assertEqual ( sub . _paused , False )
self . _dump_and_load_and_test ( sub , test )
2018-04-25 22:07:52 +00:00
def test_SERIALISABLE_TYPE_TAG_FILTER ( self ) :
2017-05-24 20:28:24 +00:00
def test ( obj , dupe_obj ) :
self . assertEqual ( obj . _tag_slices_to_rules , dupe_obj . _tag_slices_to_rules )
tags = set ( )
tags . add ( ' title:test title ' )
tags . add ( ' series:neon genesis evangelion ' )
tags . add ( ' series:kill la kill ' )
tags . add ( ' smile ' )
tags . add ( ' blue eyes ' )
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' , ' title:test title ' , ' series:neon genesis evangelion ' , ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , set ( ) )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' series: ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' series:neon genesis evangelion ' , ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' series:kill la kill ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' smile ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' series: ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' , ' series:neon genesis evangelion ' , ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' : ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' series:kill la kill ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' , ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' series: ' , CC . FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' , ' title:test title ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' series: ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' series:neon genesis evangelion ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' smile ' , ' blue eyes ' , ' title:test title ' , ' series:neon genesis evangelion ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' title:test title ' , ' series:neon genesis evangelion ' , ' series:kill la kill ' } )
2017-05-24 20:28:24 +00:00
#
2018-04-25 22:07:52 +00:00
tag_filter = ClientTags . TagFilter ( )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
tag_filter . SetRule ( ' ' , CC . FILTER_BLACKLIST )
tag_filter . SetRule ( ' blue eyes ' , CC . FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . _dump_and_load_and_test ( tag_filter , test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self . assertEqual ( tag_filter . Filter ( tags ) , { ' title:test title ' , ' series:neon genesis evangelion ' , ' series:kill la kill ' , ' blue eyes ' } )
2017-05-24 20:28:24 +00:00