Fix GenericAccount::to_email_identifier not actually working
The GVariant type "*" only matches a single data type, not many, and the sense of the test to check serialised ids was wrong anyway. As a reuslt, this method probably never worked. Add a unit test.
This commit is contained in:
parent
543c753186
commit
bf4f5c4780
5 changed files with 106 additions and 6 deletions
|
|
@ -19,6 +19,10 @@
|
|||
*/
|
||||
|
||||
public abstract class Geary.EmailIdentifier : BaseObject, Gee.Hashable<Geary.EmailIdentifier> {
|
||||
|
||||
/** Base variant type returned by {@link to_variant}. */
|
||||
public const string BASE_VARIANT_TYPE = "(y??)";
|
||||
|
||||
// Warning: only change this if you know what you are doing.
|
||||
protected string unique;
|
||||
|
||||
|
|
@ -37,7 +41,8 @@ public abstract class Geary.EmailIdentifier : BaseObject, Gee.Hashable<Geary.Ema
|
|||
* Action parameters, and so on.
|
||||
*
|
||||
* @return a serialised form of this id, that will match the
|
||||
* GVariantType `(*)`
|
||||
* GVariantType given by {@link BASE_VARIANT_TYPE}.
|
||||
*
|
||||
* @see Account.to_email_identifier
|
||||
*/
|
||||
public abstract GLib.Variant to_variant();
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
|
|||
Geary.SpecialFolderType.ARCHIVE,
|
||||
};
|
||||
|
||||
private static GLib.VariantType email_id_type = new GLib.VariantType("(y*)");
|
||||
private static GLib.VariantType email_id_type = new GLib.VariantType(
|
||||
EmailIdentifier.BASE_VARIANT_TYPE
|
||||
);
|
||||
|
||||
|
||||
/** Service for incoming IMAP connections. */
|
||||
|
|
@ -408,10 +410,8 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
|
|||
/** {@inheritDoc} */
|
||||
public override EmailIdentifier to_email_identifier(GLib.Variant serialised)
|
||||
throws EngineError.BAD_PARAMETERS {
|
||||
if (serialised.is_of_type(GenericAccount.email_id_type)) {
|
||||
throw new EngineError.BAD_PARAMETERS(
|
||||
"Invalid outer serialised type: (y*)"
|
||||
);
|
||||
if (!serialised.is_of_type(GenericAccount.email_id_type)) {
|
||||
throw new EngineError.BAD_PARAMETERS("Invalid outer serialised type");
|
||||
}
|
||||
char type = (char) serialised.get_child_value(0).get_byte();
|
||||
if (type == 'i')
|
||||
|
|
|
|||
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright 2019 Michael Gratton <mike@vee.net>
|
||||
*
|
||||
* This software is licensed under the GNU Lesser General Public License
|
||||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.ImapEngine.GenericAccountTest : TestCase {
|
||||
|
||||
|
||||
internal class TestAccount : GenericAccount {
|
||||
|
||||
public TestAccount(AccountInformation config,
|
||||
ImapDB.Account local,
|
||||
Endpoint incoming_remote,
|
||||
Endpoint outgoing_remote) {
|
||||
base(config, local, incoming_remote, outgoing_remote);
|
||||
}
|
||||
|
||||
protected override MinimalFolder new_folder(ImapDB.Folder local_folder) {
|
||||
return new MinimalFolder(
|
||||
this,
|
||||
local_folder,
|
||||
NONE
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private GLib.File? tmp_dir = null;
|
||||
private Geary.AccountInformation? config = null;
|
||||
private ImapDB.Account? local_account = null;
|
||||
|
||||
|
||||
public GenericAccountTest() {
|
||||
base("Geary.ImapEngine.GenericAccountTest");
|
||||
add_test("to_email_identifier", to_email_identifier);
|
||||
}
|
||||
|
||||
public override void set_up() throws GLib.Error {
|
||||
this.tmp_dir = GLib.File.new_for_path(
|
||||
GLib.DirUtils.make_tmp(
|
||||
"geary-imap-engine-generic-account-test-XXXXXX"
|
||||
)
|
||||
);
|
||||
|
||||
this.config = new Geary.AccountInformation(
|
||||
"test",
|
||||
ServiceProvider.OTHER,
|
||||
new MockCredentialsMediator(),
|
||||
new Geary.RFC822.MailboxAddress(null, "test@example.com")
|
||||
);
|
||||
|
||||
this.local_account = new ImapDB.Account(
|
||||
config,
|
||||
this.tmp_dir,
|
||||
GLib.File.new_for_path(_SOURCE_ROOT_DIR).get_child("sql")
|
||||
);
|
||||
this.local_account.open_async.begin(
|
||||
null,
|
||||
(obj, ret) => { async_complete(ret); }
|
||||
);
|
||||
this.local_account.open_async.end(async_result());
|
||||
}
|
||||
|
||||
public override void tear_down() throws GLib.Error {
|
||||
this.local_account.close_async.begin(
|
||||
null,
|
||||
(obj, ret) => { async_complete(ret); }
|
||||
);
|
||||
this.local_account.close_async.end(async_result());
|
||||
this.local_account = null;
|
||||
this.config = null;
|
||||
|
||||
delete_file(this.tmp_dir);
|
||||
this.tmp_dir = null;
|
||||
}
|
||||
|
||||
public void to_email_identifier() throws GLib.Error {
|
||||
TestAccount test_article = new TestAccount(
|
||||
this.config,
|
||||
this.local_account,
|
||||
new Endpoint(new GLib.NetworkAddress("localhost", 143), NONE, 0),
|
||||
new Endpoint(new GLib.NetworkAddress("localhost", 25), NONE, 0)
|
||||
);
|
||||
|
||||
assert_non_null(
|
||||
test_article.to_email_identifier(new GLib.Variant("(yxx)", 'i', 1, 2))
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -47,6 +47,7 @@ geary_test_engine_sources = [
|
|||
'engine/imap-db/imap-db-email-identifier-test.vala',
|
||||
'engine/imap-db/imap-db-folder-test.vala',
|
||||
'engine/imap-engine/account-processor-test.vala',
|
||||
'engine/imap-engine/imap-engine-generic-account-test.vala',
|
||||
'engine/mime-content-type-test.vala',
|
||||
'engine/outbox/outbox-email-identifier-test.vala',
|
||||
'engine/rfc822-mailbox-address-test.vala',
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ int main(string[] args) {
|
|||
engine.add_suite(new Geary.ImapDB.EmailIdentifierTest().get_suite());
|
||||
engine.add_suite(new Geary.ImapDB.FolderTest().get_suite());
|
||||
engine.add_suite(new Geary.ImapEngine.AccountProcessorTest().get_suite());
|
||||
engine.add_suite(new Geary.ImapEngine.GenericAccountTest().get_suite());
|
||||
|
||||
// Depends on ImapDb.Database working correctly
|
||||
engine.add_suite(new Geary.ContactStoreImplTest().get_suite());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue