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 | |
23 | static void |
24 | test_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 | |
35 | static void |
36 | test_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 | |
62 | static void |
63 | test_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 | |
89 | static void |
90 | test_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 | |
119 | static void |
120 | test_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 | |
157 | int |
158 | main (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 | |