1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import json_schema
7import unittest
8
9class JsonSchemaUnittest(unittest.TestCase):
10  def testNocompile(self):
11    compiled = [
12      {
13        "namespace": "compile",
14        "description": "The compile API.",
15        "functions": [],
16        "types":     {}
17      },
18
19      {
20        "namespace": "functions",
21        "description": "The functions API.",
22        "functions": [
23          {
24            "id": "two"
25          },
26          {
27            "id": "four"
28          }
29        ],
30
31        "types": {
32          "one": { "key": "value" }
33        }
34      },
35
36      {
37        "namespace": "types",
38        "description": "The types API.",
39        "functions": [
40          { "id": "one" }
41        ],
42        "types": {
43          "two": {
44            "key": "value"
45          },
46          "four": {
47            "key": "value"
48          }
49        }
50      },
51
52      {
53        "namespace": "nested",
54        "description": "The nested API.",
55        "properties": {
56          "sync": {
57            "functions": [
58              {
59                "id": "two"
60              },
61              {
62                "id": "four"
63              }
64            ],
65            "types": {
66              "two": {
67                "key": "value"
68              },
69              "four": {
70                "key": "value"
71              }
72            }
73          }
74        }
75      }
76    ]
77
78    schema = json_schema.CachedLoad('test/json_schema_test.json')
79    self.assertEquals(compiled, json_schema.DeleteNodes(schema, 'nocompile'))
80
81    def should_delete(value):
82      return isinstance(value, dict) and not value.get('valid', True)
83    expected = [
84      {'one': {'test': 'test'}},
85      {'valid': True},
86      {}
87    ]
88    given = [
89      {'one': {'test': 'test'}, 'two': {'valid': False}},
90      {'valid': True},
91      {},
92      {'valid': False}
93    ]
94    self.assertEquals(
95        expected, json_schema.DeleteNodes(given, matcher=should_delete))
96
97
98if __name__ == '__main__':
99  unittest.main()
100