blob: 76204650ceb56bd9a3897ef9f73ed453675fdc8e [file] [log] [blame]
# Copyright 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import unittest
from telemetry import story
from telemetry.page import page
import mock
class TestPage(unittest.TestCase):
def assertPathEqual(self, path1, path2):
self.assertEqual(os.path.normpath(path1), os.path.normpath(path2))
def testFilePathRelative(self):
apage = page.Page('file://somedir/otherdir/file.html',
None, base_dir='basedir')
self.assertPathEqual(apage.file_path, 'basedir/somedir/otherdir/file.html')
def testFilePathAbsolute(self):
apage = page.Page('file:///somedir/otherdir/file.html',
None, base_dir='basedir')
self.assertPathEqual(apage.file_path, '/somedir/otherdir/file.html')
def testFilePathQueryString(self):
apage = page.Page('file://somedir/otherdir/file.html?key=val',
None, base_dir='basedir')
self.assertPathEqual(apage.file_path, 'basedir/somedir/otherdir/file.html')
def testFilePathUrlQueryString(self):
apage = page.Page('file://somedir/file.html?key=val',
None, base_dir='basedir')
self.assertPathEqual(apage.file_path_url,
'basedir/somedir/file.html?key=val')
def testFilePathUrlTrailingSeparator(self):
apage = page.Page('file://somedir/otherdir/',
None, base_dir='basedir')
self.assertPathEqual(apage.file_path_url, 'basedir/somedir/otherdir/')
self.assertTrue(apage.file_path_url.endswith(os.sep) or
(os.altsep and apage.file_path_url.endswith(os.altsep)))
def testSort(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page('http://www.foo.com/', story_set, story_set.base_dir))
story_set.AddStory(
page.Page('http://www.bar.com/', story_set, story_set.base_dir))
pages = sorted([story_set.stories[0], story_set.stories[1]])
self.assertEquals([story_set.stories[1], story_set.stories[0]],
pages)
def testGetUrlBaseDirAndFileForUrlBaseDir(self):
base_dir = os.path.dirname(__file__)
file_path = os.path.join(
os.path.dirname(base_dir), 'otherdir', 'file.html')
story_set = story.StorySet(base_dir=base_dir,
serving_dirs=[os.path.join('..', 'somedir', '')])
story_set.AddStory(
page.Page('file://../otherdir/file.html', story_set,
story_set.base_dir))
self.assertPathEqual(story_set[0].file_path, file_path)
def testDisplayUrlForHttp(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page('http://www.foo.com/', story_set, story_set.base_dir))
story_set.AddStory(
page.Page('http://www.bar.com/', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'http://www.foo.com/')
self.assertEquals(story_set[1].display_name, 'http://www.bar.com/')
def testDisplayUrlForHttps(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page('http://www.foo.com/', story_set, story_set.base_dir))
story_set.AddStory(
page.Page('https://www.bar.com/', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'http://www.foo.com/')
self.assertEquals(story_set[1].display_name, 'https://www.bar.com/')
def testDisplayUrlForFile(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(page.Page(
'file://../../otherdir/foo.html', story_set, story_set.base_dir))
story_set.AddStory(page.Page(
'file://../../otherdir/bar.html', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'foo.html')
self.assertEquals(story_set[1].display_name, 'bar.html')
def testDisplayUrlForFilesDifferingBySuffix(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(page.Page(
'file://../../otherdir/foo.html', story_set, story_set.base_dir))
story_set.AddStory(page.Page(
'file://../../otherdir/foo1.html', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'foo.html')
self.assertEquals(story_set[1].display_name, 'foo1.html')
def testDisplayUrlForFileOfDifferentPaths(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page(
'file://../../somedir/foo.html', story_set, story_set.base_dir))
story_set.AddStory(page.Page(
'file://../../otherdir/bar.html', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'somedir/foo.html')
self.assertEquals(story_set[1].display_name, 'otherdir/bar.html')
def testDisplayUrlForFileDirectories(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page('file://../../otherdir/foo', story_set, story_set.base_dir))
story_set.AddStory(
page.Page('file://../../otherdir/bar', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'foo')
self.assertEquals(story_set[1].display_name, 'bar')
def testDisplayUrlForSingleFile(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(page.Page(
'file://../../otherdir/foo.html', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'foo.html')
def testDisplayUrlForSingleDirectory(self):
story_set = story.StorySet(base_dir=os.path.dirname(__file__))
story_set.AddStory(
page.Page('file://../../otherdir/foo', story_set, story_set.base_dir))
self.assertEquals(story_set[0].display_name, 'foo')
def testPagesHaveDifferentIds(self):
p0 = page.Page("http://example.com")
p1 = page.Page("http://example.com")
self.assertNotEqual(p0.id, p1.id)
def testNamelessPageAsDict(self):
nameless_dict = page.Page('http://example.com/').AsDict()
self.assertIn('id', nameless_dict)
del nameless_dict['id']
self.assertEquals({
'url': 'http://example.com/',
}, nameless_dict)
def testNamedPageAsDict(self):
named_dict = page.Page('http://example.com/', name='Example').AsDict()
self.assertIn('id', named_dict)
del named_dict['id']
self.assertEquals({
'url': 'http://example.com/',
'name': 'Example'
}, named_dict)
def testIsLocal(self):
p = page.Page('file://foo.html')
self.assertTrue(p.is_local)
p = page.Page('chrome://extensions')
self.assertTrue(p.is_local)
p = page.Page('about:blank')
self.assertTrue(p.is_local)
p = page.Page('http://foo.com')
self.assertFalse(p.is_local)
class TestPageRun(unittest.TestCase):
def testFiveGarbageCollectionCallsByDefault(self):
mock_shared_state = mock.Mock()
p = page.Page('file://foo.html')
p.Run(mock_shared_state)
expected = [mock.call.current_tab.CollectGarbage(),
mock.call.current_tab.CollectGarbage(),
mock.call.current_tab.CollectGarbage(),
mock.call.current_tab.CollectGarbage(),
mock.call.current_tab.CollectGarbage(),
mock.call.page_test.WillNavigateToPage(
p, mock_shared_state.current_tab),
mock.call.page_test.RunNavigateSteps(
p, mock_shared_state.current_tab),
mock.call.page_test.DidNavigateToPage(
p, mock_shared_state.current_tab)]
self.assertEquals(mock_shared_state.mock_calls, expected)
def testNoGarbageCollectionCalls(self):
mock_shared_state = mock.Mock()
class NonGarbageCollectPage(page.Page):
def __init__(self, url):
super(NonGarbageCollectPage, self).__init__(url)
self._collect_garbage_before_run = False
p = NonGarbageCollectPage('file://foo.html')
p.Run(mock_shared_state)
expected = [mock.call.page_test.WillNavigateToPage(
p, mock_shared_state.current_tab),
mock.call.page_test.RunNavigateSteps(
p, mock_shared_state.current_tab),
mock.call.page_test.DidNavigateToPage(
p, mock_shared_state.current_tab)]
self.assertEquals(mock_shared_state.mock_calls, expected)