Esempio n. 1
0
 def GetReferenceResolver(self, platform):
   if self._platform_data[platform].reference_resolver is None:
     self._platform_data[platform].reference_resolver = ReferenceResolver(
         self.GetAPIModels(platform),
         self._object_store_creator.Create(ReferenceResolver,
                                           category=platform))
   return self._platform_data[platform].reference_resolver
 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None):
   if api_data is None:
     api_data_factory = APIDataSource.Factory(compiled_fs_factory,
                                              'fake_path',
                                              _FakeFactory())
   else:
     api_data_factory = _FakeFactory(api_data)
   reference_resolver_factory = ReferenceResolver.Factory(
       api_data_factory,
       self._fake_api_list_data_source_factory,
       ObjectStoreCreator.ForTest())
   @DisableLogging('error')  # "was never set" error
   def create_from_factory(factory):
     path = 'extensions/foo'
     return factory.Create(Request.ForTest(path), path)
   return create_from_factory(TemplateDataSource.Factory(
       api_data_factory,
       self._fake_api_list_data_source_factory,
       self._fake_intro_data_source_factory,
       self._fake_samples_data_source_factory,
       self._fake_sidenav_data_source_factory,
       compiled_fs_factory,
       reference_resolver_factory,
       self._manifest_data_source,
       '.',
       '.',
       ''))
Esempio n. 3
0
    def __init__(self, channel, object_store_creator_factory, svn_file_system,
                 github_file_system):
        self.svn_file_system = svn_file_system

        self.github_file_system = github_file_system

        self.compiled_fs_factory = CompiledFileSystem.Factory(
            svn_file_system, object_store_creator_factory)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH,
            svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator_factory)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        # Note: samples are super slow in the dev server because it doesn't support
        # async fetch, so disable them. If you actually want to test samples, then
        # good luck, and modify _IsSamplesDisabled at the top.
        if _IsSamplesDisabled():
            svn_fs_for_samples = EmptyDirFileSystem()
        else:
            svn_fs_for_samples = self.svn_file_system
        self.samples_data_source_factory = SamplesDataSource.Factory(
            channel, svn_fs_for_samples, self.github_file_system,
            self.ref_resolver_factory, object_store_creator_factory,
            svn_constants.EXAMPLES_PATH)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_fs_factory, svn_constants.JSON_PATH)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH)

        self.example_zipper = ExampleZipper(self.compiled_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(channel,
                                                    self.compiled_fs_factory)

        self.content_cache = self.compiled_fs_factory.GetOrCreateIdentity()
Esempio n. 4
0
    def __init__(self, channel, object_store_creator_factory, svn_file_system,
                 github_file_system):
        self.svn_file_system = svn_file_system

        self.github_file_system = github_file_system

        self.compiled_fs_factory = CompiledFileSystem.Factory(
            svn_file_system, object_store_creator_factory)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH,
            svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator_factory)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        self.samples_data_source_factory = SamplesDataSource.Factory(
            channel, self.svn_file_system, ServerInstance.github_file_system,
            self.ref_resolver_factory, object_store_creator_factory,
            svn_constants.EXAMPLES_PATH)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_fs_factory, svn_constants.JSON_PATH)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH)

        self.example_zipper = ExampleZipper(self.compiled_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(channel,
                                                    self.compiled_fs_factory)

        self.content_cache = self.compiled_fs_factory.GetOrCreateIdentity()
 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None):
     if api_data is None:
         api_data_factory = APIDataSource.Factory(compiled_fs_factory,
                                                  'fake_path')
     else:
         api_data_factory = _FakeFactory(api_data)
     reference_resolver_factory = ReferenceResolver.Factory(
         api_data_factory, self._fake_api_list_data_source_factory,
         ObjectStoreCreator.Factory())
     return (TemplateDataSource.Factory(
         'fake_channel', api_data_factory,
         self._fake_api_list_data_source_factory,
         self._fake_intro_data_source_factory,
         self._fake_samples_data_source_factory,
         self._fake_sidenav_data_source_factory, compiled_fs_factory,
         reference_resolver_factory, '.',
         '.').Create(_FakeRequest(), 'extensions/foo'))
Esempio n. 6
0
def _GetInstanceForBranch(channel_name, local_path):
    branch = BRANCH_UTILITY.GetBranchNumberForChannelName(channel_name)

    # The key for the server is a tuple of |channel_name| with |branch|, since
    # sometimes stable and beta point to the same branch.
    instance_key = _MakeInstanceKey(channel_name, branch)
    instance = SERVER_INSTANCES.get(instance_key, None)
    if instance is not None:
        return instance

    branch_memcache = InMemoryObjectStore(branch)
    if branch == 'local':
        file_system = LocalFileSystem(local_path)
    else:
        file_system = _CreateMemcacheFileSystem(branch, branch_memcache)

    cache_factory = CompiledFileSystem.Factory(file_system, branch_memcache)
    api_list_data_source_factory = APIListDataSource.Factory(
        cache_factory, file_system, API_PATH, PUBLIC_TEMPLATE_PATH)
    intro_data_source_factory = IntroDataSource.Factory(
        cache_factory, [INTRO_PATH, ARTICLE_PATH])
    api_data_source_factory = APIDataSource.Factory(cache_factory, API_PATH)

    # Give the ReferenceResolver a memcache, to speed up the lookup of
    # duplicate $refs.
    ref_resolver_factory = ReferenceResolver.Factory(
        api_data_source_factory, api_list_data_source_factory, branch_memcache)
    api_data_source_factory.SetReferenceResolverFactory(ref_resolver_factory)
    samples_data_source_factory = SamplesDataSource.Factory(
        channel_name, file_system, GITHUB_FILE_SYSTEM, cache_factory,
        GITHUB_COMPILED_FILE_SYSTEM, ref_resolver_factory, EXAMPLES_PATH)
    api_data_source_factory.SetSamplesDataSourceFactory(
        samples_data_source_factory)
    sidenav_data_source_factory = SidenavDataSource.Factory(
        cache_factory, JSON_PATH)
    template_data_source_factory = TemplateDataSource.Factory(
        channel_name, api_data_source_factory, api_list_data_source_factory,
        intro_data_source_factory, samples_data_source_factory,
        KNOWN_ISSUES_DATA_SOURCE, sidenav_data_source_factory, cache_factory,
        PUBLIC_TEMPLATE_PATH, PRIVATE_TEMPLATE_PATH)
    example_zipper = ExampleZipper(file_system, cache_factory, DOCS_PATH)

    instance = ServerInstance(template_data_source_factory, example_zipper,
                              cache_factory)
    SERVER_INSTANCES[instance_key] = instance
    return instance
Esempio n. 7
0
    def __init__(self, channel, object_store_creator, host_file_system,
                 app_samples_file_system, base_path, compiled_fs_factory):
        self.channel = channel

        self.object_store_creator = object_store_creator

        self.host_file_system = host_file_system

        self.app_samples_file_system = app_samples_file_system

        self.compiled_host_fs_factory = compiled_fs_factory

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.API_PATH,
            svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.API_PATH)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        # Note: samples are super slow in the dev server because it doesn't support
        # async fetch, so disable them.
        if IsDevServer():
            extension_samples_fs = EmptyDirFileSystem()
        else:
            extension_samples_fs = self.host_file_system
        self.samples_data_source_factory = SamplesDataSource.Factory(
            channel, extension_samples_fs,
            CompiledFileSystem.Factory(extension_samples_fs,
                                       object_store_creator),
            self.app_samples_file_system,
            CompiledFileSystem.Factory(self.app_samples_file_system,
                                       object_store_creator),
            self.ref_resolver_factory, svn_constants.EXAMPLES_PATH)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_host_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.JSON_PATH, base_path)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_host_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH, base_path)

        self.example_zipper = ExampleZipper(self.compiled_host_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(
            channel, self.compiled_host_fs_factory)

        self.content_cache = self.compiled_host_fs_factory.CreateIdentity(
            ServerInstance)
Esempio n. 8
0
 def _CreateRefResolver(self, filename):
     test_data = self._LoadJSON(filename)
     return ReferenceResolver.Factory(
         _FakeAPIDataSource(test_data), _FakeAPIModels(test_data),
         ObjectStoreCreator.ForTest()).Create()
    def __init__(self, object_store_creator, host_file_system,
                 app_samples_file_system, base_path, compiled_fs_factory,
                 branch_utility, host_file_system_creator):
        self.object_store_creator = object_store_creator

        self.host_file_system = host_file_system

        self.app_samples_file_system = app_samples_file_system

        self.compiled_host_fs_factory = compiled_fs_factory

        self.host_file_system_creator = host_file_system_creator

        self.availability_finder_factory = AvailabilityFinder.Factory(
            object_store_creator, self.compiled_host_fs_factory,
            branch_utility, host_file_system_creator)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_host_fs_factory, self.host_file_system,
            svn_constants.API_PATH, svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.API_PATH,
            self.availability_finder_factory)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        # Note: samples are super slow in the dev server because it doesn't support
        # async fetch, so disable them.
        if IsDevServer():
            extension_samples_fs = EmptyDirFileSystem()
        else:
            extension_samples_fs = self.host_file_system
        self.samples_data_source_factory = SamplesDataSource.Factory(
            extension_samples_fs,
            CompiledFileSystem.Factory(extension_samples_fs,
                                       object_store_creator),
            self.app_samples_file_system,
            CompiledFileSystem.Factory(self.app_samples_file_system,
                                       object_store_creator),
            self.ref_resolver_factory, svn_constants.EXAMPLES_PATH, base_path)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_host_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.JSON_PATH)

        self.manifest_data_source = ManifestDataSource(
            self.compiled_host_fs_factory, host_file_system, '/'.join(
                (svn_constants.JSON_PATH, 'manifest.json')), '/'.join(
                    (svn_constants.API_PATH, '_manifest_features.json')))

        self.template_data_source_factory = TemplateDataSource.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            self.intro_data_source_factory, self.samples_data_source_factory,
            self.sidenav_data_source_factory, self.compiled_host_fs_factory,
            self.ref_resolver_factory, self.manifest_data_source,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH, base_path)

        self.api_data_source_factory.SetTemplateDataSource(
            self.template_data_source_factory)

        self.example_zipper = ExampleZipper(self.compiled_host_fs_factory,
                                            self.host_file_system,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(
            self.compiled_host_fs_factory)

        self.redirector = Redirector(self.compiled_host_fs_factory,
                                     self.host_file_system,
                                     svn_constants.PUBLIC_TEMPLATE_PATH)
  def testGetLink(self):
    test_data = json.loads(self._ReadLocalFile('fake_data_source.json'))
    resolver = ReferenceResolver(_FakeAPIDataSource(test_data),
                                 _FakeAPIModels(test_data.keys()),
                                 TestObjectStore('test'))
    self.assertEqual({
      'href': 'foo',
      'text': 'foo',
      'name': 'foo'
    }, resolver.GetLink('foo', namespace='baz'))
    self.assertEqual({
      'href': 'foo#type-foo_t1',
      'text': 'foo.foo_t1',
      'name': 'foo_t1'
    }, resolver.GetLink('foo.foo_t1', namespace='baz'))
    self.assertEqual({
      'href': 'baz#event-baz_e1',
      'text': 'baz_e1',
      'name': 'baz_e1'
    }, resolver.GetLink('baz.baz_e1', namespace='baz'))
    self.assertEqual({
      'href': 'baz#event-baz_e1',
      'text': 'baz_e1',
      'name': 'baz_e1'
    }, resolver.GetLink('baz_e1', namespace='baz'))
    self.assertEqual({
      'href': 'foo#method-foo_f1',
      'text': 'foo.foo_f1',
      'name': 'foo_f1'
    }, resolver.GetLink('foo.foo_f1', namespace='baz'))
    self.assertEqual({
      'href': 'foo#property-foo_p3',
      'text': 'foo.foo_p3',
      'name': 'foo_p3'
    }, resolver.GetLink('foo.foo_p3', namespace='baz'))
    self.assertEqual({
      'href': 'bar.bon#type-bar_bon_t3',
      'text': 'bar.bon.bar_bon_t3',
      'name': 'bar_bon_t3'
    }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
    self.assertEqual({
      'href': 'bar.bon#property-bar_bon_p3',
      'text': 'bar_bon_p3',
      'name': 'bar_bon_p3'
    }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
    self.assertEqual({
      'href': 'bar.bon#property-bar_bon_p3',
      'text': 'bar_bon_p3',
      'name': 'bar_bon_p3'
    }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
    self.assertEqual({
      'href': 'bar#event-bar_e2',
      'text': 'bar_e2',
      'name': 'bar_e2'
    }, resolver.GetLink('bar.bar_e2', namespace='bar'))
    self.assertEqual({
      'href': 'bar#type-bon',
      'text': 'bon',
      'name': 'bon'
    }, resolver.GetLink('bar.bon', namespace='bar'))
    self.assertEqual({
      'href': 'foo#event-foo_t3-foo_t3_e1',
      'text': 'foo_t3.foo_t3_e1',
      'name': 'foo_t3_e1'
    }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
    self.assertEqual({
      'href': 'foo#event-foo_t3-foo_t3_e1',
      'text': 'foo_t3.foo_t3_e1',
      'name': 'foo_t3_e1'
    }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
    self.assertEqual({
      'href': 'foo#event-foo_t3-foo_t3_e1',
      'text': 'foo_t3.foo_t3_e1',
      'name': 'foo_t3_e1'
    }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
    self.assertEqual({
      'href': 'bar#property-bar_t1-bar_t1_p1',
      'text': 'bar.bar_t1.bar_t1_p1',
      'name': 'bar_t1_p1'
    }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
    self.assertEqual({
      'href': 'bar#property-bar_t1-bar_t1_p1',
      'text': 'bar_t1.bar_t1_p1',
      'name': 'bar_t1_p1'
    }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
    self.assertEqual(
        None,
        resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
    self.assertEqual(
        None,
        resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
    self.assertEqual(
        None,
        resolver.GetLink('bar_p3', namespace='baz.bon'))
    self.assertEqual(
        None,
        resolver.GetLink('falafel.faf', namespace='a'))
    self.assertEqual(
        None,
        resolver.GetLink('bar_p3', namespace='foo'))
    self.assertEqual(
        'Hello <a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hello $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            namespace='bar.bon'))
    self.assertEqual(
        'I like <a href="bar#property-bar_t1-bar_t1_p1">food</a>.',
        resolver.ResolveAllLinks('I like $ref:[bar.bar_p3.bar_t1_p1 food].',
                                 namespace='foo'))
    self.assertEqual(
        'Ref <a href="foo">It\'s foo!</a>',
        resolver.ResolveAllLinks('Ref $ref:[foo It\'s foo!]', namespace='bar'))
    self.assertEqual(
        'Ref <a href="bar#type-bon">Bon</a>',
        resolver.ResolveAllLinks('Ref $ref:[bar.bon Bon]', namespace='bar'))

    # Different kinds of whitespace can be significant inside <pre> tags.
    self.assertEqual(
        '<pre><a href="bar#type-bon">bar.bon</a>({\nkey: value})',
        resolver.ResolveAllLinks('<pre>$ref:[bar.bon]({\nkey: value})',
                                 namespace='baz'))

    # Allow bare "$ref:foo.bar." at the end of a string.
    self.assertEqual(
        '<a href="bar#type-bon">bar.bon</a>.',
        resolver.ResolveAllLinks('$ref:bar.bon.',
                                 namespace='baz'))

    # If a request is provided it should construct an appropriate relative link.
    self.assertEqual(
        'Hi <a href="../../bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="../../bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="../../bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            relative_to='big/long/path/bar.html',
            namespace='bar.bon'))
    self.assertEqual(
        'Hi <a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            relative_to='',
            namespace='bar.bon'))
    self.assertEqual(
        'Hi <a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            relative_to='bar.html',
            namespace='bar.bon'))
    self.assertEqual(
        'Hi <a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            relative_to='foo/bar.html',
            namespace='bar.bon'))
    self.assertEqual(
        'Hi <a href="../bar.bon#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="../bar.bon#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="../bar.bon#property-bar_bon_p3">bar_bon_p3</a>',
        resolver.ResolveAllLinks(
            'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
            relative_to='foo/baz/bar.html',
            namespace='bar.bon'))
Esempio n. 11
0
  def __init__(self,
               object_store_creator,
               compiled_fs_factory,
               branch_utility,
               host_file_system_provider,
               github_file_system_provider,
               gcs_file_system_provider,
               base_path='/'):
    '''
    |object_store_creator|
        The ObjectStoreCreator used to create almost all caches.
    |compiled_fs_factory|
        Factory used to create CompiledFileSystems, a higher-level cache type
        than ObjectStores. This can usually be derived from just
        |object_store_creator| but under special circumstances a different
        implementation needs to be passed in.
    |branch_utility|
        Has knowledge of Chrome branches, channels, and versions.
    |host_file_system_provider|
        Creates FileSystem instances which host the server at alternative
        revisions.
    |github_file_system_provider|
        Creates FileSystem instances backed by GitHub.
    |base_path|
        The path which all HTML is generated relative to. Usually this is /
        but some servlets need to override this.
    '''
    self.object_store_creator = object_store_creator

    self.compiled_fs_factory = compiled_fs_factory

    self.host_file_system_provider = host_file_system_provider
    host_fs_at_trunk = host_file_system_provider.GetTrunk()

    self.github_file_system_provider = github_file_system_provider
    self.gcs_file_system_provider = gcs_file_system_provider

    assert base_path.startswith('/') and base_path.endswith('/')
    self.base_path = base_path

    self.host_file_system_iterator = HostFileSystemIterator(
        host_file_system_provider,
        branch_utility)

    self.features_bundle = FeaturesBundle(
        host_fs_at_trunk,
        self.compiled_fs_factory,
        self.object_store_creator)

    self.api_models = APIModels(
        self.features_bundle,
        self.compiled_fs_factory,
        host_fs_at_trunk)

    self.availability_finder = AvailabilityFinder(
        branch_utility,
        compiled_fs_factory,
        self.host_file_system_iterator,
        host_fs_at_trunk,
        object_store_creator)

    self.api_categorizer = APICategorizer(
        host_fs_at_trunk,
        compiled_fs_factory)

    self.api_data_source_factory = APIDataSource.Factory(
        self.compiled_fs_factory,
        host_fs_at_trunk,
        self.availability_finder,
        self.api_models,
        self.features_bundle,
        self.object_store_creator)

    self.ref_resolver_factory = ReferenceResolver.Factory(
        self.api_data_source_factory,
        self.api_models,
        object_store_creator)

    self.api_data_source_factory.SetReferenceResolverFactory(
        self.ref_resolver_factory)

    # Note: samples are super slow in the dev server because it doesn't support
    # async fetch, so disable them.
    if IsDevServer():
      extension_samples_fs = EmptyDirFileSystem()
      app_samples_fs = EmptyDirFileSystem()
    else:
      extension_samples_fs = host_fs_at_trunk
      # TODO(kalman): Re-enable the apps samples, see http://crbug.com/344097.
      app_samples_fs = EmptyDirFileSystem()
      #app_samples_fs = github_file_system_provider.Create(
      #    'GoogleChrome', 'chrome-app-samples')
    self.samples_data_source_factory = SamplesDataSource.Factory(
        extension_samples_fs,
        app_samples_fs,
        CompiledFileSystem.Factory(object_store_creator),
        self.ref_resolver_factory,
        base_path)

    self.api_data_source_factory.SetSamplesDataSourceFactory(
        self.samples_data_source_factory)

    self.content_providers = ContentProviders(
        object_store_creator,
        self.compiled_fs_factory,
        host_fs_at_trunk,
        self.github_file_system_provider,
        self.gcs_file_system_provider)

    # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
    # then factor out the DataSource creation into a factory method, so that
    # the entire ServerInstance doesn't need to be passed in here.
    self.template_renderer = TemplateRenderer(self)

    # TODO(kalman): It may be better for |document_renderer| to construct a
    # TemplateDataSource itself rather than depending on template_renderer, but
    # for that the above todo should be addressed.
    self.document_renderer = DocumentRenderer(
        TableOfContentsRenderer(host_fs_at_trunk,
                                compiled_fs_factory,
                                self.template_renderer),
        self.ref_resolver_factory.Create())
Esempio n. 12
0
 def testGetLink(self):
   data_source = FakeAPIDataSource(
       json.loads(self._ReadLocalFile('fake_data_source.json')))
   resolver = ReferenceResolver(data_source,
                                data_source,
                                InMemoryObjectStore(''))
   self.assertEqual({
     'href': 'foo.html#type-foo_t1',
     'text': 'foo.foo_t1'
   }, resolver.GetLink('baz', 'foo.foo_t1'))
   self.assertEqual({
     'href': 'baz.html#event-baz_e1',
     'text': 'baz_e1'
   }, resolver.GetLink('baz', 'baz.baz_e1'))
   self.assertEqual({
     'href': '#event-baz_e1',
     'text': 'baz_e1'
   }, resolver.GetLink('baz', 'baz_e1'))
   self.assertEqual({
     'href': 'foo.html#method-foo_f1',
     'text': 'foo.foo_f1'
   }, resolver.GetLink('baz', 'foo.foo_f1'))
   self.assertEqual({
     'href': 'foo.html#property-foo_p3',
     'text': 'foo.foo_p3'
   }, resolver.GetLink('baz', 'foo.foo_p3'))
   self.assertEqual({
     'href': 'bar.bon.html#type-bar_bon_t3',
     'text': 'bar.bon.bar_bon_t3'
   }, resolver.GetLink('baz', 'bar.bon.bar_bon_t3'))
   self.assertEqual({
     'href': '#property-bar_bon_p3',
     'text': 'bar_bon_p3'
   }, resolver.GetLink('bar.bon', 'bar_bon_p3'))
   self.assertEqual({
     'href': 'bar.bon.html#property-bar_bon_p3',
     'text': 'bar_bon_p3'
   }, resolver.GetLink('bar.bon', 'bar.bon.bar_bon_p3'))
   self.assertEqual({
     'href': 'bar.html#event-bar_e2',
     'text': 'bar_e2'
   }, resolver.GetLink('bar', 'bar.bar_e2'))
   self.assertEqual({
     'href': 'bar.html#type-bon',
     'text': 'bon'
   }, resolver.GetLink('bar', 'bar.bon'))
   self.assertEqual({
     'href': '#event-foo_t3-foo_t3_e1',
     'text': 'foo_t3.foo_t3_e1'
   }, resolver.GetLink('foo', 'foo_t3.foo_t3_e1'))
   self.assertEqual({
     'href': 'foo.html#event-foo_t3-foo_t3_e1',
     'text': 'foo_t3.foo_t3_e1'
   }, resolver.GetLink('foo', 'foo.foo_t3.foo_t3_e1'))
   self.assertEqual(
       None,
       resolver.GetLink('bar', 'bar.bon.bar_e3'))
   self.assertEqual(
       None,
       resolver.GetLink('baz.bon', 'bar_p3'))
   self.assertEqual(
       None,
       resolver.GetLink('a', 'falafel.faf'))
   self.assertEqual(
       None,
       resolver.GetLink('foo', 'bar_p3'))
Esempio n. 13
0
    def testGetLink(self):
        data_source = FakeAPIDataSource(
            json.loads(self._ReadLocalFile('fake_data_source.json')))
        resolver = ReferenceResolver(data_source, data_source,
                                     TestObjectStore('test'))
        self.assertEqual({
            'href': 'foo.html',
            'text': 'foo',
            'name': 'foo'
        }, resolver.GetLink('foo', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo.html#type-foo_t1',
                'text': 'foo.foo_t1',
                'name': 'foo_t1'
            }, resolver.GetLink('foo.foo_t1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'baz.html#event-baz_e1',
                'text': 'baz_e1',
                'name': 'baz_e1'
            }, resolver.GetLink('baz.baz_e1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'baz.html#event-baz_e1',
                'text': 'baz_e1',
                'name': 'baz_e1'
            }, resolver.GetLink('baz_e1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo.html#method-foo_f1',
                'text': 'foo.foo_f1',
                'name': 'foo_f1'
            }, resolver.GetLink('foo.foo_f1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo.html#property-foo_p3',
                'text': 'foo.foo_p3',
                'name': 'foo_p3'
            }, resolver.GetLink('foo.foo_p3', namespace='baz'))
        self.assertEqual(
            {
                'href': 'bar.bon.html#type-bar_bon_t3',
                'text': 'bar.bon.bar_bon_t3',
                'name': 'bar_bon_t3'
            }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
        self.assertEqual(
            {
                'href': 'bar.bon.html#property-bar_bon_p3',
                'text': 'bar_bon_p3',
                'name': 'bar_bon_p3'
            }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
        self.assertEqual(
            {
                'href': 'bar.bon.html#property-bar_bon_p3',
                'text': 'bar_bon_p3',
                'name': 'bar_bon_p3'
            }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
        self.assertEqual(
            {
                'href': 'bar.html#event-bar_e2',
                'text': 'bar_e2',
                'name': 'bar_e2'
            }, resolver.GetLink('bar.bar_e2', namespace='bar'))
        self.assertEqual(
            {
                'href': 'bar.html#type-bon',
                'text': 'bon',
                'name': 'bon'
            }, resolver.GetLink('bar.bon', namespace='bar'))
        self.assertEqual(
            {
                'href': 'foo.html#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'foo.html#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'foo.html#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'bar.html#property-bar_t1-bar_t1_p1',
                'text': 'bar.bar_t1.bar_t1_p1',
                'name': 'bar_t1_p1'
            }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'bar.html#property-bar_t1-bar_t1_p1',
                'text': 'bar_t1.bar_t1_p1',
                'name': 'bar_t1_p1'
            }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
        self.assertEqual(
            None, resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
        self.assertEqual(None,
                         resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
        self.assertEqual(None, resolver.GetLink('bar_p3', namespace='baz.bon'))
        self.assertEqual(None, resolver.GetLink('falafel.faf', namespace='a'))
        self.assertEqual(None, resolver.GetLink('bar_p3', namespace='foo'))
        self.assertEqual(
            'Hello <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
            '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
            '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
            resolver.ResolveAllLinks(
                'Hello $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
                namespace='bar.bon'))
        self.assertEqual(
            'I like <a href="bar.html#property-bar_t1-bar_t1_p1">food</a>.',
            resolver.ResolveAllLinks(
                'I like $ref:[bar.bar_p3.bar_t1_p1 food].', namespace='foo'))
        self.assertEqual(
            'Ref <a href="foo.html">It\'s foo!</a>',
            resolver.ResolveAllLinks('Ref $ref:[foo It\'s foo!]',
                                     namespace='bar'))
        self.assertEqual(
            'Ref <a href="bar.html#type-bon">Bon</a>',
            resolver.ResolveAllLinks('Ref $ref:[bar.bon Bon]',
                                     namespace='bar'))

        # Different kinds of whitespace can be significant inside <pre> tags.
        self.assertEqual(
            '<pre><a href="bar.html#type-bon">bar.bon</a>({\nkey: value})',
            resolver.ResolveAllLinks('<pre>$ref:[bar.bon]({\nkey: value})',
                                     namespace='baz'))

        # Allow bare "$ref:foo.bar." at the end of a string.
        self.assertEqual(
            '<a href="bar.html#type-bon">bar.bon</a>.',
            resolver.ResolveAllLinks('$ref:bar.bon.', namespace='baz'))
Esempio n. 14
0
 def testGetLink(self):
     data_source = FakeAPIDataSource(
         json.loads(self._ReadLocalFile('fake_data_source.json')))
     resolver = ReferenceResolver(data_source, data_source,
                                  InMemoryObjectStore(''))
     self.assertEqual(
         {
             'href': 'foo.html#type-foo_t1',
             'text': 'foo.foo_t1',
             'name': 'foo_t1'
         }, resolver.GetLink('foo.foo_t1', 'baz'))
     self.assertEqual(
         {
             'href': 'baz.html#event-baz_e1',
             'text': 'baz_e1',
             'name': 'baz_e1'
         }, resolver.GetLink('baz.baz_e1', 'baz'))
     self.assertEqual(
         {
             'href': 'baz.html#event-baz_e1',
             'text': 'baz_e1',
             'name': 'baz_e1'
         }, resolver.GetLink('baz_e1', 'baz'))
     self.assertEqual(
         {
             'href': 'foo.html#method-foo_f1',
             'text': 'foo.foo_f1',
             'name': 'foo_f1'
         }, resolver.GetLink('foo.foo_f1', 'baz'))
     self.assertEqual(
         {
             'href': 'foo.html#property-foo_p3',
             'text': 'foo.foo_p3',
             'name': 'foo_p3'
         }, resolver.GetLink('foo.foo_p3', 'baz'))
     self.assertEqual(
         {
             'href': 'bar.bon.html#type-bar_bon_t3',
             'text': 'bar.bon.bar_bon_t3',
             'name': 'bar_bon_t3'
         }, resolver.GetLink('bar.bon.bar_bon_t3', 'baz'))
     self.assertEqual(
         {
             'href': 'bar.bon.html#property-bar_bon_p3',
             'text': 'bar_bon_p3',
             'name': 'bar_bon_p3'
         }, resolver.GetLink('bar_bon_p3', 'bar.bon'))
     self.assertEqual(
         {
             'href': 'bar.bon.html#property-bar_bon_p3',
             'text': 'bar_bon_p3',
             'name': 'bar_bon_p3'
         }, resolver.GetLink('bar.bon.bar_bon_p3', 'bar.bon'))
     self.assertEqual(
         {
             'href': 'bar.html#event-bar_e2',
             'text': 'bar_e2',
             'name': 'bar_e2'
         }, resolver.GetLink('bar.bar_e2', 'bar'))
     self.assertEqual(
         {
             'href': 'bar.html#type-bon',
             'text': 'bon',
             'name': 'bon'
         }, resolver.GetLink('bar.bon', 'bar'))
     self.assertEqual(
         {
             'href': 'foo.html#event-foo_t3-foo_t3_e1',
             'text': 'foo_t3.foo_t3_e1',
             'name': 'foo_t3_e1'
         }, resolver.GetLink('foo_t3.foo_t3_e1', 'foo'))
     self.assertEqual(
         {
             'href': 'foo.html#event-foo_t3-foo_t3_e1',
             'text': 'foo_t3.foo_t3_e1',
             'name': 'foo_t3_e1'
         }, resolver.GetLink('foo.foo_t3.foo_t3_e1', 'foo'))
     self.assertEqual(
         {
             'href': 'foo.html#event-foo_t3-foo_t3_e1',
             'text': 'foo_t3.foo_t3_e1',
             'name': 'foo_t3_e1'
         }, resolver.GetLink('foo.foo_p1.foo_t3_e1', 'foo'))
     self.assertEqual(
         {
             'href': 'bar.html#property-bar_t1-bar_t1_p1',
             'text': 'bar.bar_t1.bar_t1_p1',
             'name': 'bar_t1_p1'
         }, resolver.GetLink('bar.bar_p3.bar_t1_p1', 'foo'))
     self.assertEqual(
         {
             'href': 'bar.html#property-bar_t1-bar_t1_p1',
             'text': 'bar_t1.bar_t1_p1',
             'name': 'bar_t1_p1'
         }, resolver.GetLink('bar_p3.bar_t1_p1', 'bar'))
     self.assertEqual(None, resolver.GetLink('bar.bar_p3.bar_t2_p1', 'bar'))
     self.assertEqual(None, resolver.GetLink('bar.bon.bar_e3', 'bar'))
     self.assertEqual(None, resolver.GetLink('bar_p3', 'baz.bon'))
     self.assertEqual(None, resolver.GetLink('falafel.faf', 'a'))
     self.assertEqual(None, resolver.GetLink('bar_p3', 'foo'))
     self.assertEqual(
         'Hello <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
         '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
         '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
         resolver.ResolveAllLinks(
             'Hello $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
             'bar.bon'))
     self.assertEqual(
         'I like <a href="bar.html#property-bar_t1-bar_t1_p1">food</a>.',
         resolver.ResolveAllLinks(
             'I like $ref:[bar.bar_p3.bar_t1_p1 food].', 'foo'))
     self.assertEqual('Ref <a href="bar.html#type-bon">bon</a>',
                      resolver.ResolveAllLinks('Ref $ref:[bar.bon]', 'bar'))
Esempio n. 15
0
    def __init__(self,
                 object_store_creator,
                 compiled_fs_factory,
                 branch_utility,
                 host_file_system_provider,
                 github_file_system_provider,
                 base_path='/'):
        '''
    |object_store_creator|
        The ObjectStoreCreator used to create almost all caches.
    |compiled_fs_factory|
        Factory used to create CompiledFileSystems, a higher-level cache type
        than ObjectStores. This can usually be derived from just
        |object_store_creator| but under special circumstances a different
        implementation needs to be passed in.
    |branch_utility|
        Has knowledge of Chrome branches, channels, and versions.
    |host_file_system_provider|
        Creates FileSystem instances which host the server at alternative
        revisions.
    |github_file_system_provider|
        Creates FileSystem instances backed by GitHub.
    |base_path|
        The path which all HTML is generated relative to. Usually this is /
        but some servlets need to override this.
    '''
        self.object_store_creator = object_store_creator

        self.compiled_fs_factory = compiled_fs_factory

        self.host_file_system_provider = host_file_system_provider
        host_fs_at_trunk = host_file_system_provider.GetTrunk()

        self.github_file_system_provider = github_file_system_provider

        assert base_path.startswith('/') and base_path.endswith('/')
        self.base_path = base_path

        self.host_file_system_iterator = HostFileSystemIterator(
            host_file_system_provider, branch_utility)

        self.features_bundle = FeaturesBundle(host_fs_at_trunk,
                                              self.compiled_fs_factory,
                                              self.object_store_creator)

        self.api_models = APIModels(self.features_bundle,
                                    self.compiled_fs_factory, host_fs_at_trunk)

        self.availability_finder = AvailabilityFinder(
            branch_utility, compiled_fs_factory,
            self.host_file_system_iterator, host_fs_at_trunk,
            object_store_creator)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, host_fs_at_trunk, self.features_bundle,
            self.object_store_creator)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, host_fs_at_trunk, svn_constants.API_PATH,
            self.availability_finder, branch_utility)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_models,
            object_store_creator)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        # Note: samples are super slow in the dev server because it doesn't support
        # async fetch, so disable them.
        if IsDevServer():
            extension_samples_fs = EmptyDirFileSystem()
            app_samples_fs = EmptyDirFileSystem()
        else:
            extension_samples_fs = host_fs_at_trunk
            app_samples_fs = github_file_system_provider.Create(
                'GoogleChrome', 'chrome-app-samples')
        self.samples_data_source_factory = SamplesDataSource.Factory(
            extension_samples_fs, app_samples_fs,
            CompiledFileSystem.Factory(object_store_creator),
            self.ref_resolver_factory, svn_constants.EXAMPLES_PATH, base_path)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_fs_factory, host_fs_at_trunk,
            self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.path_canonicalizer = PathCanonicalizer(self.compiled_fs_factory,
                                                    host_fs_at_trunk)

        self.content_providers = ContentProviders(
            self.compiled_fs_factory, host_fs_at_trunk,
            self.github_file_system_provider)

        # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
        # then factor out the DataSource creation into a factory method, so that
        # the entire ServerInstance doesn't need to be passed in here.
        self.template_renderer = TemplateRenderer(self)

        self.strings_json_path = svn_constants.STRINGS_JSON_PATH
        self.manifest_json_path = svn_constants.MANIFEST_JSON_PATH
        self.manifest_features_path = svn_constants.MANIFEST_FEATURES_PATH
 def testGetLink(self):
   resolver = ReferenceResolver(_FakeAPIModels(_TEST_DATA),
                                TestObjectStore('test'))
   self.assertEqual({
     'href': 'foo',
     'text': 'foo',
     'name': 'foo'
   }, resolver.GetLink('foo', namespace='baz'))
   self.assertEqual({
     'href': 'foo#type-foo_t1',
     'text': 'foo.foo_t1',
     'name': 'foo_t1'
   }, resolver.GetLink('foo.foo_t1', namespace='baz'))
   self.assertEqual({
     'href': 'baz#event-baz_e1',
     'text': 'baz_e1',
     'name': 'baz_e1'
   }, resolver.GetLink('baz.baz_e1', namespace='baz'))
   self.assertEqual({
     'href': 'baz#event-baz_e1',
     'text': 'baz_e1',
     'name': 'baz_e1'
   }, resolver.GetLink('baz_e1', namespace='baz'))
   self.assertEqual({
     'href': 'foo#method-foo_f1',
     'text': 'foo.foo_f1',
     'name': 'foo_f1'
   }, resolver.GetLink('foo.foo_f1', namespace='baz'))
   self.assertEqual({
     'href': 'foo#property-foo_p3',
     'text': 'foo.foo_p3',
     'name': 'foo_p3'
   }, resolver.GetLink('foo.foo_p3', namespace='baz'))
   self.assertEqual({
     'href': 'bar.bon#type-bar_bon_t3',
     'text': 'bar.bon.bar_bon_t3',
     'name': 'bar_bon_t3'
   }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
   self.assertEqual({
     'href': 'bar.bon#property-bar_bon_p3',
     'text': 'bar_bon_p3',
     'name': 'bar_bon_p3'
   }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
   self.assertEqual({
     'href': 'bar.bon#property-bar_bon_p3',
     'text': 'bar_bon_p3',
     'name': 'bar_bon_p3'
   }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
   self.assertEqual({
     'href': 'bar#event-bar_e2',
     'text': 'bar_e2',
     'name': 'bar_e2'
   }, resolver.GetLink('bar.bar_e2', namespace='bar'))
   self.assertEqual({
     'href': 'bar#type-bon',
     'text': 'bon',
     'name': 'bon'
   }, resolver.GetLink('bar.bon', namespace='bar'))
   self.assertEqual({
     'href': 'foo#event-foo_t3-foo_t3_e1',
     'text': 'foo_t3.foo_t3_e1',
     'name': 'foo_t3_e1'
   }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
   self.assertEqual({
     'href': 'foo#event-foo_t3-foo_t3_e1',
     'text': 'foo_t3.foo_t3_e1',
     'name': 'foo_t3_e1'
   }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
   self.assertEqual({
     'href': 'foo#event-foo_t3-foo_t3_e1',
     'text': 'foo_t3.foo_t3_e1',
     'name': 'foo_t3_e1'
   }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
   self.assertEqual({
     'href': 'bar#property-bar_t1-bar_t1_p1',
     'text': 'bar.bar_t1.bar_t1_p1',
     'name': 'bar_t1_p1'
   }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
   self.assertEqual({
     'href': 'bar#property-bar_t1-bar_t1_p1',
     'text': 'bar_t1.bar_t1_p1',
     'name': 'bar_t1_p1'
   }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
   self.assertEqual(
       None,
       resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
   self.assertEqual(
       None,
       resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
   self.assertEqual(
       None,
       resolver.GetLink('bar_p3', namespace='baz.bon'))
   self.assertEqual(
       None,
       resolver.GetLink('falafel.faf', namespace='a'))
   self.assertEqual(
       None,
       resolver.GetLink('bar_p3', namespace='foo'))
Esempio n. 17
0
 def _CreateRefResolver(self, filename):
     data_source = FakeAPIAndListDataSource(self._LoadJSON(filename))
     return ReferenceResolver.Factory(data_source, data_source,
                                      InMemoryObjectStore('')).Create()
Esempio n. 18
0
    def testGetLink(self):
        apps_resolver = ReferenceResolver(
            _FakePlatformBundle().GetAPIModels('apps'),
            TestObjectStore('apps/test'))
        extensions_resolver = ReferenceResolver(
            _FakePlatformBundle().GetAPIModels('extensions'),
            TestObjectStore('extensions/test'))

        self.assertEqual({
            'href': 'foo',
            'text': 'foo',
            'name': 'foo'
        }, apps_resolver.GetLink('foo', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo#type-foo_t1',
                'text': 'foo.foo_t1',
                'name': 'foo_t1'
            }, apps_resolver.GetLink('foo.foo_t1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'baz#event-baz_e1',
                'text': 'baz_e1',
                'name': 'baz_e1'
            }, apps_resolver.GetLink('baz.baz_e1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'baz#event-baz_e1',
                'text': 'baz_e1',
                'name': 'baz_e1'
            }, apps_resolver.GetLink('baz_e1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo#method-foo_f1',
                'text': 'foo.foo_f1',
                'name': 'foo_f1'
            }, apps_resolver.GetLink('foo.foo_f1', namespace='baz'))
        self.assertEqual(
            {
                'href': 'foo#property-foo_p3',
                'text': 'foo.foo_p3',
                'name': 'foo_p3'
            }, apps_resolver.GetLink('foo.foo_p3', namespace='baz'))
        self.assertEqual(
            {
                'href': 'bar.bon#type-bar_bon_t3',
                'text': 'bar.bon.bar_bon_t3',
                'name': 'bar_bon_t3'
            }, apps_resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
        self.assertEqual(
            {
                'href': 'bar.bon#property-bar_bon_p3',
                'text': 'bar_bon_p3',
                'name': 'bar_bon_p3'
            }, apps_resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
        self.assertEqual(
            {
                'href': 'bar.bon#property-bar_bon_p3',
                'text': 'bar_bon_p3',
                'name': 'bar_bon_p3'
            }, apps_resolver.GetLink('bar.bon.bar_bon_p3',
                                     namespace='bar.bon'))
        self.assertEqual(
            {
                'href': 'bar#event-bar_e2',
                'text': 'bar_e2',
                'name': 'bar_e2'
            }, apps_resolver.GetLink('bar.bar_e2', namespace='bar'))
        self.assertEqual({
            'href': 'bar#type-bon',
            'text': 'bon',
            'name': 'bon'
        }, apps_resolver.GetLink('bar.bon', namespace='bar'))
        self.assertEqual(
            {
                'href': 'foo#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, apps_resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'foo#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, apps_resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'foo#event-foo_t3-foo_t3_e1',
                'text': 'foo_t3.foo_t3_e1',
                'name': 'foo_t3_e1'
            }, apps_resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
        self.assertEqual(
            {
                'href': 'bar#property-bar_t1-bar_t1_p1',
                'text': 'bar.bar_t1.bar_t1_p1',
                'name': 'bar_t1_p1'
            }, apps_resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
        # Test extensions_resolver.
        self.assertEqual(
            {
                'href': 'bar#property-bar_t1-bar_t1_p1',
                'text': 'bar.bar_t1.bar_t1_p1',
                'name': 'bar_t1_p1'
            },
            extensions_resolver.GetLink('bar.bar_p3.bar_t1_p1',
                                        namespace='foo'))
        self.assertEqual(
            {
                'href': 'bar#property-bar_t1-bar_t1_p1',
                'text': 'bar_t1.bar_t1_p1',
                'name': 'bar_t1_p1'
            }, apps_resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
        self.assertEqual(
            None, apps_resolver.GetLink('bar.bar_p3.bar_t2_p1',
                                        namespace='bar'))
        self.assertEqual(
            None, apps_resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
        self.assertEqual(None,
                         apps_resolver.GetLink('bar_p3', namespace='baz.bon'))
        self.assertEqual(None,
                         apps_resolver.GetLink('falafel.faf', namespace='a'))
        self.assertEqual(None, apps_resolver.GetLink('bar_p3',
                                                     namespace='foo'))
        # Exists in apps but not extensions.
        self.assertEqual(
            None, extensions_resolver.GetLink('foo.foo_p3', namespace='baz'))