nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* Gtk+ object tests |
2 | * Copyright (C) 2007 Patrick Hulin |
||
3 | * Copyright (C) 2007 Imendio AB |
||
4 | * Authors: Tim Janik |
||
5 | * |
||
6 | * This library is free software; you can redistribute it and/or |
||
7 | * modify it under the terms of the GNU Lesser General Public |
||
8 | * License as published by the Free Software Foundation; either |
||
9 | * version 2 of the License, or (at your option) any later version. |
||
10 | * |
||
11 | * This library is distributed in the hope that it will be useful, |
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
14 | * Lesser General Public License for more details. |
||
15 | * |
||
16 | * You should have received a copy of the GNU Lesser General Public |
||
17 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
||
18 | */ |
||
19 | #include <glib.h> |
||
20 | #include <string.h> |
||
21 | #include <stdlib.h> |
||
22 | |||
23 | |||
24 | /* GScanner fixture */ |
||
25 | typedef struct { |
||
26 | GScanner *scanner; |
||
27 | } ScannerFixture; |
||
28 | static void |
||
29 | scanner_fixture_setup (ScannerFixture *fix, |
||
30 | gconstpointer test_data) |
||
31 | { |
||
32 | fix->scanner = g_scanner_new (NULL); |
||
33 | g_assert (fix->scanner != NULL); |
||
34 | } |
||
35 | static void |
||
36 | scanner_fixture_teardown (ScannerFixture *fix, |
||
37 | gconstpointer test_data) |
||
38 | { |
||
39 | g_assert (fix->scanner != NULL); |
||
40 | g_scanner_destroy (fix->scanner); |
||
41 | } |
||
42 | |||
43 | static void |
||
44 | scanner_msg_func (GScanner *scanner, |
||
45 | gchar *message, |
||
46 | gboolean error) |
||
47 | { |
||
48 | g_assert_cmpstr (message, ==, "test"); |
||
49 | } |
||
50 | |||
51 | static void |
||
52 | test_scanner_warn (ScannerFixture *fix, |
||
53 | gconstpointer test_data) |
||
54 | { |
||
55 | fix->scanner->msg_handler = scanner_msg_func; |
||
56 | g_scanner_warn (fix->scanner, "test"); |
||
57 | } |
||
58 | |||
59 | static void |
||
60 | test_scanner_error (ScannerFixture *fix, |
||
61 | gconstpointer test_data) |
||
62 | { |
||
63 | if (g_test_subprocess ()) |
||
64 | { |
||
65 | int pe = fix->scanner->parse_errors; |
||
66 | g_scanner_error (fix->scanner, "scanner-error-message-test"); |
||
67 | g_assert_cmpint (fix->scanner->parse_errors, ==, pe + 1); |
||
68 | exit (0); |
||
69 | } |
||
70 | |||
71 | g_test_trap_subprocess (NULL, 0, 0); |
||
72 | g_test_trap_assert_passed (); |
||
73 | g_test_trap_assert_stderr ("*scanner-error-message-test*"); |
||
74 | } |
||
75 | |||
76 | static void |
||
77 | check_keys (gpointer key, |
||
78 | gpointer value, |
||
79 | gpointer user_data) |
||
80 | { |
||
81 | g_assert_cmpint (GPOINTER_TO_INT (value), ==, g_ascii_strtoull (key, NULL, 0)); |
||
82 | } |
||
83 | |||
84 | static void |
||
85 | test_scanner_symbols (ScannerFixture *fix, |
||
86 | gconstpointer test_data) |
||
87 | { |
||
88 | gint i; |
||
89 | gchar buf[2]; |
||
90 | |||
91 | g_scanner_set_scope (fix->scanner, 1); |
||
92 | |||
93 | for (i = 0; i < 10; i++) |
||
94 | g_scanner_scope_add_symbol (fix->scanner, |
||
95 | 1, |
||
96 | g_ascii_dtostr (buf, 2, (gdouble)i), |
||
97 | GINT_TO_POINTER (i)); |
||
98 | g_scanner_scope_foreach_symbol (fix->scanner, 1, check_keys, NULL); |
||
99 | g_assert_cmpint (GPOINTER_TO_INT (g_scanner_lookup_symbol (fix->scanner, "5")), ==, 5); |
||
100 | g_scanner_scope_remove_symbol (fix->scanner, 1, "5"); |
||
101 | g_assert (g_scanner_lookup_symbol (fix->scanner, "5") == NULL); |
||
102 | |||
103 | g_assert_cmpint (GPOINTER_TO_INT (g_scanner_scope_lookup_symbol (fix->scanner, 1, "4")), ==, 4); |
||
104 | g_assert_cmpint (GPOINTER_TO_INT (g_scanner_scope_lookup_symbol (fix->scanner, 1, "5")), ==, 0); |
||
105 | } |
||
106 | |||
107 | static void |
||
108 | test_scanner_tokens (ScannerFixture *fix, |
||
109 | gconstpointer test_data) |
||
110 | { |
||
111 | gchar buf[] = "(\t\n\r\\){}"; |
||
112 | const gint buflen = strlen (buf); |
||
113 | gchar tokbuf[] = "(\\){}"; |
||
114 | const gint tokbuflen = strlen (tokbuf); |
||
115 | guint i; |
||
116 | |||
117 | g_scanner_input_text (fix->scanner, buf, buflen); |
||
118 | |||
119 | g_assert_cmpint (g_scanner_cur_token (fix->scanner), ==, G_TOKEN_NONE); |
||
120 | g_scanner_get_next_token (fix->scanner); |
||
121 | g_assert_cmpint (g_scanner_cur_token (fix->scanner), ==, tokbuf[0]); |
||
122 | g_assert_cmpint (g_scanner_cur_line (fix->scanner), ==, 1); |
||
123 | |||
124 | for (i = 1; i < tokbuflen; i++) |
||
125 | g_assert_cmpint (g_scanner_get_next_token (fix->scanner), ==, tokbuf[i]); |
||
126 | g_assert_cmpint (g_scanner_get_next_token (fix->scanner), ==, G_TOKEN_EOF); |
||
127 | return; |
||
128 | } |
||
129 | |||
130 | int |
||
131 | main (int argc, |
||
132 | char *argv[]) |
||
133 | { |
||
134 | g_test_init (&argc, &argv, NULL); |
||
135 | |||
136 | g_test_add ("/scanner/warn", ScannerFixture, 0, scanner_fixture_setup, test_scanner_warn, scanner_fixture_teardown); |
||
137 | g_test_add ("/scanner/error", ScannerFixture, 0, scanner_fixture_setup, test_scanner_error, scanner_fixture_teardown); |
||
138 | g_test_add ("/scanner/symbols", ScannerFixture, 0, scanner_fixture_setup, test_scanner_symbols, scanner_fixture_teardown); |
||
139 | g_test_add ("/scanner/tokens", ScannerFixture, 0, scanner_fixture_setup, test_scanner_tokens, scanner_fixture_teardown); |
||
140 | |||
141 | return g_test_run(); |
||
142 | } |