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 unittest
7
8from api_data_source import APIDataSource
9from extensions_paths import CHROME_EXTENSIONS
10from servlet import Request
11from server_instance import ServerInstance
12from test_data.api_data_source.canned_master_fs import CANNED_MASTER_FS_DATA
13from test_file_system import TestFileSystem
14
15
16class APIDataSourceTest(unittest.TestCase):
17  def setUp(self):
18    self.server_instance = ServerInstance.ForTest(
19        TestFileSystem(CANNED_MASTER_FS_DATA, relative_to=CHROME_EXTENSIONS))
20
21  def testGet(self):
22    api_ds = APIDataSource(self.server_instance, Request.ForTest('/'))
23    jsc_view = api_ds.get('extensions').get('tester')
24    funcs_arr = [{
25      'availability': None,
26      'callback': {
27        'name': 'callback',
28        'optional': False,
29        'parameters': [{
30          'array': {
31            'availability': None,
32            'description': None,
33            'events': [],
34            'functions': [],
35            'id': 'type-results-resultsType',
36            'is_object': False,
37            'link': {
38              'name': 'TypeA',
39              'ref': 'tester.TypeA',
40              'text': 'TypeA'
41            },
42            'name': 'resultsType',
43            'properties': []
44          },
45          'availability': None,
46          'description': None,
47          'functions': [],
48          'id': 'property-callback-results',
49          'is_object': False,
50          'last': True,
51          'name': 'results',
52          'optional': None,
53          'parameters': [],
54          'parentName': 'callback',
55          'properties': [],
56          'returns': None
57        }],
58        'simple_type': {
59          'simple_type': 'function'
60        }
61      },
62      'description': 'Gets stuff.',
63      'id': 'method-get',
64      'name': 'get',
65      'parameters': [{
66        'availability': None,
67        'choices': [{
68          'availability': None,
69          'description': None,
70          'events': [],
71          'functions': [],
72          'id': 'type-a-string',
73          'is_object': False,
74          'name': 'string',
75          'properties': [],
76          'simple_type': 'string'
77        },
78        {
79          'array': {
80            'availability': None,
81            'description': None,
82            'events': [],
83            'functions': [],
84            'id': 'type-strings-stringsType',
85            'is_object': False,
86            'name': 'stringsType',
87            'properties': [],
88            'simple_type': 'string'
89          },
90          'availability': None,
91          'description': None,
92          'events': [],
93          'functions': [],
94          'id': 'type-a-strings',
95          'is_object': False,
96          'last': True,
97          'name': 'strings',
98          'properties': []
99        }],
100        'description': 'a param',
101        'functions': [],
102        'id': 'property-get-a',
103        'is_object': False,
104        'name': 'a',
105        'optional': None,
106        'parameters': [],
107        'parentName': 'get',
108        'properties': [],
109        'returns': None
110      },
111      {
112        'asFunction': {
113          'name': 'callback',
114          'optional': False,
115          'parameters': [{
116            'array': {
117              'availability': None,
118              'description': None,
119              'events': [],
120              'functions': [],
121              'id': 'type-results-resultsType',
122              'is_object': False,
123              'link': {
124                'name': 'TypeA',
125                'ref': 'tester.TypeA',
126                'text': 'TypeA'
127              },
128              'name': 'resultsType',
129              'properties': []
130            },
131            'availability': None,
132            'description': None,
133            'functions': [],
134            'id': 'property-callback-results',
135            'is_object': False,
136            'last': True,
137            'name': 'results',
138            'optional': None,
139            'parameters': [],
140            'parentName': 'callback',
141            'properties': [],
142            'returns': None
143          }],
144          'simple_type': {
145            'simple_type': 'function'
146          }
147        },
148        'description': None,
149        'id': 'property-get-callback',
150        'isCallback': True,
151        'last': True,
152        'name': 'callback',
153        'optional': False,
154        'parentName': 'get',
155        'simple_type': 'function'
156      }],
157      'returns': None
158    }]
159    self.assertEquals(funcs_arr, jsc_view['functions'])
160    types_arr = [{
161      'availability': None,
162      'description': 'A cool thing.',
163      'events': [],
164      'functions': [],
165      'id': 'type-TypeA',
166      'is_object': True,
167      'name': 'TypeA',
168      'properties': [{
169        'array': {
170          'availability': None,
171          'description': None,
172          'events': [],
173          'functions': [],
174          'id': 'type-b-bType',
175          'is_object': False,
176          'link': {
177            'name': 'TypeA',
178            'ref': 'tester.TypeA',
179            'text': 'TypeA'
180          },
181          'name': 'bType',
182          'properties': []
183        },
184        'availability': None,
185        'description': 'List of TypeA.',
186        'functions': [],
187        'id': 'property-TypeA-b',
188        'is_object': False,
189        'name': 'b',
190        'optional': True,
191        'parameters': [],
192        'parentName': 'TypeA',
193        'properties': [],
194        'returns': None
195      }],
196      'simple_type': 'object'
197    }]
198    self.assertEquals(types_arr, jsc_view['types'])
199
200if __name__ == '__main__':
201  unittest.main()
202