1# Copyright 2012 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import os 6import unittest 7 8from telemetry.page import page 9from telemetry.page import page_set 10 11 12class TestPage(unittest.TestCase): 13 def assertPathEqual(self, path1, path2): 14 self.assertEqual(os.path.normpath(path1), os.path.normpath(path2)) 15 16 def testFilePathRelative(self): 17 apage = page.Page('file://somedir/otherdir/file.html', 18 None, base_dir='basedir') 19 self.assertPathEqual(apage.file_path, 'basedir/somedir/otherdir/file.html') 20 21 def testFilePathAbsolute(self): 22 apage = page.Page('file:///somedir/otherdir/file.html', 23 None, base_dir='basedir') 24 self.assertPathEqual(apage.file_path, '/somedir/otherdir/file.html') 25 26 def testFilePathQueryString(self): 27 apage = page.Page('file://somedir/otherdir/file.html?key=val', 28 None, base_dir='basedir') 29 self.assertPathEqual(apage.file_path, 'basedir/somedir/otherdir/file.html') 30 31 def testFilePathUrlQueryString(self): 32 apage = page.Page('file://somedir/file.html?key=val', 33 None, base_dir='basedir') 34 self.assertPathEqual(apage.file_path_url, 35 'basedir/somedir/file.html?key=val') 36 37 def testFilePathUrlTrailingSeparator(self): 38 apage = page.Page('file://somedir/otherdir/', 39 None, base_dir='basedir') 40 self.assertPathEqual(apage.file_path_url, 'basedir/somedir/otherdir/') 41 self.assertTrue(apage.file_path_url.endswith(os.sep) or 42 (os.altsep and apage.file_path_url.endswith(os.altsep))) 43 44 def testSort(self): 45 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 46 ps.AddPageWithDefaultRunNavigate('http://www.foo.com/') 47 ps.AddPageWithDefaultRunNavigate('http://www.bar.com/') 48 49 pages = [ps.pages[0], ps.pages[1]] 50 pages.sort() 51 self.assertEquals([ps.pages[1], ps.pages[0]], 52 pages) 53 54 def testGetUrlBaseDirAndFileForUrlBaseDir(self): 55 ps = page_set.PageSet(file_path='basedir/', serving_dirs=['../somedir/']) 56 ps.AddPageWithDefaultRunNavigate('file://../otherdir/file.html') 57 self.assertPathEqual(ps[0].file_path, 'otherdir/file.html') 58 59 def testDisplayUrlForHttp(self): 60 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 61 ps.AddPageWithDefaultRunNavigate('http://www.foo.com/') 62 ps.AddPageWithDefaultRunNavigate('http://www.bar.com/') 63 64 self.assertEquals(ps[0].display_name, 'http://www.foo.com/') 65 self.assertEquals(ps[1].display_name, 'http://www.bar.com/') 66 67 def testDisplayUrlForHttps(self): 68 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 69 ps.AddPageWithDefaultRunNavigate('http://www.foo.com/') 70 ps.AddPageWithDefaultRunNavigate('https://www.bar.com/') 71 72 self.assertEquals(ps[0].display_name, 'http://www.foo.com/') 73 self.assertEquals(ps[1].display_name, 'https://www.bar.com/') 74 75 def testDisplayUrlForFile(self): 76 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 77 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo.html') 78 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/bar.html') 79 80 self.assertEquals(ps[0].display_name, 'foo.html') 81 self.assertEquals(ps[1].display_name, 'bar.html') 82 83 def testDisplayUrlForFilesDifferingBySuffix(self): 84 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 85 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo.html') 86 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo1.html') 87 88 self.assertEquals(ps[0].display_name, 'foo.html') 89 self.assertEquals(ps[1].display_name, 'foo1.html') 90 91 def testDisplayUrlForFileOfDifferentPaths(self): 92 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 93 ps.AddPageWithDefaultRunNavigate('file://../../somedir/foo.html') 94 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/bar.html') 95 96 self.assertEquals(ps[0].display_name, 'somedir/foo.html') 97 self.assertEquals(ps[1].display_name, 'otherdir/bar.html') 98 99 def testDisplayUrlForFileDirectories(self): 100 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 101 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo') 102 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/bar') 103 104 self.assertEquals(ps[0].display_name, 'foo') 105 self.assertEquals(ps[1].display_name, 'bar') 106 107 def testDisplayUrlForSingleFile(self): 108 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 109 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo.html') 110 111 self.assertEquals(ps[0].display_name, 'foo.html') 112 113 def testDisplayUrlForSingleDirectory(self): 114 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) 115 ps.AddPageWithDefaultRunNavigate('file://../../otherdir/foo') 116 117 self.assertEquals(ps[0].display_name, 'foo') 118 119 def testPagesHaveDifferentIds(self): 120 p0 = page.Page("http://example.com") 121 p1 = page.Page("http://example.com") 122 self.assertNotEqual(p0.id, p1.id) 123 124 def testNamelessPageAsDict(self): 125 nameless_dict = page.Page('http://example.com/').AsDict() 126 self.assertIn('id', nameless_dict) 127 del nameless_dict['id'] 128 self.assertEquals({ 129 'url': 'http://example.com/', 130 }, nameless_dict) 131 132 def testNamedPageAsDict(self): 133 named_dict = page.Page('http://example.com/', name='Example').AsDict() 134 self.assertIn('id', named_dict) 135 del named_dict['id'] 136 self.assertEquals({ 137 'url': 'http://example.com/', 138 'name': 'Example' 139 }, named_dict) 140 141 def testTransferToPageSet(self): 142 page_set_a = page_set.PageSet() 143 page_set_b = page_set.PageSet() 144 page_foo = page.Page('http://foo.com', page_set_a) 145 page_bar = page.Page('http://bar.com', page_set_a) 146 page_baz = page.Page('http://baz.com', page_set_a) 147 148 page_set_a.AddPage(page_foo) 149 page_set_a.AddPage(page_bar) 150 page_set_a.AddPage(page_baz) 151 152 page_bar.TransferToPageSet(page_set_b) 153 self.assertEqual([page_foo, page_baz], page_set_a.pages) 154 self.assertEqual([page_bar], page_set_b.pages) 155 self.assertIs(page_set_b, page_bar.page_set) 156