File: jsontest.cpp

package info (click to toggle)
keyman 18.0.245-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,316 kB
  • sloc: python: 52,784; cpp: 21,278; sh: 7,633; ansic: 4,823; xml: 3,617; perl: 959; makefile: 139; javascript: 138
file content (86 lines) | stat: -rw-r--r-- 2,224 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
  Copyright:    © 2011,2018 SIL International.
  Description:  JSON prettyprinter test harness.
  Create Date:  15 Dec 2011
  Authors:      Tim Eves (TSE)
  History:      28 Sep 2018 - TSE - Imported from graphite2 project.
                            - TSE - Refactored to use C++ std::ostream.
                25 Oct 2018 - TSE - Relicensed under the MIT license for
                                    inclusion in the Keyman project.
*/

// JSON debug logging very basic test harness
// Author: Tim Eves

#include <iostream>
#include <fstream>
#include <jsonpp.hpp>

#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif

int main(int argc, char * argv[])
{
  std::ofstream log;

  if (argc > 1) {
#ifdef __EMSCRIPTEN__
  // For WASM we need to mount a virtual folder because we can't
  // write to /; this assumes the input argv[1] is a relative
  // path, which is okay for our unit tests.
  EM_ASM(
    FS.mkdir('/working');
    FS.mount(NODEFS, { root: '.' }, '/working');
  );

    std::string path("working/");
    path.append(argv[1]);
    log.open(path);
#else
    log.open(argv[1]);
#endif
  }

  json	jo(argc == 1 ? std::cout : log);


  jo << json::array
      << "a string"
      << 0.54
      << 123
      << false
      << json::null
      << json::close;

  jo << json::object << "empty object" << json::object << json::close;

  jo << "primitive types" << json::object
      << "string"   << "a string"
      << "number"   << 0.54
      << "integer"  << 123
      << "boolean"  << false
      << "null"     << json::null
      << json::close;

  jo << "complex object" << json::object
      << "firstName"  << "John"
      << "lastName"   << "Smith"
      << "age"        << 25
      << "address"    << json::flat << json::object
        << "streetAddress"  << "21 2nd Street"
        << "city"           << "New York"
        << "state"          << "NY"
        << "postalCode"     << "10021"
        << json::close
      << "phoneNmuber" << json::array
        << json::flat << json::object
          << "type"   << "home"
          << "number" << "212 555-1234"
          << json::close
        << json::object
          << "type"   << "fax"
          << "number" << "646 555-4567";

  return 0;
}