xref: /freebsd-src/contrib/libxo/tests/core/test_08.c (revision 34b867ca30479cec104fd069178df294f8ea35f1)
1545ddfbeSMarcel Moolenaar /*
2545ddfbeSMarcel Moolenaar  * Copyright (c) 2015, Juniper Networks, Inc.
3545ddfbeSMarcel Moolenaar  * All rights reserved.
4545ddfbeSMarcel Moolenaar  * This SOFTWARE is licensed under the LICENSE provided in the
5545ddfbeSMarcel Moolenaar  * ../Copyright file. By downloading, installing, copying, or otherwise
6545ddfbeSMarcel Moolenaar  * using the SOFTWARE, you agree to be bound by the terms of that
7545ddfbeSMarcel Moolenaar  * LICENSE.
8545ddfbeSMarcel Moolenaar  * Phil Shafer, July 2015
9545ddfbeSMarcel Moolenaar  */
10545ddfbeSMarcel Moolenaar 
11545ddfbeSMarcel Moolenaar #include <stdio.h>
12545ddfbeSMarcel Moolenaar #include <stdlib.h>
13545ddfbeSMarcel Moolenaar #include <string.h>
14545ddfbeSMarcel Moolenaar #include <unistd.h>
15545ddfbeSMarcel Moolenaar #include <errno.h>
16545ddfbeSMarcel Moolenaar 
17545ddfbeSMarcel Moolenaar #include "xo.h"
1876afb20cSPhil Shafer #include "xo_encoder.h"
19545ddfbeSMarcel Moolenaar 
20545ddfbeSMarcel Moolenaar int
main(int argc,char ** argv)21545ddfbeSMarcel Moolenaar main (int argc, char **argv)
22545ddfbeSMarcel Moolenaar {
23545ddfbeSMarcel Moolenaar     struct item {
24545ddfbeSMarcel Moolenaar 	const char *i_title;
25545ddfbeSMarcel Moolenaar 	int i_count;
26545ddfbeSMarcel Moolenaar     };
27545ddfbeSMarcel Moolenaar     struct item list[] = {
28545ddfbeSMarcel Moolenaar 	{ "gum", 1412 },
29545ddfbeSMarcel Moolenaar 	{ "rope", 85 },
30545ddfbeSMarcel Moolenaar 	{ "ladder", 0 },
31545ddfbeSMarcel Moolenaar 	{ "bolt", 4123 },
32545ddfbeSMarcel Moolenaar 	{ "water", 17 },
33545ddfbeSMarcel Moolenaar 	{ NULL, 0 }
34545ddfbeSMarcel Moolenaar     };
35545ddfbeSMarcel Moolenaar     struct item *ip;
36545ddfbeSMarcel Moolenaar     int i;
37545ddfbeSMarcel Moolenaar 
38545ddfbeSMarcel Moolenaar     argc = xo_parse_args(argc, argv);
39545ddfbeSMarcel Moolenaar     if (argc < 0)
40545ddfbeSMarcel Moolenaar 	return 1;
41545ddfbeSMarcel Moolenaar 
42545ddfbeSMarcel Moolenaar     for (argc = 1; argv[argc]; argc++) {
4376afb20cSPhil Shafer 	if (xo_streq(argv[argc], "xml"))
44545ddfbeSMarcel Moolenaar 	    xo_set_style(NULL, XO_STYLE_XML);
4576afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "json"))
46545ddfbeSMarcel Moolenaar 	    xo_set_style(NULL, XO_STYLE_JSON);
4776afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "text"))
48545ddfbeSMarcel Moolenaar 	    xo_set_style(NULL, XO_STYLE_TEXT);
4976afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "html"))
50545ddfbeSMarcel Moolenaar 	    xo_set_style(NULL, XO_STYLE_HTML);
5176afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "pretty"))
52545ddfbeSMarcel Moolenaar 	    xo_set_flags(NULL, XOF_PRETTY);
5376afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "xpath"))
54545ddfbeSMarcel Moolenaar 	    xo_set_flags(NULL, XOF_XPATH);
5576afb20cSPhil Shafer 	else if (xo_streq(argv[argc], "info"))
56545ddfbeSMarcel Moolenaar 	    xo_set_flags(NULL, XOF_INFO);
5776afb20cSPhil Shafer         else if (xo_streq(argv[argc], "error")) {
58545ddfbeSMarcel Moolenaar             close(-1);
59545ddfbeSMarcel Moolenaar             xo_err(1, "error detected");
60545ddfbeSMarcel Moolenaar         }
61545ddfbeSMarcel Moolenaar     }
62545ddfbeSMarcel Moolenaar 
63545ddfbeSMarcel Moolenaar     xo_set_flags(NULL, XOF_KEYS);
64545ddfbeSMarcel Moolenaar     xo_set_program("test");
65545ddfbeSMarcel Moolenaar 
66545ddfbeSMarcel Moolenaar     xo_open_container_h(NULL, "top");
67545ddfbeSMarcel Moolenaar 
68545ddfbeSMarcel Moolenaar     xo_open_container("data");
69545ddfbeSMarcel Moolenaar     xo_open_container("contents");
70545ddfbeSMarcel Moolenaar     xo_open_list("item");
71545ddfbeSMarcel Moolenaar 
72545ddfbeSMarcel Moolenaar     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
73545ddfbeSMarcel Moolenaar 
74545ddfbeSMarcel Moolenaar     for (ip = list; ip->i_title; ip++) {
75545ddfbeSMarcel Moolenaar 	xo_open_instance("item");
76545ddfbeSMarcel Moolenaar 
77545ddfbeSMarcel Moolenaar 	xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
78545ddfbeSMarcel Moolenaar 		ip->i_title, ip->i_count);
79545ddfbeSMarcel Moolenaar 
80545ddfbeSMarcel Moolenaar 	xo_close_instance("item");
81545ddfbeSMarcel Moolenaar     }
82545ddfbeSMarcel Moolenaar 
83545ddfbeSMarcel Moolenaar     xo_close_list("item");
84545ddfbeSMarcel Moolenaar     xo_close_container("contents");
85545ddfbeSMarcel Moolenaar     xo_close_container("data");
86545ddfbeSMarcel Moolenaar 
87545ddfbeSMarcel Moolenaar     xo_emit("\n\n");
88545ddfbeSMarcel Moolenaar 
89d1a0d267SMarcel Moolenaar     xo_open_container("data2");
90545ddfbeSMarcel Moolenaar     xo_open_container("contents");
91545ddfbeSMarcel Moolenaar 
92545ddfbeSMarcel Moolenaar     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
93545ddfbeSMarcel Moolenaar 
94545ddfbeSMarcel Moolenaar     for (ip = list; ip->i_title; ip++) {
95545ddfbeSMarcel Moolenaar 	xo_open_instance("item");
96545ddfbeSMarcel Moolenaar 
97545ddfbeSMarcel Moolenaar 	xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
98545ddfbeSMarcel Moolenaar 		ip->i_title, ip->i_count);
99545ddfbeSMarcel Moolenaar     }
100545ddfbeSMarcel Moolenaar 
101d1a0d267SMarcel Moolenaar     xo_close_container("data2");
102545ddfbeSMarcel Moolenaar 
103545ddfbeSMarcel Moolenaar     xo_emit("\n\n");
104545ddfbeSMarcel Moolenaar 
105d1a0d267SMarcel Moolenaar     xo_open_container("data3");
106545ddfbeSMarcel Moolenaar     xo_open_marker("m1");
107545ddfbeSMarcel Moolenaar     xo_open_container("contents");
108545ddfbeSMarcel Moolenaar 
109545ddfbeSMarcel Moolenaar     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
110545ddfbeSMarcel Moolenaar 
111545ddfbeSMarcel Moolenaar     for (ip = list; ip->i_title; ip++) {
112545ddfbeSMarcel Moolenaar 	xo_open_instance("item");
113545ddfbeSMarcel Moolenaar 
114545ddfbeSMarcel Moolenaar 	xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
115545ddfbeSMarcel Moolenaar 		ip->i_title, ip->i_count);
116545ddfbeSMarcel Moolenaar     }
117545ddfbeSMarcel Moolenaar 
118*34b867caSPhil Shafer     xo_close_container("data3");	/* warn: fails at marker 'm1' */
119545ddfbeSMarcel Moolenaar     xo_emit("{:test}", "one");
120545ddfbeSMarcel Moolenaar 
121545ddfbeSMarcel Moolenaar     xo_close_marker("m1");
122*34b867caSPhil Shafer     xo_close_container("data3");	/* this one works, post-marker */
123545ddfbeSMarcel Moolenaar 
124545ddfbeSMarcel Moolenaar     xo_emit("\n\n");
125545ddfbeSMarcel Moolenaar 
126d1a0d267SMarcel Moolenaar     xo_open_container("data4");
127545ddfbeSMarcel Moolenaar     xo_open_marker("m1");
128545ddfbeSMarcel Moolenaar     xo_open_container("contents");
129545ddfbeSMarcel Moolenaar 
130545ddfbeSMarcel Moolenaar     xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
131545ddfbeSMarcel Moolenaar 
132545ddfbeSMarcel Moolenaar     for (ip = list; ip->i_title; ip++) {
133545ddfbeSMarcel Moolenaar 	xo_open_instance("item");
134545ddfbeSMarcel Moolenaar 
135545ddfbeSMarcel Moolenaar 	xo_emit("{k:name/%-10s/%s}{n:count/%12u/%u}\n",
136545ddfbeSMarcel Moolenaar 		ip->i_title, ip->i_count);
137545ddfbeSMarcel Moolenaar 
138545ddfbeSMarcel Moolenaar 	xo_open_marker("m2");
139545ddfbeSMarcel Moolenaar 	for (i = 0; i < 3; i++) {
140545ddfbeSMarcel Moolenaar 	    xo_open_instance("sub");
141545ddfbeSMarcel Moolenaar 	    xo_emit("{Lwc:/Name}{:name/%d} + 1 = {:next/%d}\n", i, i + 1);
142*34b867caSPhil Shafer 	    xo_close_container("data4"); /* warn: fails at marker 'm2' */
143545ddfbeSMarcel Moolenaar 	}
144545ddfbeSMarcel Moolenaar 	xo_close_marker("m2");
145545ddfbeSMarcel Moolenaar 	xo_emit("{Lwc:/Last}{:last/%d}\n", i);
146545ddfbeSMarcel Moolenaar     }
147545ddfbeSMarcel Moolenaar 
148*34b867caSPhil Shafer     xo_close_container("data4");	/* warn: fails at marker 'm1' */
149545ddfbeSMarcel Moolenaar     xo_emit("{:test}", "one");
150545ddfbeSMarcel Moolenaar 
151545ddfbeSMarcel Moolenaar     xo_emit("\n\n");
152545ddfbeSMarcel Moolenaar 
153545ddfbeSMarcel Moolenaar     xo_close_container_h(NULL, "top");
154545ddfbeSMarcel Moolenaar 
155545ddfbeSMarcel Moolenaar     xo_finish();
156545ddfbeSMarcel Moolenaar 
157545ddfbeSMarcel Moolenaar     return 0;
158545ddfbeSMarcel Moolenaar }
159