reference_resolver_test.py revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 7import os 8import sys 9import unittest 10 11from file_system import FileNotFoundError 12from in_memory_object_store import InMemoryObjectStore 13from reference_resolver import ReferenceResolver 14 15class 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 27class 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 InMemoryObjectStore('')) 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 166if __name__ == '__main__': 167 unittest.main() 168