1/* GtkFileFilter tests
2 *
3 * Copyright (C) 2021, Red Hat, Inc.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <locale.h>
20
21#include <gtk/gtk.h>
22
23static void
24test_basic (void)
25{
26 GtkFileFilter *filter;
27
28 filter = gtk_file_filter_new ();
29 gtk_file_filter_set_name (filter, name: "test");
30 g_assert_cmpstr (gtk_file_filter_get_name (filter), ==, "test");
31
32 g_object_unref (object: filter);
33}
34
35static void
36test_pattern (void)
37{
38 GtkFileFilter *filter;
39 char *attrs;
40 GFileInfo *info;
41
42 filter = gtk_file_filter_new ();
43 gtk_file_filter_add_pattern (filter, pattern: "D*.st[xy]");
44 attrs = g_strjoinv (separator: ",", str_array: (char **)gtk_file_filter_get_attributes (filter));
45
46 info = g_file_info_new ();
47
48 g_file_info_set_display_name (info, display_name: "abracadabra");
49 g_assert_false (gtk_filter_match (GTK_FILTER (filter), info));
50
51 g_file_info_set_display_name (info, display_name: "dro.stx");
52 g_assert_false (gtk_filter_match (GTK_FILTER (filter), info));
53
54 g_file_info_set_display_name (info, display_name: "Dro.sty");
55 g_assert_true (gtk_filter_match (GTK_FILTER (filter), info));
56
57 g_object_unref (object: info);
58 g_free (mem: attrs);
59 g_object_unref (object: filter);
60}
61
62static void
63test_suffix (void)
64{
65 GtkFileFilter *filter;
66 char *attrs;
67 GFileInfo *info;
68
69 filter = gtk_file_filter_new ();
70 gtk_file_filter_add_suffix (filter, suffix: "txt");
71 attrs = g_strjoinv (separator: ",", str_array: (char **)gtk_file_filter_get_attributes (filter));
72
73 info = g_file_info_new ();
74
75 g_file_info_set_display_name (info, display_name: "abracadabra");
76 g_assert_false (gtk_filter_match (GTK_FILTER (filter), info));
77
78 g_file_info_set_display_name (info, display_name: "dro.txt");
79 g_assert_true (gtk_filter_match (GTK_FILTER (filter), info));
80
81 g_file_info_set_display_name (info, display_name: "dro.TXT");
82 g_assert_true (gtk_filter_match (GTK_FILTER (filter), info));
83
84 g_object_unref (object: info);
85 g_free (mem: attrs);
86 g_object_unref (object: filter);
87}
88
89static void
90test_mime_type (void)
91{
92 GtkFileFilter *filter;
93 char *attrs;
94 GFileInfo *info;
95
96 filter = gtk_file_filter_new ();
97 gtk_file_filter_add_mime_type (filter, mime_type: "image/png");
98 attrs = g_strjoinv (separator: ",", str_array: (char **)gtk_file_filter_get_attributes (filter));
99
100 info = g_file_info_new ();
101
102 g_file_info_set_display_name (info, display_name: "abracadabra");
103 g_file_info_set_content_type (info, content_type: "text/plain");
104 g_assert_false (gtk_filter_match (GTK_FILTER (filter), info));
105
106 g_file_info_set_display_name (info, display_name: "dro.png");
107 g_file_info_set_content_type (info, content_type: "image/png");
108 g_assert_true (gtk_filter_match (GTK_FILTER (filter), info));
109
110 g_file_info_set_display_name (info, display_name: "dro.PNG");
111 g_file_info_set_content_type (info, content_type: "image/png");
112 g_assert_true (gtk_filter_match (GTK_FILTER (filter), info));
113
114 g_object_unref (object: info);
115 g_free (mem: attrs);
116 g_object_unref (object: filter);
117}
118
119static void
120test_buildable (void)
121{
122 GtkBuilder *builder;
123 const char *buffer =
124 "<interface>\n"
125 "<object class=\"GtkFileFilter\" id=\"filter\">\n"
126 "<property name=\"name\">Audio Files</property>\n"
127 "<mime-types>\n"
128 "<mime-type>audio/*</mime-type>\n"
129 "</mime-types>\n"
130 "</object>\n"
131 "</interface>";
132 GtkFileFilter *filter;
133 GVariant *v1, *v2;
134 char *s1, *s2;
135
136 builder = gtk_builder_new ();
137 gtk_builder_add_from_string (builder, buffer, length: strlen (s: buffer), NULL);
138 filter = GTK_FILE_FILTER (gtk_builder_get_object (builder, "filter"));
139
140 v1 = gtk_file_filter_to_gvariant (filter);
141 v2 = g_variant_parse (NULL, text: "('Audio Files', [(1, 'audio/*')])", NULL, NULL, NULL);
142
143 s1 = g_variant_print (value: v1, FALSE);
144 s2 = g_variant_print (value: v2, FALSE);
145
146 g_assert_true (strcmp (s1, s2) == 0);
147
148 g_free (mem: s1);
149 g_free (mem: s2);
150
151 g_variant_unref (value: v1);
152 g_variant_unref (value: v2);
153
154 g_object_unref (object: builder);
155}
156
157int
158main (int argc, char *argv[])
159{
160 (g_test_init) (argc: &argc, argv: &argv, NULL);
161 setlocale (LC_ALL, locale: "C");
162
163 g_test_add_func (testpath: "/filefilter/basic", test_func: test_basic);
164 g_test_add_func (testpath: "/filefilter/pattern", test_func: test_pattern);
165 g_test_add_func (testpath: "/filefilter/suffix", test_func: test_suffix);
166 g_test_add_func (testpath: "/filefilter/mimetype", test_func: test_mime_type);
167 g_test_add_func (testpath: "/filefilter/buildable", test_func: test_buildable);
168
169 return g_test_run ();
170}
171

source code of gtk/testsuite/gtk/filefilter.c