def test_value_override(self): # Override of rendered value works as expected. self.assertEqual('default value', test_tales('foo/fmt:link::default value', foo=None)) self.assertEqual( 'default value', test_tales('foo/fmt:link:rootsite:default value', foo=None))
def test_value_override(self): # Override of rendered value works as expected. self.assertEqual( 'default value', test_tales('foo/fmt:link::default value', foo=None)) self.assertEqual( 'default value', test_tales('foo/fmt:link:rootsite:default value', foo=None))
def test_pagetype(self): # The pagetype is 'unset', until macro:page is called. self.assertIs(None, getattr(self.view, '__pagetype__', None)) self.assertEqual('unset', test_tales('view/macro:pagetype', view=self.view)) test_tales('view/macro:page/main_side', view=self.view) self.assertEqual('main_side', self.view.__pagetype__) self.assertEqual('main_side', test_tales('view/macro:pagetype', view=self.view))
def test_pagetype(self): # The pagetype is 'unset', until macro:page is called. self.assertIs(None, getattr(self.view, '__pagetype__', None)) self.assertEqual( 'unset', test_tales('view/macro:pagetype', view=self.view)) test_tales('view/macro:page/main_side', view=self.view) self.assertEqual('main_side', self.view.__pagetype__) self.assertEqual( 'main_side', test_tales('view/macro:pagetype', view=self.view))
def test_query_tales(self): # Test that query:has-structured-doc gets sets the field annotation. request = LaunchpadTestRequest() view = TestView(None, request) view.initialize() normal_widget, structured_widget = view.widgets self.assertIs(None, test_tales( 'widget/query:has-structured-doc', widget=normal_widget)) self.assertTrue(test_tales( 'widget/query:has-structured-doc', widget=structured_widget))
def test_object_link_ignores_default(self): # The rendering of an object's link ignores any specified default # value which would be used in the case where the object were None. person = self.factory.makePerson() person_link = test_tales( 'person/fmt:link::default value', person=person) self.assertEqual(PersonFormatterAPI(person).link(None), person_link) person_link = test_tales( 'person/fmt:link:bugs:default value', person=person) self.assertEqual(PersonFormatterAPI(person).link( None, rootsite='bugs'), person_link)
def test_query_tales(self): # Test that query:has-structured-doc gets sets the field annotation. request = LaunchpadTestRequest() view = TestView(None, request) view.initialize() normal_widget, structured_widget = view.widgets self.assertIs( None, test_tales('widget/query:has-structured-doc', widget=normal_widget)) self.assertTrue( test_tales('widget/query:has-structured-doc', widget=structured_widget))
def test_fmt_simple_conflicts(self): # Conflicts are indicated using text in the link. preview = self._createPreviewDiff(10, 2, 3, 'conflicts') self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines (+2/-3) (has conflicts)</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_nick_displayname(self): person = self.factory.makePerson(name='fred') ircset = getUtility(IIrcIDSet) ircID = ircset.new(person, "irc.canonical.com", "fred") self.assertEqual( 'fred on irc.canonical.com', test_tales('nick/fmt:displayname', nick=ircID))
def test_fmt_lines_no_add_or_remove(self): # If the lines added and removed are None, they are now shown. preview = self._createPreviewDiff(10, added=None, removed=None) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_fmt_lines_no_add_or_remove(self): # If the lines added and removed are None, they are now shown. preview = self._createPreviewDiff(10, added=None, removed=None) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "10 lines</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_fmt_lines_some_added_no_removed(self): # If the added and removed values are not None, they are shown. preview = self._createPreviewDiff(10, added=4, removed=0) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "10 lines (+4/-0)</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_fmt_lines_some_added_no_removed(self): # If the added and removed values are not None, they are shown. preview = self._createPreviewDiff(10, added=4, removed=0) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines (+4/-0)</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_valid_traversal(self): # Traversal of allowed names works as expected. allowed_names = set([ 'approximatedate', 'approximateduration', 'break-long-words', 'date', 'datetime', 'displaydate', 'isodate', 'email-to-html', 'exactduration', 'lower', 'nice_pre', 'nl_to_br', 'pagetitle', 'rfc822utcdatetime', 'text-to-html', 'time', 'url', 'link', ]) for name in allowed_names: self.assertEqual('', test_tales('foo/fmt:%s' % name, foo=None))
def test_link(self): self.factory.makeSourcePackageName('mouse') ubuntu = getUtility(ILaunchpadCelebrities).ubuntu dsp = ubuntu.getSourcePackage('mouse') markup = ( u'<a href="/ubuntu/+source/mouse" class="sprite package-source">' u'mouse in Ubuntu</a>') self.assertEqual(markup, test_tales('dsp/fmt:link', dsp=dsp))
def test_fmt_lines_one_file_modified(self): # If only one file has been modified, a singular value is used. preview = self._createPreviewDiff(10, added=4, removed=0, diffstat={"file": (3, 0)}) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "10 lines (+4/-0) 1 file modified</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_fmt_simple_conflicts(self): # Conflicts are indicated using text in the link. preview = self._createPreviewDiff(10, 2, 3, u"conflicts") self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "10 lines (+2/-3) (has conflicts)</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_linkification_with_target(self): # The text-to-html-with-target formatter sets the target # attribute of the links it produces to _new. linkified_text = test_tales( 'foo/fmt:text-to-html-with-target', foo=self.test_data) tree = html.fromstring(linkified_text) for link in tree.xpath('//a'): self.assertEqual('_new', link.get('target'))
def test_fmt_stale_non_empty_diff_with_conflicts(self): # If there is no diff, there is no link. diffstat = dict((self.factory.getUniqueString(), (2, 3)) for x in range(23)) preview = self._createStalePreviewDiff(500, 89, 340, u"conflicts", diffstat=diffstat) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "500 lines (+89/-340) 23 files modified (has conflicts)</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_fmt_lines_files_modified(self): # If the diffstat has been set, the number of entries in the dict # defines the number of files modified. preview = self._createPreviewDiff(10, added=4, removed=0, diffstat={"file1": (1, 0), "file2": (3, 0)}) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' "10 lines (+4/-0) 2 files modified</a>" % canonical_url(preview), test_tales("preview/fmt:link", preview=preview), )
def test_has_watermark_true(self): # A view cand define has_watermark as True. class NoWatermarkView(TestView): has_watermark = True self.registerBrowserViewAdapter(NoWatermarkView, ITest, '+test') view = create_view(TestObject(), name='+test') has_watermark = test_tales('view/macro:has-watermark', view=view) self.assertIs(True, has_watermark)
def test_page(self): # A view can be adpated to a page macro object. page_macro = test_tales('view/macro:page/main_side', view=self.view) self.assertEqual('main_side', self.view.__pagetype__) self.assertEqual(('mode', 'html'), page_macro[1]) source_file = page_macro[3] self.assertEqual('setSourceFile', source_file[0]) self.assertEqual( '/templates/base-layout.pt', source_file[1].split('..')[1])
def test_page(self): # A view can be adpated to a page macro object. page_macro = test_tales('view/macro:page/main_side', view=self.view) self.assertEqual('main_side', self.view.__pagetype__) self.assertEqual(('mode', 'html'), page_macro[1]) source_file = page_macro[3] self.assertEqual('setSourceFile', source_file[0]) self.assertEqual('/templates/base-layout.pt', source_file[1].split('..')[1])
def test_fmt_stale_non_empty_diff(self): # If there is no diff, there is no link. diffstat = dict( (self.factory.getUniqueString(), (2, 3)) for x in range(23)) preview = self._createStalePreviewDiff(500, 89, 340, diffstat=diffstat) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '500 lines (+89/-340) 23 files modified</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_fmt_lines_one_file_modified(self): # If only one file has been modified, a singular value is used. preview = self._createPreviewDiff(10, added=4, removed=0, diffstat={'file': (3, 0)}) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines (+4/-0) 1 file modified</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_nick_formatted_displayname(self): person = self.factory.makePerson(name='fred') ircset = getUtility(IIrcIDSet) # Include some bogus markup to check escaping works. ircID = ircset.new(person, "<b>irc.canonical.com</b>", "fred") expected_html = test_tales( 'nick/fmt:formatted_displayname', nick=ircID) self.assertEquals( u'<strong>fred</strong>\n' '<span class="lesser"> on </span>\n' '<strong><b>irc.canonical.com</b></strong>\n', expected_html)
def test_fmt_lines_escapes_file_name(self): # File names that include HTML metacharacters are escaped. preview = self._createPreviewDiff(10, added=4, removed=0, diffstat={'file<name>': (3, 0)}) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines (+4/-0)</a>' '<div class="collapsible">' '<span>1 file modified</span>' '<div>file<name> (+3/-0)</div>' '</div>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_fmt_lines_files_modified(self): # If the diffstat has been set, the number of entries in the dict # defines the number of files modified. preview = self._createPreviewDiff(10, added=4, removed=0, diffstat={ 'file1': (1, 0), 'file2': (3, 0) }) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '10 lines (+4/-0) 2 files modified</a>' % canonical_url(preview), test_tales('preview/fmt:link', preview=preview))
def test_fmt_stale_non_empty_diff(self): # If there is no diff, there is no link. diffstat = dict( (self.factory.getUniqueString(), (2, 3)) for x in range(23)) preview = self._createStalePreviewDiff(500, 89, 340, diffstat=diffstat) expected_diffstat = '<br/>'.join('%s (+2/-3)' % path for path in sorted(diffstat)) self.assertEqual( '<a href="%s/+files/preview.diff" class="diff-link">' '500 lines (+89/-340)</a>' '<div class="collapsible">' '<span>23 files modified</span>' '<div>%s</div>' '</div>' % (canonical_url(preview), expected_diffstat), test_tales('preview/fmt:link', preview=preview))
def test_select(self): value = test_tales('value/css:select/visible/hidden', value=None) self.assertThat(value, Equals('hidden')) value = test_tales('value/css:select/visible/hidden', value=False) self.assertThat(value, Equals('hidden')) value = test_tales('value/css:select/visible/hidden', value='') self.assertThat(value, Equals('hidden')) value = test_tales('value/css:select/visible/hidden', value=True) self.assertThat(value, Equals('visible')) value = test_tales('value/css:select/visible/hidden', value='Hello') self.assertThat(value, Equals('visible')) value = test_tales('value/css:select/visible/hidden', value=object()) self.assertThat(value, Equals('visible'))
def test_pagehas_unknown_attribute(self): # An error is raised if the LayoutElement does not exist. test_tales('view/macro:page/main_side', view=self.view) self.assertRaisesWithContent( KeyError, "'fnord'", self._call_test_tales, 'view/macro:pagehas/fnord')
def test_pagehas(self): # After the page type is set, the page macro can be queried # for what LayoutElements it supports supports. test_tales('view/macro:page/main_side', view=self.view) self.assertTrue( test_tales('view/macro:pagehas/portlets', view=self.view))
def _call_test_tales(self, path): test_tales(path, view=self.view)
def test_is_page_contentless_private_without_view(self): # Private objects the view cannot view cannot show content. self.view.context.private = True self._setUpPermissions(has_permission=False) result = test_tales('view/macro:is-page-contentless', view=self.view) self.assertTrue(result)
def test_is_page_contentless_public(self): # Public objects always have content to be shown. self.assertFalse( test_tales('view/macro:is-page-contentless', view=self.view))
def _tales_value(self, attr, request, path='fmt'): # Evaluate the given formatted attribute value on team. result = test_tales( "team/%s:%s" % (path, attr), team=self.team, request=request) return result
def test_select_chaining(self): value = test_tales( 'value/css:select/VISIBLE/hidden/fmt:lower', value=None) self.assertThat(value, Equals('hidden'))
def test_has_watermark_default(self): # All pages have a watermark if the view does not provide the attr. has_watermark = test_tales('view/macro:has-watermark', view=self.view) self.assertIs(True, has_watermark)
def test_is_page_contentless_private_with_view(self): # Private objects the user can view have content to be shown. self.view.context.private = True self._setUpPermissions(has_permission=True) result = test_tales('view/macro:is-page-contentless', view=self.view) self.assertFalse(result)
def test_pagehas_unknown_attribute(self): # An error is raised if the LayoutElement does not exist. test_tales('view/macro:page/main_side', view=self.view) self.assertRaisesWithContent(KeyError, "'fnord'", self._call_test_tales, 'view/macro:pagehas/fnord')
def test_fmt_no_diff(self): # If there is no diff, there is no link. preview = self._createPreviewDiff(0) self.assertEqual('<span class="empty-diff">0 lines</span>', test_tales('preview/fmt:link', preview=preview))
def test_fmt_no_diff(self): # If there is no diff, there is no link. preview = self._createPreviewDiff(0) self.assertEqual('<span class="empty-diff">0 lines</span>', test_tales("preview/fmt:link", preview=preview))
def test_url(self): diff = self.factory.makeDiff() self.assertEqual(diff.diff_text.getURL(), test_tales("diff/fmt:url", diff=diff))
def test_select_chaining(self): value = test_tales('value/css:select/VISIBLE/hidden/fmt:lower', value=None) self.assertThat(value, Equals('hidden'))