15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from api_data_source import APIDataSource
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from extensions_paths import CHROME_EXTENSIONS
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from servlet import Request
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from server_instance import ServerInstance
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom test_data.api_data_source.canned_master_fs import CANNED_MASTER_FS_DATA
13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom test_file_system import TestFileSystem
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class APIDataSourceTest(unittest.TestCase):
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def setUp(self):
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.server_instance = ServerInstance.ForTest(
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        TestFileSystem(CANNED_MASTER_FS_DATA, relative_to=CHROME_EXTENSIONS))
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  def testGet(self):
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    api_ds = APIDataSource(self.server_instance, Request.ForTest('/'))
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    jsc_view = api_ds.get('extensions').get('tester')
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    funcs_arr = [{
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'availability': None,
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'callback': {
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'name': 'callback',
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'optional': False,
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parameters': [{
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'array': {
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'availability': None,
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'description': None,
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'events': [],
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'functions': [],
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'id': 'type-results-resultsType',
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'is_object': False,
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'link': {
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'name': 'TypeA',
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'ref': 'tester.TypeA',
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'text': 'TypeA'
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            },
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'name': 'resultsType',
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'properties': []
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          },
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'availability': None,
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'description': None,
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'functions': [],
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'id': 'property-callback-results',
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'is_object': False,
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'last': True,
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'name': 'results',
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'optional': None,
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'parameters': [],
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'parentName': 'callback',
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'properties': [],
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'returns': None
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }],
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'simple_type': {
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'simple_type': 'function'
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      },
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'description': 'Gets stuff.',
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'id': 'method-get',
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'name': 'get',
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'parameters': [{
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'availability': None,
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'choices': [{
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'availability': None,
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'description': None,
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'events': [],
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'functions': [],
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'id': 'type-a-string',
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'is_object': False,
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'name': 'string',
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'properties': [],
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'simple_type': 'string'
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        },
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        {
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'array': {
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'availability': None,
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'description': None,
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'events': [],
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'functions': [],
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'id': 'type-strings-stringsType',
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'is_object': False,
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'name': 'stringsType',
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'properties': [],
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'simple_type': 'string'
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          },
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'availability': None,
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'description': None,
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'events': [],
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'functions': [],
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'id': 'type-a-strings',
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'is_object': False,
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'last': True,
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'name': 'strings',
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'properties': []
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }],
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'description': 'a param',
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'functions': [],
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'id': 'property-get-a',
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'is_object': False,
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'name': 'a',
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'optional': None,
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parameters': [],
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parentName': 'get',
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'properties': [],
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'returns': None
110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      },
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      {
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'asFunction': {
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'name': 'callback',
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'optional': False,
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'parameters': [{
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'array': {
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'availability': None,
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'description': None,
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'events': [],
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'functions': [],
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'id': 'type-results-resultsType',
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'is_object': False,
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'link': {
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                'name': 'TypeA',
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                'ref': 'tester.TypeA',
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                'text': 'TypeA'
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              },
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'name': 'resultsType',
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'properties': []
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            },
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'availability': None,
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'description': None,
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'functions': [],
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'id': 'property-callback-results',
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'is_object': False,
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'last': True,
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'name': 'results',
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'optional': None,
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'parameters': [],
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'parentName': 'callback',
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'properties': [],
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'returns': None
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          }],
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'simple_type': {
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'simple_type': 'function'
146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          }
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        },
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'description': None,
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'id': 'property-get-callback',
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'isCallback': True,
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'last': True,
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'name': 'callback',
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'optional': False,
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parentName': 'get',
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'simple_type': 'function'
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }],
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'returns': None
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }]
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertEquals(funcs_arr, jsc_view['functions'])
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    types_arr = [{
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'availability': None,
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'description': 'A cool thing.',
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'events': [],
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'functions': [],
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'id': 'type-TypeA',
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'is_object': True,
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'name': 'TypeA',
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'properties': [{
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'array': {
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'availability': None,
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'description': None,
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'events': [],
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'functions': [],
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'id': 'type-b-bType',
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'is_object': False,
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'link': {
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'name': 'TypeA',
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'ref': 'tester.TypeA',
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'text': 'TypeA'
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          },
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'name': 'bType',
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          'properties': []
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        },
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'availability': None,
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'description': 'List of TypeA.',
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'functions': [],
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'id': 'property-TypeA-b',
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'is_object': False,
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'name': 'b',
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'optional': True,
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parameters': [],
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'parentName': 'TypeA',
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'properties': [],
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'returns': None
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }],
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      'simple_type': 'object'
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }]
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self.assertEquals(types_arr, jsc_view['types'])
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unittest.main()
202