[Pywikipedia-l] SVN: [6120] branches/rewrite/pywikibot/tests/page_tests.py

russblau at svn.wikimedia.org russblau at svn.wikimedia.org
Wed Nov 26 20:02:30 UTC 2008


Revision: 6120
Author:   russblau
Date:     2008-11-26 20:02:30 +0000 (Wed, 26 Nov 2008)

Log Message:
-----------
page tests

Modified Paths:
--------------
    branches/rewrite/pywikibot/tests/page_tests.py

Modified: branches/rewrite/pywikibot/tests/page_tests.py
===================================================================
--- branches/rewrite/pywikibot/tests/page_tests.py	2008-11-25 18:43:39 UTC (rev 6119)
+++ branches/rewrite/pywikibot/tests/page_tests.py	2008-11-26 20:02:30 UTC (rev 6120)
@@ -14,11 +14,16 @@
 import pywikibot
 import pywikibot.page
 
-site = pywikibot.Site("en", "wikipedia")
+site = pywikibot.Site()
+mainpage = pywikibot.Page(pywikibot.page.Link("Main Page", site))
+maintalk = pywikibot.Page(pywikibot.page.Link("Talk:Main Page", site))
+badpage = pywikibot.Page(pywikibot.page.Link("There is no page with this title",
+                                        site))
 
-
 class TestLinkObject(unittest.TestCase):
     """Test cases for Link objects"""
+
+    enwiki = pywikibot.Site("en", "wikipedia")
     namespaces = {0: [u""],        # en.wikipedia.org namespaces for testing
                   1: [u"Talk:"],   # canonical form first, then others
                   2: [u"User:"],   # must end with :
@@ -62,11 +67,11 @@
         for num in self.namespaces:
             for prefix in self.namespaces[num]:
                 l = pywikibot.page.Link(prefix+self.titles.keys()[0],
-                                        site)
+                                        self.enwiki)
                 self.assertEqual(l.namespace, num)
                 # namespace prefixes are case-insensitive
                 m = pywikibot.page.Link(prefix.lower()+self.titles.keys()[1],
-                                        site)
+                                        self.enwiki)
                 self.assertEqual(m.namespace, num)
 
     def testTitles(self):
@@ -81,14 +86,21 @@
 
 
 class TestPageObject(unittest.TestCase):
+    def testGeneral(self):
+        self.assertEqual(str(mainpage), "[[%s:%s]]"
+                                        % (site.lang, mainpage.title()))
+        self.assertTrue(mainpage < maintalk)
+
     def testSite(self):
         """Test site() method"""
-        p1 = pywikibot.Page(site, u"Help:Test page#Testing")
-        self.assertEqual(p1.site(), site)
+        self.assertEqual(mainpage.site(), site)
+        self.assertEqual(mainpage.encoding(), site.encoding())
 
     def testNamespace(self):
         """Test namespace() method"""
-        # TODO
+        self.assertEqual(mainpage.namespace(), 0)
+        self.assertEqual(maintalk.namespace(), 1)
+        self.assertEqual(badpage.namespace(), 0)
 
     def testTitle(self):
         """Test title() method options."""
@@ -131,6 +143,8 @@
                          u"[[en:Image:Jean-Léon Gérôme 003.jpg]]")
         self.assertEqual(p2.title(asLink=True, textlink=True),
                          u"[[:Image:Jean-Léon Gérôme 003.jpg]]")
+        self.assertEqual(p2.title(as_filename=True),
+                         u"Image_Jean-Léon_Gérôme_003.jpg")
 
     def testSection(self):
         """Test section() method."""
@@ -160,47 +174,101 @@
         self.assertEqual(p2.isCategory(), True)
         self.assertEqual(p3.isCategory(), False)
 
-    # testIsImage -- todo
+    def testIsImage(self):
+        p1 = pywikibot.Page(site, u"First page")
+        p2 = pywikibot.Page(site, u"Image:Second page")
+        p3 = pywikibot.Page(site, u"Image talk:Second page")
+        self.assertEqual(p1.isImage(), False)
+        self.assertEqual(p2.isImage(), True)
+        self.assertEqual(p3.isImage(), False)
     
     def testApiMethods(self):
         """Test various methods that rely on API."""
         # since there is no way to predict what data the wiki will return,
         # we only check that the returned objects are of correct type.
-        main = pywikibot.Page(site, u"Main Page")
-        self.assertEqual(type(main.get()), unicode)
-        self.assertEqual(type(main.latestRevision()), int)
-        self.assertEqual(type(main.userName()), unicode)
-        self.assertEqual(type(main.isIpEdit()), bool)
-        self.assertEqual(type(main.exists()), bool)
-        self.assertEqual(type(main.isRedirectPage()), bool)
-        self.assertEqual(type(main.isEmpty()), bool)
-        self.assertEqual(type(main.toggleTalkPage()), type(main))
-        self.assertEqual(type(main.isDisambig()), bool)
-        self.assertEqual(type(main.canBeEdited()), bool)
-        self.assertEqual(type(main.botMayEdit()), bool)
-        for p in main.getReferences():
-            self.assertEqual(type(p), type(main))
-        for p in main.backlinks():
-            self.assertEqual(type(p), type(main))
-        for p in main.embeddedin():
-            self.assertEqual(type(p), type(main))
-        for p in main.linkedPages():
-            self.assertEqual(type(p), type(main))
-        for p in main.interwiki():
-            self.assertEqual(type(p), pywikibot.page.Link)
-        for p in main.langlinks():
-            self.assertEqual(type(p), pywikibot.page.Link)
-        for p in main.imagelinks():
-            self.assertEqual(type(p), pywikibot.page.ImagePage)
-        for p in main.templates():
-            self.assertEqual(type(p), type(main))
-        # todo - templatesWithParameters
-        for p in main.categories():
-            self.assertEqual(type(p), pywikibot.page.Category)
-        for p in main.extlinks():
-            self.assertEqual(type(p), unicode)
-        # more to come
+        self.assertTrue(isinstance(mainpage.get(), unicode))
+        self.assertTrue(isinstance(maintalk.get(), unicode))
+        self.assertRaises(pywikibot.NoPage, badpage.get)
+        self.assertTrue(isinstance(mainpage.latestRevision(), int))
+        self.assertTrue(isinstance(mainpage.userName(), unicode))
+        self.assertTrue(isinstance(mainpage.isIpEdit(), bool))
+        self.assertTrue(isinstance(mainpage.exists(), bool))
+        self.assertTrue(isinstance(mainpage.isRedirectPage(), bool))
+        self.assertTrue(isinstance(mainpage.isEmpty(), bool))
+        self.assertEqual(mainpage.toggleTalkPage(), maintalk)
+        self.assertEqual(maintalk.toggleTalkPage(), mainpage)
+        self.assertTrue(isinstance(mainpage.isDisambig(), bool))
+        self.assertTrue(isinstance(mainpage.canBeEdited(), bool))
+        self.assertTrue(isinstance(mainpage.botMayEdit(), bool))
+        self.assertTrue(isinstance(mainpage.editTime(), unicode))
+        self.assertTrue(isinstance(mainpage.previousRevision(), int))
+        self.assertTrue(isinstance(mainpage.permalink(), basestring))
 
+    def testReferences(self):
+        pywikibot.set_debug("comm")
+        count = 0
+        for p in mainpage.getReferences():
+            count += 1
+            self.assertTrue(isinstance(p, pywikibot.Page))
+            if count >= 10:
+                break
+        count = 0
+        for p in mainpage.backlinks():
+            count += 1
+            self.assertTrue(isinstance(p, pywikibot.Page))
+            if count >= 10:
+                break
+        count = 0
+        for p in mainpage.embeddedin():
+            count += 1
+            self.assertTrue(isinstance(p, pywikibot.Page))
+            if count >= 10:
+                break
+
+    def testLinks(self):
+        for p in mainpage.linkedPages():
+            self.assertTrue(isinstance(p, pywikibot.Page))
+## Not implemented:
+##        for p in mainpage.interwiki():
+##            self.assertTrue(isinstance(p, pywikibot.Link))
+        for p in mainpage.langlinks():
+            self.assertTrue(isinstance(p, pywikibot.Link))
+        for p in mainpage.imagelinks():
+            self.assertTrue(isinstance(p, pywikibot.ImagePage))
+        for p in mainpage.templates():
+            self.assertTrue(isinstance(p, pywikibot.Page))
+        for t, params in mainpage.templatesWithParams():
+            self.assertTrue(isinstance(t, pywikibot.Page))
+            self.assertTrue(isinstance(params, list))
+        for p in mainpage.categories():
+            self.assertTrue(isinstance(p, pywikibot.Category))
+        for p in mainpage.extlinks():
+            self.assertTrue(isinstance(p, unicode))
+
+# methods that still need tests implemented or expanded:
+
+##    def autoFormat(self):
+##    def isAutoTitle(self):
+##    def get(self, force=False, get_redirect=False, sysop=False):
+##    def getOldVersion(self, oldid, force=False, get_redirect=False,
+##                      sysop=False):
+##    text = property(_textgetter, _textsetter, _cleartext,
+##                    "The edited wikitext (unicode) of this Page")
+##    def getReferences(self, follow_redirects=True, withTemplateInclusion=True,
+##                      onlyTemplateInclusion=False, redirectsOnly=False,
+##                      namespaces=None):
+##    def backlinks(self, followRedirects=True, filterRedirects=None,
+##                  namespaces=None):
+##    def embeddedin(self, filter_redirects=None, namespaces=None):
+##    def getRedirectTarget(self):
+##    def getVersionHistory(self, reverseOrder=False, getAll=False,
+##                          revCount=500):
+##    def getVersionHistoryTable(self, forceReload=False, reverseOrder=False,
+##                               getAll=False, revCount=500):
+##    def fullVersionHistory(self):
+##    def contributingUsers(self):
+
+
 if __name__ == '__main__':
     try:
         try:





More information about the Pywikipedia-l mailing list