1# Copyright (C) 2010 Google Inc. All rights reserved. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: 6# 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above 10# copyright notice, this list of conditions and the following disclaimer 11# in the documentation and/or other materials provided with the 12# distribution. 13# * Neither the name of Google Inc. nor the names of its 14# contributors may be used to endorse or promote products derived from 15# this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29import unittest 30import sys 31 32import path 33 34class AbspathTest(unittest.TestCase): 35 def assertMatch(self, test_path, expected_uri, 36 platform=None): 37 if platform == 'cygwin' and sys.platform != 'cygwin': 38 return 39 self.assertEqual(path.abspath_to_uri(test_path, platform=platform), 40 expected_uri) 41 42 def test_abspath_to_uri_cygwin(self): 43 if sys.platform != 'cygwin': 44 return 45 46 self.assertMatch('/cygdrive/c/foo/bar.html', 47 'file:///C:/foo/bar.html', 48 platform='cygwin') 49 self.assertEqual(path.abspath_to_uri('/cygdrive/c/foo/bar.html', 50 platform='cygwin'), 51 'file:///C:/foo/bar.html') 52 53 def test_abspath_to_uri_darwin(self): 54 self.assertMatch('/foo/bar.html', 55 'file:///foo/bar.html', 56 platform='darwin') 57 self.assertEqual(path.abspath_to_uri("/foo/bar.html", 58 platform='darwin'), 59 "file:///foo/bar.html") 60 61 def test_abspath_to_uri_linux2(self): 62 self.assertMatch('/foo/bar.html', 63 'file:///foo/bar.html', 64 platform='darwin') 65 self.assertEqual(path.abspath_to_uri("/foo/bar.html", 66 platform='linux2'), 67 "file:///foo/bar.html") 68 69 def test_abspath_to_uri_win(self): 70 self.assertMatch('c:\\foo\\bar.html', 71 'file:///c:/foo/bar.html', 72 platform='win32') 73 self.assertEqual(path.abspath_to_uri("c:\\foo\\bar.html", 74 platform='win32'), 75 "file:///c:/foo/bar.html") 76 77 def test_abspath_to_uri_escaping(self): 78 self.assertMatch('/foo/bar + baz%?.html', 79 'file:///foo/bar%20+%20baz%25%3F.html', 80 platform='darwin') 81 self.assertMatch('/foo/bar + baz%?.html', 82 'file:///foo/bar%20+%20baz%25%3F.html', 83 platform='linux2') 84 85 # Note that you can't have '?' in a filename on windows. 86 self.assertMatch('/cygdrive/c/foo/bar + baz%.html', 87 'file:///C:/foo/bar%20+%20baz%25.html', 88 platform='cygwin') 89 90 def test_stop_cygpath_subprocess(self): 91 if sys.platform != 'cygwin': 92 return 93 94 # Call cygpath to ensure the subprocess is running. 95 path.cygpath("/cygdrive/c/foo.txt") 96 self.assertTrue(path._CygPath._singleton.is_running()) 97 98 # Stop it. 99 path._CygPath.stop_cygpath_subprocess() 100 101 # Ensure that it is stopped. 102 self.assertFalse(path._CygPath._singleton.is_running()) 103 104if __name__ == '__main__': 105 unittest.main() 106