Home | History | Annotate | Download | only in server2
      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 
      6 import json
      7 import os
      8 import sys
      9 import unittest
     10 
     11 from file_system import FileNotFoundError
     12 from reference_resolver import ReferenceResolver
     13 from test_object_store import TestObjectStore
     14 
     15 class FakeAPIDataSource(object):
     16   def __init__(self, json_data):
     17     self._json = json_data
     18 
     19   def get(self, key):
     20     if key not in self._json:
     21       raise FileNotFoundError(key)
     22     return self._json[key]
     23 
     24   def GetAllNames(self):
     25     return self._json.keys()
     26 
     27 class APIDataSourceTest(unittest.TestCase):
     28   def setUp(self):
     29     self._base_path = os.path.join(sys.path[0], 'test_data', 'test_json')
     30 
     31   def _ReadLocalFile(self, filename):
     32     with open(os.path.join(self._base_path, filename), 'r') as f:
     33       return f.read()
     34 
     35   def testGetLink(self):
     36     data_source = FakeAPIDataSource(
     37         json.loads(self._ReadLocalFile('fake_data_source.json')))
     38     resolver = ReferenceResolver(data_source,
     39                                  data_source,
     40                                  TestObjectStore('test'))
     41     self.assertEqual({
     42       'href': 'foo.html',
     43       'text': 'foo',
     44       'name': 'foo'
     45     }, resolver.GetLink('foo', namespace='baz'))
     46     self.assertEqual({
     47       'href': 'foo.html#type-foo_t1',
     48       'text': 'foo.foo_t1',
     49       'name': 'foo_t1'
     50     }, resolver.GetLink('foo.foo_t1', namespace='baz'))
     51     self.assertEqual({
     52       'href': 'baz.html#event-baz_e1',
     53       'text': 'baz_e1',
     54       'name': 'baz_e1'
     55     }, resolver.GetLink('baz.baz_e1', namespace='baz'))
     56     self.assertEqual({
     57       'href': 'baz.html#event-baz_e1',
     58       'text': 'baz_e1',
     59       'name': 'baz_e1'
     60     }, resolver.GetLink('baz_e1', namespace='baz'))
     61     self.assertEqual({
     62       'href': 'foo.html#method-foo_f1',
     63       'text': 'foo.foo_f1',
     64       'name': 'foo_f1'
     65     }, resolver.GetLink('foo.foo_f1', namespace='baz'))
     66     self.assertEqual({
     67       'href': 'foo.html#property-foo_p3',
     68       'text': 'foo.foo_p3',
     69       'name': 'foo_p3'
     70     }, resolver.GetLink('foo.foo_p3', namespace='baz'))
     71     self.assertEqual({
     72       'href': 'bar.bon.html#type-bar_bon_t3',
     73       'text': 'bar.bon.bar_bon_t3',
     74       'name': 'bar_bon_t3'
     75     }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
     76     self.assertEqual({
     77       'href': 'bar.bon.html#property-bar_bon_p3',
     78       'text': 'bar_bon_p3',
     79       'name': 'bar_bon_p3'
     80     }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
     81     self.assertEqual({
     82       'href': 'bar.bon.html#property-bar_bon_p3',
     83       'text': 'bar_bon_p3',
     84       'name': 'bar_bon_p3'
     85     }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
     86     self.assertEqual({
     87       'href': 'bar.html#event-bar_e2',
     88       'text': 'bar_e2',
     89       'name': 'bar_e2'
     90     }, resolver.GetLink('bar.bar_e2', namespace='bar'))
     91     self.assertEqual({
     92       'href': 'bar.html#type-bon',
     93       'text': 'bon',
     94       'name': 'bon'
     95     }, resolver.GetLink('bar.bon', namespace='bar'))
     96     self.assertEqual({
     97       'href': 'foo.html#event-foo_t3-foo_t3_e1',
     98       'text': 'foo_t3.foo_t3_e1',
     99       'name': 'foo_t3_e1'
    100     }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
    101     self.assertEqual({
    102       'href': 'foo.html#event-foo_t3-foo_t3_e1',
    103       'text': 'foo_t3.foo_t3_e1',
    104       'name': 'foo_t3_e1'
    105     }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
    106     self.assertEqual({
    107       'href': 'foo.html#event-foo_t3-foo_t3_e1',
    108       'text': 'foo_t3.foo_t3_e1',
    109       'name': 'foo_t3_e1'
    110     }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
    111     self.assertEqual({
    112       'href': 'bar.html#property-bar_t1-bar_t1_p1',
    113       'text': 'bar.bar_t1.bar_t1_p1',
    114       'name': 'bar_t1_p1'
    115     }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
    116     self.assertEqual({
    117       'href': 'bar.html#property-bar_t1-bar_t1_p1',
    118       'text': 'bar_t1.bar_t1_p1',
    119       'name': 'bar_t1_p1'
    120     }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
    121     self.assertEqual(
    122         None,
    123         resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
    124     self.assertEqual(
    125         None,
    126         resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
    127     self.assertEqual(
    128         None,
    129         resolver.GetLink('bar_p3', namespace='baz.bon'))
    130     self.assertEqual(
    131         None,
    132         resolver.GetLink('falafel.faf', namespace='a'))
    133     self.assertEqual(
    134         None,
    135         resolver.GetLink('bar_p3', namespace='foo'))
    136     self.assertEqual(
    137         'Hello <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
    138             '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
    139             '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
    140         resolver.ResolveAllLinks(
    141             'Hello $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
    142             namespace='bar.bon'))
    143     self.assertEqual(
    144         'I like <a href="bar.html#property-bar_t1-bar_t1_p1">food</a>.',
    145         resolver.ResolveAllLinks('I like $ref:[bar.bar_p3.bar_t1_p1 food].',
    146                                  namespace='foo'))
    147     self.assertEqual(
    148         'Ref <a href="foo.html">It\'s foo!</a>',
    149         resolver.ResolveAllLinks('Ref $ref:[foo It\'s foo!]', namespace='bar'))
    150     self.assertEqual(
    151         'Ref <a href="bar.html#type-bon">Bon</a>',
    152         resolver.ResolveAllLinks('Ref $ref:[bar.bon Bon]', namespace='bar'))
    153 
    154     # Different kinds of whitespace can be significant inside <pre> tags.
    155     self.assertEqual(
    156         '<pre><a href="bar.html#type-bon">bar.bon</a>({\nkey: value})',
    157         resolver.ResolveAllLinks('<pre>$ref:[bar.bon]({\nkey: value})',
    158                                  namespace='baz'))
    159 
    160     # Allow bare "$ref:foo.bar." at the end of a string.
    161     self.assertEqual(
    162         '<a href="bar.html#type-bon">bar.bon</a>.',
    163         resolver.ResolveAllLinks('$ref:bar.bon.',
    164                                  namespace='baz'))
    165 
    166 if __name__ == '__main__':
    167   unittest.main()
    168