pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Fix username autocompletion
15 months ago, Elliott Sales de Andrade
152522734e16
Fix username autocompletion
This code still assumed the account chooser was a combo box, but it's a drop down now.
Testing Done:
Opened New IM dialog, typed a few letters, and selected a username from the Demo account (while a different account was selected.)
Reviewed at https://reviews.imfreedom.org/r/2362/
/*
* Purple - Internet Messaging Library
* Copyright (C) Pidgin Developers <devel@pidgin.im>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <https://www.gnu.org/licenses/>.
*/
#include
<glib.h>
#include
<purple.h>
/******************************************************************************
* Helpers
*****************************************************************************/
static
gboolean
test_request_page_string_validator
(
PurpleRequestField
*
field
,
char
**
errmsg
,
G_GNUC_UNUSED
gpointer
data
)
{
/* Validator for a string field that is valid if the value is "valid". */
PurpleRequestFieldString
*
strfield
=
PURPLE_REQUEST_FIELD_STRING
(
field
);
const
char
*
value
=
NULL
;
gboolean
result
=
TRUE
;
value
=
purple_request_field_string_get_value
(
strfield
);
if
(
!
purple_strequal
(
value
,
"valid"
))
{
if
(
errmsg
!=
NULL
)
{
*
errmsg
=
g_strdup_printf
(
"String value is not valid: %s"
,
value
);
}
result
=
FALSE
;
}
return
result
;
}
static
PurpleRequestGroup
*
test_request_page_new_valid_group
(
const
char
*
name
)
{
PurpleRequestGroup
*
group
=
NULL
;
PurpleRequestField
*
field
=
NULL
;
char
*
field_name
=
NULL
;
group
=
purple_request_group_new
(
name
);
/* Field is valid, making the group valid. */
field_name
=
g_strdup_printf
(
"%s-string"
,
name
);
field
=
purple_request_field_string_new
(
field_name
,
field_name
,
"valid"
,
FALSE
);
purple_request_field_set_validator
(
field
,
test_request_page_string_validator
,
NULL
,
NULL
);
g_free
(
field_name
);
purple_request_group_add_field
(
group
,
field
);
return
group
;
}
static
PurpleRequestGroup
*
test_request_page_new_invalid_group
(
const
char
*
name
)
{
PurpleRequestGroup
*
group
=
NULL
;
PurpleRequestField
*
field
=
NULL
;
char
*
field_name
=
NULL
;
group
=
purple_request_group_new
(
name
);
/* Field is invalid, making the group invalid. */
field_name
=
g_strdup_printf
(
"%s-string"
,
name
);
field
=
purple_request_field_string_new
(
field_name
,
field_name
,
"invalid"
,
FALSE
);
purple_request_field_set_validator
(
field
,
test_request_page_string_validator
,
NULL
,
NULL
);
g_free
(
field_name
);
purple_request_group_add_field
(
group
,
field
);
return
group
;
}
static
void
test_request_page_make_group_valid
(
PurpleRequestGroup
*
group
)
{
GListModel
*
model
=
G_LIST_MODEL
(
group
);
guint
n_items
;
n_items
=
g_list_model_get_n_items
(
model
);
for
(
guint
index
=
0
;
index
<
n_items
;
index
++
)
{
PurpleRequestFieldString
*
field
=
g_list_model_get_item
(
model
,
index
);
purple_request_field_string_set_value
(
field
,
"valid"
);
g_object_unref
(
field
);
}
}
static
void
test_request_page_make_group_invalid
(
PurpleRequestGroup
*
group
)
{
GListModel
*
model
=
G_LIST_MODEL
(
group
);
guint
n_items
;
n_items
=
g_list_model_get_n_items
(
model
);
for
(
guint
index
=
0
;
index
<
n_items
;
index
++
)
{
PurpleRequestFieldString
*
field
=
g_list_model_get_item
(
model
,
index
);
purple_request_field_string_set_value
(
field
,
"invalid"
);
g_object_unref
(
field
);
}
}
/******************************************************************************
* Tests
*****************************************************************************/
static
void
test_request_page_valid_changed_cb
(
G_GNUC_UNUSED
GObject
*
obj
,
G_GNUC_UNUSED
GParamSpec
*
pspec
,
gpointer
data
)
{
gint
*
called
=
data
;
*
called
+=
1
;
}
static
void
test_request_page_valid
(
void
)
{
PurpleRequestPage
*
page
=
NULL
;
PurpleRequestGroup
*
group1
=
NULL
,
*
group2
=
NULL
,
*
group3
=
NULL
;
gint
called
=
FALSE
;
page
=
purple_request_page_new
();
g_signal_connect
(
page
,
"notify::valid"
,
G_CALLBACK
(
test_request_page_valid_changed_cb
),
&
called
);
/* Empty pages are always valid. */
g_assert_true
(
purple_request_page_is_valid
(
page
));
/* An added valid group keeps the page valid. */
called
=
0
;
group1
=
test_request_page_new_valid_group
(
"group1"
);
purple_request_page_add_group
(
page
,
group1
);
g_assert_true
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
0
);
/* Making the group invalid makes the page invalid. */
called
=
0
;
test_request_page_make_group_invalid
(
group1
);
g_assert_false
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
1
);
/* Adding an invalid group keeps the page invalid. */
called
=
0
;
group2
=
test_request_page_new_invalid_group
(
"group2"
);
purple_request_page_add_group
(
page
,
group2
);
g_assert_false
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
0
);
/* Adding a valid group to an already invalid page does not change it to
* valid accidentally. */
called
=
0
;
group3
=
test_request_page_new_valid_group
(
"group3"
);
purple_request_page_add_group
(
page
,
group3
);
g_assert_false
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
0
);
/* Making one group valid while others are still invalid keeps the group
* invalid. */
called
=
0
;
test_request_page_make_group_valid
(
group1
);
g_assert_false
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
0
);
/* Making last invalid group valid makes the page valid again. */
called
=
0
;
test_request_page_make_group_valid
(
group2
);
g_assert_true
(
purple_request_page_is_valid
(
page
));
g_assert_cmpint
(
called
,
==
,
1
);
g_object_unref
(
page
);
}
/******************************************************************************
* Main
*****************************************************************************/
gint
main
(
gint
argc
,
gchar
*
argv
[])
{
g_test_init
(
&
argc
,
&
argv
,
NULL
);
g_test_add_func
(
"/request-page/valid"
,
test_request_page_valid
);
return
g_test_run
();
}