symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_shlex.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 # -*- coding: iso-8859-1 -*-
       
     2 import unittest
       
     3 import shlex
       
     4 
       
     5 from test import test_support
       
     6 
       
     7 try:
       
     8     from cStringIO import StringIO
       
     9 except ImportError:
       
    10     from StringIO import StringIO
       
    11 
       
    12 
       
    13 # The original test data set was from shellwords, by Hartmut Goebel.
       
    14 
       
    15 data = r"""x|x|
       
    16 foo bar|foo|bar|
       
    17  foo bar|foo|bar|
       
    18  foo bar |foo|bar|
       
    19 foo   bar    bla     fasel|foo|bar|bla|fasel|
       
    20 x y  z              xxxx|x|y|z|xxxx|
       
    21 \x bar|\|x|bar|
       
    22 \ x bar|\|x|bar|
       
    23 \ bar|\|bar|
       
    24 foo \x bar|foo|\|x|bar|
       
    25 foo \ x bar|foo|\|x|bar|
       
    26 foo \ bar|foo|\|bar|
       
    27 foo "bar" bla|foo|"bar"|bla|
       
    28 "foo" "bar" "bla"|"foo"|"bar"|"bla"|
       
    29 "foo" bar "bla"|"foo"|bar|"bla"|
       
    30 "foo" bar bla|"foo"|bar|bla|
       
    31 foo 'bar' bla|foo|'bar'|bla|
       
    32 'foo' 'bar' 'bla'|'foo'|'bar'|'bla'|
       
    33 'foo' bar 'bla'|'foo'|bar|'bla'|
       
    34 'foo' bar bla|'foo'|bar|bla|
       
    35 blurb foo"bar"bar"fasel" baz|blurb|foo"bar"bar"fasel"|baz|
       
    36 blurb foo'bar'bar'fasel' baz|blurb|foo'bar'bar'fasel'|baz|
       
    37 ""|""|
       
    38 ''|''|
       
    39 foo "" bar|foo|""|bar|
       
    40 foo '' bar|foo|''|bar|
       
    41 foo "" "" "" bar|foo|""|""|""|bar|
       
    42 foo '' '' '' bar|foo|''|''|''|bar|
       
    43 \""|\|""|
       
    44 "\"|"\"|
       
    45 "foo\ bar"|"foo\ bar"|
       
    46 "foo\\ bar"|"foo\\ bar"|
       
    47 "foo\\ bar\"|"foo\\ bar\"|
       
    48 "foo\\" bar\""|"foo\\"|bar|\|""|
       
    49 "foo\\ bar\" dfadf"|"foo\\ bar\"|dfadf"|
       
    50 "foo\\\ bar\" dfadf"|"foo\\\ bar\"|dfadf"|
       
    51 "foo\\\x bar\" dfadf"|"foo\\\x bar\"|dfadf"|
       
    52 "foo\x bar\" dfadf"|"foo\x bar\"|dfadf"|
       
    53 \''|\|''|
       
    54 'foo\ bar'|'foo\ bar'|
       
    55 'foo\\ bar'|'foo\\ bar'|
       
    56 "foo\\\x bar\" df'a\ 'df'|"foo\\\x bar\"|df'a|\|'df'|
       
    57 \"foo"|\|"foo"|
       
    58 \"foo"\x|\|"foo"|\|x|
       
    59 "foo\x"|"foo\x"|
       
    60 "foo\ "|"foo\ "|
       
    61 foo\ xx|foo|\|xx|
       
    62 foo\ x\x|foo|\|x|\|x|
       
    63 foo\ x\x\""|foo|\|x|\|x|\|""|
       
    64 "foo\ x\x"|"foo\ x\x"|
       
    65 "foo\ x\x\\"|"foo\ x\x\\"|
       
    66 "foo\ x\x\\""foobar"|"foo\ x\x\\"|"foobar"|
       
    67 "foo\ x\x\\"\''"foobar"|"foo\ x\x\\"|\|''|"foobar"|
       
    68 "foo\ x\x\\"\'"fo'obar"|"foo\ x\x\\"|\|'"fo'|obar"|
       
    69 "foo\ x\x\\"\'"fo'obar" 'don'\''t'|"foo\ x\x\\"|\|'"fo'|obar"|'don'|\|''|t'|
       
    70 'foo\ bar'|'foo\ bar'|
       
    71 'foo\\ bar'|'foo\\ bar'|
       
    72 foo\ bar|foo|\|bar|
       
    73 foo#bar\nbaz|foobaz|
       
    74 :-) ;-)|:|-|)|;|-|)|
       
    75 áéíóú|á|é|í|ó|ú|
       
    76 """
       
    77 
       
    78 posix_data = r"""x|x|
       
    79 foo bar|foo|bar|
       
    80  foo bar|foo|bar|
       
    81  foo bar |foo|bar|
       
    82 foo   bar    bla     fasel|foo|bar|bla|fasel|
       
    83 x y  z              xxxx|x|y|z|xxxx|
       
    84 \x bar|x|bar|
       
    85 \ x bar| x|bar|
       
    86 \ bar| bar|
       
    87 foo \x bar|foo|x|bar|
       
    88 foo \ x bar|foo| x|bar|
       
    89 foo \ bar|foo| bar|
       
    90 foo "bar" bla|foo|bar|bla|
       
    91 "foo" "bar" "bla"|foo|bar|bla|
       
    92 "foo" bar "bla"|foo|bar|bla|
       
    93 "foo" bar bla|foo|bar|bla|
       
    94 foo 'bar' bla|foo|bar|bla|
       
    95 'foo' 'bar' 'bla'|foo|bar|bla|
       
    96 'foo' bar 'bla'|foo|bar|bla|
       
    97 'foo' bar bla|foo|bar|bla|
       
    98 blurb foo"bar"bar"fasel" baz|blurb|foobarbarfasel|baz|
       
    99 blurb foo'bar'bar'fasel' baz|blurb|foobarbarfasel|baz|
       
   100 ""||
       
   101 ''||
       
   102 foo "" bar|foo||bar|
       
   103 foo '' bar|foo||bar|
       
   104 foo "" "" "" bar|foo||||bar|
       
   105 foo '' '' '' bar|foo||||bar|
       
   106 \"|"|
       
   107 "\""|"|
       
   108 "foo\ bar"|foo\ bar|
       
   109 "foo\\ bar"|foo\ bar|
       
   110 "foo\\ bar\""|foo\ bar"|
       
   111 "foo\\" bar\"|foo\|bar"|
       
   112 "foo\\ bar\" dfadf"|foo\ bar" dfadf|
       
   113 "foo\\\ bar\" dfadf"|foo\\ bar" dfadf|
       
   114 "foo\\\x bar\" dfadf"|foo\\x bar" dfadf|
       
   115 "foo\x bar\" dfadf"|foo\x bar" dfadf|
       
   116 \'|'|
       
   117 'foo\ bar'|foo\ bar|
       
   118 'foo\\ bar'|foo\\ bar|
       
   119 "foo\\\x bar\" df'a\ 'df"|foo\\x bar" df'a\ 'df|
       
   120 \"foo|"foo|
       
   121 \"foo\x|"foox|
       
   122 "foo\x"|foo\x|
       
   123 "foo\ "|foo\ |
       
   124 foo\ xx|foo xx|
       
   125 foo\ x\x|foo xx|
       
   126 foo\ x\x\"|foo xx"|
       
   127 "foo\ x\x"|foo\ x\x|
       
   128 "foo\ x\x\\"|foo\ x\x\|
       
   129 "foo\ x\x\\""foobar"|foo\ x\x\foobar|
       
   130 "foo\ x\x\\"\'"foobar"|foo\ x\x\'foobar|
       
   131 "foo\ x\x\\"\'"fo'obar"|foo\ x\x\'fo'obar|
       
   132 "foo\ x\x\\"\'"fo'obar" 'don'\''t'|foo\ x\x\'fo'obar|don't|
       
   133 "foo\ x\x\\"\'"fo'obar" 'don'\''t' \\|foo\ x\x\'fo'obar|don't|\|
       
   134 'foo\ bar'|foo\ bar|
       
   135 'foo\\ bar'|foo\\ bar|
       
   136 foo\ bar|foo bar|
       
   137 foo#bar\nbaz|foo|baz|
       
   138 :-) ;-)|:-)|;-)|
       
   139 áéíóú|áéíóú|
       
   140 """
       
   141 
       
   142 class ShlexTest(unittest.TestCase):
       
   143     def setUp(self):
       
   144         self.data = [x.split("|")[:-1]
       
   145                      for x in data.splitlines()]
       
   146         self.posix_data = [x.split("|")[:-1]
       
   147                            for x in posix_data.splitlines()]
       
   148         for item in self.data:
       
   149             item[0] = item[0].replace(r"\n", "\n")
       
   150         for item in self.posix_data:
       
   151             item[0] = item[0].replace(r"\n", "\n")
       
   152 
       
   153     def splitTest(self, data, comments):
       
   154         for i in range(len(data)):
       
   155             l = shlex.split(data[i][0], comments=comments)
       
   156             self.assertEqual(l, data[i][1:],
       
   157                              "%s: %s != %s" %
       
   158                              (data[i][0], l, data[i][1:]))
       
   159 
       
   160     def oldSplit(self, s):
       
   161         ret = []
       
   162         lex = shlex.shlex(StringIO(s))
       
   163         tok = lex.get_token()
       
   164         while tok:
       
   165             ret.append(tok)
       
   166             tok = lex.get_token()
       
   167         return ret
       
   168 
       
   169     def testSplitPosix(self):
       
   170         """Test data splitting with posix parser"""
       
   171         self.splitTest(self.posix_data, comments=True)
       
   172 
       
   173     def testCompat(self):
       
   174         """Test compatibility interface"""
       
   175         for i in range(len(self.data)):
       
   176             l = self.oldSplit(self.data[i][0])
       
   177             self.assertEqual(l, self.data[i][1:],
       
   178                              "%s: %s != %s" %
       
   179                              (self.data[i][0], l, self.data[i][1:]))
       
   180 
       
   181 # Allow this test to be used with old shlex.py
       
   182 if not getattr(shlex, "split", None):
       
   183     for methname in dir(ShlexTest):
       
   184         if methname.startswith("test") and methname != "testCompat":
       
   185             delattr(ShlexTest, methname)
       
   186 
       
   187 def test_main():
       
   188     test_support.run_unittest(ShlexTest)
       
   189 
       
   190 if __name__ == "__main__":
       
   191     test_main()