示例#1
0
    def test_getSelectedTabPrefixMatch(self):
        """
        Check that L{webnav.getSelectedTab} returns the tab whose C{linkURL}
        attribute contains the longest prefix of path segments that appears
        at the beginning of the L{nevow.url.URL} it is passed (if there is not
        an exact match)
        """

        tabs = [webnav.Tab('thing1', None, 0, linkURL='/a/b/c/d'),
                webnav.Tab('thing2', None, 0, linkURL='/a/b/c')]

        def assertSelected(tab):
            selected = webnav.getSelectedTab(tabs, URL.fromString('/a/b/c/d/e'))
            self.assertIdentical(selected, tab)

        assertSelected(tabs[0])
        tabs.reverse()
        assertSelected(tabs[1])

        tabs.append(webnav.Tab('thing3', None, 0, linkURL='a/b/c/e/e'))
        assertSelected(tabs[1])

        t = webnav.Tab('thing4', None, 0, linkURL='/a/b/c/d/e')
        tabs.append(t)
        assertSelected(t)
示例#2
0
 def test_applicationNavigationChildren(self):
     """
     The L{applicationNavigation} renderer should fill the 'subtabs' slot
     with copies of the 'subtab' pattern for each tab, if that pattern is
     present.  (This is only tested to one level of depth because we
     currently only support one level of depth.)
     """
     tag = self._renderAppNav(
         [webnav.Tab('alpha', 123, 0),
          webnav.Tab('beta', 234, 0, children=[
                     webnav.Tab('gamma', 345, 0),
                     webnav.Tab('delta', 456, 0)])],
         tags.span[tags.div(pattern='app-tab'),
                   tags.div(pattern='tab-contents'),
                   tags.div(pattern='subtab'),
                   tags.div(pattern='subtab-contents',
                            class_='subtab-contents-class')])
     navTags = list(tag.slotData['tabs'])
     self.assertEqual(len(navTags), 2)
     alpha, beta = navTags
     self.assertEqual(alpha.slotData['subtabs'], [])
     self.assertEqual(len(beta.slotData['subtabs']), 2)
     subtab1 = beta.slotData['subtabs'][0]
     self.assertEqual(subtab1.slotData['name'],
                      'gamma')
     self.assertEqual(subtab1.slotData['href'], '/link/345')
     self.assertEqual(subtab1.slotData['tab-contents'].attributes['class'],
                      'subtab-contents-class')
     subtab2 = beta.slotData['subtabs'][1]
     self.assertEqual(subtab2.slotData['name'],
                      'delta')
     self.assertEqual(subtab2.slotData['href'], '/link/456')
     self.assertEqual(subtab2.slotData['tab-contents'].attributes['class'],
                      'subtab-contents-class')
示例#3
0
 def getTabs(self):
     """
     Add this object to the tab navigation so it can display configuration
     information and allow configuration to be modified.
     """
     return [webnav.Tab('Admin', self.storeID, 0.0,
                        [webnav.Tab('Ports', self.storeID, 0.4)],
                        authoritative=False)]
示例#4
0
 def getTabs(self):
     return [
         webnav.Tab('Mail',
                    self.storeID,
                    0.6,
                    children=[webnav.Tab('Gallery', self.storeID, 0.0)],
                    authoritative=False)
     ]
示例#5
0
 def getTabs(self):
     # XXX profanity
     from xmantissa import webnav
     return [
         webnav.Tab('Admin',
                    self.storeID,
                    0.3, [webnav.Tab('Offerings', self.storeID, 1.0)],
                    authoritative=True)
     ]
示例#6
0
 def test_applicationNavigationMissingSubtabsPattern(self):
     """
     The L{applicationNavigation} renderer should fill the 'subtabs' slot
     with the empty list if the 'subtabs' pattern is not found.  This is to
     ensure that it remains compatible with older customized 'shell'
     templates.
     """
     tag = self._renderAppNav([
             webnav.Tab("alpha", 123, 0,
                        children=[webnav.Tab("beta", 234, 0)])])
     navTags = list(tag.slotData['tabs'])
     self.assertEqual(navTags[0].slotData['subtabs'], [])
示例#7
0
 def test_startMenuSetsTabURLs(self):
     """
     L{Tabs<Tab>} which have C{None} for a C{linkURL} attribute should have
     a value set for that attribute based on the L{IWebTranslator} passed to
     L{startMenu}.
     """
     tab = webnav.Tab('alpha', 123, 0)
     webnav.startMenu(FakeTranslator(), [tab], tags.span())
     self.assertEqual(tab.linkURL, '/link/123')
示例#8
0
 def test_applicationNavigation(self):
     """
     Test that the L{applicationNavigation} renderer creates a tag for each
     tab, fillings I{name} and I{tab-contents} slots.
     """
     tag = self._renderAppNav([
         webnav.Tab('alpha', 123, 0),
         webnav.Tab('beta', 234, 0)])
     self.assertEqual(tag.tagName, 'span')
     navTags = list(tag.slotData['tabs'])
     self.assertEqual(len(navTags), 2)
     alpha, beta = navTags
     self.assertEqual(alpha.slotData['name'], 'alpha')
     alphaContents = alpha.slotData['tab-contents']
     self.assertEqual(alphaContents.slotData['href'], '/link/123')
     self.assertEqual(beta.slotData['name'], 'beta')
     betaContents = beta.slotData['tab-contents']
     self.assertEqual(betaContents.slotData['href'], '/link/234')
示例#9
0
    def test_setTabURLs(self):
        """
        Check that L{webnav.setTabURLs} correctly sets the C{linkURL}
        attribute of L{webnav.Tab} instances to the result of
        passing tab.storeID to L{xmantissa.ixmantissa.IWebTranslator.linkTo}
        if C{linkURL} is not set, and that it leaves it alone if it is
        """

        s = Store()

        privapp = PrivateApplication(store=s)
        installOn(privapp,s)

        tabs = [webnav.Tab('PrivateApplication', privapp.storeID, 0),
                webnav.Tab('Something Else', None, 0, linkURL='/foo/bar')]

        webnav.setTabURLs(tabs, privapp)

        self.assertEqual(tabs[0].linkURL, privapp.linkTo(privapp.storeID))
        self.assertEqual(tabs[1].linkURL, '/foo/bar')
示例#10
0
    def test_startMenuRenders(self):
        """
        Test that the L{startMenu} renderer creates a tag for each tab, filling
        its I{href}, I{name}, and I{kids} slots.
        """
        tabs = [
            webnav.Tab('alpha', 123, 0),
            webnav.Tab('beta', 234, 0)]
        node = tags.span[tags.div(pattern='tab')]

        tag = webnav.startMenu(FakeTranslator(), tabs, node)
        self.assertEqual(tag.tagName, 'span')
        navTags = list(tag.slotData['tabs'])
        self.assertEqual(len(navTags), 2)
        alpha, beta = navTags
        self.assertEqual(alpha.slotData['name'], 'alpha')
        self.assertEqual(alpha.slotData['href'], '/link/123')
        self.assertEqual(alpha.slotData['kids'], '')
        self.assertEqual(beta.slotData['name'], 'beta')
        self.assertEqual(beta.slotData['href'], '/link/234')
        self.assertEqual(beta.slotData['kids'], '')
示例#11
0
    def test_tabMerge(self):
        """
        L{webnav.getTabs} should combine tabs from the L{INavigableElement}
        providers passed to it into a single structure.  It should preserve the
        attributes of all of the tabs and order them and their children by
        priority.
        """
        nav = webnav.getTabs([
                FakeNavigator([webnav.Tab('Hello', 1, 0.5,
                                          [webnav.Tab('Super', 2, 1.0, (), False, '/Super/2'),
                                           webnav.Tab('Mega', 3, 0.5, (), False, '/Mega/3')],
                                          False, '/Hello/1')]),
                FakeNavigator([webnav.Tab('Hello', 4, 1.,
                                          [webnav.Tab('Ultra', 5, 0.75, (), False, '/Ultra/5'),
                                           webnav.Tab('Hyper', 6, 0.25, (), False, '/Hyper/6')],
                                          True, '/Hello/4'),
                               webnav.Tab('Goodbye', 7, 0.9, (), True, '/Goodbye/7')])])

        hello, goodbye = nav
        self.assertEqual(hello.name, 'Hello')
        self.assertEqual(hello.storeID, 4)
        self.assertEqual(hello.priority, 1.0)
        self.assertEqual(hello.authoritative,True)
        self.assertEqual(hello.linkURL, '/Hello/4')

        super, ultra, mega, hyper = hello.children
        self.assertEqual(super.name, 'Super')
        self.assertEqual(super.storeID, 2)
        self.assertEqual(super.priority, 1.0)
        self.assertEqual(super.authoritative, False)
        self.assertEqual(super.linkURL, '/Super/2')

        self.assertEqual(ultra.name, 'Ultra')
        self.assertEqual(ultra.storeID, 5)
        self.assertEqual(ultra.priority, 0.75)
        self.assertEqual(ultra.authoritative, False)
        self.assertEqual(ultra.linkURL, '/Ultra/5')

        self.assertEqual(mega.name, 'Mega')
        self.assertEqual(mega.storeID, 3)
        self.assertEqual(mega.priority, 0.5)
        self.assertEqual(mega.authoritative, False)
        self.assertEqual(mega.linkURL, '/Mega/3')

        self.assertEqual(hyper.name, 'Hyper')
        self.assertEqual(hyper.storeID, 6)
        self.assertEqual(hyper.priority, 0.25)
        self.assertEqual(hyper.authoritative, False)
        self.assertEqual(hyper.linkURL, '/Hyper/6')

        self.assertEqual(goodbye.name, 'Goodbye')
        self.assertEqual(goodbye.storeID, 7)
        self.assertEqual(goodbye.priority, 0.9)
        self.assertEqual(goodbye.authoritative, True)
        self.assertEqual(goodbye.linkURL, '/Goodbye/7')
示例#12
0
    def test_getSelectedTabExactMatch(self):
        """
        Check that L{webnav.getSelectedTab} returns the tab whose C{linkURL}
        attribute exactly matches the path of the L{nevow.url.URL} it is passed
        """

        tabs = list(webnav.Tab(str(i), None, 0, linkURL='/' + str(i))
                        for i in xrange(5))

        for (i, tab) in enumerate(tabs):
            selected = webnav.getSelectedTab(tabs, URL.fromString(tab.linkURL))
            self.assertIdentical(selected, tab)

        selected = webnav.getSelectedTab(tabs, URL.fromString('/XYZ'))
        self.failIf(selected)
示例#13
0
 def getTabs(self):
     """
     Implementation of L{ixmantissa.INavigableElement.getTabs} which yields a
     'Hyperbola' tab pointing at this item.
     """
     return [webnav.Tab('Hyperbola', self.storeID, 0)]
示例#14
0
 def getTabs(self):
     return (webnav.Tab('General', self.storeID, 1.0, authoritative=True), )
示例#15
0
 def getTabs(self):
     return [webnav.Tab('Voice', self.storeID, 0.25)]
示例#16
0
 def getTabs(self):
     return (webnav.Tab('Mail', self.storeID, 0.0, children=(
                 webnav.Tab('Outgoing', self.storeID, 0.0),),
                 authoritative=False),)
示例#17
0
 def getTabs(self):
     return [webnav.Tab('Mail', self.storeID, 0.6, children=
                 [webnav.Tab('Compose', self.storeID, 0.1)],
             authoritative=False)]
示例#18
0
 def getTabs(self):
     return (webnav.Tab('Mail', self.storeID, 0.0), )
示例#19
0
 def getTabs(self):
     return [webnav.Tab('Mail', self.storeID, 0.2, children=
                 [webnav.Tab('Filtering', self.storeID, 0.1)],
             authoritative=False)]
示例#20
0
 def getTabs(self):
     return [webnav.Tab('Admin', self.storeID, 0.0,
                        [webnav.Tab('Local Users', self.storeID, 0.1)],
                        authoritative=False)]
示例#21
0
 def getTabs(self):
     return [webnav.Tab('Admin', self.storeID, 0.0,
                        [webnav.Tab('Errors', self.storeID, 0.3)],
                        authoritative=False)]
示例#22
0
 def getTabs(self):
     return [webnav.Tab('Mail', self.storeID, 0.75, children=
                 [webnav.Tab('Inbox', self.storeID, 0.4)],
             authoritative=True)]