]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libxo/tests/core/test_08.c
MFV r348552: 9682 page fault in dsl_async_clone_destroy() while opening pool
[FreeBSD/FreeBSD.git] / contrib / libxo / tests / core / test_08.c
1 /*
2  * Copyright (c) 2015, Juniper Networks, Inc.
3  * All rights reserved.
4  * This SOFTWARE is licensed under the LICENSE provided in the
5  * ../Copyright file. By downloading, installing, copying, or otherwise
6  * using the SOFTWARE, you agree to be bound by the terms of that
7  * LICENSE.
8  * Phil Shafer, July 2015
9  */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <unistd.h>
15 #include <errno.h>
16
17 #include "xo.h"
18
19 int
20 main (int argc, char **argv)
21 {
22     struct item {
23         const char *i_title;
24         int i_count;
25     };
26     struct item list[] = {
27         { "gum", 1412 },
28         { "rope", 85 },
29         { "ladder", 0 },
30         { "bolt", 4123 },
31         { "water", 17 },
32         { NULL, 0 }
33     };
34     struct item *ip;
35     int i;
36     
37     argc = xo_parse_args(argc, argv);
38     if (argc < 0)
39         return 1;
40
41     for (argc = 1; argv[argc]; argc++) {
42         if (strcmp(argv[argc], "xml") == 0)
43             xo_set_style(NULL, XO_STYLE_XML);
44         else if (strcmp(argv[argc], "json") == 0)
45             xo_set_style(NULL, XO_STYLE_JSON);
46         else if (strcmp(argv[argc], "text") == 0)
47             xo_set_style(NULL, XO_STYLE_TEXT);
48         else if (strcmp(argv[argc], "html") == 0)
49             xo_set_style(NULL, XO_STYLE_HTML);
50         else if (strcmp(argv[argc], "pretty") == 0)
51             xo_set_flags(NULL, XOF_PRETTY);
52         else if (strcmp(argv[argc], "xpath") == 0)
53             xo_set_flags(NULL, XOF_XPATH);
54         else if (strcmp(argv[argc], "info") == 0)
55             xo_set_flags(NULL, XOF_INFO);
56         else if (strcmp(argv[argc], "error") == 0) {
57             close(-1);
58             xo_err(1, "error detected");
59         }
60     }
61
62     xo_set_flags(NULL, XOF_KEYS);
63     xo_set_program("test");
64
65     xo_open_container_h(NULL, "top");
66
67     xo_open_container("data");
68     xo_open_container("contents");
69     xo_open_list("item");
70
71     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
72
73     for (ip = list; ip->i_title; ip++) {
74         xo_open_instance("item");
75
76         xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
77                 ip->i_title, ip->i_count);
78
79         xo_close_instance("item");
80     }
81
82     xo_close_list("item");
83     xo_close_container("contents");
84     xo_close_container("data");
85
86     xo_emit("\n\n");
87
88     xo_open_container("data2");
89     xo_open_container("contents");
90
91     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
92
93     for (ip = list; ip->i_title; ip++) {
94         xo_open_instance("item");
95
96         xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
97                 ip->i_title, ip->i_count);
98     }
99
100     xo_close_container("data2");
101
102     xo_emit("\n\n");
103
104     xo_open_container("data3");
105     xo_open_marker("m1");
106     xo_open_container("contents");
107
108     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
109
110     for (ip = list; ip->i_title; ip++) {
111         xo_open_instance("item");
112
113         xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
114                 ip->i_title, ip->i_count);
115     }
116
117     xo_close_container("data3");        /* Should be a noop */
118     xo_emit("{:test}", "one");
119
120     xo_close_marker("m1");
121     xo_close_container("data3");        /* Should be a noop */
122
123     xo_emit("\n\n");
124
125     xo_open_container("data4");
126     xo_open_marker("m1");
127     xo_open_container("contents");
128
129     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
130
131     for (ip = list; ip->i_title; ip++) {
132         xo_open_instance("item");
133
134         xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
135                 ip->i_title, ip->i_count);
136         
137         xo_open_marker("m2");
138         for (i = 0; i < 3; i++) {
139             xo_open_instance("sub");
140             xo_emit("{Lwc:/Name}{:name/%d} + 1 = {:next/%d}\n", i, i + 1);
141             xo_close_container("data4");
142         }
143         xo_close_marker("m2");
144         xo_emit("{Lwc:/Last}{:last/%d}\n", i);
145     }
146
147     xo_close_container("data4");        /* Should be a noop */
148     xo_emit("{:test}", "one");
149
150     xo_emit("\n\n");
151
152     xo_close_container_h(NULL, "top");
153
154     xo_finish();
155
156     return 0;
157 }