comparison tests/test_page.py @ 82:9afe4a1dbd1e

Refactoring of core wiki classes: - Use proper classes instead of dictionaries more often. - Simplified `Page`'s public API. - Page meta property values are now always stored in an array, even if there's only one occurence for the given key. - Updated unit-tests.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 19 Mar 2013 19:54:11 -0700
parents 0b4f4c23770a
children 65f83a9b42f1
comparison
equal deleted inserted replaced
81:05d0a7cd85e8 82:9afe4a1dbd1e
14 'foo.txt': 'A test page.' 14 'foo.txt': 'A test page.'
15 }) 15 })
16 page = Page(self.wiki, 'foo') 16 page = Page(self.wiki, 'foo')
17 self.assertEqual('foo', page.url) 17 self.assertEqual('foo', page.url)
18 self.assertEqual('A test page.', page.raw_text) 18 self.assertEqual('A test page.', page.raw_text)
19 self.assertEqual('A test page.', page.formatted_text) 19 self.assertEqual('A test page.', page._getFormattedText())
20 self.assertEqual('foo', page.title) 20 self.assertEqual('foo', page.title)
21 self.assertEqual('A test page.', page.text) 21 self.assertEqual('A test page.', page.text)
22 self.assertEqual({}, page.local_meta) 22 self.assertEqual({}, page._getLocalMeta())
23 self.assertEqual([], page.local_links) 23 self.assertEqual([], page._getLocalLinks())
24 24
25 def testPageMeta(self): 25 def testPageMeta(self):
26 self.wiki = self._getWikiFromStructure({ 26 self.wiki = self._getWikiFromStructure({
27 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}" 27 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}"
28 }) 28 })
29 page = Page(self.wiki, 'foo') 29 page = Page(self.wiki, 'foo')
30 self.assertEqual('foo', page.url) 30 self.assertEqual('foo', page.url)
31 self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text) 31 self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text)
32 self.assertEqual('A page with simple meta.\n\n', page.formatted_text) 32 self.assertEqual('A page with simple meta.\n\n', page._getFormattedText())
33 self.assertEqual('foo', page.title) 33 self.assertEqual('foo', page.title)
34 self.assertEqual('A page with simple meta.\n\n', page.text) 34 self.assertEqual('A page with simple meta.\n\n', page.text)
35 self.assertEqual({'bar': 'baz', 'is_test': True}, page.local_meta) 35 self.assertEqual({'bar': ['baz'], 'is_test': True}, page._getLocalMeta())
36 self.assertEqual([], page.local_links) 36 self.assertEqual([], page._getLocalLinks())
37 37
38 def testPageTitleMeta(self): 38 def testPageTitleMeta(self):
39 self.wiki = self._getWikiFromStructure({ 39 self.wiki = self._getWikiFromStructure({
40 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}" 40 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}"
41 }) 41 })
42 page = Page(self.wiki, 'test_title') 42 page = Page(self.wiki, 'test_title')
43 self.assertEqual('test_title', page.url) 43 self.assertEqual('test_title', page.url)
44 self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text) 44 self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text)
45 self.assertEqual('A page with a custom title.\n', page.formatted_text) 45 self.assertEqual('A page with a custom title.\n', page._getFormattedText())
46 self.assertEqual('TEST-TITLE', page.title) 46 self.assertEqual('TEST-TITLE', page.title)
47 self.assertEqual('A page with a custom title.\n', page.text) 47 self.assertEqual('A page with a custom title.\n', page.text)
48 self.assertEqual({'title': 'TEST-TITLE'}, page.local_meta) 48 self.assertEqual({'title': ['TEST-TITLE']}, page._getLocalMeta())
49 self.assertEqual([], page.local_links) 49 self.assertEqual([], page._getLocalLinks())
50 50
51 def testPageOutLinks(self): 51 def testPageOutLinks(self):
52 self.wiki = self._getWikiFromStructure({ 52 self.wiki = self._getWikiFromStructure({
53 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", 53 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].",
54 'sandbox.txt': "This is just a placeholder." 54 'sandbox.txt': "This is just a placeholder."
59 self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text) 59 self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text)
60 self.assertEqual( 60 self.assertEqual(
61 "Follow a link to the %s. Or to %s." % ( 61 "Follow a link to the %s. Or to %s." % (
62 format_link('Sandbox', 'sandbox'), 62 format_link('Sandbox', 'sandbox'),
63 format_link('this page', 'other-sandbox', True)), 63 format_link('this page', 'other-sandbox', True)),
64 page.formatted_text) 64 page.text)
65 self.assertEqual(set(['sandbox', 'other-sandbox']), set(page.local_links)) 65 self.assertEqual(set(['sandbox', 'other-sandbox']), set(page._getLocalLinks()))
66 66
67 def testPageRelativeOutLinks(self): 67 def testPageRelativeOutLinks(self):
68 self.wiki = self._getWikiFromStructure({ 68 self.wiki = self._getWikiFromStructure({
69 'first.txt': "Go to [[First Sibling]].", 69 'first.txt': "Go to [[First Sibling]].",
70 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].", 70 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].",
72 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].", 72 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].",
73 'second-sibling.txt': "Go back to [[Second]]." 73 'second-sibling.txt': "Go back to [[Second]]."
74 } 74 }
75 }) 75 })
76 first = Page(self.wiki, 'first') 76 first = Page(self.wiki, 'first')
77 self.assertEqual(['first-sibling'], first.local_links) 77 self.assertEqual(['first-sibling'], first._getLocalLinks())
78 first2 = Page(self.wiki, 'first-sibling') 78 first2 = Page(self.wiki, 'first-sibling')
79 self.assertEqual(['first', 'sub_dir/second'], first2.local_links) 79 self.assertEqual(['first', 'sub_dir/second'], first2._getLocalLinks())
80 second = Page(self.wiki, 'sub_dir/second') 80 second = Page(self.wiki, 'sub_dir/second')
81 self.assertEqual(['first', 'sub_dir/second-sibling'], second.local_links) 81 self.assertEqual(['first', 'sub_dir/second-sibling'], second._getLocalLinks())
82 second2 = Page(self.wiki, 'sub_dir/second-sibling') 82 second2 = Page(self.wiki, 'sub_dir/second-sibling')
83 self.assertEqual(['sub_dir/second'], second2.local_links) 83 self.assertEqual(['sub_dir/second'], second2._getLocalLinks())
84 84
85 def testGenericUrl(self): 85 def testGenericUrl(self):
86 self.wiki = self._getWikiFromStructure({ 86 self.wiki = self._getWikiFromStructure({
87 'foo.txt': "URL: [[url:/blah/boo/image.png]]" 87 'foo.txt': "URL: [[url:/blah/boo/image.png]]"
88 }) 88 })
89 foo = Page(self.wiki, 'foo') 89 foo = Page(self.wiki, 'foo')
90 self.assertEqual("URL: /files/blah/boo/image.png", foo.formatted_text) 90 self.assertEqual("URL: /files/blah/boo/image.png", foo._getFormattedText())
91 91
92 def testPageInclude(self): 92 def testPageInclude(self):
93 self.wiki = self._getWikiFromStructure({ 93 self.wiki = self._getWikiFromStructure({
94 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", 94 'Foo.txt': "A test page.\n{{include: trans-desc}}\n",
95 'Trans Desc.txt': "BLAH\n" 95 'Trans Desc.txt': "BLAH\n"
96 }) 96 })
97 foo = Page(self.wiki, 'foo') 97 foo = Page(self.wiki, 'foo')
98 self.assertEqual({'include': 'trans-desc'}, foo.local_meta) 98 self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta())
99 self.assertEqual( 99 self.assertEqual(
100 "A test page.\n%s" % format_include('trans-desc'), 100 "A test page.\n%s" % format_include('trans-desc'),
101 foo.formatted_text) 101 foo._getFormattedText())
102 self.assertEqual("A test page.\nBLAH\n\n", foo.text) 102 self.assertEqual("A test page.\nBLAH\n\n", foo.text)
103 103
104 def testPageIncludeWithMeta(self): 104 def testPageIncludeWithMeta(self):
105 self.wiki = self._getWikiFromStructure({ 105 self.wiki = self._getWikiFromStructure({
106 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", 106 'Foo.txt': "A test page.\n{{include: trans-desc}}\n",
107 'Trans Desc.txt': "BLAH: [[Somewhere]]\n{{bar: 42}}\n{{__secret: love}}\n{{+given: hope}}" 107 'Trans Desc.txt': "BLAH: [[Somewhere]]\n{{bar: 42}}\n{{__secret: love}}\n{{+given: hope}}"
108 }) 108 })
109 foo = Page(self.wiki, 'foo') 109 foo = Page(self.wiki, 'foo')
110 self.assertEqual([], foo.local_links) 110 self.assertEqual([], foo._getLocalLinks())
111 self.assertEqual({'include': 'trans-desc'}, foo.local_meta) 111 self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta())
112 self.assertEqual( 112 self.assertEqual(
113 "A test page.\n%s" % format_include('trans-desc'), 113 "A test page.\n%s" % format_include('trans-desc'),
114 foo.formatted_text) 114 foo._getFormattedText())
115 self.assertEqual( 115 self.assertEqual(
116 "A test page.\nBLAH: %s\n\n\n\n" % format_link('Somewhere', 'somewhere', True), 116 "A test page.\nBLAH: %s\n\n\n\n" % format_link('Somewhere', 'somewhere', True),
117 foo.text) 117 foo.text)
118 self.assertEqual(['somewhere'], foo.all_links) 118 self.assertEqual(['somewhere'], foo.links)
119 self.assertEqual({'bar': '42', 'given': 'hope', 'include': 'trans-desc'}, foo.all_meta) 119 self.assertEqual({'bar': ['42'], 'given': ['hope'], 'include': ['trans-desc']}, foo.meta)
120 120
121 def testPageIncludeWithTemplating(self): 121 def testPageIncludeWithTemplating(self):
122 self.wiki = self._getWikiFromStructure({ 122 self.wiki = self._getWikiFromStructure({
123 'Foo.txt': "A test page.\n{{include: greeting|name=Dave|what=drink}}\n", 123 'Foo.txt': "A test page.\n{{include: greeting|name=Dave|what=drink}}\n",
124 'Greeting.txt': "Hello {{name}}, would you like a {{what}}?" 124 'Greeting.txt': "Hello {{name}}, would you like a {{what}}?"
125 }) 125 })
126 foo = Page(self.wiki, 'foo') 126 foo = Page(self.wiki, 'foo')
127 self.assertEqual( 127 self.assertEqual(
128 "A test page.\n%s" % format_include('greeting', 'name=Dave|what=drink'), 128 "A test page.\n%s" % format_include('greeting', 'name=Dave|what=drink'),
129 foo.formatted_text) 129 foo._getFormattedText())
130 self.assertEqual("A test page.\nHello Dave, would you like a drink?\n", foo.text) 130 self.assertEqual("A test page.\nHello Dave, would you like a drink?\n", foo.text)
131 131
132 def testGivenOnlyInclude(self): 132 def testGivenOnlyInclude(self):
133 self.wiki = self._getWikiFromStructure({ 133 self.wiki = self._getWikiFromStructure({
134 'Base.txt': "The base page.\n{{include: Template 1}}", 134 'Base.txt': "The base page.\n{{include: Template 1}}",
136 'Template 2.txt': "MORE TEMPLATE!" 136 'Template 2.txt': "MORE TEMPLATE!"
137 }) 137 })
138 tpl1 = Page(self.wiki, 'template-1') 138 tpl1 = Page(self.wiki, 'template-1')
139 self.assertEqual( 139 self.assertEqual(
140 "TEMPLATE!\n%s" % format_include('template-2', mod='+'), 140 "TEMPLATE!\n%s" % format_include('template-2', mod='+'),
141 tpl1.formatted_text) 141 tpl1._getFormattedText())
142 self.assertEqual("TEMPLATE!\n\n", tpl1.text) 142 self.assertEqual("TEMPLATE!\n\n", tpl1.text)
143 base = Page(self.wiki, 'base') 143 base = Page(self.wiki, 'base')
144 self.assertEqual("The base page.\nTEMPLATE!\nMORE TEMPLATE!\n\n", base.text) 144 self.assertEqual("The base page.\nTEMPLATE!\nMORE TEMPLATE!\n\n", base.text)
145 145
146 def testDoublePageIncludeWithMeta(self): 146 def testDoublePageIncludeWithMeta(self):
153 'Query 1.txt': "{{query: category=yolo}}", 153 'Query 1.txt': "{{query: category=yolo}}",
154 'Query 2.txt': "{{query: category=blah}}" 154 'Query 2.txt': "{{query: category=blah}}"
155 }) 155 })
156 base = Page(self.wiki, 'base') 156 base = Page(self.wiki, 'base')
157 self.assertEqual({ 157 self.assertEqual({
158 'foo': 'bar', 158 'foo': ['bar'],
159 'category': ['blah', 'yolo'] 159 'category': ['blah', 'yolo']
160 }, base.all_meta) 160 }, base.meta)
161 tpl1 = Page(self.wiki, 'template-1') 161 tpl1 = Page(self.wiki, 'template-1')
162 self.assertEqual({ 162 self.assertEqual({
163 'foo': 'bar', 163 'foo': ['bar'],
164 '+category': 'blah', 164 '+category': ['blah'],
165 '+include': 'template-2', 165 '+include': ['template-2'],
166 '__secret': 'ssh' 166 '__secret': ['ssh']
167 }, tpl1.all_meta) 167 }, tpl1.meta)
168 self.assertEqual( 168 self.assertEqual(
169 "\n\n%s\n\n" % format_include('template-2'), 169 "\n\n%s\n\n" % format_include('template-2'),
170 tpl1.text) 170 tpl1.text)
171 q1 = Page(self.wiki, 'query-1') 171 q1 = Page(self.wiki, 'query-1')
172 self.assertEqual( 172 self.assertEqual(