From 1b7ae0cef9ca527c36614d9b2c8982e4b75894a5 Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Sun, 7 Jul 2019 21:18:48 -0700 Subject: [PATCH 01/34] Add pattern matches for NoLocation. (-Wincomplete-patterns complained.) --- src/Language/Python/Common/SrcLocation.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Language/Python/Common/SrcLocation.hs b/src/Language/Python/Common/SrcLocation.hs index 90479a8..9f49384 100644 --- a/src/Language/Python/Common/SrcLocation.hs +++ b/src/Language/Python/Common/SrcLocation.hs @@ -104,6 +104,7 @@ decColumn n loc incColumn :: Int -> SrcLocation -> SrcLocation incColumn n loc@(Sloc { sloc_column = col }) = loc { sloc_column = col + n } +incColumn _ NoLocation = NoLocation -- | Increment the column of a location by one tab stop. incTab :: SrcLocation -> SrcLocation @@ -111,11 +112,13 @@ incTab loc@(Sloc { sloc_column = col }) = loc { sloc_column = newCol } where newCol = col + 8 - (col - 1) `mod` 8 +incTab NoLocation = NoLocation -- | Increment the line number (row) of a location by one. incLine :: Int -> SrcLocation -> SrcLocation incLine n loc@(Sloc { sloc_row = row }) = loc { sloc_column = 1, sloc_row = row + n } +incLine _ NoLocation = NoLocation {- Inspired heavily by compiler/basicTypes/SrcLoc.lhs From 872495311cdfcd681afff9c9adefb3450ece655d Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Sun, 7 Jul 2019 21:19:22 -0700 Subject: [PATCH 02/34] Remove unused import of isJust. (-Wunused-imports complained.) --- src/Language/Python/Common/PrettyAST.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Language/Python/Common/PrettyAST.hs b/src/Language/Python/Common/PrettyAST.hs index aaa4458..39b1b96 100644 --- a/src/Language/Python/Common/PrettyAST.hs +++ b/src/Language/Python/Common/PrettyAST.hs @@ -19,7 +19,7 @@ import Prelude hiding ((<>)) import Language.Python.Common.Pretty import Language.Python.Common.AST -import Data.Maybe (isJust, fromMaybe) +import Data.Maybe (fromMaybe) -------------------------------------------------------------------------------- From a54d074dc69c22c18785cf0bfeb56bbdf96effa7 Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Sun, 7 Jul 2019 21:19:57 -0700 Subject: [PATCH 03/34] Import only instances from PrettyToken. (-Wunused-imports complained.) --- src/Language/Python/Common/PrettyParseError.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Language/Python/Common/PrettyParseError.hs b/src/Language/Python/Common/PrettyParseError.hs index 6044daf..e6d8187 100644 --- a/src/Language/Python/Common/PrettyParseError.hs +++ b/src/Language/Python/Common/PrettyParseError.hs @@ -15,7 +15,7 @@ module Language.Python.Common.PrettyParseError where import Language.Python.Common.Pretty import Language.Python.Common.ParseError (ParseError (..)) import Language.Python.Common.SrcLocation -import Language.Python.Common.PrettyToken +import Language.Python.Common.PrettyToken() instance Pretty ParseError where pretty (UnexpectedToken t) = pretty (getSpan t) <+> text "unexpected token:" <+> pretty t From 81ed03afed6e04459c7c85a447790a30d79936b6 Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Sun, 7 Jul 2019 22:07:02 -0700 Subject: [PATCH 04/34] Errors on incomplete patterns in ParserUtils.hs to make the compiler know they are exhaustive. --- src/Language/Python/Common/ParserUtils.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Language/Python/Common/ParserUtils.hs b/src/Language/Python/Common/ParserUtils.hs index 1c5157f..04e581a 100644 --- a/src/Language/Python/Common/ParserUtils.hs +++ b/src/Language/Python/Common/ParserUtils.hs @@ -98,6 +98,7 @@ makeTupleOrExpr :: [ExprSpan] -> Maybe Token -> ExprSpan makeTupleOrExpr [e] Nothing = e makeTupleOrExpr es@(_:_) (Just t) = Tuple es (spanning es t) makeTupleOrExpr es@(_:_) Nothing = Tuple es (getSpan es) +makeTupleOrExpr [] _ = error "makeTupleOrExpr should never be called with an empty list" makeAssignmentOrExpr :: ExprSpan -> Either [ExprSpan] (AssignOpSpan, ExprSpan) -> StatementSpan makeAssignmentOrExpr e (Left es) @@ -188,6 +189,7 @@ makeDecorator t1 name args = Decorator name args (spanning t1 args) -- parser guarantees that the first list is non-empty makeDecorated :: [DecoratorSpan] -> StatementSpan -> StatementSpan makeDecorated ds@(d:_) def = Decorated ds def (spanning d def) +makeDecorated [] _ = error "parser guarantees that makeDecorated's first argument is non-empty" -- suite can't be empty so it is safe to take span over it makeFun :: Token -> IdentSpan -> [ParameterSpan] -> Maybe ExprSpan -> SuiteSpan -> StatementSpan @@ -220,6 +222,7 @@ makeRelative items = countDots count (Left token:rest) = countDots (count + dots token) rest dots (DotToken {}) = 1 dots (EllipsisToken {}) = 3 + dots _ = error "Parser ensures dots is only called on DotToken or EllipsisToken." {- See: http://docs.python.org/3.0/reference/expressions.html#calls From 59be00496a7ad70aa9324d8d184edbe913866c3d Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Mon, 8 Jul 2019 06:02:10 -0700 Subject: [PATCH 05/34] Errors on unused states in checkArguments/checkParameters. A better fix would be to use an enum type instead of an int. --- src/Language/Python/Common/ParserUtils.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Language/Python/Common/ParserUtils.hs b/src/Language/Python/Common/ParserUtils.hs index 04e581a..13ac98b 100644 --- a/src/Language/Python/Common/ParserUtils.hs +++ b/src/Language/Python/Common/ParserUtils.hs @@ -257,9 +257,11 @@ checkArguments args = do ArgKeyword {} | state `elem` [1,2] -> check 2 rest | state `elem` [3,4] -> check 4 rest + | otherwise -> error "state should always be in range 1..4 here" ArgVarArgsPos {} | state `elem` [1,2] -> check 3 rest | state `elem` [3,4] -> spanError arg "there must not be two *arguments in an argument list" + | otherwise -> error "state should always be in range 1..4 here" ArgVarArgsKeyword {} -> check 5 rest {- @@ -293,9 +295,11 @@ checkParameters params = do UnPackTuple {} | state `elem` [1,3] -> check state rest | state == 2 -> check 3 rest + | otherwise -> error "state should always be in range 1..3 here" Param {} | state `elem` [1,3] -> check state rest | state == 2 -> check 3 rest + | otherwise -> error "state should always be in range 1..3 here" EndPositional {} | state == 1 -> check 2 rest | otherwise -> spanError param "there must not be two *parameters in a parameter list" From cb1a3c50394d0e08cc244eebb3af6fbe1a1b356b Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Mon, 8 Jul 2019 06:20:56 -0700 Subject: [PATCH 06/34] Errors on incomplete patterns in LexerUtils.hs to make the compiler know they are exhaustive. --- src/Language/Python/Common/LexerUtils.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Language/Python/Common/LexerUtils.hs b/src/Language/Python/Common/LexerUtils.hs index 64b87b6..623be35 100644 --- a/src/Language/Python/Common/LexerUtils.hs +++ b/src/Language/Python/Common/LexerUtils.hs @@ -122,6 +122,7 @@ readBinary toBinary = foldl' acc 0 acc b '0' = 2 * b acc b '1' = 2 * b + 1 + acc _ _ = error "Lexer ensures all digits passed to readBinary are 0 or 1." readFloat :: String -> Double readFloat str@('.':cs) = read ('0':readFloatRest str) @@ -230,3 +231,4 @@ lexicalError = do readOctNoO :: String -> Integer readOctNoO (zero:rest) = read (zero:'O':rest) +readOctNoO [] = error "Lexer ensures readOctNoO is never called on an empty string" From de4942a279702ab1154c46bb96a654d0fffb3cd7 Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Mon, 8 Jul 2019 06:26:52 -0700 Subject: [PATCH 07/34] Remove unused imports in src/Language/Python/Version3/Parser/Lexer.x. --- src/Language/Python/Version3/Parser/Lexer.x | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Language/Python/Version3/Parser/Lexer.x b/src/Language/Python/Version3/Parser/Lexer.x index e213c9c..c3a95e3 100644 --- a/src/Language/Python/Version3/Parser/Lexer.x +++ b/src/Language/Python/Version3/Parser/Lexer.x @@ -20,9 +20,6 @@ import Language.Python.Common.ParserMonad hiding (location) import Language.Python.Common.SrcLocation import Language.Python.Common.LexerUtils import qualified Data.Map as Map -import Control.Monad (liftM) -import Data.List (foldl') -import Numeric (readHex, readOct) } -- character sets From 71fd1fbbae733def0d18c676322503fc55d0e2bf Mon Sep 17 00:00:00 2001 From: Daniel Perelman Date: Tue, 9 Jul 2019 00:18:10 -0700 Subject: [PATCH 08/34] Switch to using just Either instead of Error. --- src/Language/Python/Common/LexerUtils.hs | 1 - src/Language/Python/Common/ParseError.hs | 5 ----- src/Language/Python/Common/ParserMonad.hs | 5 ++++- src/Language/Python/Common/ParserUtils.hs | 1 - 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Language/Python/Common/LexerUtils.hs b/src/Language/Python/Common/LexerUtils.hs index 623be35..6936b88 100644 --- a/src/Language/Python/Common/LexerUtils.hs +++ b/src/Language/Python/Common/LexerUtils.hs @@ -14,7 +14,6 @@ module Language.Python.Common.LexerUtils where import Control.Monad (liftM) -import Control.Monad.Error.Class (throwError) import Data.List (foldl') import Data.Word (Word8) import Language.Python.Common.Token as Token diff --git a/src/Language/Python/Common/ParseError.hs b/src/Language/Python/Common/ParseError.hs index 53b33ef..5aef534 100644 --- a/src/Language/Python/Common/ParseError.hs +++ b/src/Language/Python/Common/ParseError.hs @@ -14,14 +14,9 @@ module Language.Python.Common.ParseError ( ParseError (..) ) where import Language.Python.Common.SrcLocation (SrcLocation) import Language.Python.Common.Token (Token) -import Control.Monad.Error.Class data ParseError = UnexpectedToken Token -- ^ An error from the parser. Token found where it should not be. Note: tokens contain their own source span. | UnexpectedChar Char SrcLocation -- ^ An error from the lexer. Character found where it should not be. | StrError String -- ^ A generic error containing a string message. No source location. deriving (Eq, Ord, Show) - -instance Error ParseError where - noMsg = StrError "" - strMsg = StrError diff --git a/src/Language/Python/Common/ParserMonad.hs b/src/Language/Python/Common/ParserMonad.hs index 3c1c1fa..232ed46 100644 --- a/src/Language/Python/Common/ParserMonad.hs +++ b/src/Language/Python/Common/ParserMonad.hs @@ -43,6 +43,7 @@ module Language.Python.Common.ParserMonad , addComment , getComments , spanError + , throwError ) where import Language.Python.Common.SrcLocation (SrcLocation (..), SrcSpan (..), Span (..)) @@ -51,7 +52,6 @@ import Language.Python.Common.ParseError (ParseError (..)) import Control.Applicative ((<$>)) import Control.Monad.State.Class import Control.Monad.State.Strict as State -import Control.Monad.Error as Error import Language.Python.Common.Pretty internalError :: String -> P a @@ -91,6 +91,9 @@ initialState initLoc inp scStack type P a = StateT ParseState (Either ParseError) a +throwError :: ParseError -> P a +throwError = lift . Left + execParser :: P a -> ParseState -> Either ParseError a execParser = evalStateT diff --git a/src/Language/Python/Common/ParserUtils.hs b/src/Language/Python/Common/ParserUtils.hs index 13ac98b..d033778 100644 --- a/src/Language/Python/Common/ParserUtils.hs +++ b/src/Language/Python/Common/ParserUtils.hs @@ -15,7 +15,6 @@ module Language.Python.Common.ParserUtils where import Data.List (foldl') import Data.Maybe (isJust) -import Control.Monad.Error.Class (throwError) import Language.Python.Common.AST as AST import Language.Python.Common.Token as Token import Language.Python.Common.ParserMonad hiding (location) From fba13df439cef447da053904de8edb239c493eec Mon Sep 17 00:00:00 2001 From: Edmund Noble Date: Mon, 28 Oct 2019 16:26:05 -0400 Subject: [PATCH 09/34] Weaken containers bound --- language-python.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language-python.cabal b/language-python.cabal index d25b3dd..d7b1bf9 100644 --- a/language-python.cabal +++ b/language-python.cabal @@ -28,7 +28,7 @@ Library ghc-options: -fwarn-incomplete-patterns -fwarn-unused-imports -fwarn-warnings-deprecations build-depends: base == 4.*, - containers == 0.5.*, + containers >= 0.5 && < 0.7, pretty == 1.1.*, array >= 0.4 && < 0.6, transformers >= 0.3 && < 0.6, From 6abcc943d206e96df7333bb39ca8e1ce1bcc986f Mon Sep 17 00:00:00 2001 From: Bernie Pope Date: Sun, 3 Nov 2019 16:08:24 +1100 Subject: [PATCH 10/34] Update cabal build instructions in README for version 3.0.0.0 of cabal --- README.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 439fd0c..5954f3c 100644 --- a/README.md +++ b/README.md @@ -11,20 +11,13 @@ language-python is released as open source software under the terms of the 3 cla Installation ------------ -language-python can be installed with cabal: +language-python can be installed with cabal (cabal version 3.0.0.0 onwards): - cabal install language-python - -or, if you prefer, in a sandbox (recommended): - - cabal sandbox init - cabal update - cabal install happy - cabal install alex - cabal install --dry-run - cabal install - -use `-jN` for `N` threads of parallel building in the `cabal install` step if you have a multi-core machine. +``` +cabal configure +cabal build +cabal install +``` Testing ------- From b63814022a42bd2da88cb747a4f8296e6dfe5f2c Mon Sep 17 00:00:00 2001 From: Bernie Pope Date: Sun, 3 Nov 2019 16:35:55 +1100 Subject: [PATCH 11/34] Bump version number of 0.5.7 --- language-python.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language-python.cabal b/language-python.cabal index d7b1bf9..d445444 100644 --- a/language-python.cabal +++ b/language-python.cabal @@ -1,5 +1,5 @@ name: language-python -version: 0.5.6 +version: 0.5.7 cabal-version: >= 1.6 synopsis: Parsing and pretty printing of Python code. description: language-python is a Haskell library for lexical analysis, parsing From f72e7a87d6c7308f7ad332e8cb87f85f88c63ca7 Mon Sep 17 00:00:00 2001 From: Bernie Pope Date: Sun, 3 Nov 2019 17:28:25 +1100 Subject: [PATCH 12/34] Moved language-python into sub-directory --- LICENSE => language-python/LICENSE | 0 README.md => language-python/README.md | 0 Setup.lhs => language-python/Setup.lhs | 0 {docs => language-python/docs}/HCAR/Issue19/hcar.sty | 0 {docs => language-python/docs}/HCAR/Issue19/language-python.tex | 0 {docs => language-python/docs}/HCAR/Issue19/languagepython-Bl.tex | 0 {docs => language-python/docs}/notes.txt | 0 {docs => language-python/docs}/todo.txt | 0 language-python.cabal => language-python/language-python.cabal | 0 {src => language-python/src}/Language/Python/Common.hs | 0 {src => language-python/src}/Language/Python/Common/AST.hs | 0 {src => language-python/src}/Language/Python/Common/LexerUtils.hs | 0 {src => language-python/src}/Language/Python/Common/ParseError.hs | 0 .../src}/Language/Python/Common/ParserMonad.hs | 0 .../src}/Language/Python/Common/ParserUtils.hs | 0 {src => language-python/src}/Language/Python/Common/Pretty.hs | 0 {src => language-python/src}/Language/Python/Common/PrettyAST.hs | 0 .../src}/Language/Python/Common/PrettyParseError.hs | 0 .../src}/Language/Python/Common/PrettyToken.hs | 0 .../src}/Language/Python/Common/SrcLocation.hs | 0 .../src}/Language/Python/Common/StringEscape.hs | 0 {src => language-python/src}/Language/Python/Common/Token.hs | 0 {src => language-python/src}/Language/Python/Version2.hs | 0 {src => language-python/src}/Language/Python/Version2/Lexer.hs | 0 {src => language-python/src}/Language/Python/Version2/Parser.hs | 0 .../src}/Language/Python/Version2/Parser/Lexer.x | 0 .../src}/Language/Python/Version2/Parser/Parser.y | 0 {src => language-python/src}/Language/Python/Version3.hs | 0 {src => language-python/src}/Language/Python/Version3/Lexer.hs | 0 {src => language-python/src}/Language/Python/Version3/Parser.hs | 0 .../src}/Language/Python/Version3/Parser/Lexer.x | 0 .../src}/Language/Python/Version3/Parser/Parser.y | 0 stack.yaml => language-python/stack.yaml | 0 33 files changed, 0 insertions(+), 0 deletions(-) rename LICENSE => language-python/LICENSE (100%) rename README.md => language-python/README.md (100%) rename Setup.lhs => language-python/Setup.lhs (100%) rename {docs => language-python/docs}/HCAR/Issue19/hcar.sty (100%) rename {docs => language-python/docs}/HCAR/Issue19/language-python.tex (100%) rename {docs => language-python/docs}/HCAR/Issue19/languagepython-Bl.tex (100%) rename {docs => language-python/docs}/notes.txt (100%) rename {docs => language-python/docs}/todo.txt (100%) rename language-python.cabal => language-python/language-python.cabal (100%) rename {src => language-python/src}/Language/Python/Common.hs (100%) rename {src => language-python/src}/Language/Python/Common/AST.hs (100%) rename {src => language-python/src}/Language/Python/Common/LexerUtils.hs (100%) rename {src => language-python/src}/Language/Python/Common/ParseError.hs (100%) rename {src => language-python/src}/Language/Python/Common/ParserMonad.hs (100%) rename {src => language-python/src}/Language/Python/Common/ParserUtils.hs (100%) rename {src => language-python/src}/Language/Python/Common/Pretty.hs (100%) rename {src => language-python/src}/Language/Python/Common/PrettyAST.hs (100%) rename {src => language-python/src}/Language/Python/Common/PrettyParseError.hs (100%) rename {src => language-python/src}/Language/Python/Common/PrettyToken.hs (100%) rename {src => language-python/src}/Language/Python/Common/SrcLocation.hs (100%) rename {src => language-python/src}/Language/Python/Common/StringEscape.hs (100%) rename {src => language-python/src}/Language/Python/Common/Token.hs (100%) rename {src => language-python/src}/Language/Python/Version2.hs (100%) rename {src => language-python/src}/Language/Python/Version2/Lexer.hs (100%) rename {src => language-python/src}/Language/Python/Version2/Parser.hs (100%) rename {src => language-python/src}/Language/Python/Version2/Parser/Lexer.x (100%) rename {src => language-python/src}/Language/Python/Version2/Parser/Parser.y (100%) rename {src => language-python/src}/Language/Python/Version3.hs (100%) rename {src => language-python/src}/Language/Python/Version3/Lexer.hs (100%) rename {src => language-python/src}/Language/Python/Version3/Parser.hs (100%) rename {src => language-python/src}/Language/Python/Version3/Parser/Lexer.x (100%) rename {src => language-python/src}/Language/Python/Version3/Parser/Parser.y (100%) rename stack.yaml => language-python/stack.yaml (100%) diff --git a/LICENSE b/language-python/LICENSE similarity index 100% rename from LICENSE rename to language-python/LICENSE diff --git a/README.md b/language-python/README.md similarity index 100% rename from README.md rename to language-python/README.md diff --git a/Setup.lhs b/language-python/Setup.lhs similarity index 100% rename from Setup.lhs rename to language-python/Setup.lhs diff --git a/docs/HCAR/Issue19/hcar.sty b/language-python/docs/HCAR/Issue19/hcar.sty similarity index 100% rename from docs/HCAR/Issue19/hcar.sty rename to language-python/docs/HCAR/Issue19/hcar.sty diff --git a/docs/HCAR/Issue19/language-python.tex b/language-python/docs/HCAR/Issue19/language-python.tex similarity index 100% rename from docs/HCAR/Issue19/language-python.tex rename to language-python/docs/HCAR/Issue19/language-python.tex diff --git a/docs/HCAR/Issue19/languagepython-Bl.tex b/language-python/docs/HCAR/Issue19/languagepython-Bl.tex similarity index 100% rename from docs/HCAR/Issue19/languagepython-Bl.tex rename to language-python/docs/HCAR/Issue19/languagepython-Bl.tex diff --git a/docs/notes.txt b/language-python/docs/notes.txt similarity index 100% rename from docs/notes.txt rename to language-python/docs/notes.txt diff --git a/docs/todo.txt b/language-python/docs/todo.txt similarity index 100% rename from docs/todo.txt rename to language-python/docs/todo.txt diff --git a/language-python.cabal b/language-python/language-python.cabal similarity index 100% rename from language-python.cabal rename to language-python/language-python.cabal diff --git a/src/Language/Python/Common.hs b/language-python/src/Language/Python/Common.hs similarity index 100% rename from src/Language/Python/Common.hs rename to language-python/src/Language/Python/Common.hs diff --git a/src/Language/Python/Common/AST.hs b/language-python/src/Language/Python/Common/AST.hs similarity index 100% rename from src/Language/Python/Common/AST.hs rename to language-python/src/Language/Python/Common/AST.hs diff --git a/src/Language/Python/Common/LexerUtils.hs b/language-python/src/Language/Python/Common/LexerUtils.hs similarity index 100% rename from src/Language/Python/Common/LexerUtils.hs rename to language-python/src/Language/Python/Common/LexerUtils.hs diff --git a/src/Language/Python/Common/ParseError.hs b/language-python/src/Language/Python/Common/ParseError.hs similarity index 100% rename from src/Language/Python/Common/ParseError.hs rename to language-python/src/Language/Python/Common/ParseError.hs diff --git a/src/Language/Python/Common/ParserMonad.hs b/language-python/src/Language/Python/Common/ParserMonad.hs similarity index 100% rename from src/Language/Python/Common/ParserMonad.hs rename to language-python/src/Language/Python/Common/ParserMonad.hs diff --git a/src/Language/Python/Common/ParserUtils.hs b/language-python/src/Language/Python/Common/ParserUtils.hs similarity index 100% rename from src/Language/Python/Common/ParserUtils.hs rename to language-python/src/Language/Python/Common/ParserUtils.hs diff --git a/src/Language/Python/Common/Pretty.hs b/language-python/src/Language/Python/Common/Pretty.hs similarity index 100% rename from src/Language/Python/Common/Pretty.hs rename to language-python/src/Language/Python/Common/Pretty.hs diff --git a/src/Language/Python/Common/PrettyAST.hs b/language-python/src/Language/Python/Common/PrettyAST.hs similarity index 100% rename from src/Language/Python/Common/PrettyAST.hs rename to language-python/src/Language/Python/Common/PrettyAST.hs diff --git a/src/Language/Python/Common/PrettyParseError.hs b/language-python/src/Language/Python/Common/PrettyParseError.hs similarity index 100% rename from src/Language/Python/Common/PrettyParseError.hs rename to language-python/src/Language/Python/Common/PrettyParseError.hs diff --git a/src/Language/Python/Common/PrettyToken.hs b/language-python/src/Language/Python/Common/PrettyToken.hs similarity index 100% rename from src/Language/Python/Common/PrettyToken.hs rename to language-python/src/Language/Python/Common/PrettyToken.hs diff --git a/src/Language/Python/Common/SrcLocation.hs b/language-python/src/Language/Python/Common/SrcLocation.hs similarity index 100% rename from src/Language/Python/Common/SrcLocation.hs rename to language-python/src/Language/Python/Common/SrcLocation.hs diff --git a/src/Language/Python/Common/StringEscape.hs b/language-python/src/Language/Python/Common/StringEscape.hs similarity index 100% rename from src/Language/Python/Common/StringEscape.hs rename to language-python/src/Language/Python/Common/StringEscape.hs diff --git a/src/Language/Python/Common/Token.hs b/language-python/src/Language/Python/Common/Token.hs similarity index 100% rename from src/Language/Python/Common/Token.hs rename to language-python/src/Language/Python/Common/Token.hs diff --git a/src/Language/Python/Version2.hs b/language-python/src/Language/Python/Version2.hs similarity index 100% rename from src/Language/Python/Version2.hs rename to language-python/src/Language/Python/Version2.hs diff --git a/src/Language/Python/Version2/Lexer.hs b/language-python/src/Language/Python/Version2/Lexer.hs similarity index 100% rename from src/Language/Python/Version2/Lexer.hs rename to language-python/src/Language/Python/Version2/Lexer.hs diff --git a/src/Language/Python/Version2/Parser.hs b/language-python/src/Language/Python/Version2/Parser.hs similarity index 100% rename from src/Language/Python/Version2/Parser.hs rename to language-python/src/Language/Python/Version2/Parser.hs diff --git a/src/Language/Python/Version2/Parser/Lexer.x b/language-python/src/Language/Python/Version2/Parser/Lexer.x similarity index 100% rename from src/Language/Python/Version2/Parser/Lexer.x rename to language-python/src/Language/Python/Version2/Parser/Lexer.x diff --git a/src/Language/Python/Version2/Parser/Parser.y b/language-python/src/Language/Python/Version2/Parser/Parser.y similarity index 100% rename from src/Language/Python/Version2/Parser/Parser.y rename to language-python/src/Language/Python/Version2/Parser/Parser.y diff --git a/src/Language/Python/Version3.hs b/language-python/src/Language/Python/Version3.hs similarity index 100% rename from src/Language/Python/Version3.hs rename to language-python/src/Language/Python/Version3.hs diff --git a/src/Language/Python/Version3/Lexer.hs b/language-python/src/Language/Python/Version3/Lexer.hs similarity index 100% rename from src/Language/Python/Version3/Lexer.hs rename to language-python/src/Language/Python/Version3/Lexer.hs diff --git a/src/Language/Python/Version3/Parser.hs b/language-python/src/Language/Python/Version3/Parser.hs similarity index 100% rename from src/Language/Python/Version3/Parser.hs rename to language-python/src/Language/Python/Version3/Parser.hs diff --git a/src/Language/Python/Version3/Parser/Lexer.x b/language-python/src/Language/Python/Version3/Parser/Lexer.x similarity index 100% rename from src/Language/Python/Version3/Parser/Lexer.x rename to language-python/src/Language/Python/Version3/Parser/Lexer.x diff --git a/src/Language/Python/Version3/Parser/Parser.y b/language-python/src/Language/Python/Version3/Parser/Parser.y similarity index 100% rename from src/Language/Python/Version3/Parser/Parser.y rename to language-python/src/Language/Python/Version3/Parser/Parser.y diff --git a/stack.yaml b/language-python/stack.yaml similarity index 100% rename from stack.yaml rename to language-python/stack.yaml From b476eac44ba15d0268ed161d9fab83f3e580fb5a Mon Sep 17 00:00:00 2001 From: Bernie Pope Date: Sun, 3 Nov 2019 18:25:48 +1100 Subject: [PATCH 13/34] Add testing suite --- language-python-test/.gitignore | 7 + language-python-test/LICENSE | 27 + language-python-test/Makefile | 21 + language-python-test/README.md | 71 + language-python-test/Setup.lhs | 3 + language-python-test/docs/notes.txt | 18 + .../language-python-test.cabal | 39 + language-python-test/src/ParsePretty.hs | 42 + language-python-test/src/RoundTrip.hs | 80 + language-python-test/src/Tokens.hs | 39 + .../CPython_test_suite_v2/BaseHTTPServer.py | 592 ++ .../CPython_test_suite_v2/BaseHTTPServer.test | 5 + .../test/CPython_test_suite_v2/Bastion.py | 180 + .../test/CPython_test_suite_v2/Bastion.test | 5 + .../CPython_test_suite_v2/CGIHTTPServer.py | 366 ++ .../CPython_test_suite_v2/CGIHTTPServer.test | 5 + .../CPython_test_suite_v2/ConfigParser.py | 669 ++ .../CPython_test_suite_v2/ConfigParser.test | 5 + .../test/CPython_test_suite_v2/Cookie.py | 752 +++ .../test/CPython_test_suite_v2/Cookie.test | 5 + .../CPython_test_suite_v2/DocXMLRPCServer.py | 283 + .../DocXMLRPCServer.test | 5 + .../test/CPython_test_suite_v2/HTMLParser.py | 387 ++ .../CPython_test_suite_v2/HTMLParser.test | 5 + .../test/CPython_test_suite_v2/LICENSE | 274 + .../test/CPython_test_suite_v2/MimeWriter.py | 186 + .../CPython_test_suite_v2/MimeWriter.test | 5 + .../test/CPython_test_suite_v2/Queue.py | 244 + .../test/CPython_test_suite_v2/Queue.test | 5 + .../test/CPython_test_suite_v2/README.txt | 5 + .../CPython_test_suite_v2/SimpleHTTPServer.py | 218 + .../SimpleHTTPServer.test | 5 + .../SimpleXMLRPCServer.py | 611 ++ .../SimpleXMLRPCServer.test | 5 + .../CPython_test_suite_v2/SocketServer.py | 681 ++ .../CPython_test_suite_v2/SocketServer.test | 5 + .../test/CPython_test_suite_v2/StringIO.py | 323 + .../test/CPython_test_suite_v2/StringIO.test | 5 + .../test/CPython_test_suite_v2/UserDict.py | 179 + .../test/CPython_test_suite_v2/UserDict.test | 5 + .../test/CPython_test_suite_v2/UserList.py | 88 + .../test/CPython_test_suite_v2/UserList.test | 5 + .../test/CPython_test_suite_v2/UserString.py | 228 + .../CPython_test_suite_v2/UserString.test | 5 + .../CPython_test_suite_v2/_LWPCookieJar.py | 170 + .../CPython_test_suite_v2/_LWPCookieJar.test | 5 + .../_MozillaCookieJar.py | 149 + .../_MozillaCookieJar.test | 5 + .../test/CPython_test_suite_v2/__future__.py | 128 + .../CPython_test_suite_v2/__future__.test | 5 + .../CPython_test_suite_v2/__phello__.foo.py | 1 + .../CPython_test_suite_v2/__phello__.foo.test | 5 + .../test/CPython_test_suite_v2/_abcoll.py | 561 ++ .../test/CPython_test_suite_v2/_abcoll.test | 5 + .../test/CPython_test_suite_v2/_strptime.py | 454 ++ .../test/CPython_test_suite_v2/_strptime.test | 5 + .../CPython_test_suite_v2/_threading_local.py | 241 + .../_threading_local.test | 5 + .../test/CPython_test_suite_v2/abc.py | 171 + .../test/CPython_test_suite_v2/abc.test | 5 + .../test/CPython_test_suite_v2/aifc.py | 962 +++ .../test/CPython_test_suite_v2/aifc.test | 5 + .../test/CPython_test_suite_v2/antigravity.py | 4 + .../CPython_test_suite_v2/antigravity.test | 5 + .../test/CPython_test_suite_v2/anydbm.py | 83 + .../test/CPython_test_suite_v2/anydbm.test | 5 + .../test/CPython_test_suite_v2/ast.py | 313 + .../test/CPython_test_suite_v2/ast.test | 5 + .../test/CPython_test_suite_v2/asynchat.py | 314 + .../test/CPython_test_suite_v2/asynchat.test | 5 + .../test/CPython_test_suite_v2/asyncore.py | 620 ++ .../test/CPython_test_suite_v2/asyncore.test | 5 + .../test/CPython_test_suite_v2/atexit.py | 65 + .../test/CPython_test_suite_v2/atexit.test | 5 + .../test/CPython_test_suite_v2/audiodev.py | 260 + .../test/CPython_test_suite_v2/audiodev.test | 5 + .../test/CPython_test_suite_v2/base64.py | 359 ++ .../test/CPython_test_suite_v2/base64.test | 5 + .../test/CPython_test_suite_v2/bdb.py | 613 ++ .../test/CPython_test_suite_v2/bdb.test | 5 + .../test/CPython_test_suite_v2/binhex.py | 520 ++ .../test/CPython_test_suite_v2/binhex.test | 5 + .../test/CPython_test_suite_v2/bisect.py | 92 + .../test/CPython_test_suite_v2/bisect.test | 5 + .../test/CPython_test_suite_v2/cProfile.py | 190 + .../test/CPython_test_suite_v2/cProfile.test | 5 + .../test/CPython_test_suite_v2/calendar.py | 704 +++ .../test/CPython_test_suite_v2/calendar.test | 5 + .../test/CPython_test_suite_v2/cgi.py | 1051 ++++ .../test/CPython_test_suite_v2/cgi.test | 5 + .../test/CPython_test_suite_v2/cgitb.py | 318 + .../test/CPython_test_suite_v2/cgitb.test | 5 + .../test/CPython_test_suite_v2/chunk.py | 167 + .../test/CPython_test_suite_v2/chunk.test | 5 + .../test/CPython_test_suite_v2/cmd.py | 405 ++ .../test/CPython_test_suite_v2/cmd.test | 5 + .../test/CPython_test_suite_v2/code.py | 311 + .../test/CPython_test_suite_v2/code.test | 5 + .../test/CPython_test_suite_v2/codecs.py | 1082 ++++ .../test/CPython_test_suite_v2/codecs.test | 5 + .../test/CPython_test_suite_v2/codeop.py | 168 + .../test/CPython_test_suite_v2/codeop.test | 5 + .../test/CPython_test_suite_v2/collections.py | 393 ++ .../CPython_test_suite_v2/collections.test | 5 + .../test/CPython_test_suite_v2/colorsys.py | 156 + .../test/CPython_test_suite_v2/colorsys.test | 5 + .../test/CPython_test_suite_v2/commands.py | 90 + .../test/CPython_test_suite_v2/commands.test | 5 + .../test/CPython_test_suite_v2/compileall.py | 157 + .../CPython_test_suite_v2/compileall.test | 5 + .../test/CPython_test_suite_v2/contextlib.py | 153 + .../CPython_test_suite_v2/contextlib.test | 5 + .../test/CPython_test_suite_v2/cookielib.py | 1789 ++++++ .../test/CPython_test_suite_v2/cookielib.test | 5 + .../test/CPython_test_suite_v2/copy.py | 415 ++ .../test/CPython_test_suite_v2/copy.test | 5 + .../test/CPython_test_suite_v2/copy_reg.py | 201 + .../test/CPython_test_suite_v2/copy_reg.test | 5 + .../test/CPython_test_suite_v2/csv.py | 435 ++ .../test/CPython_test_suite_v2/csv.test | 5 + .../test/CPython_test_suite_v2/dbhash.py | 19 + .../test/CPython_test_suite_v2/dbhash.test | 5 + .../test/CPython_test_suite_v2/decimal.py | 5584 +++++++++++++++++ .../test/CPython_test_suite_v2/decimal.test | 5 + .../test/CPython_test_suite_v2/difflib.py | 2023 ++++++ .../test/CPython_test_suite_v2/difflib.test | 5 + .../test/CPython_test_suite_v2/dircache.py | 41 + .../test/CPython_test_suite_v2/dircache.test | 5 + .../test/CPython_test_suite_v2/dis.py | 224 + .../test/CPython_test_suite_v2/dis.test | 5 + .../test/CPython_test_suite_v2/doctest.py | 2686 ++++++++ .../test/CPython_test_suite_v2/doctest.test | 5 + .../test/CPython_test_suite_v2/dumbdbm.py | 250 + .../test/CPython_test_suite_v2/dumbdbm.test | 5 + .../CPython_test_suite_v2/dummy_thread.py | 145 + .../CPython_test_suite_v2/dummy_thread.test | 5 + .../CPython_test_suite_v2/dummy_threading.py | 78 + .../dummy_threading.test | 5 + .../test/CPython_test_suite_v2/filecmp.py | 296 + .../test/CPython_test_suite_v2/filecmp.test | 5 + .../test/CPython_test_suite_v2/fileinput.py | 413 ++ .../test/CPython_test_suite_v2/fileinput.test | 5 + .../test/CPython_test_suite_v2/fnmatch.py | 107 + .../test/CPython_test_suite_v2/fnmatch.test | 5 + .../test/CPython_test_suite_v2/formatter.py | 444 ++ .../test/CPython_test_suite_v2/formatter.test | 5 + .../test/CPython_test_suite_v2/fpformat.py | 145 + .../test/CPython_test_suite_v2/fpformat.test | 5 + .../test/CPython_test_suite_v2/fractions.py | 539 ++ .../test/CPython_test_suite_v2/fractions.test | 5 + .../test/CPython_test_suite_v2/ftplib.py | 857 +++ .../test/CPython_test_suite_v2/ftplib.test | 5 + .../test/CPython_test_suite_v2/functools.py | 51 + .../test/CPython_test_suite_v2/functools.test | 5 + .../test/CPython_test_suite_v2/genericpath.py | 105 + .../CPython_test_suite_v2/genericpath.test | 5 + .../test/CPython_test_suite_v2/getopt.py | 211 + .../getopt.py.iso-8859-1 | 211 + .../test/CPython_test_suite_v2/getopt.py.utf8 | 211 + .../test/CPython_test_suite_v2/getopt.test | 5 + .../test/CPython_test_suite_v2/getpass.py | 174 + .../test/CPython_test_suite_v2/getpass.test | 5 + .../test/CPython_test_suite_v2/gettext.py | 591 ++ .../test/CPython_test_suite_v2/gettext.test | 5 + .../test/CPython_test_suite_v2/glob.py | 78 + .../test/CPython_test_suite_v2/glob.test | 5 + .../test/CPython_test_suite_v2/gzip.py | 505 ++ .../test/CPython_test_suite_v2/gzip.test | 5 + .../test/CPython_test_suite_v2/hashlib.py | 141 + .../test/CPython_test_suite_v2/hashlib.test | 5 + .../test/CPython_test_suite_v2/heapq.py | 438 ++ .../CPython_test_suite_v2/heapq.py.iso-8859-1 | 438 ++ .../test/CPython_test_suite_v2/heapq.py.utf8 | 438 ++ .../test/CPython_test_suite_v2/heapq.test | 5 + .../test/CPython_test_suite_v2/hmac.py | 133 + .../test/CPython_test_suite_v2/hmac.test | 5 + .../CPython_test_suite_v2/htmlentitydefs.py | 273 + .../CPython_test_suite_v2/htmlentitydefs.test | 5 + .../test/CPython_test_suite_v2/htmllib.py | 491 ++ .../test/CPython_test_suite_v2/htmllib.test | 5 + .../test/CPython_test_suite_v2/httplib.py | 1322 ++++ .../test/CPython_test_suite_v2/httplib.test | 5 + .../test/CPython_test_suite_v2/ihooks.py | 522 ++ .../test/CPython_test_suite_v2/ihooks.test | 5 + .../test/CPython_test_suite_v2/imaplib.py | 1507 +++++ .../test/CPython_test_suite_v2/imaplib.test | 5 + .../test/CPython_test_suite_v2/imghdr.py | 161 + .../test/CPython_test_suite_v2/imghdr.test | 5 + .../test/CPython_test_suite_v2/imputil.py | 734 +++ .../test/CPython_test_suite_v2/imputil.test | 5 + .../test/CPython_test_suite_v2/inspect.py | 961 +++ .../test/CPython_test_suite_v2/inspect.test | 5 + .../test/CPython_test_suite_v2/io.py | 1863 ++++++ .../test/CPython_test_suite_v2/io.test | 5 + .../test/CPython_test_suite_v2/keyword.py | 93 + .../test/CPython_test_suite_v2/keyword.test | 5 + .../test/CPython_test_suite_v2/linecache.py | 135 + .../test/CPython_test_suite_v2/linecache.test | 5 + .../test/CPython_test_suite_v2/locale.py | 1721 +++++ .../test/CPython_test_suite_v2/locale.test | 5 + .../test/CPython_test_suite_v2/macpath.py | 207 + .../test/CPython_test_suite_v2/macpath.test | 5 + .../test/CPython_test_suite_v2/macurl2path.py | 97 + .../CPython_test_suite_v2/macurl2path.test | 5 + .../test/CPython_test_suite_v2/mailbox.py | 2119 +++++++ .../test/CPython_test_suite_v2/mailbox.test | 5 + .../test/CPython_test_suite_v2/mailcap.py | 255 + .../test/CPython_test_suite_v2/mailcap.test | 5 + .../test/CPython_test_suite_v2/make_test.sh | 12 + .../test/CPython_test_suite_v2/markupbase.py | 392 ++ .../CPython_test_suite_v2/markupbase.test | 5 + .../test/CPython_test_suite_v2/md5.py | 14 + .../test/CPython_test_suite_v2/md5.test | 5 + .../test/CPython_test_suite_v2/mhlib.py | 1005 +++ .../test/CPython_test_suite_v2/mhlib.test | 5 + .../test/CPython_test_suite_v2/mimetools.py | 250 + .../test/CPython_test_suite_v2/mimetools.test | 5 + .../test/CPython_test_suite_v2/mimetypes.py | 536 ++ .../test/CPython_test_suite_v2/mimetypes.test | 5 + .../test/CPython_test_suite_v2/mimify.py | 468 ++ .../test/CPython_test_suite_v2/mimify.test | 5 + .../CPython_test_suite_v2/modulefinder.py | 671 ++ .../CPython_test_suite_v2/modulefinder.test | 5 + .../test/CPython_test_suite_v2/multifile.py | 162 + .../test/CPython_test_suite_v2/multifile.test | 5 + .../test/CPython_test_suite_v2/mutex.py | 55 + .../test/CPython_test_suite_v2/mutex.test | 5 + .../test/CPython_test_suite_v2/netrc.py | 111 + .../test/CPython_test_suite_v2/netrc.test | 5 + .../test/CPython_test_suite_v2/new.py | 21 + .../test/CPython_test_suite_v2/new.test | 5 + .../test/CPython_test_suite_v2/nntplib.py | 628 ++ .../test/CPython_test_suite_v2/nntplib.test | 5 + .../test/CPython_test_suite_v2/ntpath.py | 497 ++ .../test/CPython_test_suite_v2/ntpath.test | 5 + .../test/CPython_test_suite_v2/nturl2path.py | 63 + .../CPython_test_suite_v2/nturl2path.test | 5 + .../test/CPython_test_suite_v2/numbers.py | 391 ++ .../test/CPython_test_suite_v2/numbers.test | 5 + .../test/CPython_test_suite_v2/opcode.py | 185 + .../test/CPython_test_suite_v2/opcode.test | 5 + .../test/CPython_test_suite_v2/optparse.py | 1684 +++++ .../test/CPython_test_suite_v2/optparse.test | 5 + .../test/CPython_test_suite_v2/os.py | 762 +++ .../test/CPython_test_suite_v2/os.test | 5 + .../test/CPython_test_suite_v2/os2emxpath.py | 155 + .../CPython_test_suite_v2/os2emxpath.test | 5 + .../test/CPython_test_suite_v2/pdb.py | 1297 ++++ .../test/CPython_test_suite_v2/pdb.test | 5 + .../test/CPython_test_suite_v2/pickle.py | 1383 ++++ .../test/CPython_test_suite_v2/pickle.test | 5 + .../test/CPython_test_suite_v2/pickletools.py | 2271 +++++++ .../CPython_test_suite_v2/pickletools.test | 5 + .../test/CPython_test_suite_v2/pipes.py | 282 + .../test/CPython_test_suite_v2/pipes.test | 5 + .../test/CPython_test_suite_v2/pkgutil.py | 583 ++ .../test/CPython_test_suite_v2/pkgutil.test | 5 + .../test/CPython_test_suite_v2/platform.py | 1537 +++++ .../test/CPython_test_suite_v2/platform.test | 5 + .../test/CPython_test_suite_v2/plistlib.py | 473 ++ .../test/CPython_test_suite_v2/plistlib.test | 5 + .../test/CPython_test_suite_v2/popen2.py | 201 + .../test/CPython_test_suite_v2/popen2.test | 5 + .../test/CPython_test_suite_v2/poplib.py | 417 ++ .../test/CPython_test_suite_v2/poplib.test | 5 + .../test/CPython_test_suite_v2/posixfile.py | 237 + .../test/CPython_test_suite_v2/posixfile.test | 5 + .../test/CPython_test_suite_v2/posixpath.py | 404 ++ .../test/CPython_test_suite_v2/posixpath.test | 5 + .../test/CPython_test_suite_v2/pprint.py | 343 + .../test/CPython_test_suite_v2/pprint.test | 5 + .../test/CPython_test_suite_v2/profile.py | 619 ++ .../test/CPython_test_suite_v2/profile.test | 5 + .../test/CPython_test_suite_v2/pstats.py | 695 ++ .../test/CPython_test_suite_v2/pstats.test | 5 + .../test/CPython_test_suite_v2/pty.py | 174 + .../test/CPython_test_suite_v2/pty.test | 5 + .../test/CPython_test_suite_v2/py_compile.py | 168 + .../CPython_test_suite_v2/py_compile.test | 5 + .../test/CPython_test_suite_v2/pyclbr.py | 342 + .../test/CPython_test_suite_v2/pyclbr.test | 5 + .../test/CPython_test_suite_v2/pydoc.py | 2331 +++++++ .../test/CPython_test_suite_v2/pydoc.test | 5 + .../CPython_test_suite_v2/pydoc_topics.py | 83 + .../CPython_test_suite_v2/pydoc_topics.test | 5 + .../test/CPython_test_suite_v2/quopri.py | 237 + .../test/CPython_test_suite_v2/quopri.test | 5 + .../test/CPython_test_suite_v2/random.py | 898 +++ .../test/CPython_test_suite_v2/random.test | 5 + .../test/CPython_test_suite_v2/re.py | 327 + .../test/CPython_test_suite_v2/re.test | 5 + .../test/CPython_test_suite_v2/repr.py | 132 + .../test/CPython_test_suite_v2/repr.test | 5 + .../test/CPython_test_suite_v2/rexec.py | 588 ++ .../test/CPython_test_suite_v2/rexec.test | 5 + .../test/CPython_test_suite_v2/rfc822.py | 1011 +++ .../test/CPython_test_suite_v2/rfc822.test | 5 + .../test/CPython_test_suite_v2/rlcompleter.py | 170 + .../CPython_test_suite_v2/rlcompleter.test | 5 + .../test/CPython_test_suite_v2/robotparser.py | 215 + .../CPython_test_suite_v2/robotparser.test | 5 + .../test/CPython_test_suite_v2/runpy.py | 155 + .../test/CPython_test_suite_v2/runpy.test | 5 + .../test/CPython_test_suite_v2/sched.py | 134 + .../test/CPython_test_suite_v2/sched.test | 5 + .../test/CPython_test_suite_v2/sets.py | 579 ++ .../test/CPython_test_suite_v2/sets.test | 5 + .../test/CPython_test_suite_v2/sgmllib.py | 553 ++ .../test/CPython_test_suite_v2/sgmllib.test | 5 + .../test/CPython_test_suite_v2/sha.py | 15 + .../test/CPython_test_suite_v2/sha.test | 5 + .../test/CPython_test_suite_v2/shelve.py | 234 + .../test/CPython_test_suite_v2/shelve.test | 5 + .../test/CPython_test_suite_v2/shlex.py | 292 + .../CPython_test_suite_v2/shlex.py.iso-8859-1 | 292 + .../test/CPython_test_suite_v2/shlex.py.utf8 | 292 + .../test/CPython_test_suite_v2/shlex.test | 5 + .../test/CPython_test_suite_v2/shutil.py | 274 + .../test/CPython_test_suite_v2/shutil.test | 5 + .../test/CPython_test_suite_v2/site.py | 565 ++ .../test/CPython_test_suite_v2/site.test | 5 + .../test/CPython_test_suite_v2/smtpd.py | 549 ++ .../test/CPython_test_suite_v2/smtpd.test | 5 + .../test/CPython_test_suite_v2/smtplib.py | 830 +++ .../test/CPython_test_suite_v2/smtplib.test | 5 + .../test/CPython_test_suite_v2/sndhdr.py | 228 + .../test/CPython_test_suite_v2/sndhdr.test | 5 + .../test/CPython_test_suite_v2/socket.py | 512 ++ .../test/CPython_test_suite_v2/socket.test | 5 + .../test/CPython_test_suite_v2/sre.py | 13 + .../test/CPython_test_suite_v2/sre.test | 5 + .../test/CPython_test_suite_v2/sre_compile.py | 524 ++ .../CPython_test_suite_v2/sre_compile.test | 5 + .../CPython_test_suite_v2/sre_constants.py | 261 + .../CPython_test_suite_v2/sre_constants.test | 5 + .../test/CPython_test_suite_v2/sre_parse.py | 790 +++ .../test/CPython_test_suite_v2/sre_parse.test | 5 + .../test/CPython_test_suite_v2/ssl.py | 451 ++ .../test/CPython_test_suite_v2/ssl.test | 5 + .../test/CPython_test_suite_v2/stat.py | 94 + .../test/CPython_test_suite_v2/stat.test | 5 + .../test/CPython_test_suite_v2/statvfs.py | 18 + .../test/CPython_test_suite_v2/statvfs.test | 5 + .../test/CPython_test_suite_v2/string.py | 640 ++ .../test/CPython_test_suite_v2/string.test | 5 + .../test/CPython_test_suite_v2/stringold.py | 432 ++ .../test/CPython_test_suite_v2/stringold.test | 5 + .../test/CPython_test_suite_v2/stringprep.py | 272 + .../CPython_test_suite_v2/stringprep.test | 5 + .../test/CPython_test_suite_v2/struct.py | 2 + .../test/CPython_test_suite_v2/struct.test | 5 + .../test/CPython_test_suite_v2/subprocess.py | 1342 ++++ .../CPython_test_suite_v2/subprocess.test | 5 + .../test/CPython_test_suite_v2/sunau.py | 474 ++ .../test/CPython_test_suite_v2/sunau.test | 5 + .../test/CPython_test_suite_v2/sunaudio.py | 49 + .../test/CPython_test_suite_v2/sunaudio.test | 5 + .../test/CPython_test_suite_v2/symbol.py | 114 + .../test/CPython_test_suite_v2/symbol.test | 5 + .../test/CPython_test_suite_v2/symtable.py | 252 + .../test/CPython_test_suite_v2/symtable.test | 5 + .../test/CPython_test_suite_v2/tabnanny.py | 329 + .../test/CPython_test_suite_v2/tabnanny.test | 5 + .../test/CPython_test_suite_v2/tarfile.py | 2527 ++++++++ .../tarfile.py.iso-8859-1 | 2527 ++++++++ .../CPython_test_suite_v2/tarfile.py.utf8 | 2527 ++++++++ .../test/CPython_test_suite_v2/tarfile.test | 5 + .../test/CPython_test_suite_v2/telnetlib.py | 657 ++ .../test/CPython_test_suite_v2/telnetlib.test | 5 + .../test/CPython_test_suite_v2/tempfile.py | 603 ++ .../test/CPython_test_suite_v2/tempfile.test | 5 + .../test/CPython_test_suite_v2/textwrap.py | 417 ++ .../test/CPython_test_suite_v2/textwrap.test | 5 + .../test/CPython_test_suite_v2/this.py | 28 + .../test/CPython_test_suite_v2/this.test | 5 + .../test/CPython_test_suite_v2/threading.py | 955 +++ .../test/CPython_test_suite_v2/threading.test | 5 + .../test/CPython_test_suite_v2/timeit.py | 327 + .../test/CPython_test_suite_v2/timeit.test | 5 + .../test/CPython_test_suite_v2/toaiff.py | 110 + .../test/CPython_test_suite_v2/toaiff.test | 5 + .../test/CPython_test_suite_v2/token.py | 142 + .../test/CPython_test_suite_v2/token.test | 5 + .../test/CPython_test_suite_v2/tokenize.py | 415 ++ .../test/CPython_test_suite_v2/tokenize.test | 5 + .../test/CPython_test_suite_v2/trace.py | 813 +++ .../test/CPython_test_suite_v2/trace.test | 5 + .../test/CPython_test_suite_v2/traceback.py | 312 + .../test/CPython_test_suite_v2/traceback.test | 5 + .../test/CPython_test_suite_v2/tty.py | 36 + .../test/CPython_test_suite_v2/tty.test | 5 + .../test/CPython_test_suite_v2/types.py | 93 + .../test/CPython_test_suite_v2/types.test | 5 + .../test/CPython_test_suite_v2/unittest.py | 873 +++ .../test/CPython_test_suite_v2/unittest.test | 5 + .../test/CPython_test_suite_v2/urllib.py | 1768 ++++++ .../test/CPython_test_suite_v2/urllib.test | 5 + .../test/CPython_test_suite_v2/urllib2.py | 1371 ++++ .../test/CPython_test_suite_v2/urllib2.test | 5 + .../test/CPython_test_suite_v2/urlparse.py | 423 ++ .../test/CPython_test_suite_v2/urlparse.test | 5 + .../test/CPython_test_suite_v2/user.py | 48 + .../test/CPython_test_suite_v2/user.test | 5 + .../test/CPython_test_suite_v2/uu.py | 186 + .../test/CPython_test_suite_v2/uu.test | 5 + .../test/CPython_test_suite_v2/uuid.py | 544 ++ .../test/CPython_test_suite_v2/uuid.test | 5 + .../test/CPython_test_suite_v2/warnings.py | 402 ++ .../test/CPython_test_suite_v2/warnings.test | 5 + .../test/CPython_test_suite_v2/wave.py | 499 ++ .../test/CPython_test_suite_v2/wave.test | 5 + .../test/CPython_test_suite_v2/weakref.py | 355 ++ .../test/CPython_test_suite_v2/weakref.test | 5 + .../test/CPython_test_suite_v2/webbrowser.py | 661 ++ .../CPython_test_suite_v2/webbrowser.test | 5 + .../test/CPython_test_suite_v2/whichdb.py | 117 + .../test/CPython_test_suite_v2/whichdb.test | 5 + .../test/CPython_test_suite_v2/xdrlib.py | 229 + .../test/CPython_test_suite_v2/xdrlib.test | 5 + .../test/CPython_test_suite_v2/xmllib.py | 929 +++ .../test/CPython_test_suite_v2/xmllib.test | 5 + .../test/CPython_test_suite_v2/xmlrpclib.py | 1516 +++++ .../test/CPython_test_suite_v2/xmlrpclib.test | 5 + .../test/CPython_test_suite_v2/zipfile.py | 1415 +++++ .../test/CPython_test_suite_v2/zipfile.test | 5 + .../CPython_test_suite_v3/@test_1055_tmp.py | 4 + .../CPython_test_suite_v3/@test_1055_tmp.test | 5 + .../CPython_test_suite_v3/@test_1285_tmp.py | 4 + .../CPython_test_suite_v3/@test_1285_tmp.test | 5 + .../CPython_test_suite_v3/@test_1751_tmp.py | 4 + .../CPython_test_suite_v3/@test_1751_tmp.test | 5 + .../CPython_test_suite_v3/@test_2269_tmp.py | 1 + .../CPython_test_suite_v3/@test_2269_tmp.test | 5 + .../CPython_test_suite_v3/@test_3306_tmp.py | 1 + .../CPython_test_suite_v3/@test_3306_tmp.test | 5 + .../CPython_test_suite_v3/@test_6326_tmp.py | 1 + .../CPython_test_suite_v3/@test_6326_tmp.test | 5 + .../CPython_test_suite_v3/@test_643_tmp.py | 4 + .../CPython_test_suite_v3/@test_643_tmp.test | 5 + .../CPython_test_suite_v3/@test_6679_tmp.py | 4 + .../CPython_test_suite_v3/@test_6679_tmp.test | 5 + .../CPython_test_suite_v3/@test_7701_tmp.py | 4 + .../CPython_test_suite_v3/@test_7701_tmp.test | 5 + .../CPython_test_suite_v3/@test_9411_tmp.py | 4 + .../CPython_test_suite_v3/@test_9411_tmp.test | 5 + .../test/CPython_test_suite_v3/LICENSE | 274 + .../test/CPython_test_suite_v3/README.txt | 5 + .../test/CPython_test_suite_v3/ann_module.py | 53 + .../CPython_test_suite_v3/ann_module.test | 5 + .../CPython_test_suite_v3/badsyntax_async1.py | 2 + .../badsyntax_async1.test | 5 + .../CPython_test_suite_v3/badsyntax_async2.py | 2 + .../badsyntax_async2.test | 5 + .../CPython_test_suite_v3/badsyntax_async5.py | 2 + .../badsyntax_async5.test | 5 + .../CPython_test_suite_v3/badsyntax_async6.py | 2 + .../badsyntax_async6.test | 5 + .../CPython_test_suite_v3/badsyntax_async7.py | 2 + .../badsyntax_async7.test | 5 + .../test/CPython_test_suite_v3/make_test.sh | 12 + .../CPython_test_suite_v3/test_augassign.py | 326 + .../CPython_test_suite_v3/test_augassign.test | 5 + .../CPython_test_suite_v3/test_coroutines.py | 2151 +++++++ .../test_coroutines.test | 5 + .../test/CPython_test_suite_v3/test_lzma.py | 1517 +++++ .../test/CPython_test_suite_v3/test_lzma.test | 5 + .../CPython_test_suite_v3/test_macpath.py | 127 + .../CPython_test_suite_v3/test_macpath.test | 5 + .../CPython_test_suite_v3/test_mailcap.py | 221 + .../CPython_test_suite_v3/test_mailcap.test | 5 + .../CPython_test_suite_v3/test_marshal.py | 294 + .../CPython_test_suite_v3/test_marshal.test | 5 + .../test/CPython_test_suite_v3/test_math.py | 1108 ++++ .../test/CPython_test_suite_v3/test_math.test | 5 + .../CPython_test_suite_v3/test_memoryio.py | 732 +++ .../CPython_test_suite_v3/test_memoryio.test | 5 + .../CPython_test_suite_v3/test_memoryview.py | 469 ++ .../test_memoryview.test | 5 + .../CPython_test_suite_v3/test_metaclass.py | 265 + .../CPython_test_suite_v3/test_metaclass.test | 5 + .../CPython_test_suite_v3/test_mimetypes.py | 108 + .../CPython_test_suite_v3/test_mimetypes.test | 5 + .../test/CPython_test_suite_v3/test_mmap.py | 741 +++ .../test/CPython_test_suite_v3/test_mmap.test | 5 + .../test_modulefinder.py | 281 + .../test_modulefinder.test | 5 + .../test_multiprocessing.py | 3424 ++++++++++ .../test_multiprocessing.test | 5 + .../test_namespace_pkgs.py | 294 + .../test_namespace_pkgs.test | 5 + .../test/CPython_test_suite_v3/test_netrc.py | 110 + .../CPython_test_suite_v3/test_netrc.test | 5 + .../test/CPython_test_suite_v3/test_nis.py | 47 + .../test/CPython_test_suite_v3/test_nis.test | 5 + .../test/CPython_test_suite_v3/test_ntpath.py | 270 + .../CPython_test_suite_v3/test_ntpath.test | 5 + .../test_numeric_tower.py | 206 + .../test_numeric_tower.test | 5 + .../CPython_test_suite_v3/test_opcodes.py | 112 + .../CPython_test_suite_v3/test_opcodes.test | 5 + .../CPython_test_suite_v3/test_openpty.py | 23 + .../CPython_test_suite_v3/test_openpty.test | 5 + .../CPython_test_suite_v3/test_operator.py | 609 ++ .../CPython_test_suite_v3/test_operator.test | 5 + .../CPython_test_suite_v3/test_optparse.py | 1621 +++++ .../CPython_test_suite_v3/test_optparse.test | 5 + .../CPython_test_suite_v3/test_osx_env.py | 35 + .../CPython_test_suite_v3/test_osx_env.test | 5 + .../test/CPython_test_suite_v3/test_parser.py | 743 +++ .../CPython_test_suite_v3/test_parser.test | 5 + .../test/CPython_test_suite_v3/test_pdb.py | 681 ++ .../test/CPython_test_suite_v3/test_pdb.test | 5 + .../test/CPython_test_suite_v3/test_pep247.py | 68 + .../CPython_test_suite_v3/test_pep247.test | 5 + .../test/CPython_test_suite_v3/test_pep277.py | 220 + .../CPython_test_suite_v3/test_pep277.test | 5 + .../test/CPython_test_suite_v3/test_pep292.py | 247 + .../CPython_test_suite_v3/test_pep292.test | 5 + .../test/CPython_test_suite_v3/test_pep352.py | 187 + .../CPython_test_suite_v3/test_pep352.test | 5 + .../test/CPython_test_suite_v3/test_pickle.py | 143 + .../CPython_test_suite_v3/test_pickle.test | 5 + .../CPython_test_suite_v3/test_pickletools.py | 25 + .../test_pickletools.test | 5 + .../test/CPython_test_suite_v3/test_pipes.py | 196 + .../CPython_test_suite_v3/test_pipes.test | 5 + .../test/CPython_test_suite_v3/test_pkg.py | 297 + .../test/CPython_test_suite_v3/test_pkg.test | 5 + .../CPython_test_suite_v3/test_pkgimport.py | 84 + .../CPython_test_suite_v3/test_pkgimport.test | 5 + .../CPython_test_suite_v3/test_pkgutil.py | 310 + .../CPython_test_suite_v3/test_pkgutil.test | 5 + .../CPython_test_suite_v3/test_platform.py | 292 + .../CPython_test_suite_v3/test_platform.test | 5 + .../CPython_test_suite_v3/test_plistlib.py | 216 + .../CPython_test_suite_v3/test_plistlib.test | 5 + .../test/CPython_test_suite_v3/test_poll.py | 157 + .../test/CPython_test_suite_v3/test_poll.test | 5 + .../test/CPython_test_suite_v3/test_popen.py | 65 + .../CPython_test_suite_v3/test_popen.test | 5 + .../test/CPython_test_suite_v3/test_poplib.py | 384 ++ .../CPython_test_suite_v3/test_poplib.test | 5 + .../test/CPython_test_suite_v3/test_posix.py | 1055 ++++ .../CPython_test_suite_v3/test_posix.test | 5 + .../CPython_test_suite_v3/test_posixpath.py | 537 ++ .../CPython_test_suite_v3/test_posixpath.test | 5 + .../test/CPython_test_suite_v3/test_pow.py | 129 + .../test/CPython_test_suite_v3/test_pow.test | 5 + .../test/CPython_test_suite_v3/test_pprint.py | 497 ++ .../CPython_test_suite_v3/test_pprint.test | 5 + .../test/CPython_test_suite_v3/test_print.py | 144 + .../CPython_test_suite_v3/test_print.test | 5 + .../CPython_test_suite_v3/test_profile.py | 160 + .../CPython_test_suite_v3/test_profile.test | 5 + .../CPython_test_suite_v3/test_property.py | 254 + .../CPython_test_suite_v3/test_property.test | 5 + .../test/CPython_test_suite_v3/test_pstats.py | 45 + .../CPython_test_suite_v3/test_pstats.test | 5 + .../test/CPython_test_suite_v3/test_pty.py | 302 + .../test/CPython_test_suite_v3/test_pty.test | 5 + .../CPython_test_suite_v3/test_pulldom.py | 347 + .../CPython_test_suite_v3/test_pulldom.test | 5 + .../test/CPython_test_suite_v3/test_pwd.py | 100 + .../test/CPython_test_suite_v3/test_pwd.test | 5 + .../CPython_test_suite_v3/test_py_compile.py | 61 + .../test_py_compile.test | 5 + .../test/CPython_test_suite_v3/test_pyclbr.py | 181 + .../CPython_test_suite_v3/test_pyclbr.test | 5 + .../test/CPython_test_suite_v3/test_pydoc.py | 550 ++ .../CPython_test_suite_v3/test_pydoc.test | 5 + .../test/CPython_test_suite_v3/test_queue.py | 360 ++ .../CPython_test_suite_v3/test_queue.test | 5 + .../test/CPython_test_suite_v3/test_quopri.py | 208 + .../CPython_test_suite_v3/test_quopri.test | 5 + .../test/CPython_test_suite_v3/test_raise.py | 422 ++ .../CPython_test_suite_v3/test_raise.test | 5 + .../test/CPython_test_suite_v3/test_random.py | 525 ++ .../CPython_test_suite_v3/test_random.test | 5 + .../CPython_test_suite_v3/test_readline.py | 47 + .../CPython_test_suite_v3/test_readline.test | 5 + .../CPython_test_suite_v3/test_resource.py | 114 + .../CPython_test_suite_v3/test_resource.test | 5 + .../CPython_test_suite_v3/test_richcmp.py | 333 + .../CPython_test_suite_v3/test_richcmp.test | 5 + .../CPython_test_suite_v3/test_rlcompleter.py | 73 + .../test_rlcompleter.test | 5 + .../CPython_test_suite_v3/test_robotparser.py | 278 + .../test_robotparser.test | 5 + .../test/CPython_test_suite_v3/test_runpy.py | 582 ++ .../CPython_test_suite_v3/test_runpy.test | 5 + .../test/CPython_test_suite_v3/test_sched.py | 105 + .../CPython_test_suite_v3/test_sched.test | 5 + .../test/CPython_test_suite_v3/test_select.py | 73 + .../CPython_test_suite_v3/test_select.test | 5 + .../CPython_test_suite_v3/test_setcomps.py | 151 + .../CPython_test_suite_v3/test_setcomps.test | 5 + .../test/CPython_test_suite_v3/test_shelve.py | 211 + .../CPython_test_suite_v3/test_shelve.test | 5 + .../test/CPython_test_suite_v3/test_shutil.py | 1619 +++++ .../CPython_test_suite_v3/test_shutil.test | 5 + .../test/CPython_test_suite_v3/test_site.py | 412 ++ .../test/CPython_test_suite_v3/test_site.test | 5 + .../test/CPython_test_suite_v3/test_slice.py | 135 + .../CPython_test_suite_v3/test_slice.test | 5 + .../test/CPython_test_suite_v3/test_smtpd.py | 557 ++ .../CPython_test_suite_v3/test_smtpd.test | 5 + .../CPython_test_suite_v3/test_smtplib.py | 832 +++ .../CPython_test_suite_v3/test_smtplib.test | 5 + .../CPython_test_suite_v3/test_smtpnet.py | 63 + .../CPython_test_suite_v3/test_smtpnet.test | 5 + .../test/CPython_test_suite_v3/test_sndhdr.py | 23 + .../CPython_test_suite_v3/test_sndhdr.test | 5 + .../test_socketserver.py | 321 + .../test_socketserver.test | 5 + .../test/CPython_test_suite_v3/test_sort.py | 285 + .../test/CPython_test_suite_v3/test_sort.test | 5 + .../test/CPython_test_suite_v3/test_sqlite.py | 23 + .../CPython_test_suite_v3/test_sqlite.test | 5 + .../test/CPython_test_suite_v3/test_stat.py | 66 + .../test/CPython_test_suite_v3/test_stat.test | 5 + .../test/CPython_test_suite_v3/test_strtod.py | 405 ++ .../CPython_test_suite_v3/test_strtod.test | 5 + .../test/CPython_test_suite_v3/test_struct.py | 600 ++ .../CPython_test_suite_v3/test_struct.test | 5 + .../test_structmembers.py | 145 + .../test_structmembers.test | 5 + .../CPython_test_suite_v3/test_structseq.py | 130 + .../CPython_test_suite_v3/test_structseq.test | 5 + .../CPython_test_suite_v3/test_subprocess.py | 1978 ++++++ .../test_subprocess.test | 5 + .../test/CPython_test_suite_v3/test_sunau.py | 70 + .../CPython_test_suite_v3/test_sunau.test | 5 + .../test/CPython_test_suite_v3/test_sundry.py | 67 + .../CPython_test_suite_v3/test_sundry.test | 5 + .../CPython_test_suite_v3/test_support.py | 190 + .../CPython_test_suite_v3/test_support.test | 5 + .../CPython_test_suite_v3/test_symtable.py | 176 + .../CPython_test_suite_v3/test_symtable.test | 5 + .../test/CPython_test_suite_v3/test_syntax.py | 593 ++ .../CPython_test_suite_v3/test_syntax.test | 5 + .../test/CPython_test_suite_v3/test_sys.py | 912 +++ .../test/CPython_test_suite_v3/test_sys.test | 5 + .../test_sys_setprofile.py | 386 ++ .../test_sys_setprofile.test | 5 + .../CPython_test_suite_v3/test_sysconfig.py | 403 ++ .../CPython_test_suite_v3/test_sysconfig.test | 5 + .../test/CPython_test_suite_v3/test_tcl.py | 160 + .../test/CPython_test_suite_v3/test_tcl.test | 5 + .../CPython_test_suite_v3/test_telnetlib.py | 445 ++ .../CPython_test_suite_v3/test_telnetlib.test | 5 + .../CPython_test_suite_v3/test_textwrap.py | 740 +++ .../CPython_test_suite_v3/test_textwrap.test | 5 + .../test/CPython_test_suite_v3/test_thread.py | 264 + .../CPython_test_suite_v3/test_thread.test | 5 + .../test_threaded_import.py | 240 + .../test_threaded_import.test | 5 + .../test_threadedtempfile.py | 78 + .../test_threadedtempfile.test | 5 + .../CPython_test_suite_v3/test_threading.py | 830 +++ .../CPython_test_suite_v3/test_threading.test | 5 + .../test_threadsignals.py | 221 + .../test_threadsignals.test | 5 + .../test/CPython_test_suite_v3/test_timeit.py | 305 + .../CPython_test_suite_v3/test_timeit.test | 5 + .../CPython_test_suite_v3/test_timeout.py | 290 + .../CPython_test_suite_v3/test_timeout.test | 5 + .../test/CPython_test_suite_v3/test_tk.py | 22 + .../test/CPython_test_suite_v3/test_tk.test | 5 + .../test/CPython_test_suite_v3/test_trace.py | 369 ++ .../CPython_test_suite_v3/test_trace.test | 5 + .../CPython_test_suite_v3/test_ttk_guionly.py | 37 + .../test_ttk_guionly.test | 5 + .../test_ttk_textonly.py | 14 + .../test_ttk_textonly.test | 5 + .../CPython_test_suite_v3/test_typechecks.py | 76 + .../test_typechecks.test | 5 + .../test/CPython_test_suite_v3/test_unary.py | 58 + .../CPython_test_suite_v3/test_unary.test | 5 + .../test_unicode_file.py | 144 + .../test_unicode_file.test | 5 + .../CPython_test_suite_v3/test_unittest.py | 16 + .../CPython_test_suite_v3/test_unittest.test | 5 + .../test_univnewlines.py | 128 + .../test_univnewlines.test | 5 + .../test/CPython_test_suite_v3/test_unpack.py | 130 + .../CPython_test_suite_v3/test_unpack.test | 5 + .../CPython_test_suite_v3/test_unpack_ex.py | 174 + .../CPython_test_suite_v3/test_unpack_ex.test | 5 + .../CPython_test_suite_v3/test_urllib2.py | 1523 +++++ .../CPython_test_suite_v3/test_urllib2.test | 5 + .../test_urllib2_localnet.py | 571 ++ .../test_urllib2_localnet.test | 5 + .../test_urllib_response.py | 42 + .../test_urllib_response.test | 5 + .../CPython_test_suite_v3/test_urllibnet.py | 191 + .../CPython_test_suite_v3/test_urllibnet.test | 5 + .../CPython_test_suite_v3/test_userdict.py | 198 + .../CPython_test_suite_v3/test_userdict.test | 5 + .../CPython_test_suite_v3/test_userstring.py | 49 + .../test_userstring.test | 5 + .../test/CPython_test_suite_v3/test_uu.py | 239 + .../test/CPython_test_suite_v3/test_uu.test | 5 + .../test/CPython_test_suite_v3/test_uuid.py | 493 ++ .../test/CPython_test_suite_v3/test_uuid.test | 5 + .../test/CPython_test_suite_v3/test_venv.py | 203 + .../test/CPython_test_suite_v3/test_venv.test | 5 + .../test/CPython_test_suite_v3/test_wait3.py | 42 + .../CPython_test_suite_v3/test_wait3.test | 5 + .../test/CPython_test_suite_v3/test_wait4.py | 32 + .../CPython_test_suite_v3/test_wait4.test | 5 + .../test/CPython_test_suite_v3/test_wave.py | 66 + .../test/CPython_test_suite_v3/test_wave.test | 5 + .../CPython_test_suite_v3/test_weakset.py | 440 ++ .../CPython_test_suite_v3/test_weakset.test | 5 + .../test/CPython_test_suite_v3/test_xdrlib.py | 58 + .../CPython_test_suite_v3/test_xdrlib.test | 5 + .../CPython_test_suite_v3/test_xml_etree_c.py | 85 + .../test_xml_etree_c.test | 5 + .../test/CPython_test_suite_v3/test_xmlrpc.py | 1098 ++++ .../CPython_test_suite_v3/test_xmlrpc.test | 5 + .../CPython_test_suite_v3/test_xmlrpc_net.py | 61 + .../test_xmlrpc_net.test | 5 + .../CPython_test_suite_v3/test_zipfile.py | 1786 ++++++ .../CPython_test_suite_v3/test_zipfile.test | 5 + .../CPython_test_suite_v3/test_zipimport.py | 480 ++ .../CPython_test_suite_v3/test_zipimport.test | 5 + .../test_zipimport_support.py | 233 + .../test_zipimport_support.test | 5 + .../test/CPython_test_suite_v3/test_zlib.py | 678 ++ .../test/CPython_test_suite_v3/test_zlib.test | 5 + .../test/features/annassign/annassign.py | 53 + .../test/features/annassign/annassign.test | 5 + .../test/features/arithmetic/mult.py | 6 + .../test/features/arithmetic/mult.test | 5 + .../arithmetic/mult_float_precision.py | 1 + .../arithmetic/mult_float_precision.test | 5 + .../test/features/arithmetic/one_div_zero.py | 2 + .../test/features/arithmetic/plus.py | 8 + .../test/features/arithmetic/plus.test | 5 + .../features/arithmetic/type_conversion.py | 43 + .../features/arithmetic/type_conversion.test | 5 + .../assignment/assign_list_subscript_scope.py | 11 + .../assign_list_subscript_scope.test | 5 + .../test/features/assignment/assign_multi.py | 2 + .../features/assignment/assign_multi.test | 5 + .../test/features/assignment/assign_slice.py | 8 + .../features/assignment/assign_slice.test | 5 + .../features/assignment/assign_subscript.py | 6 + .../features/assignment/assign_subscript.test | 5 + .../test/features/assignment/assign_unpack.py | 26 + .../features/assignment/assign_unpack.test | 5 + .../assignment/assign_unpack_iterator.py | 13 + .../assignment/assign_unpack_iterator.test | 5 + .../test/features/assignment/assign_var.py | 1 + .../test/features/assignment/assign_var.test | 5 + .../test/features/async/async_for.py | 22 + .../test/features/async/async_for.test | 5 + .../test/features/async/async_funcdef.py | 12 + .../test/features/async/async_funcdef.test | 5 + .../test/features/async/async_with.py | 16 + .../test/features/async/async_with.test | 5 + .../test/features/augassign/augassign.py | 28 + .../test/features/augassign/augassign.test | 5 + .../test/features/booleans/and.py | 48 + .../test/features/booleans/and.test | 5 + .../test/features/booleans/bool_class.py | 64 + .../test/features/booleans/bool_class.test | 5 + .../test/features/booleans/not.py | 17 + .../test/features/booleans/not.test | 5 + .../test/features/booleans/or.py | 45 + .../test/features/booleans/or.test | 5 + .../test/features/break/while_break.py | 8 + .../test/features/break/while_break.test | 5 + .../features/bytestrings/bytestring_append.py | 1 + .../bytestrings/bytestring_append.test | 5 + .../bytestrings/bytestring_juxtapose.py | 1 + .../bytestrings/bytestring_juxtapose.test | 5 + .../features/bytestrings/empty_bytestring.py | 3 + .../bytestrings/empty_bytestring.test | 5 + .../hex_bytes_escaped_bytestring.py | 1 + .../hex_bytes_escaped_bytestring.test | 5 + .../features/bytestrings/raw_bytestring_v2.py | 3 + .../bytestrings/raw_bytestring_v2.test | 5 + .../features/bytestrings/raw_bytestring_v3.py | 6 + .../bytestrings/raw_bytestring_v3.test | 5 + .../bytestrings/singleton_bytestring.py | 1 + .../bytestrings/singleton_bytestring.test | 5 + .../bytestrings/triple_quoted_bytestring.py | 2 + .../bytestrings/triple_quoted_bytestring.test | 5 + .../test/features/classes/bad_mro.py | 12 + .../classes/class_freevar_sameas_localvar.py | 10 + .../class_freevar_sameas_localvar.test | 5 + .../test/features/classes/class_metaclass.py | 17 + .../features/classes/class_metaclass.test | 5 + .../test/features/classes/class_super.py | 5 + .../test/features/classes/class_super.test | 5 + .../classes/class_with_comprehension.py | 18 + .../classes/class_with_comprehension.test | 5 + .../test/features/classes/class_with_init.py | 17 + .../features/classes/class_with_init.test | 5 + .../test/features/classes/class_with_str.py | 5 + .../test/features/classes/class_with_str.test | 5 + .../test/features/classes/empty_class.py | 4 + .../test/features/classes/empty_class.test | 5 + .../features/classes/inherit_attribute.py | 16 + .../features/classes/inherit_attribute.test | 5 + .../test/features/classes/inherit_method.py | 16 + .../test/features/classes/inherit_method.test | 5 + .../test/features/classes/tricky_mro_1.py | 13 + .../test/features/classes/tricky_mro_2.py | 13 + .../test/features/classes/tricky_mro_3.py | 16 + .../features/closures/closure_return_func.py | 6 + .../closures/closure_return_func.test | 5 + .../closures/closure_update_free_var.py | 11 + .../closures/closure_update_free_var.test | 5 + .../comprehensions/dict_comprehension.py | 1 + .../comprehensions/dict_comprehension.test | 5 + .../comprehensions/empty_comprehension.py | 13 + .../comprehensions/empty_comprehension.test | 5 + .../comprehensions/gen_comprehension.py | 6 + .../comprehensions/gen_comprehension.test | 5 + .../comprehensions/guarded_comprehension.py | 33 + .../comprehensions/guarded_comprehension.test | 5 + .../comprehensions/list_comprehension.py | 1 + .../comprehensions/list_comprehension.test | 5 + .../comprehensions/nested_comprehension.py | 17 + .../comprehensions/nested_comprehension.test | 5 + .../comprehensions/set_comprehension.py | 1 + .../comprehensions/set_comprehension.test | 5 + .../comprehensions/singleton_comprehension.py | 9 + .../singleton_comprehension.test | 5 + .../test/features/continue/for_continue.py | 6 + .../test/features/continue/for_continue.test | 5 + .../test/features/continue/while_continue.py | 8 + .../features/continue/while_continue.test | 5 + .../decorator_function.cpython-33.pyc | Bin 0 -> 876 bytes .../features/decorators/decorator_class.py | 10 + .../features/decorators/decorator_class.test | 5 + .../decorators/decorator_dotted_name.py | 12 + .../decorators/decorator_dotted_name.test | 5 + .../features/decorators/decorator_function.py | 9 + .../decorators/decorator_function.test | 5 + .../decorators/decorator_with_argument.py | 12 + .../decorators/decorator_with_argument.test | 5 + .../features/decorators/multi_decorator.py | 14 + .../features/decorators/multi_decorator.test | 5 + language-python-test/test/features/del/del.py | 37 + .../test/features/del/del.test | 5 + .../features/dictionaries/dict_index_found.py | 1 + .../dictionaries/dict_index_found.test | 5 + .../features/dictionaries/dict_literal.py | 1 + .../features/dictionaries/dict_literal.test | 5 + .../dictionaries/dict_setitem_existing.py | 2 + .../dictionaries/dict_setitem_existing.test | 5 + .../features/dictionaries/dict_setitem_new.py | 3 + .../dictionaries/dict_setitem_new.test | 5 + .../test/features/dictionaries/empty_dict.py | 1 + .../features/dictionaries/empty_dict.test | 5 + .../features/dictionaries/singleton_dict.py | 1 + .../features/dictionaries/singleton_dict.test | 5 + .../features/docstrings/class_docstring.py | 4 + .../features/docstrings/class_docstring.test | 5 + .../features/docstrings/class_no_docstring.py | 4 + .../docstrings/class_no_docstring.test | 5 + .../features/docstrings/module_docstring.py | 2 + .../features/docstrings/module_docstring.test | 5 + .../docstrings/module_no_docstring.py | 1 + .../docstrings/module_no_docstring.test | 5 + .../docstrings/procedure_docstring.py | 4 + .../docstrings/procedure_docstring.test | 5 + .../docstrings/procedure_no_docstring.py | 3 + .../docstrings/procedure_no_docstring.test | 5 + .../test/features/ellipsis/ellipsis2.py | 1 + .../test/features/ellipsis/ellipsis2.test | 5 + .../test/features/ellipsis/ellipsis3.py | 3 + .../test/features/ellipsis/ellipsis3.test | 5 + .../end_of_input_compound_stmt.py | 2 + .../end_of_input_compound_stmt.test | 5 + .../end_of_input/end_of_input_simple_stmt.py | 1 + .../end_of_input_simple_stmt.test | 5 + .../test/features/exceptions/try_else.py | 13 + .../test/features/exceptions/try_else.test | 5 + .../exceptions/try_except_div_by_zero.py | 4 + .../exceptions/try_except_div_by_zero.test | 5 + .../exceptions/try_except_no_exception.py | 4 + .../exceptions/try_except_no_exception.test | 5 + .../test/features/exceptions/try_finally.py | 4 + .../test/features/exceptions/try_finally.test | 5 + .../test/features/floats/floats.py | 6 + .../test/features/floats/floats.test | 5 + .../test/features/forloops/for_list.py | 2 + .../test/features/forloops/for_list.test | 5 + .../test/features/functions/higher_order.py | 6 + .../test/features/functions/higher_order.test | 5 + .../features/functions/nested_function.py | 6 + .../features/functions/nested_function.test | 5 + .../features/functions/trivial_function.py | 5 + .../features/functions/trivial_function.test | 5 + .../features/global_variable/globalVar.py | 14 + .../features/global_variable/globalVar.test | 5 + .../test/features/identity/id.py | 34 + .../test/features/identity/id.test | 5 + .../test/features/ifthenelse/if_elif.py | 12 + .../test/features/ifthenelse/if_elif.test | 5 + .../test/features/ifthenelse/if_elif_else.py | 11 + .../features/ifthenelse/if_elif_else.test | 5 + .../test/features/ifthenelse/if_else.py | 9 + .../test/features/ifthenelse/if_else.test | 5 + .../test/features/ifthenelse/if_false.py | 2 + .../test/features/ifthenelse/if_false.test | 5 + .../test/features/ifthenelse/if_true.py | 2 + .../test/features/ifthenelse/if_true.test | 5 + .../__pycache__/definesX.cpython-33.pyc | Bin 0 -> 184 bytes .../importsDefinesX.cpython-33.pyc | Bin 0 -> 204 bytes .../test/features/imports/definesX.py | 1 + .../test/features/imports/fromImport.py | 3 + .../test/features/imports/fromImport.test | 5 + .../test/features/imports/fromImportStar.py | 3 + .../test/features/imports/fromImportStar.test | 5 + .../test/features/imports/import.py | 3 + .../test/features/imports/import.test | 5 + .../test/features/imports/importTransitive.py | 3 + .../features/imports/importTransitive.test | 5 + .../test/features/imports/importsDefinesX.py | 1 + .../test/features/input/input_no_args.py | 1 + .../test/features/input/input_no_args.test | 5 + .../test/features/input/input_one_arg.py | 2 + .../test/features/input/input_one_arg.test | 5 + .../test/features/integers/ints.py | 6 + .../test/features/integers/ints.test | 5 + .../test/features/integers/long.py | 4 + .../test/features/integers/long.test | 5 + .../test/features/integers/unary_minus.py | 5 + .../test/features/integers/unary_minus.test | 5 + .../test/features/iterators/yield.py | 7 + .../test/features/iterators/yield.test | 5 + .../keyword_argument_name_order.py | 10 + .../keyword_argument_name_order.test | 5 + .../keyword_arguments/keyword_arguments.py | 12 + .../keyword_arguments/keyword_arguments.test | 5 + .../test/features/lambda/lambda_arity0.py | 2 + .../test/features/lambda/lambda_arity0.test | 5 + .../test/features/lambda/lambda_arity1.py | 2 + .../test/features/lambda/lambda_arity1.test | 5 + .../test/features/lambda/lambda_arity2.py | 2 + .../test/features/lambda/lambda_arity2.test | 5 + .../features/lambda/lambda_default_arg.py | 9 + .../features/lambda/lambda_default_arg.test | 5 + .../test/features/lambda/lambda_nested.py | 2 + .../test/features/lambda/lambda_nested.test | 5 + .../test/features/lambda/lambda_printed.py | 1 + .../test/features/lambda/lambda_printed.test | 5 + .../test/features/line_numbers/back_trace.py | 14 + .../features/line_numbers/back_trace.test | 5 + .../test/features/lists/empty_list.py | 1 + .../test/features/lists/empty_list.test | 5 + .../test/features/lists/list_append.py | 1 + .../test/features/lists/list_append.test | 5 + .../test/features/lists/list_multiply.py | 9 + .../test/features/lists/list_multiply.test | 5 + .../test/features/lists/list_of_list.py | 1 + .../test/features/lists/list_of_list.test | 5 + .../test/features/lists/list_setitem.py | 6 + .../test/features/lists/list_setitem.test | 5 + .../test/features/lists/singleton_list.py | 1 + .../test/features/lists/singleton_list.test | 5 + .../test/features/none/none.py | 1 + .../test/features/none/none.test | 5 + .../test/features/operators/chaining.py | 14 + .../test/features/operators/chaining.test | 5 + .../test/features/operators/in.py | 4 + .../test/features/operators/in.test | 5 + .../test/features/operators/is.py | 3 + .../test/features/operators/is.test | 5 + .../test/features/operators/isnot.py | 3 + .../test/features/operators/isnot.test | 5 + .../test/features/operators/notin.py | 4 + .../test/features/operators/notin.test | 5 + .../test/features/pass/function_pass.py | 1 + .../test/features/pass/function_pass.test | 5 + .../test/features/pass/pass.py | 1 + .../test/features/pass/pass.test | 5 + .../test/features/raise/raise.py | 7 + .../test/features/raise/raise.test | 5 + .../test/features/sets/empty_set.py | 1 + .../test/features/sets/empty_set.test | 5 + .../test/features/sets/set_literal.py | 2 + .../test/features/sets/set_literal.test | 5 + .../test/features/slices/slices_list.py | 25 + .../test/features/slices/slices_list.test | 5 + .../test/features/strings/empty_string.py | 3 + .../test/features/strings/empty_string.test | 5 + .../test/features/strings/format_string.py | 36 + .../test/features/strings/format_string.test | 5 + .../test/features/strings/newline.py | 4 + .../test/features/strings/newline.test | 5 + .../features/strings/raw_bytestring_v2.py | 4 + .../features/strings/raw_bytestring_v2.test | 5 + .../features/strings/raw_bytestring_v3.py | 8 + .../features/strings/raw_bytestring_v3.test | 5 + .../test/features/strings/raw_string.py | 3 + .../test/features/strings/raw_string.test | 5 + .../test/features/strings/singleton_string.py | 1 + .../features/strings/singleton_string.test | 5 + .../test/features/strings/string_append.py | 1 + .../test/features/strings/string_append.test | 5 + .../test/features/strings/string_juxtapose.py | 1 + .../features/strings/string_juxtapose.test | 5 + .../features/strings/triple_quoted_string.py | 5 + .../strings/triple_quoted_string.test | 5 + .../test/features/subscript/subscript_list.py | 3 + .../features/subscript/subscript_list.test | 5 + .../test/features/tail_call/count_rec.py | 7 + .../test/features/tail_call/count_rec.test | 5 + .../test/features/tail_call/enclosing_try.py | 13 + .../features/tail_call/enclosing_try.test | 5 + .../test/features/tail_call/fac.py | 7 + .../test/features/tail_call/fac.test | 5 + .../test/features/tail_call/mutual_rec.py | 20 + .../test/features/tail_call/mutual_rec.test | 5 + .../features/tail_call/simple_tail_call.py | 7 + .../features/tail_call/simple_tail_call.test | 5 + .../tail_call/tail_call_class_constructor.py | 15 + .../tail_call_class_constructor.test | 5 + .../features/tail_call/tail_call_method.py | 8 + .../features/tail_call/tail_call_method.test | 5 + .../test/features/tuples/empty_tuple.py | 1 + .../test/features/tuples/empty_tuple.test | 5 + .../test/features/tuples/singleton_tuple.py | 1 + .../test/features/tuples/singleton_tuple.test | 5 + .../unicode/unicode_string_literal.py | 2 + .../unicode/unicode_string_literal.test | 5 + .../unicode/unicode_string_literal_v2.py | 1 + .../unicode/unicode_string_literal_v2.test | 5 + .../test/features/unpacking/unpacking.py | 3 + .../test/features/unpacking/unpacking.test | 5 + .../test/features/varargs/varargs.py | 50 + .../test/features/varargs/varargs.test | 5 + .../test/features/with/with.py | 15 + .../test/features/with/with.test | 5 + .../test/features/with/with_nested.py | 10 + .../test/features/with/with_nested.test | 5 + .../test/features/yield/yield.py | 18 + .../test/features/yield/yield.test | 5 + .../test/features/yield/yield_from.py | 12 + .../test/features/yield/yield_from.test | 5 + language-python-test/test/make_utf8.sh | 11 + .../test/programs/imaginary/ackermann.py | 13 + .../test/programs/imaginary/ackermann.test | 5 + .../programs/imaginary/bottles_of_beer.py | 15 + .../programs/imaginary/bottles_of_beer.test | 5 + .../test/programs/imaginary/empty.py | 1 + .../test/programs/imaginary/empty.test | 5 + .../test/programs/imaginary/evenodd.py | 11 + .../test/programs/imaginary/evenodd.test | 5 + .../test/programs/imaginary/fac.py | 10 + .../test/programs/imaginary/fac.test | 5 + .../test/programs/imaginary/fib.py | 8 + .../test/programs/imaginary/fib.test | 5 + .../test/programs/imaginary/fib_memo.py | 15 + .../test/programs/imaginary/fib_memo.test | 5 + .../test/programs/imaginary/monte_carlo_pi.py | 26 + .../programs/imaginary/monte_carlo_pi.test | 5 + .../test/programs/imaginary/perms.py | 20 + .../test/programs/imaginary/perms.test | 5 + .../test/programs/imaginary/powerset.py | 34 + .../test/programs/imaginary/powerset.test | 5 + .../test/programs/imaginary/range.py | 54 + .../programs/spectral/raytrace/onesphere.scn | 5 + .../test/programs/spectral/raytrace/ray.py | 640 ++ .../test/programs/spectral/raytrace/ray.test | 5 + 1071 files changed, 167995 insertions(+) create mode 100644 language-python-test/.gitignore create mode 100644 language-python-test/LICENSE create mode 100644 language-python-test/Makefile create mode 100644 language-python-test/README.md create mode 100755 language-python-test/Setup.lhs create mode 100644 language-python-test/docs/notes.txt create mode 100644 language-python-test/language-python-test.cabal create mode 100644 language-python-test/src/ParsePretty.hs create mode 100644 language-python-test/src/RoundTrip.hs create mode 100644 language-python-test/src/Tokens.hs create mode 100644 language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/Bastion.py create mode 100644 language-python-test/test/CPython_test_suite_v2/Bastion.test create mode 100644 language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ConfigParser.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ConfigParser.test create mode 100644 language-python-test/test/CPython_test_suite_v2/Cookie.py create mode 100644 language-python-test/test/CPython_test_suite_v2/Cookie.test create mode 100644 language-python-test/test/CPython_test_suite_v2/DocXMLRPCServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/DocXMLRPCServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/HTMLParser.py create mode 100644 language-python-test/test/CPython_test_suite_v2/HTMLParser.test create mode 100644 language-python-test/test/CPython_test_suite_v2/LICENSE create mode 100644 language-python-test/test/CPython_test_suite_v2/MimeWriter.py create mode 100644 language-python-test/test/CPython_test_suite_v2/MimeWriter.test create mode 100644 language-python-test/test/CPython_test_suite_v2/Queue.py create mode 100644 language-python-test/test/CPython_test_suite_v2/Queue.test create mode 100644 language-python-test/test/CPython_test_suite_v2/README.txt create mode 100644 language-python-test/test/CPython_test_suite_v2/SimpleHTTPServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/SimpleHTTPServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/SimpleXMLRPCServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/SimpleXMLRPCServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/SocketServer.py create mode 100644 language-python-test/test/CPython_test_suite_v2/SocketServer.test create mode 100644 language-python-test/test/CPython_test_suite_v2/StringIO.py create mode 100644 language-python-test/test/CPython_test_suite_v2/StringIO.test create mode 100644 language-python-test/test/CPython_test_suite_v2/UserDict.py create mode 100644 language-python-test/test/CPython_test_suite_v2/UserDict.test create mode 100644 language-python-test/test/CPython_test_suite_v2/UserList.py create mode 100644 language-python-test/test/CPython_test_suite_v2/UserList.test create mode 100755 language-python-test/test/CPython_test_suite_v2/UserString.py create mode 100644 language-python-test/test/CPython_test_suite_v2/UserString.test create mode 100644 language-python-test/test/CPython_test_suite_v2/_LWPCookieJar.py create mode 100644 language-python-test/test/CPython_test_suite_v2/_LWPCookieJar.test create mode 100644 language-python-test/test/CPython_test_suite_v2/_MozillaCookieJar.py create mode 100644 language-python-test/test/CPython_test_suite_v2/_MozillaCookieJar.test create mode 100644 language-python-test/test/CPython_test_suite_v2/__future__.py create mode 100644 language-python-test/test/CPython_test_suite_v2/__future__.test create mode 100644 language-python-test/test/CPython_test_suite_v2/__phello__.foo.py create mode 100644 language-python-test/test/CPython_test_suite_v2/__phello__.foo.test create mode 100644 language-python-test/test/CPython_test_suite_v2/_abcoll.py create mode 100644 language-python-test/test/CPython_test_suite_v2/_abcoll.test create mode 100644 language-python-test/test/CPython_test_suite_v2/_strptime.py create mode 100644 language-python-test/test/CPython_test_suite_v2/_strptime.test create mode 100644 language-python-test/test/CPython_test_suite_v2/_threading_local.py create mode 100644 language-python-test/test/CPython_test_suite_v2/_threading_local.test create mode 100644 language-python-test/test/CPython_test_suite_v2/abc.py create mode 100644 language-python-test/test/CPython_test_suite_v2/abc.test create mode 100644 language-python-test/test/CPython_test_suite_v2/aifc.py create mode 100644 language-python-test/test/CPython_test_suite_v2/aifc.test create mode 100644 language-python-test/test/CPython_test_suite_v2/antigravity.py create mode 100644 language-python-test/test/CPython_test_suite_v2/antigravity.test create mode 100644 language-python-test/test/CPython_test_suite_v2/anydbm.py create mode 100644 language-python-test/test/CPython_test_suite_v2/anydbm.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ast.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ast.test create mode 100644 language-python-test/test/CPython_test_suite_v2/asynchat.py create mode 100644 language-python-test/test/CPython_test_suite_v2/asynchat.test create mode 100644 language-python-test/test/CPython_test_suite_v2/asyncore.py create mode 100644 language-python-test/test/CPython_test_suite_v2/asyncore.test create mode 100644 language-python-test/test/CPython_test_suite_v2/atexit.py create mode 100644 language-python-test/test/CPython_test_suite_v2/atexit.test create mode 100644 language-python-test/test/CPython_test_suite_v2/audiodev.py create mode 100644 language-python-test/test/CPython_test_suite_v2/audiodev.test create mode 100755 language-python-test/test/CPython_test_suite_v2/base64.py create mode 100644 language-python-test/test/CPython_test_suite_v2/base64.test create mode 100644 language-python-test/test/CPython_test_suite_v2/bdb.py create mode 100644 language-python-test/test/CPython_test_suite_v2/bdb.test create mode 100644 language-python-test/test/CPython_test_suite_v2/binhex.py create mode 100644 language-python-test/test/CPython_test_suite_v2/binhex.test create mode 100644 language-python-test/test/CPython_test_suite_v2/bisect.py create mode 100644 language-python-test/test/CPython_test_suite_v2/bisect.test create mode 100755 language-python-test/test/CPython_test_suite_v2/cProfile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/cProfile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/calendar.py create mode 100644 language-python-test/test/CPython_test_suite_v2/calendar.test create mode 100755 language-python-test/test/CPython_test_suite_v2/cgi.py create mode 100644 language-python-test/test/CPython_test_suite_v2/cgi.test create mode 100644 language-python-test/test/CPython_test_suite_v2/cgitb.py create mode 100644 language-python-test/test/CPython_test_suite_v2/cgitb.test create mode 100644 language-python-test/test/CPython_test_suite_v2/chunk.py create mode 100644 language-python-test/test/CPython_test_suite_v2/chunk.test create mode 100644 language-python-test/test/CPython_test_suite_v2/cmd.py create mode 100644 language-python-test/test/CPython_test_suite_v2/cmd.test create mode 100644 language-python-test/test/CPython_test_suite_v2/code.py create mode 100644 language-python-test/test/CPython_test_suite_v2/code.test create mode 100644 language-python-test/test/CPython_test_suite_v2/codecs.py create mode 100644 language-python-test/test/CPython_test_suite_v2/codecs.test create mode 100644 language-python-test/test/CPython_test_suite_v2/codeop.py create mode 100644 language-python-test/test/CPython_test_suite_v2/codeop.test create mode 100644 language-python-test/test/CPython_test_suite_v2/collections.py create mode 100644 language-python-test/test/CPython_test_suite_v2/collections.test create mode 100644 language-python-test/test/CPython_test_suite_v2/colorsys.py create mode 100644 language-python-test/test/CPython_test_suite_v2/colorsys.test create mode 100644 language-python-test/test/CPython_test_suite_v2/commands.py create mode 100644 language-python-test/test/CPython_test_suite_v2/commands.test create mode 100644 language-python-test/test/CPython_test_suite_v2/compileall.py create mode 100644 language-python-test/test/CPython_test_suite_v2/compileall.test create mode 100644 language-python-test/test/CPython_test_suite_v2/contextlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/contextlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/cookielib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/cookielib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/copy.py create mode 100644 language-python-test/test/CPython_test_suite_v2/copy.test create mode 100644 language-python-test/test/CPython_test_suite_v2/copy_reg.py create mode 100644 language-python-test/test/CPython_test_suite_v2/copy_reg.test create mode 100644 language-python-test/test/CPython_test_suite_v2/csv.py create mode 100644 language-python-test/test/CPython_test_suite_v2/csv.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dbhash.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dbhash.test create mode 100644 language-python-test/test/CPython_test_suite_v2/decimal.py create mode 100644 language-python-test/test/CPython_test_suite_v2/decimal.test create mode 100644 language-python-test/test/CPython_test_suite_v2/difflib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/difflib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dircache.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dircache.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dis.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dis.test create mode 100644 language-python-test/test/CPython_test_suite_v2/doctest.py create mode 100644 language-python-test/test/CPython_test_suite_v2/doctest.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dumbdbm.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dumbdbm.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dummy_thread.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dummy_thread.test create mode 100644 language-python-test/test/CPython_test_suite_v2/dummy_threading.py create mode 100644 language-python-test/test/CPython_test_suite_v2/dummy_threading.test create mode 100644 language-python-test/test/CPython_test_suite_v2/filecmp.py create mode 100644 language-python-test/test/CPython_test_suite_v2/filecmp.test create mode 100644 language-python-test/test/CPython_test_suite_v2/fileinput.py create mode 100644 language-python-test/test/CPython_test_suite_v2/fileinput.test create mode 100644 language-python-test/test/CPython_test_suite_v2/fnmatch.py create mode 100644 language-python-test/test/CPython_test_suite_v2/fnmatch.test create mode 100644 language-python-test/test/CPython_test_suite_v2/formatter.py create mode 100644 language-python-test/test/CPython_test_suite_v2/formatter.test create mode 100644 language-python-test/test/CPython_test_suite_v2/fpformat.py create mode 100644 language-python-test/test/CPython_test_suite_v2/fpformat.test create mode 100755 language-python-test/test/CPython_test_suite_v2/fractions.py create mode 100644 language-python-test/test/CPython_test_suite_v2/fractions.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ftplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ftplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/functools.py create mode 100644 language-python-test/test/CPython_test_suite_v2/functools.test create mode 100644 language-python-test/test/CPython_test_suite_v2/genericpath.py create mode 100644 language-python-test/test/CPython_test_suite_v2/genericpath.test create mode 100644 language-python-test/test/CPython_test_suite_v2/getopt.py create mode 100644 language-python-test/test/CPython_test_suite_v2/getopt.py.iso-8859-1 create mode 100644 language-python-test/test/CPython_test_suite_v2/getopt.py.utf8 create mode 100644 language-python-test/test/CPython_test_suite_v2/getopt.test create mode 100644 language-python-test/test/CPython_test_suite_v2/getpass.py create mode 100644 language-python-test/test/CPython_test_suite_v2/getpass.test create mode 100644 language-python-test/test/CPython_test_suite_v2/gettext.py create mode 100644 language-python-test/test/CPython_test_suite_v2/gettext.test create mode 100644 language-python-test/test/CPython_test_suite_v2/glob.py create mode 100644 language-python-test/test/CPython_test_suite_v2/glob.test create mode 100644 language-python-test/test/CPython_test_suite_v2/gzip.py create mode 100644 language-python-test/test/CPython_test_suite_v2/gzip.test create mode 100644 language-python-test/test/CPython_test_suite_v2/hashlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/hashlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/heapq.py create mode 100644 language-python-test/test/CPython_test_suite_v2/heapq.py.iso-8859-1 create mode 100644 language-python-test/test/CPython_test_suite_v2/heapq.py.utf8 create mode 100644 language-python-test/test/CPython_test_suite_v2/heapq.test create mode 100644 language-python-test/test/CPython_test_suite_v2/hmac.py create mode 100644 language-python-test/test/CPython_test_suite_v2/hmac.test create mode 100644 language-python-test/test/CPython_test_suite_v2/htmlentitydefs.py create mode 100644 language-python-test/test/CPython_test_suite_v2/htmlentitydefs.test create mode 100644 language-python-test/test/CPython_test_suite_v2/htmllib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/htmllib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/httplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/httplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ihooks.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ihooks.test create mode 100644 language-python-test/test/CPython_test_suite_v2/imaplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/imaplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/imghdr.py create mode 100644 language-python-test/test/CPython_test_suite_v2/imghdr.test create mode 100644 language-python-test/test/CPython_test_suite_v2/imputil.py create mode 100644 language-python-test/test/CPython_test_suite_v2/imputil.test create mode 100644 language-python-test/test/CPython_test_suite_v2/inspect.py create mode 100644 language-python-test/test/CPython_test_suite_v2/inspect.test create mode 100644 language-python-test/test/CPython_test_suite_v2/io.py create mode 100644 language-python-test/test/CPython_test_suite_v2/io.test create mode 100755 language-python-test/test/CPython_test_suite_v2/keyword.py create mode 100644 language-python-test/test/CPython_test_suite_v2/keyword.test create mode 100644 language-python-test/test/CPython_test_suite_v2/linecache.py create mode 100644 language-python-test/test/CPython_test_suite_v2/linecache.test create mode 100644 language-python-test/test/CPython_test_suite_v2/locale.py create mode 100644 language-python-test/test/CPython_test_suite_v2/locale.test create mode 100644 language-python-test/test/CPython_test_suite_v2/macpath.py create mode 100644 language-python-test/test/CPython_test_suite_v2/macpath.test create mode 100644 language-python-test/test/CPython_test_suite_v2/macurl2path.py create mode 100644 language-python-test/test/CPython_test_suite_v2/macurl2path.test create mode 100755 language-python-test/test/CPython_test_suite_v2/mailbox.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mailbox.test create mode 100644 language-python-test/test/CPython_test_suite_v2/mailcap.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mailcap.test create mode 100755 language-python-test/test/CPython_test_suite_v2/make_test.sh create mode 100644 language-python-test/test/CPython_test_suite_v2/markupbase.py create mode 100644 language-python-test/test/CPython_test_suite_v2/markupbase.test create mode 100644 language-python-test/test/CPython_test_suite_v2/md5.py create mode 100644 language-python-test/test/CPython_test_suite_v2/md5.test create mode 100644 language-python-test/test/CPython_test_suite_v2/mhlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mhlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/mimetools.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mimetools.test create mode 100644 language-python-test/test/CPython_test_suite_v2/mimetypes.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mimetypes.test create mode 100755 language-python-test/test/CPython_test_suite_v2/mimify.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mimify.test create mode 100644 language-python-test/test/CPython_test_suite_v2/modulefinder.py create mode 100644 language-python-test/test/CPython_test_suite_v2/modulefinder.test create mode 100644 language-python-test/test/CPython_test_suite_v2/multifile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/multifile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/mutex.py create mode 100644 language-python-test/test/CPython_test_suite_v2/mutex.test create mode 100644 language-python-test/test/CPython_test_suite_v2/netrc.py create mode 100644 language-python-test/test/CPython_test_suite_v2/netrc.test create mode 100644 language-python-test/test/CPython_test_suite_v2/new.py create mode 100644 language-python-test/test/CPython_test_suite_v2/new.test create mode 100644 language-python-test/test/CPython_test_suite_v2/nntplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/nntplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ntpath.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ntpath.test create mode 100644 language-python-test/test/CPython_test_suite_v2/nturl2path.py create mode 100644 language-python-test/test/CPython_test_suite_v2/nturl2path.test create mode 100644 language-python-test/test/CPython_test_suite_v2/numbers.py create mode 100644 language-python-test/test/CPython_test_suite_v2/numbers.test create mode 100644 language-python-test/test/CPython_test_suite_v2/opcode.py create mode 100644 language-python-test/test/CPython_test_suite_v2/opcode.test create mode 100644 language-python-test/test/CPython_test_suite_v2/optparse.py create mode 100644 language-python-test/test/CPython_test_suite_v2/optparse.test create mode 100644 language-python-test/test/CPython_test_suite_v2/os.py create mode 100644 language-python-test/test/CPython_test_suite_v2/os.test create mode 100644 language-python-test/test/CPython_test_suite_v2/os2emxpath.py create mode 100644 language-python-test/test/CPython_test_suite_v2/os2emxpath.test create mode 100755 language-python-test/test/CPython_test_suite_v2/pdb.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pdb.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pickle.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pickle.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pickletools.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pickletools.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pipes.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pipes.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pkgutil.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pkgutil.test create mode 100755 language-python-test/test/CPython_test_suite_v2/platform.py create mode 100644 language-python-test/test/CPython_test_suite_v2/platform.test create mode 100644 language-python-test/test/CPython_test_suite_v2/plistlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/plistlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/popen2.py create mode 100644 language-python-test/test/CPython_test_suite_v2/popen2.test create mode 100644 language-python-test/test/CPython_test_suite_v2/poplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/poplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/posixfile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/posixfile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/posixpath.py create mode 100644 language-python-test/test/CPython_test_suite_v2/posixpath.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pprint.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pprint.test create mode 100755 language-python-test/test/CPython_test_suite_v2/profile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/profile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pstats.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pstats.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pty.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pty.test create mode 100644 language-python-test/test/CPython_test_suite_v2/py_compile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/py_compile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pyclbr.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pyclbr.test create mode 100755 language-python-test/test/CPython_test_suite_v2/pydoc.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pydoc.test create mode 100644 language-python-test/test/CPython_test_suite_v2/pydoc_topics.py create mode 100644 language-python-test/test/CPython_test_suite_v2/pydoc_topics.test create mode 100755 language-python-test/test/CPython_test_suite_v2/quopri.py create mode 100644 language-python-test/test/CPython_test_suite_v2/quopri.test create mode 100644 language-python-test/test/CPython_test_suite_v2/random.py create mode 100644 language-python-test/test/CPython_test_suite_v2/random.test create mode 100644 language-python-test/test/CPython_test_suite_v2/re.py create mode 100644 language-python-test/test/CPython_test_suite_v2/re.test create mode 100644 language-python-test/test/CPython_test_suite_v2/repr.py create mode 100644 language-python-test/test/CPython_test_suite_v2/repr.test create mode 100644 language-python-test/test/CPython_test_suite_v2/rexec.py create mode 100644 language-python-test/test/CPython_test_suite_v2/rexec.test create mode 100644 language-python-test/test/CPython_test_suite_v2/rfc822.py create mode 100644 language-python-test/test/CPython_test_suite_v2/rfc822.test create mode 100644 language-python-test/test/CPython_test_suite_v2/rlcompleter.py create mode 100644 language-python-test/test/CPython_test_suite_v2/rlcompleter.test create mode 100644 language-python-test/test/CPython_test_suite_v2/robotparser.py create mode 100644 language-python-test/test/CPython_test_suite_v2/robotparser.test create mode 100755 language-python-test/test/CPython_test_suite_v2/runpy.py create mode 100644 language-python-test/test/CPython_test_suite_v2/runpy.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sched.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sched.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sets.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sets.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sgmllib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sgmllib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sha.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sha.test create mode 100644 language-python-test/test/CPython_test_suite_v2/shelve.py create mode 100644 language-python-test/test/CPython_test_suite_v2/shelve.test create mode 100644 language-python-test/test/CPython_test_suite_v2/shlex.py create mode 100644 language-python-test/test/CPython_test_suite_v2/shlex.py.iso-8859-1 create mode 100644 language-python-test/test/CPython_test_suite_v2/shlex.py.utf8 create mode 100644 language-python-test/test/CPython_test_suite_v2/shlex.test create mode 100644 language-python-test/test/CPython_test_suite_v2/shutil.py create mode 100644 language-python-test/test/CPython_test_suite_v2/shutil.test create mode 100644 language-python-test/test/CPython_test_suite_v2/site.py create mode 100644 language-python-test/test/CPython_test_suite_v2/site.test create mode 100755 language-python-test/test/CPython_test_suite_v2/smtpd.py create mode 100644 language-python-test/test/CPython_test_suite_v2/smtpd.test create mode 100755 language-python-test/test/CPython_test_suite_v2/smtplib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/smtplib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sndhdr.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sndhdr.test create mode 100644 language-python-test/test/CPython_test_suite_v2/socket.py create mode 100644 language-python-test/test/CPython_test_suite_v2/socket.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sre.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sre.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_compile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_compile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_constants.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_constants.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_parse.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sre_parse.test create mode 100644 language-python-test/test/CPython_test_suite_v2/ssl.py create mode 100644 language-python-test/test/CPython_test_suite_v2/ssl.test create mode 100644 language-python-test/test/CPython_test_suite_v2/stat.py create mode 100644 language-python-test/test/CPython_test_suite_v2/stat.test create mode 100644 language-python-test/test/CPython_test_suite_v2/statvfs.py create mode 100644 language-python-test/test/CPython_test_suite_v2/statvfs.test create mode 100644 language-python-test/test/CPython_test_suite_v2/string.py create mode 100644 language-python-test/test/CPython_test_suite_v2/string.test create mode 100644 language-python-test/test/CPython_test_suite_v2/stringold.py create mode 100644 language-python-test/test/CPython_test_suite_v2/stringold.test create mode 100644 language-python-test/test/CPython_test_suite_v2/stringprep.py create mode 100644 language-python-test/test/CPython_test_suite_v2/stringprep.test create mode 100644 language-python-test/test/CPython_test_suite_v2/struct.py create mode 100644 language-python-test/test/CPython_test_suite_v2/struct.test create mode 100644 language-python-test/test/CPython_test_suite_v2/subprocess.py create mode 100644 language-python-test/test/CPython_test_suite_v2/subprocess.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sunau.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sunau.test create mode 100644 language-python-test/test/CPython_test_suite_v2/sunaudio.py create mode 100644 language-python-test/test/CPython_test_suite_v2/sunaudio.test create mode 100755 language-python-test/test/CPython_test_suite_v2/symbol.py create mode 100644 language-python-test/test/CPython_test_suite_v2/symbol.test create mode 100644 language-python-test/test/CPython_test_suite_v2/symtable.py create mode 100644 language-python-test/test/CPython_test_suite_v2/symtable.test create mode 100755 language-python-test/test/CPython_test_suite_v2/tabnanny.py create mode 100644 language-python-test/test/CPython_test_suite_v2/tabnanny.test create mode 100644 language-python-test/test/CPython_test_suite_v2/tarfile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/tarfile.py.iso-8859-1 create mode 100644 language-python-test/test/CPython_test_suite_v2/tarfile.py.utf8 create mode 100644 language-python-test/test/CPython_test_suite_v2/tarfile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/telnetlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/telnetlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/tempfile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/tempfile.test create mode 100644 language-python-test/test/CPython_test_suite_v2/textwrap.py create mode 100644 language-python-test/test/CPython_test_suite_v2/textwrap.test create mode 100644 language-python-test/test/CPython_test_suite_v2/this.py create mode 100644 language-python-test/test/CPython_test_suite_v2/this.test create mode 100644 language-python-test/test/CPython_test_suite_v2/threading.py create mode 100644 language-python-test/test/CPython_test_suite_v2/threading.test create mode 100644 language-python-test/test/CPython_test_suite_v2/timeit.py create mode 100644 language-python-test/test/CPython_test_suite_v2/timeit.test create mode 100644 language-python-test/test/CPython_test_suite_v2/toaiff.py create mode 100644 language-python-test/test/CPython_test_suite_v2/toaiff.test create mode 100755 language-python-test/test/CPython_test_suite_v2/token.py create mode 100644 language-python-test/test/CPython_test_suite_v2/token.test create mode 100644 language-python-test/test/CPython_test_suite_v2/tokenize.py create mode 100644 language-python-test/test/CPython_test_suite_v2/tokenize.test create mode 100644 language-python-test/test/CPython_test_suite_v2/trace.py create mode 100644 language-python-test/test/CPython_test_suite_v2/trace.test create mode 100644 language-python-test/test/CPython_test_suite_v2/traceback.py create mode 100644 language-python-test/test/CPython_test_suite_v2/traceback.test create mode 100644 language-python-test/test/CPython_test_suite_v2/tty.py create mode 100644 language-python-test/test/CPython_test_suite_v2/tty.test create mode 100644 language-python-test/test/CPython_test_suite_v2/types.py create mode 100644 language-python-test/test/CPython_test_suite_v2/types.test create mode 100644 language-python-test/test/CPython_test_suite_v2/unittest.py create mode 100644 language-python-test/test/CPython_test_suite_v2/unittest.test create mode 100644 language-python-test/test/CPython_test_suite_v2/urllib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/urllib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/urllib2.py create mode 100644 language-python-test/test/CPython_test_suite_v2/urllib2.test create mode 100644 language-python-test/test/CPython_test_suite_v2/urlparse.py create mode 100644 language-python-test/test/CPython_test_suite_v2/urlparse.test create mode 100644 language-python-test/test/CPython_test_suite_v2/user.py create mode 100644 language-python-test/test/CPython_test_suite_v2/user.test create mode 100755 language-python-test/test/CPython_test_suite_v2/uu.py create mode 100644 language-python-test/test/CPython_test_suite_v2/uu.test create mode 100644 language-python-test/test/CPython_test_suite_v2/uuid.py create mode 100644 language-python-test/test/CPython_test_suite_v2/uuid.test create mode 100644 language-python-test/test/CPython_test_suite_v2/warnings.py create mode 100644 language-python-test/test/CPython_test_suite_v2/warnings.test create mode 100644 language-python-test/test/CPython_test_suite_v2/wave.py create mode 100644 language-python-test/test/CPython_test_suite_v2/wave.test create mode 100644 language-python-test/test/CPython_test_suite_v2/weakref.py create mode 100644 language-python-test/test/CPython_test_suite_v2/weakref.test create mode 100644 language-python-test/test/CPython_test_suite_v2/webbrowser.py create mode 100644 language-python-test/test/CPython_test_suite_v2/webbrowser.test create mode 100644 language-python-test/test/CPython_test_suite_v2/whichdb.py create mode 100644 language-python-test/test/CPython_test_suite_v2/whichdb.test create mode 100644 language-python-test/test/CPython_test_suite_v2/xdrlib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/xdrlib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/xmllib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/xmllib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/xmlrpclib.py create mode 100644 language-python-test/test/CPython_test_suite_v2/xmlrpclib.test create mode 100644 language-python-test/test/CPython_test_suite_v2/zipfile.py create mode 100644 language-python-test/test/CPython_test_suite_v2/zipfile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1055_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1055_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1285_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1285_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1751_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_1751_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_2269_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_2269_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_3306_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_3306_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_6326_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_6326_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_643_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_643_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_6679_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_6679_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_7701_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_7701_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_9411_tmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/@test_9411_tmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/LICENSE create mode 100644 language-python-test/test/CPython_test_suite_v3/README.txt create mode 100644 language-python-test/test/CPython_test_suite_v3/ann_module.py create mode 100644 language-python-test/test/CPython_test_suite_v3/ann_module.test create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async1.py create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async1.test create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async2.py create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async2.test create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async5.py create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async5.test create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async6.py create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async6.test create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async7.py create mode 100644 language-python-test/test/CPython_test_suite_v3/badsyntax_async7.test create mode 100755 language-python-test/test/CPython_test_suite_v3/make_test.sh create mode 100644 language-python-test/test/CPython_test_suite_v3/test_augassign.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_augassign.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_coroutines.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_coroutines.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_lzma.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_lzma.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_macpath.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_macpath.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mailcap.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mailcap.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_marshal.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_marshal.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_math.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_math.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_memoryio.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_memoryio.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_memoryview.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_memoryview.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_metaclass.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_metaclass.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mimetypes.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mimetypes.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mmap.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_mmap.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_modulefinder.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_modulefinder.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_multiprocessing.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_multiprocessing.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_namespace_pkgs.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_namespace_pkgs.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_netrc.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_netrc.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_nis.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_nis.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ntpath.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ntpath.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_numeric_tower.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_numeric_tower.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_opcodes.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_opcodes.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_openpty.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_openpty.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_operator.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_operator.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_optparse.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_optparse.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_osx_env.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_osx_env.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_parser.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_parser.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pdb.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pdb.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep247.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep247.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep277.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep277.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep292.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep292.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep352.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pep352.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pickle.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pickle.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pickletools.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pickletools.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pipes.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pipes.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkg.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkg.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkgimport.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkgimport.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkgutil.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pkgutil.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_platform.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_platform.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_plistlib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_plistlib.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_poll.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_poll.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_popen.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_popen.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_poplib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_poplib.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_posix.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_posix.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_posixpath.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_posixpath.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pow.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pow.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pprint.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pprint.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_print.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_print.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_profile.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_profile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_property.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_property.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pstats.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pstats.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pty.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pty.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pulldom.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pulldom.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pwd.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pwd.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_py_compile.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_py_compile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pyclbr.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pyclbr.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pydoc.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_pydoc.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_queue.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_queue.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_quopri.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_quopri.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_raise.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_raise.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_random.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_random.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_readline.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_readline.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_resource.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_resource.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_richcmp.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_richcmp.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_rlcompleter.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_rlcompleter.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_robotparser.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_robotparser.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_runpy.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_runpy.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sched.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sched.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_select.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_select.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_setcomps.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_setcomps.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_shelve.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_shelve.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_shutil.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_shutil.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_site.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_site.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_slice.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_slice.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtpd.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtpd.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtplib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtplib.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtpnet.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_smtpnet.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sndhdr.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sndhdr.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_socketserver.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_socketserver.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sort.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sort.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sqlite.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sqlite.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_stat.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_stat.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_strtod.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_strtod.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_struct.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_struct.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_structmembers.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_structmembers.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_structseq.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_structseq.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_subprocess.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_subprocess.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sunau.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sunau.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sundry.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sundry.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_support.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_support.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_symtable.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_symtable.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_syntax.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_syntax.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sys.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sys.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sys_setprofile.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sys_setprofile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sysconfig.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_sysconfig.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_tcl.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_tcl.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_telnetlib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_telnetlib.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_textwrap.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_textwrap.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_thread.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_thread.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threaded_import.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threaded_import.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threadedtempfile.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threadedtempfile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threading.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threading.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threadsignals.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_threadsignals.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_timeit.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_timeit.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_timeout.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_timeout.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_tk.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_tk.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_trace.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_trace.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ttk_guionly.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ttk_guionly.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ttk_textonly.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_ttk_textonly.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_typechecks.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_typechecks.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unary.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unary.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unicode_file.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unicode_file.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unittest.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unittest.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_univnewlines.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_univnewlines.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unpack.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unpack.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unpack_ex.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_unpack_ex.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib2.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib2.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib2_localnet.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib2_localnet.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib_response.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllib_response.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllibnet.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_urllibnet.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_userdict.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_userdict.test create mode 100755 language-python-test/test/CPython_test_suite_v3/test_userstring.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_userstring.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_uu.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_uu.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_uuid.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_uuid.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_venv.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_venv.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wait3.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wait3.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wait4.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wait4.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wave.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_wave.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_weakset.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_weakset.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xdrlib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xdrlib.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xml_etree_c.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xml_etree_c.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xmlrpc.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xmlrpc.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xmlrpc_net.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_xmlrpc_net.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipfile.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipfile.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipimport.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipimport.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipimport_support.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zipimport_support.test create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zlib.py create mode 100644 language-python-test/test/CPython_test_suite_v3/test_zlib.test create mode 100644 language-python-test/test/features/annassign/annassign.py create mode 100644 language-python-test/test/features/annassign/annassign.test create mode 100644 language-python-test/test/features/arithmetic/mult.py create mode 100644 language-python-test/test/features/arithmetic/mult.test create mode 100644 language-python-test/test/features/arithmetic/mult_float_precision.py create mode 100644 language-python-test/test/features/arithmetic/mult_float_precision.test create mode 100644 language-python-test/test/features/arithmetic/one_div_zero.py create mode 100644 language-python-test/test/features/arithmetic/plus.py create mode 100644 language-python-test/test/features/arithmetic/plus.test create mode 100644 language-python-test/test/features/arithmetic/type_conversion.py create mode 100644 language-python-test/test/features/arithmetic/type_conversion.test create mode 100644 language-python-test/test/features/assignment/assign_list_subscript_scope.py create mode 100644 language-python-test/test/features/assignment/assign_list_subscript_scope.test create mode 100644 language-python-test/test/features/assignment/assign_multi.py create mode 100644 language-python-test/test/features/assignment/assign_multi.test create mode 100644 language-python-test/test/features/assignment/assign_slice.py create mode 100644 language-python-test/test/features/assignment/assign_slice.test create mode 100644 language-python-test/test/features/assignment/assign_subscript.py create mode 100644 language-python-test/test/features/assignment/assign_subscript.test create mode 100644 language-python-test/test/features/assignment/assign_unpack.py create mode 100644 language-python-test/test/features/assignment/assign_unpack.test create mode 100644 language-python-test/test/features/assignment/assign_unpack_iterator.py create mode 100644 language-python-test/test/features/assignment/assign_unpack_iterator.test create mode 100644 language-python-test/test/features/assignment/assign_var.py create mode 100644 language-python-test/test/features/assignment/assign_var.test create mode 100644 language-python-test/test/features/async/async_for.py create mode 100644 language-python-test/test/features/async/async_for.test create mode 100644 language-python-test/test/features/async/async_funcdef.py create mode 100644 language-python-test/test/features/async/async_funcdef.test create mode 100644 language-python-test/test/features/async/async_with.py create mode 100644 language-python-test/test/features/async/async_with.test create mode 100644 language-python-test/test/features/augassign/augassign.py create mode 100644 language-python-test/test/features/augassign/augassign.test create mode 100644 language-python-test/test/features/booleans/and.py create mode 100644 language-python-test/test/features/booleans/and.test create mode 100644 language-python-test/test/features/booleans/bool_class.py create mode 100644 language-python-test/test/features/booleans/bool_class.test create mode 100644 language-python-test/test/features/booleans/not.py create mode 100644 language-python-test/test/features/booleans/not.test create mode 100644 language-python-test/test/features/booleans/or.py create mode 100644 language-python-test/test/features/booleans/or.test create mode 100644 language-python-test/test/features/break/while_break.py create mode 100644 language-python-test/test/features/break/while_break.test create mode 100644 language-python-test/test/features/bytestrings/bytestring_append.py create mode 100644 language-python-test/test/features/bytestrings/bytestring_append.test create mode 100644 language-python-test/test/features/bytestrings/bytestring_juxtapose.py create mode 100644 language-python-test/test/features/bytestrings/bytestring_juxtapose.test create mode 100644 language-python-test/test/features/bytestrings/empty_bytestring.py create mode 100644 language-python-test/test/features/bytestrings/empty_bytestring.test create mode 100644 language-python-test/test/features/bytestrings/hex_bytes_escaped_bytestring.py create mode 100644 language-python-test/test/features/bytestrings/hex_bytes_escaped_bytestring.test create mode 100644 language-python-test/test/features/bytestrings/raw_bytestring_v2.py create mode 100644 language-python-test/test/features/bytestrings/raw_bytestring_v2.test create mode 100644 language-python-test/test/features/bytestrings/raw_bytestring_v3.py create mode 100644 language-python-test/test/features/bytestrings/raw_bytestring_v3.test create mode 100644 language-python-test/test/features/bytestrings/singleton_bytestring.py create mode 100644 language-python-test/test/features/bytestrings/singleton_bytestring.test create mode 100644 language-python-test/test/features/bytestrings/triple_quoted_bytestring.py create mode 100644 language-python-test/test/features/bytestrings/triple_quoted_bytestring.test create mode 100644 language-python-test/test/features/classes/bad_mro.py create mode 100644 language-python-test/test/features/classes/class_freevar_sameas_localvar.py create mode 100644 language-python-test/test/features/classes/class_freevar_sameas_localvar.test create mode 100644 language-python-test/test/features/classes/class_metaclass.py create mode 100644 language-python-test/test/features/classes/class_metaclass.test create mode 100644 language-python-test/test/features/classes/class_super.py create mode 100644 language-python-test/test/features/classes/class_super.test create mode 100644 language-python-test/test/features/classes/class_with_comprehension.py create mode 100644 language-python-test/test/features/classes/class_with_comprehension.test create mode 100644 language-python-test/test/features/classes/class_with_init.py create mode 100644 language-python-test/test/features/classes/class_with_init.test create mode 100644 language-python-test/test/features/classes/class_with_str.py create mode 100644 language-python-test/test/features/classes/class_with_str.test create mode 100644 language-python-test/test/features/classes/empty_class.py create mode 100644 language-python-test/test/features/classes/empty_class.test create mode 100644 language-python-test/test/features/classes/inherit_attribute.py create mode 100644 language-python-test/test/features/classes/inherit_attribute.test create mode 100644 language-python-test/test/features/classes/inherit_method.py create mode 100644 language-python-test/test/features/classes/inherit_method.test create mode 100644 language-python-test/test/features/classes/tricky_mro_1.py create mode 100644 language-python-test/test/features/classes/tricky_mro_2.py create mode 100644 language-python-test/test/features/classes/tricky_mro_3.py create mode 100644 language-python-test/test/features/closures/closure_return_func.py create mode 100644 language-python-test/test/features/closures/closure_return_func.test create mode 100644 language-python-test/test/features/closures/closure_update_free_var.py create mode 100644 language-python-test/test/features/closures/closure_update_free_var.test create mode 100644 language-python-test/test/features/comprehensions/dict_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/dict_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/empty_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/empty_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/gen_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/gen_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/guarded_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/guarded_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/list_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/list_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/nested_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/nested_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/set_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/set_comprehension.test create mode 100644 language-python-test/test/features/comprehensions/singleton_comprehension.py create mode 100644 language-python-test/test/features/comprehensions/singleton_comprehension.test create mode 100644 language-python-test/test/features/continue/for_continue.py create mode 100644 language-python-test/test/features/continue/for_continue.test create mode 100644 language-python-test/test/features/continue/while_continue.py create mode 100644 language-python-test/test/features/continue/while_continue.test create mode 100644 language-python-test/test/features/decorators/__pycache__/decorator_function.cpython-33.pyc create mode 100644 language-python-test/test/features/decorators/decorator_class.py create mode 100644 language-python-test/test/features/decorators/decorator_class.test create mode 100644 language-python-test/test/features/decorators/decorator_dotted_name.py create mode 100644 language-python-test/test/features/decorators/decorator_dotted_name.test create mode 100644 language-python-test/test/features/decorators/decorator_function.py create mode 100644 language-python-test/test/features/decorators/decorator_function.test create mode 100644 language-python-test/test/features/decorators/decorator_with_argument.py create mode 100644 language-python-test/test/features/decorators/decorator_with_argument.test create mode 100644 language-python-test/test/features/decorators/multi_decorator.py create mode 100644 language-python-test/test/features/decorators/multi_decorator.test create mode 100644 language-python-test/test/features/del/del.py create mode 100644 language-python-test/test/features/del/del.test create mode 100644 language-python-test/test/features/dictionaries/dict_index_found.py create mode 100644 language-python-test/test/features/dictionaries/dict_index_found.test create mode 100644 language-python-test/test/features/dictionaries/dict_literal.py create mode 100644 language-python-test/test/features/dictionaries/dict_literal.test create mode 100644 language-python-test/test/features/dictionaries/dict_setitem_existing.py create mode 100644 language-python-test/test/features/dictionaries/dict_setitem_existing.test create mode 100644 language-python-test/test/features/dictionaries/dict_setitem_new.py create mode 100644 language-python-test/test/features/dictionaries/dict_setitem_new.test create mode 100644 language-python-test/test/features/dictionaries/empty_dict.py create mode 100644 language-python-test/test/features/dictionaries/empty_dict.test create mode 100644 language-python-test/test/features/dictionaries/singleton_dict.py create mode 100644 language-python-test/test/features/dictionaries/singleton_dict.test create mode 100644 language-python-test/test/features/docstrings/class_docstring.py create mode 100644 language-python-test/test/features/docstrings/class_docstring.test create mode 100644 language-python-test/test/features/docstrings/class_no_docstring.py create mode 100644 language-python-test/test/features/docstrings/class_no_docstring.test create mode 100644 language-python-test/test/features/docstrings/module_docstring.py create mode 100644 language-python-test/test/features/docstrings/module_docstring.test create mode 100644 language-python-test/test/features/docstrings/module_no_docstring.py create mode 100644 language-python-test/test/features/docstrings/module_no_docstring.test create mode 100644 language-python-test/test/features/docstrings/procedure_docstring.py create mode 100644 language-python-test/test/features/docstrings/procedure_docstring.test create mode 100644 language-python-test/test/features/docstrings/procedure_no_docstring.py create mode 100644 language-python-test/test/features/docstrings/procedure_no_docstring.test create mode 100644 language-python-test/test/features/ellipsis/ellipsis2.py create mode 100644 language-python-test/test/features/ellipsis/ellipsis2.test create mode 100644 language-python-test/test/features/ellipsis/ellipsis3.py create mode 100644 language-python-test/test/features/ellipsis/ellipsis3.test create mode 100644 language-python-test/test/features/end_of_input/end_of_input_compound_stmt.py create mode 100644 language-python-test/test/features/end_of_input/end_of_input_compound_stmt.test create mode 100644 language-python-test/test/features/end_of_input/end_of_input_simple_stmt.py create mode 100644 language-python-test/test/features/end_of_input/end_of_input_simple_stmt.test create mode 100644 language-python-test/test/features/exceptions/try_else.py create mode 100644 language-python-test/test/features/exceptions/try_else.test create mode 100644 language-python-test/test/features/exceptions/try_except_div_by_zero.py create mode 100644 language-python-test/test/features/exceptions/try_except_div_by_zero.test create mode 100644 language-python-test/test/features/exceptions/try_except_no_exception.py create mode 100644 language-python-test/test/features/exceptions/try_except_no_exception.test create mode 100644 language-python-test/test/features/exceptions/try_finally.py create mode 100644 language-python-test/test/features/exceptions/try_finally.test create mode 100644 language-python-test/test/features/floats/floats.py create mode 100644 language-python-test/test/features/floats/floats.test create mode 100644 language-python-test/test/features/forloops/for_list.py create mode 100644 language-python-test/test/features/forloops/for_list.test create mode 100644 language-python-test/test/features/functions/higher_order.py create mode 100644 language-python-test/test/features/functions/higher_order.test create mode 100644 language-python-test/test/features/functions/nested_function.py create mode 100644 language-python-test/test/features/functions/nested_function.test create mode 100644 language-python-test/test/features/functions/trivial_function.py create mode 100644 language-python-test/test/features/functions/trivial_function.test create mode 100644 language-python-test/test/features/global_variable/globalVar.py create mode 100644 language-python-test/test/features/global_variable/globalVar.test create mode 100644 language-python-test/test/features/identity/id.py create mode 100644 language-python-test/test/features/identity/id.test create mode 100644 language-python-test/test/features/ifthenelse/if_elif.py create mode 100644 language-python-test/test/features/ifthenelse/if_elif.test create mode 100644 language-python-test/test/features/ifthenelse/if_elif_else.py create mode 100644 language-python-test/test/features/ifthenelse/if_elif_else.test create mode 100644 language-python-test/test/features/ifthenelse/if_else.py create mode 100644 language-python-test/test/features/ifthenelse/if_else.test create mode 100644 language-python-test/test/features/ifthenelse/if_false.py create mode 100644 language-python-test/test/features/ifthenelse/if_false.test create mode 100644 language-python-test/test/features/ifthenelse/if_true.py create mode 100644 language-python-test/test/features/ifthenelse/if_true.test create mode 100644 language-python-test/test/features/imports/__pycache__/definesX.cpython-33.pyc create mode 100644 language-python-test/test/features/imports/__pycache__/importsDefinesX.cpython-33.pyc create mode 100644 language-python-test/test/features/imports/definesX.py create mode 100644 language-python-test/test/features/imports/fromImport.py create mode 100644 language-python-test/test/features/imports/fromImport.test create mode 100644 language-python-test/test/features/imports/fromImportStar.py create mode 100644 language-python-test/test/features/imports/fromImportStar.test create mode 100644 language-python-test/test/features/imports/import.py create mode 100644 language-python-test/test/features/imports/import.test create mode 100644 language-python-test/test/features/imports/importTransitive.py create mode 100644 language-python-test/test/features/imports/importTransitive.test create mode 100644 language-python-test/test/features/imports/importsDefinesX.py create mode 100644 language-python-test/test/features/input/input_no_args.py create mode 100644 language-python-test/test/features/input/input_no_args.test create mode 100644 language-python-test/test/features/input/input_one_arg.py create mode 100644 language-python-test/test/features/input/input_one_arg.test create mode 100644 language-python-test/test/features/integers/ints.py create mode 100644 language-python-test/test/features/integers/ints.test create mode 100644 language-python-test/test/features/integers/long.py create mode 100644 language-python-test/test/features/integers/long.test create mode 100644 language-python-test/test/features/integers/unary_minus.py create mode 100644 language-python-test/test/features/integers/unary_minus.test create mode 100644 language-python-test/test/features/iterators/yield.py create mode 100644 language-python-test/test/features/iterators/yield.test create mode 100644 language-python-test/test/features/keyword_arguments/keyword_argument_name_order.py create mode 100644 language-python-test/test/features/keyword_arguments/keyword_argument_name_order.test create mode 100644 language-python-test/test/features/keyword_arguments/keyword_arguments.py create mode 100644 language-python-test/test/features/keyword_arguments/keyword_arguments.test create mode 100644 language-python-test/test/features/lambda/lambda_arity0.py create mode 100644 language-python-test/test/features/lambda/lambda_arity0.test create mode 100644 language-python-test/test/features/lambda/lambda_arity1.py create mode 100644 language-python-test/test/features/lambda/lambda_arity1.test create mode 100644 language-python-test/test/features/lambda/lambda_arity2.py create mode 100644 language-python-test/test/features/lambda/lambda_arity2.test create mode 100644 language-python-test/test/features/lambda/lambda_default_arg.py create mode 100644 language-python-test/test/features/lambda/lambda_default_arg.test create mode 100644 language-python-test/test/features/lambda/lambda_nested.py create mode 100644 language-python-test/test/features/lambda/lambda_nested.test create mode 100644 language-python-test/test/features/lambda/lambda_printed.py create mode 100644 language-python-test/test/features/lambda/lambda_printed.test create mode 100644 language-python-test/test/features/line_numbers/back_trace.py create mode 100644 language-python-test/test/features/line_numbers/back_trace.test create mode 100644 language-python-test/test/features/lists/empty_list.py create mode 100644 language-python-test/test/features/lists/empty_list.test create mode 100644 language-python-test/test/features/lists/list_append.py create mode 100644 language-python-test/test/features/lists/list_append.test create mode 100644 language-python-test/test/features/lists/list_multiply.py create mode 100644 language-python-test/test/features/lists/list_multiply.test create mode 100644 language-python-test/test/features/lists/list_of_list.py create mode 100644 language-python-test/test/features/lists/list_of_list.test create mode 100644 language-python-test/test/features/lists/list_setitem.py create mode 100644 language-python-test/test/features/lists/list_setitem.test create mode 100644 language-python-test/test/features/lists/singleton_list.py create mode 100644 language-python-test/test/features/lists/singleton_list.test create mode 100644 language-python-test/test/features/none/none.py create mode 100644 language-python-test/test/features/none/none.test create mode 100644 language-python-test/test/features/operators/chaining.py create mode 100644 language-python-test/test/features/operators/chaining.test create mode 100644 language-python-test/test/features/operators/in.py create mode 100644 language-python-test/test/features/operators/in.test create mode 100644 language-python-test/test/features/operators/is.py create mode 100644 language-python-test/test/features/operators/is.test create mode 100644 language-python-test/test/features/operators/isnot.py create mode 100644 language-python-test/test/features/operators/isnot.test create mode 100644 language-python-test/test/features/operators/notin.py create mode 100644 language-python-test/test/features/operators/notin.test create mode 100644 language-python-test/test/features/pass/function_pass.py create mode 100644 language-python-test/test/features/pass/function_pass.test create mode 100644 language-python-test/test/features/pass/pass.py create mode 100644 language-python-test/test/features/pass/pass.test create mode 100644 language-python-test/test/features/raise/raise.py create mode 100644 language-python-test/test/features/raise/raise.test create mode 100644 language-python-test/test/features/sets/empty_set.py create mode 100644 language-python-test/test/features/sets/empty_set.test create mode 100644 language-python-test/test/features/sets/set_literal.py create mode 100644 language-python-test/test/features/sets/set_literal.test create mode 100644 language-python-test/test/features/slices/slices_list.py create mode 100644 language-python-test/test/features/slices/slices_list.test create mode 100644 language-python-test/test/features/strings/empty_string.py create mode 100644 language-python-test/test/features/strings/empty_string.test create mode 100644 language-python-test/test/features/strings/format_string.py create mode 100644 language-python-test/test/features/strings/format_string.test create mode 100644 language-python-test/test/features/strings/newline.py create mode 100644 language-python-test/test/features/strings/newline.test create mode 100644 language-python-test/test/features/strings/raw_bytestring_v2.py create mode 100644 language-python-test/test/features/strings/raw_bytestring_v2.test create mode 100644 language-python-test/test/features/strings/raw_bytestring_v3.py create mode 100644 language-python-test/test/features/strings/raw_bytestring_v3.test create mode 100644 language-python-test/test/features/strings/raw_string.py create mode 100644 language-python-test/test/features/strings/raw_string.test create mode 100644 language-python-test/test/features/strings/singleton_string.py create mode 100644 language-python-test/test/features/strings/singleton_string.test create mode 100644 language-python-test/test/features/strings/string_append.py create mode 100644 language-python-test/test/features/strings/string_append.test create mode 100644 language-python-test/test/features/strings/string_juxtapose.py create mode 100644 language-python-test/test/features/strings/string_juxtapose.test create mode 100644 language-python-test/test/features/strings/triple_quoted_string.py create mode 100644 language-python-test/test/features/strings/triple_quoted_string.test create mode 100644 language-python-test/test/features/subscript/subscript_list.py create mode 100644 language-python-test/test/features/subscript/subscript_list.test create mode 100644 language-python-test/test/features/tail_call/count_rec.py create mode 100644 language-python-test/test/features/tail_call/count_rec.test create mode 100644 language-python-test/test/features/tail_call/enclosing_try.py create mode 100644 language-python-test/test/features/tail_call/enclosing_try.test create mode 100644 language-python-test/test/features/tail_call/fac.py create mode 100644 language-python-test/test/features/tail_call/fac.test create mode 100644 language-python-test/test/features/tail_call/mutual_rec.py create mode 100644 language-python-test/test/features/tail_call/mutual_rec.test create mode 100644 language-python-test/test/features/tail_call/simple_tail_call.py create mode 100644 language-python-test/test/features/tail_call/simple_tail_call.test create mode 100644 language-python-test/test/features/tail_call/tail_call_class_constructor.py create mode 100644 language-python-test/test/features/tail_call/tail_call_class_constructor.test create mode 100644 language-python-test/test/features/tail_call/tail_call_method.py create mode 100644 language-python-test/test/features/tail_call/tail_call_method.test create mode 100644 language-python-test/test/features/tuples/empty_tuple.py create mode 100644 language-python-test/test/features/tuples/empty_tuple.test create mode 100644 language-python-test/test/features/tuples/singleton_tuple.py create mode 100644 language-python-test/test/features/tuples/singleton_tuple.test create mode 100644 language-python-test/test/features/unicode/unicode_string_literal.py create mode 100644 language-python-test/test/features/unicode/unicode_string_literal.test create mode 100644 language-python-test/test/features/unicode/unicode_string_literal_v2.py create mode 100644 language-python-test/test/features/unicode/unicode_string_literal_v2.test create mode 100644 language-python-test/test/features/unpacking/unpacking.py create mode 100644 language-python-test/test/features/unpacking/unpacking.test create mode 100644 language-python-test/test/features/varargs/varargs.py create mode 100644 language-python-test/test/features/varargs/varargs.test create mode 100644 language-python-test/test/features/with/with.py create mode 100644 language-python-test/test/features/with/with.test create mode 100644 language-python-test/test/features/with/with_nested.py create mode 100644 language-python-test/test/features/with/with_nested.test create mode 100644 language-python-test/test/features/yield/yield.py create mode 100644 language-python-test/test/features/yield/yield.test create mode 100644 language-python-test/test/features/yield/yield_from.py create mode 100644 language-python-test/test/features/yield/yield_from.test create mode 100755 language-python-test/test/make_utf8.sh create mode 100644 language-python-test/test/programs/imaginary/ackermann.py create mode 100644 language-python-test/test/programs/imaginary/ackermann.test create mode 100644 language-python-test/test/programs/imaginary/bottles_of_beer.py create mode 100644 language-python-test/test/programs/imaginary/bottles_of_beer.test create mode 100644 language-python-test/test/programs/imaginary/empty.py create mode 100644 language-python-test/test/programs/imaginary/empty.test create mode 100644 language-python-test/test/programs/imaginary/evenodd.py create mode 100644 language-python-test/test/programs/imaginary/evenodd.test create mode 100644 language-python-test/test/programs/imaginary/fac.py create mode 100644 language-python-test/test/programs/imaginary/fac.test create mode 100644 language-python-test/test/programs/imaginary/fib.py create mode 100644 language-python-test/test/programs/imaginary/fib.test create mode 100644 language-python-test/test/programs/imaginary/fib_memo.py create mode 100644 language-python-test/test/programs/imaginary/fib_memo.test create mode 100644 language-python-test/test/programs/imaginary/monte_carlo_pi.py create mode 100644 language-python-test/test/programs/imaginary/monte_carlo_pi.test create mode 100644 language-python-test/test/programs/imaginary/perms.py create mode 100644 language-python-test/test/programs/imaginary/perms.test create mode 100644 language-python-test/test/programs/imaginary/powerset.py create mode 100644 language-python-test/test/programs/imaginary/powerset.test create mode 100644 language-python-test/test/programs/imaginary/range.py create mode 100644 language-python-test/test/programs/spectral/raytrace/onesphere.scn create mode 100644 language-python-test/test/programs/spectral/raytrace/ray.py create mode 100644 language-python-test/test/programs/spectral/raytrace/ray.test diff --git a/language-python-test/.gitignore b/language-python-test/.gitignore new file mode 100644 index 0000000..a7e7fcf --- /dev/null +++ b/language-python-test/.gitignore @@ -0,0 +1,7 @@ +.cabal-sandbox +cabal.sandbox.config +dist +.idea +language-python-test.iml +.stack-work +out diff --git a/language-python-test/LICENSE b/language-python-test/LICENSE new file mode 100644 index 0000000..eb6a497 --- /dev/null +++ b/language-python-test/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009-2010 Bernard James Pope (also known as Bernie Pope). + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the author nor the names of his contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/language-python-test/Makefile b/language-python-test/Makefile new file mode 100644 index 0000000..2009a6b --- /dev/null +++ b/language-python-test/Makefile @@ -0,0 +1,21 @@ +# Copyright : (c) 2014 Bernie Pope +# License : BSD-style +# Maintainer : florbitous@gmail.com + +# A convenience Makefile. + +.PHONY: test +test: + shelltest --color --execdir test/ -- -j1 + +.PHONY: test_features +test_features: + shelltest --color --execdir test/features -- -j1 + +.PHONY: test_cpython2 +test_cpython2: + shelltest --color --execdir test/CPython_test_suite_v2 -- -j1 + +.PHONY: test_cpython3 +test_cpython3: + shelltest --color --execdir test/CPython_test_suite_v3 -- -j1 diff --git a/language-python-test/README.md b/language-python-test/README.md new file mode 100644 index 0000000..8ca9dd6 --- /dev/null +++ b/language-python-test/README.md @@ -0,0 +1,71 @@ +Introduction +============ + +A test suite for the Haskell library [language-python](https://github.com/bjpop/language-python) (a parser for Python 2 and 3). + +License +------- + +language-python-test is released as open source software under the terms of the 3 clause BSD License. See the file LICENCE.txt in the [source code repository of language-python-test](https://github.com/bjpop/language-python-test). + +This package also contains files from the CPython test suite. Those files are found in the +sub-directories test/CPython_test_suite_v2 and test/CPython_test_suite_v3. The license for those files is +contained in those directories. + +Installation +------------ + +Using cabal version 3.0.0.0 or greater: + +``` +cabal build +cabal install +``` + +Usage +----- + +The package builds the following executable programs: + +* language-python-parse-pretty +* language-python-roundtrip +* language-python-tokens + +The first program parses a Python file as input and pretty prints it back again. + +The second program performs a round-trip of parse, pretty print, parse and pretty print. It checks that the first +pretty print is equal to the second pretty print. This is not a perfect test for correctness, but it does check that the parser and pretty printer agree to some extent, and is usually quite good at finding errors. + +The third program performs lexical analysis on the input Python file and pretty prints the resulting token stream. + +The test suite (which tests the behaviour of language-python) uses the shelltest tool. To run the tests you need to have shelltest installed: + +``` +cabal install shelltestrunner +``` + +The tests are found in the sub-directory called tests. + +You can run the tests like so from the top directory of the language-python-test package: + +``` +shelltest --color --execdir test/ -- -j1 +``` + +If you have installed into a cabal sandbox, then you might need to adjust your path: + +``` +PATH=$HOME/.cabal/bin/:$PATH shelltest --color --execdir test/ -- -j1 +``` + +We provide a Makefile for convenience which does the same thing. You can run it like so: + +``` +make test +``` + +or, with PATH adjustment: + +``` +PATH=$HOME/.cabal/bin/:$PATH make test +``` diff --git a/language-python-test/Setup.lhs b/language-python-test/Setup.lhs new file mode 100755 index 0000000..5bde0de --- /dev/null +++ b/language-python-test/Setup.lhs @@ -0,0 +1,3 @@ +#!/usr/bin/env runhaskell +> import Distribution.Simple +> main = defaultMain diff --git a/language-python-test/docs/notes.txt b/language-python-test/docs/notes.txt new file mode 100644 index 0000000..bc5a130 --- /dev/null +++ b/language-python-test/docs/notes.txt @@ -0,0 +1,18 @@ +Notes about the design of language-python-test +-------------------------------------------------------------------------------- + +1. Why is this a separate package, and not included in the language-python + source tree? + +Mainly because of a limitation in the current Haskell cabal tool. It appears +to be difficult to have a single cabal package which defines a library and an +executable which depends on the library. While it seems to be possible, it is +inconvenient because you seem to have to specify all depenencies twice. + +2. For roundtrip testing we will have three kinds of tests: + - those specific to version 2 of python + - those specific to version 3 of python + - those which are independent of the python version (should be tested by both) + + + diff --git a/language-python-test/language-python-test.cabal b/language-python-test/language-python-test.cabal new file mode 100644 index 0000000..dad8506 --- /dev/null +++ b/language-python-test/language-python-test.cabal @@ -0,0 +1,39 @@ +name: language-python-test +version: 0.5.6 +cabal-version: >= 1.6 +synopsis: testing code for the language-python library +description: testing code for the language-python library +category: Language +license: BSD3 +license-file: LICENSE +copyright: (c) 2014-2019 Bernard James Pope +author: Bernard James Pope (Bernie Pope) +maintainer: florbitous@gmail.com +homepage: http://github.com/bjpop/language-python-test +build-type: Simple +stability: experimental + +source-repository head + type: git + location: https://github.com/bjpop/language-python-test + +Executable language-python-roundtrip + hs-source-dirs: + ./src + main-is: RoundTrip.hs + other-modules: + build-depends: base == 4.*, language-python == 0.5.6 + +Executable language-python-tokens + hs-source-dirs: + ./src + main-is: Tokens.hs + other-modules: + build-depends: base == 4.*, language-python == 0.5.6 + +Executable language-python-parse-pretty + hs-source-dirs: + ./src + main-is: ParsePretty.hs + other-modules: + build-depends: base == 4.*, language-python == 0.5.6 diff --git a/language-python-test/src/ParsePretty.hs b/language-python-test/src/ParsePretty.hs new file mode 100644 index 0000000..4cdc278 --- /dev/null +++ b/language-python-test/src/ParsePretty.hs @@ -0,0 +1,42 @@ +import Language.Python.Common +import Language.Python.Version2 as V2 +import Language.Python.Version3 as V3 +import System.Exit +import System.Environment + +data PythonVersion = Two | Three + deriving (Eq, Show) + +type Parser = String -> String -> Either ParseError (ModuleSpan, [Token]) + +main :: IO () +main = do + args <- getArgs + case args of + (versionStr:inFile:_rest) -> + case parseVersion versionStr of + Nothing -> do + putStrLn $ "Unknown Python version: " ++ versionStr + exitFailure + Just version -> do + contents <- readFile inFile + let parser = pickParser version + case parseAndPretty parser inFile contents of + Left error -> putStrLn $ prettyText error + Right ast -> putStrLn $ prettyText ast + _other -> putStrLn "Incorrect command line. Expected: <2|3|n> inputFileName" + +pickParser :: PythonVersion -> Parser +pickParser Two = V2.parseModule +pickParser Three = V3.parseModule + +parseAndPretty :: Parser -> FilePath -> String -> Either ParseError ModuleSpan +parseAndPretty parser fileName contents = + case parser contents fileName of + Left e -> Left e + Right (ast, _comments) -> Right ast + +parseVersion :: String -> Maybe PythonVersion +parseVersion "2" = Just Two +parseVersion "3" = Just Three +parseVersion _other = Nothing diff --git a/language-python-test/src/RoundTrip.hs b/language-python-test/src/RoundTrip.hs new file mode 100644 index 0000000..88f23be --- /dev/null +++ b/language-python-test/src/RoundTrip.hs @@ -0,0 +1,80 @@ +import Language.Python.Common +import Language.Python.Version2 as V2 +import Language.Python.Version3 as V3 +import System.Exit +import System.Environment + +data PythonVersion = Two | Three | Both + deriving (Eq, Show) + +data Comparison = ParseFailed String | Equal | NotEqual String String +type Parser = String -> String -> Either ParseError (ModuleSpan, [Token]) + +main :: IO () +main = do + args <- getArgs + case args of + (versionStr:inFile:_rest) -> + case parseVersion versionStr of + Nothing -> do + putStrLn $ "Unknown Python version: " ++ versionStr + exitFailure + Just version -> do + contents <- readFile inFile + let parsers = pickParsers version + comparisons = [parseAndCompare p inFile contents | p <- parsers] + test <- check comparisons + if test then exitWith ExitSuccess else exitSuccess + _other -> putStrLn "Incorrect command line. Expected: <2|3|n> inputFileName" + +check :: [Comparison] -> IO Bool +check [] = return True -- must have all been equal +check (Equal:rest) = check rest +check (NotEqual s1 s2:_rest) = do + doubleLine + putStrLn "Round trip parse failed" + doubleLine + putStrLn "pretty1" + line + putStrLn s1 + doubleLine + putStrLn "pretty2" + line + putStrLn s2 + return False +check (ParseFailed e:_rest) = do + putStrLn "Parse failed with error: " + putStrLn e + return False + +pickParsers :: PythonVersion -> [Parser] +pickParsers Two = [V2.parseModule] +pickParsers Three = [V3.parseModule] +pickParsers Both = [V2.parseModule, V3.parseModule] + +parseAndCompare :: Parser -> FilePath -> String -> Comparison +parseAndCompare parser inFile contents = + case parseAndPretty parser inFile contents of + Left e -> ParseFailed $ prettyText e + Right pretty1 -> + case parseAndPretty parser "" pretty1 of + Left e -> ParseFailed $ prettyText e + Right pretty2 + | pretty1 == pretty2 -> Equal + | otherwise -> NotEqual pretty1 pretty2 + +line, doubleLine :: IO () +line = putStrLn $ replicate 80 '-' +doubleLine = putStrLn $ replicate 80 '=' + +parseAndPretty :: Parser -> FilePath -> String -> Either ParseError String +parseAndPretty parser fileName contents = + case parser contents fileName of + Left e -> Left e + Right (ast, _comments) -> Right (prettyText ast ++ "\n") + +parseVersion :: String -> Maybe PythonVersion +parseVersion "2" = Just Two +parseVersion "3" = Just Three +parseVersion "n" = Just Both +parseVersion _other = Nothing diff --git a/language-python-test/src/Tokens.hs b/language-python-test/src/Tokens.hs new file mode 100644 index 0000000..b05eac6 --- /dev/null +++ b/language-python-test/src/Tokens.hs @@ -0,0 +1,39 @@ +import Language.Python.Common +import Language.Python.Version2 as V2 +import Language.Python.Version3 as V3 +import System.Exit +import System.Environment + +data PythonVersion = Two | Three + deriving (Eq, Show) + +type Lexer = String -> String -> Either ParseError [Token] + +main :: IO () +main = do + args <- getArgs + case args of + (versionStr:inFile:_rest) -> + case parseVersion versionStr of + Nothing -> do + putStrLn $ "Unknown Python version: " ++ versionStr + exitFailure + Just version -> do + contents <- readFile inFile + runLexer inFile (pickLexer version) contents + _other -> putStrLn "Incorrect command line. Expected: <2|3> inputFileName" + +pickLexer :: PythonVersion -> Lexer +pickLexer Two = V2.lex +pickLexer Three = V3.lex + +parseVersion :: String -> Maybe PythonVersion +parseVersion "2" = Just Two +parseVersion "3" = Just Three +parseVersion _other = Nothing + +runLexer :: FilePath -> Lexer -> String -> IO () +runLexer inFile lex contents = do + case lex contents inFile of + Left e -> print e + Right toks -> putStr $ unlines $ map debugTokenString toks diff --git a/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.py b/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.py new file mode 100644 index 0000000..acd8394 --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.py @@ -0,0 +1,592 @@ +"""HTTP server base class. + +Note: the class in this module doesn't implement any HTTP request; see +SimpleHTTPServer for simple implementations of GET, HEAD and POST +(including CGI scripts). It does, however, optionally implement HTTP/1.1 +persistent connections, as of version 0.3. + +Contents: + +- BaseHTTPRequestHandler: HTTP request handler base class +- test: test function + +XXX To do: + +- log requests even later (to capture byte count) +- log user-agent header and other interesting goodies +- send error log to separate file +""" + + +# See also: +# +# HTTP Working Group T. Berners-Lee +# INTERNET-DRAFT R. T. Fielding +# H. Frystyk Nielsen +# Expires September 8, 1995 March 8, 1995 +# +# URL: http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-v10-spec-00.txt +# +# and +# +# Network Working Group R. Fielding +# Request for Comments: 2616 et al +# Obsoletes: 2068 June 1999 +# Category: Standards Track +# +# URL: http://www.faqs.org/rfcs/rfc2616.html + +# Log files +# --------- +# +# Here's a quote from the NCSA httpd docs about log file format. +# +# | The logfile format is as follows. Each line consists of: +# | +# | host rfc931 authuser [DD/Mon/YYYY:hh:mm:ss] "request" ddd bbbb +# | +# | host: Either the DNS name or the IP number of the remote client +# | rfc931: Any information returned by identd for this person, +# | - otherwise. +# | authuser: If user sent a userid for authentication, the user name, +# | - otherwise. +# | DD: Day +# | Mon: Month (calendar name) +# | YYYY: Year +# | hh: hour (24-hour format, the machine's timezone) +# | mm: minutes +# | ss: seconds +# | request: The first line of the HTTP request as sent by the client. +# | ddd: the status code returned by the server, - if not available. +# | bbbb: the total number of bytes sent, +# | *not including the HTTP/1.0 header*, - if not available +# | +# | You can determine the name of the file accessed through request. +# +# (Actually, the latter is only true if you know the server configuration +# at the time the request was made!) + +__version__ = "0.3" + +__all__ = ["HTTPServer", "BaseHTTPRequestHandler"] + +import sys +import time +import socket # For gethostbyaddr() +from warnings import filterwarnings, catch_warnings +with catch_warnings(): + if sys.py3kwarning: + filterwarnings("ignore", ".*mimetools has been removed", + DeprecationWarning) + import mimetools +import SocketServer + +# Default error message template +DEFAULT_ERROR_MESSAGE = """\ + +Error response + + +

Error response

+

Error code %(code)d. +

Message: %(message)s. +

Error code explanation: %(code)s = %(explain)s. + +""" + +DEFAULT_ERROR_CONTENT_TYPE = "text/html" + +def _quote_html(html): + return html.replace("&", "&").replace("<", "<").replace(">", ">") + +class HTTPServer(SocketServer.TCPServer): + + allow_reuse_address = 1 # Seems to make sense in testing environment + + def server_bind(self): + """Override server_bind to store the server name.""" + SocketServer.TCPServer.server_bind(self) + host, port = self.socket.getsockname()[:2] + self.server_name = socket.getfqdn(host) + self.server_port = port + + +class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler): + + """HTTP request handler base class. + + The following explanation of HTTP serves to guide you through the + code as well as to expose any misunderstandings I may have about + HTTP (so you don't need to read the code to figure out I'm wrong + :-). + + HTTP (HyperText Transfer Protocol) is an extensible protocol on + top of a reliable stream transport (e.g. TCP/IP). The protocol + recognizes three parts to a request: + + 1. One line identifying the request type and path + 2. An optional set of RFC-822-style headers + 3. An optional data part + + The headers and data are separated by a blank line. + + The first line of the request has the form + + + + where is a (case-sensitive) keyword such as GET or POST, + is a string containing path information for the request, + and should be the string "HTTP/1.0" or "HTTP/1.1". + is encoded using the URL encoding scheme (using %xx to signify + the ASCII character with hex code xx). + + The specification specifies that lines are separated by CRLF but + for compatibility with the widest range of clients recommends + servers also handle LF. Similarly, whitespace in the request line + is treated sensibly (allowing multiple spaces between components + and allowing trailing whitespace). + + Similarly, for output, lines ought to be separated by CRLF pairs + but most clients grok LF characters just fine. + + If the first line of the request has the form + + + + (i.e. is left out) then this is assumed to be an HTTP + 0.9 request; this form has no optional headers and data part and + the reply consists of just the data. + + The reply form of the HTTP 1.x protocol again has three parts: + + 1. One line giving the response code + 2. An optional set of RFC-822-style headers + 3. The data + + Again, the headers and data are separated by a blank line. + + The response code line has the form + + + + where is the protocol version ("HTTP/1.0" or "HTTP/1.1"), + is a 3-digit response code indicating success or + failure of the request, and is an optional + human-readable string explaining what the response code means. + + This server parses the request and the headers, and then calls a + function specific to the request type (). Specifically, + a request SPAM will be handled by a method do_SPAM(). If no + such method exists the server sends an error response to the + client. If it exists, it is called with no arguments: + + do_SPAM() + + Note that the request name is case sensitive (i.e. SPAM and spam + are different requests). + + The various request details are stored in instance variables: + + - client_address is the client IP address in the form (host, + port); + + - command, path and version are the broken-down request line; + + - headers is an instance of mimetools.Message (or a derived + class) containing the header information; + + - rfile is a file object open for reading positioned at the + start of the optional input data part; + + - wfile is a file object open for writing. + + IT IS IMPORTANT TO ADHERE TO THE PROTOCOL FOR WRITING! + + The first thing to be written must be the response line. Then + follow 0 or more header lines, then a blank line, and then the + actual data (if any). The meaning of the header lines depends on + the command executed by the server; in most cases, when data is + returned, there should be at least one header line of the form + + Content-type: / + + where and should be registered MIME types, + e.g. "text/html" or "text/plain". + + """ + + # The Python system version, truncated to its first component. + sys_version = "Python/" + sys.version.split()[0] + + # The server software version. You may want to override this. + # The format is multiple whitespace-separated strings, + # where each string is of the form name[/version]. + server_version = "BaseHTTP/" + __version__ + + # The default request version. This only affects responses up until + # the point where the request line is parsed, so it mainly decides what + # the client gets back when sending a malformed request line. + # Most web servers default to HTTP 0.9, i.e. don't send a status line. + default_request_version = "HTTP/0.9" + + def parse_request(self): + """Parse a request (internal). + + The request should be stored in self.raw_requestline; the results + are in self.command, self.path, self.request_version and + self.headers. + + Return True for success, False for failure; on failure, an + error is sent back. + + """ + self.command = None # set in case of error on the first line + self.request_version = version = self.default_request_version + self.close_connection = 1 + requestline = self.raw_requestline + if requestline[-2:] == '\r\n': + requestline = requestline[:-2] + elif requestline[-1:] == '\n': + requestline = requestline[:-1] + self.requestline = requestline + words = requestline.split() + if len(words) == 3: + [command, path, version] = words + if version[:5] != 'HTTP/': + self.send_error(400, "Bad request version (%r)" % version) + return False + try: + base_version_number = version.split('/', 1)[1] + version_number = base_version_number.split(".") + # RFC 2145 section 3.1 says there can be only one "." and + # - major and minor numbers MUST be treated as + # separate integers; + # - HTTP/2.4 is a lower version than HTTP/2.13, which in + # turn is lower than HTTP/12.3; + # - Leading zeros MUST be ignored by recipients. + if len(version_number) != 2: + raise ValueError + version_number = int(version_number[0]), int(version_number[1]) + except (ValueError, IndexError): + self.send_error(400, "Bad request version (%r)" % version) + return False + if version_number >= (1, 1) and self.protocol_version >= "HTTP/1.1": + self.close_connection = 0 + if version_number >= (2, 0): + self.send_error(505, + "Invalid HTTP Version (%s)" % base_version_number) + return False + elif len(words) == 2: + [command, path] = words + self.close_connection = 1 + if command != 'GET': + self.send_error(400, + "Bad HTTP/0.9 request type (%r)" % command) + return False + elif not words: + return False + else: + self.send_error(400, "Bad request syntax (%r)" % requestline) + return False + self.command, self.path, self.request_version = command, path, version + + # Examine the headers and look for a Connection directive + self.headers = self.MessageClass(self.rfile, 0) + + conntype = self.headers.get('Connection', "") + if conntype.lower() == 'close': + self.close_connection = 1 + elif (conntype.lower() == 'keep-alive' and + self.protocol_version >= "HTTP/1.1"): + self.close_connection = 0 + return True + + def handle_one_request(self): + """Handle a single HTTP request. + + You normally don't need to override this method; see the class + __doc__ string for information on how to handle specific HTTP + commands such as GET and POST. + + """ + self.raw_requestline = self.rfile.readline() + if not self.raw_requestline: + self.close_connection = 1 + return + if not self.parse_request(): # An error code has been sent, just exit + return + mname = 'do_' + self.command + if not hasattr(self, mname): + self.send_error(501, "Unsupported method (%r)" % self.command) + return + method = getattr(self, mname) + method() + + def handle(self): + """Handle multiple requests if necessary.""" + self.close_connection = 1 + + self.handle_one_request() + while not self.close_connection: + self.handle_one_request() + + def send_error(self, code, message=None): + """Send and log an error reply. + + Arguments are the error code, and a detailed message. + The detailed message defaults to the short entry matching the + response code. + + This sends an error response (so it must be called before any + output has been generated), logs the error, and finally sends + a piece of HTML explaining the error to the user. + + """ + + try: + short, long = self.responses[code] + except KeyError: + short, long = '???', '???' + if message is None: + message = short + explain = long + self.log_error("code %d, message %s", code, message) + # using _quote_html to prevent Cross Site Scripting attacks (see bug #1100201) + content = (self.error_message_format % + {'code': code, 'message': _quote_html(message), 'explain': explain}) + self.send_response(code, message) + self.send_header("Content-Type", self.error_content_type) + self.send_header('Connection', 'close') + self.end_headers() + if self.command != 'HEAD' and code >= 200 and code not in (204, 304): + self.wfile.write(content) + + error_message_format = DEFAULT_ERROR_MESSAGE + error_content_type = DEFAULT_ERROR_CONTENT_TYPE + + def send_response(self, code, message=None): + """Send the response header and log the response code. + + Also send two standard headers with the server software + version and the current date. + + """ + self.log_request(code) + if message is None: + if code in self.responses: + message = self.responses[code][0] + else: + message = '' + if self.request_version != 'HTTP/0.9': + self.wfile.write("%s %d %s\r\n" % + (self.protocol_version, code, message)) + # print (self.protocol_version, code, message) + self.send_header('Server', self.version_string()) + self.send_header('Date', self.date_time_string()) + + def send_header(self, keyword, value): + """Send a MIME header.""" + if self.request_version != 'HTTP/0.9': + self.wfile.write("%s: %s\r\n" % (keyword, value)) + + if keyword.lower() == 'connection': + if value.lower() == 'close': + self.close_connection = 1 + elif value.lower() == 'keep-alive': + self.close_connection = 0 + + def end_headers(self): + """Send the blank line ending the MIME headers.""" + if self.request_version != 'HTTP/0.9': + self.wfile.write("\r\n") + + def log_request(self, code='-', size='-'): + """Log an accepted request. + + This is called by send_response(). + + """ + + self.log_message('"%s" %s %s', + self.requestline, str(code), str(size)) + + def log_error(self, format, *args): + """Log an error. + + This is called when a request cannot be fulfilled. By + default it passes the message on to log_message(). + + Arguments are the same as for log_message(). + + XXX This should go to the separate error log. + + """ + + self.log_message(format, *args) + + def log_message(self, format, *args): + """Log an arbitrary message. + + This is used by all other logging functions. Override + it if you have specific logging wishes. + + The first argument, FORMAT, is a format string for the + message to be logged. If the format string contains + any % escapes requiring parameters, they should be + specified as subsequent arguments (it's just like + printf!). + + The client host and current date/time are prefixed to + every message. + + """ + + sys.stderr.write("%s - - [%s] %s\n" % + (self.address_string(), + self.log_date_time_string(), + format%args)) + + def version_string(self): + """Return the server software version string.""" + return self.server_version + ' ' + self.sys_version + + def date_time_string(self, timestamp=None): + """Return the current date and time formatted for a message header.""" + if timestamp is None: + timestamp = time.time() + year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp) + s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( + self.weekdayname[wd], + day, self.monthname[month], year, + hh, mm, ss) + return s + + def log_date_time_string(self): + """Return the current time formatted for logging.""" + now = time.time() + year, month, day, hh, mm, ss, x, y, z = time.localtime(now) + s = "%02d/%3s/%04d %02d:%02d:%02d" % ( + day, self.monthname[month], year, hh, mm, ss) + return s + + weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + + monthname = [None, + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + + def address_string(self): + """Return the client address formatted for logging. + + This version looks up the full hostname using gethostbyaddr(), + and tries to find a name that contains at least one dot. + + """ + + host, port = self.client_address[:2] + return socket.getfqdn(host) + + # Essentially static class variables + + # The version of the HTTP protocol we support. + # Set this to HTTP/1.1 to enable automatic keepalive + protocol_version = "HTTP/1.0" + + # The Message-like class used to parse headers + MessageClass = mimetools.Message + + # Table mapping response codes to messages; entries have the + # form {code: (shortmessage, longmessage)}. + # See RFC 2616. + responses = { + 100: ('Continue', 'Request received, please continue'), + 101: ('Switching Protocols', + 'Switching to new protocol; obey Upgrade header'), + + 200: ('OK', 'Request fulfilled, document follows'), + 201: ('Created', 'Document created, URL follows'), + 202: ('Accepted', + 'Request accepted, processing continues off-line'), + 203: ('Non-Authoritative Information', 'Request fulfilled from cache'), + 204: ('No Content', 'Request fulfilled, nothing follows'), + 205: ('Reset Content', 'Clear input form for further input.'), + 206: ('Partial Content', 'Partial content follows.'), + + 300: ('Multiple Choices', + 'Object has several resources -- see URI list'), + 301: ('Moved Permanently', 'Object moved permanently -- see URI list'), + 302: ('Found', 'Object moved temporarily -- see URI list'), + 303: ('See Other', 'Object moved -- see Method and URL list'), + 304: ('Not Modified', + 'Document has not changed since given time'), + 305: ('Use Proxy', + 'You must use proxy specified in Location to access this ' + 'resource.'), + 307: ('Temporary Redirect', + 'Object moved temporarily -- see URI list'), + + 400: ('Bad Request', + 'Bad request syntax or unsupported method'), + 401: ('Unauthorized', + 'No permission -- see authorization schemes'), + 402: ('Payment Required', + 'No payment -- see charging schemes'), + 403: ('Forbidden', + 'Request forbidden -- authorization will not help'), + 404: ('Not Found', 'Nothing matches the given URI'), + 405: ('Method Not Allowed', + 'Specified method is invalid for this server.'), + 406: ('Not Acceptable', 'URI not available in preferred format.'), + 407: ('Proxy Authentication Required', 'You must authenticate with ' + 'this proxy before proceeding.'), + 408: ('Request Timeout', 'Request timed out; try again later.'), + 409: ('Conflict', 'Request conflict.'), + 410: ('Gone', + 'URI no longer exists and has been permanently removed.'), + 411: ('Length Required', 'Client must specify Content-Length.'), + 412: ('Precondition Failed', 'Precondition in headers is false.'), + 413: ('Request Entity Too Large', 'Entity is too large.'), + 414: ('Request-URI Too Long', 'URI is too long.'), + 415: ('Unsupported Media Type', 'Entity body in unsupported format.'), + 416: ('Requested Range Not Satisfiable', + 'Cannot satisfy request range.'), + 417: ('Expectation Failed', + 'Expect condition could not be satisfied.'), + + 500: ('Internal Server Error', 'Server got itself in trouble'), + 501: ('Not Implemented', + 'Server does not support this operation'), + 502: ('Bad Gateway', 'Invalid responses from another server/proxy.'), + 503: ('Service Unavailable', + 'The server cannot process the request due to a high load'), + 504: ('Gateway Timeout', + 'The gateway server did not receive a timely response'), + 505: ('HTTP Version Not Supported', 'Cannot fulfill request.'), + } + + +def test(HandlerClass = BaseHTTPRequestHandler, + ServerClass = HTTPServer, protocol="HTTP/1.0"): + """Test the HTTP request handler class. + + This runs an HTTP server on port 8000 (or the first command line + argument). + + """ + + if sys.argv[1:]: + port = int(sys.argv[1]) + else: + port = 8000 + server_address = ('', port) + + HandlerClass.protocol_version = protocol + httpd = ServerClass(server_address, HandlerClass) + + sa = httpd.socket.getsockname() + print "Serving HTTP on", sa[0], "port", sa[1], "..." + httpd.serve_forever() + + +if __name__ == '__main__': + test() diff --git a/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.test b/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.test new file mode 100644 index 0000000..823b5e9 --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/BaseHTTPServer.test @@ -0,0 +1,5 @@ +language-python-roundtrip 2 BaseHTTPServer.py +<<< +>>> +>>>2 +>>>=0 diff --git a/language-python-test/test/CPython_test_suite_v2/Bastion.py b/language-python-test/test/CPython_test_suite_v2/Bastion.py new file mode 100644 index 0000000..d0dddbf --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/Bastion.py @@ -0,0 +1,180 @@ +"""Bastionification utility. + +A bastion (for another object -- the 'original') is an object that has +the same methods as the original but does not give access to its +instance variables. Bastions have a number of uses, but the most +obvious one is to provide code executing in restricted mode with a +safe interface to an object implemented in unrestricted mode. + +The bastionification routine has an optional second argument which is +a filter function. Only those methods for which the filter method +(called with the method name as argument) returns true are accessible. +The default filter method returns true unless the method name begins +with an underscore. + +There are a number of possible implementations of bastions. We use a +'lazy' approach where the bastion's __getattr__() discipline does all +the work for a particular method the first time it is used. This is +usually fastest, especially if the user doesn't call all available +methods. The retrieved methods are stored as instance variables of +the bastion, so the overhead is only occurred on the first use of each +method. + +Detail: the bastion class has a __repr__() discipline which includes +the repr() of the original object. This is precomputed when the +bastion is created. + +""" +from warnings import warnpy3k +warnpy3k("the Bastion module has been removed in Python 3.0", stacklevel=2) +del warnpy3k + +__all__ = ["BastionClass", "Bastion"] + +from types import MethodType + + +class BastionClass: + + """Helper class used by the Bastion() function. + + You could subclass this and pass the subclass as the bastionclass + argument to the Bastion() function, as long as the constructor has + the same signature (a get() function and a name for the object). + + """ + + def __init__(self, get, name): + """Constructor. + + Arguments: + + get - a function that gets the attribute value (by name) + name - a human-readable name for the original object + (suggestion: use repr(object)) + + """ + self._get_ = get + self._name_ = name + + def __repr__(self): + """Return a representation string. + + This includes the name passed in to the constructor, so that + if you print the bastion during debugging, at least you have + some idea of what it is. + + """ + return "" % self._name_ + + def __getattr__(self, name): + """Get an as-yet undefined attribute value. + + This calls the get() function that was passed to the + constructor. The result is stored as an instance variable so + that the next time the same attribute is requested, + __getattr__() won't be invoked. + + If the get() function raises an exception, this is simply + passed on -- exceptions are not cached. + + """ + attribute = self._get_(name) + self.__dict__[name] = attribute + return attribute + + +def Bastion(object, filter = lambda name: name[:1] != '_', + name=None, bastionclass=BastionClass): + """Create a bastion for an object, using an optional filter. + + See the Bastion module's documentation for background. + + Arguments: + + object - the original object + filter - a predicate that decides whether a function name is OK; + by default all names are OK that don't start with '_' + name - the name of the object; default repr(object) + bastionclass - class used to create the bastion; default BastionClass + + """ + + raise RuntimeError, "This code is not secure in Python 2.2 and later" + + # Note: we define *two* ad-hoc functions here, get1 and get2. + # Both are intended to be called in the same way: get(name). + # It is clear that the real work (getting the attribute + # from the object and calling the filter) is done in get1. + # Why can't we pass get1 to the bastion? Because the user + # would be able to override the filter argument! With get2, + # overriding the default argument is no security loophole: + # all it does is call it. + # Also notice that we can't place the object and filter as + # instance variables on the bastion object itself, since + # the user has full access to all instance variables! + + def get1(name, object=object, filter=filter): + """Internal function for Bastion(). See source comments.""" + if filter(name): + attribute = getattr(object, name) + if type(attribute) == MethodType: + return attribute + raise AttributeError, name + + def get2(name, get1=get1): + """Internal function for Bastion(). See source comments.""" + return get1(name) + + if name is None: + name = repr(object) + return bastionclass(get2, name) + + +def _test(): + """Test the Bastion() function.""" + class Original: + def __init__(self): + self.sum = 0 + def add(self, n): + self._add(n) + def _add(self, n): + self.sum = self.sum + n + def total(self): + return self.sum + o = Original() + b = Bastion(o) + testcode = """if 1: + b.add(81) + b.add(18) + print "b.total() =", b.total() + try: + print "b.sum =", b.sum, + except: + print "inaccessible" + else: + print "accessible" + try: + print "b._add =", b._add, + except: + print "inaccessible" + else: + print "accessible" + try: + print "b._get_.func_defaults =", map(type, b._get_.func_defaults), + except: + print "inaccessible" + else: + print "accessible" + \n""" + exec testcode + print '='*20, "Using rexec:", '='*20 + import rexec + r = rexec.RExec() + m = r.add_module('__main__') + m.b = b + r.r_exec(testcode) + + +if __name__ == '__main__': + _test() diff --git a/language-python-test/test/CPython_test_suite_v2/Bastion.test b/language-python-test/test/CPython_test_suite_v2/Bastion.test new file mode 100644 index 0000000..4474657 --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/Bastion.test @@ -0,0 +1,5 @@ +language-python-roundtrip 2 Bastion.py +<<< +>>> +>>>2 +>>>=0 diff --git a/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.py b/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.py new file mode 100644 index 0000000..71f0368 --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.py @@ -0,0 +1,366 @@ +"""CGI-savvy HTTP Server. + +This module builds on SimpleHTTPServer by implementing GET and POST +requests to cgi-bin scripts. + +If the os.fork() function is not present (e.g. on Windows), +os.popen2() is used as a fallback, with slightly altered semantics; if +that function is not present either (e.g. on Macintosh), only Python +scripts are supported, and they are executed by the current process. + +In all cases, the implementation is intentionally naive -- all +requests are executed sychronously. + +SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL +-- it may execute arbitrary Python code or external programs. + +Note that status code 200 is sent prior to execution of a CGI script, so +scripts cannot send other status codes such as 302 (redirect). +""" + + +__version__ = "0.4" + +__all__ = ["CGIHTTPRequestHandler"] + +import os +import sys +import urllib +import BaseHTTPServer +import SimpleHTTPServer +import select + + +class CGIHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + + """Complete HTTP server with GET, HEAD and POST commands. + + GET and HEAD also support running CGI scripts. + + The POST command is *only* implemented for CGI scripts. + + """ + + # Determine platform specifics + have_fork = hasattr(os, 'fork') + have_popen2 = hasattr(os, 'popen2') + have_popen3 = hasattr(os, 'popen3') + + # Make rfile unbuffered -- we need to read one line and then pass + # the rest to a subprocess, so we can't use buffered input. + rbufsize = 0 + + def do_POST(self): + """Serve a POST request. + + This is only implemented for CGI scripts. + + """ + + if self.is_cgi(): + self.run_cgi() + else: + self.send_error(501, "Can only POST to CGI scripts") + + def send_head(self): + """Version of send_head that support CGI scripts""" + if self.is_cgi(): + return self.run_cgi() + else: + return SimpleHTTPServer.SimpleHTTPRequestHandler.send_head(self) + + def is_cgi(self): + """Test whether self.path corresponds to a CGI script, + and return a boolean. + + This function sets self.cgi_info to a tuple (dir, rest) + when it returns True, where dir is the directory part before + the CGI script name. Note that rest begins with a + slash if it is not empty. + + The default implementation tests whether the path + begins with one of the strings in the list + self.cgi_directories (and the next character is a '/' + or the end of the string). + """ + + path = self.path + + for x in self.cgi_directories: + i = len(x) + if path[:i] == x and (not path[i:] or path[i] == '/'): + self.cgi_info = path[:i], path[i+1:] + return True + return False + + cgi_directories = ['/cgi-bin', '/htbin'] + + def is_executable(self, path): + """Test whether argument path is an executable file.""" + return executable(path) + + def is_python(self, path): + """Test whether argument path is a Python script.""" + head, tail = os.path.splitext(path) + return tail.lower() in (".py", ".pyw") + + def run_cgi(self): + """Execute a CGI script.""" + path = self.path + dir, rest = self.cgi_info + + i = path.find('/', len(dir) + 1) + while i >= 0: + nextdir = path[:i] + nextrest = path[i+1:] + + scriptdir = self.translate_path(nextdir) + if os.path.isdir(scriptdir): + dir, rest = nextdir, nextrest + i = path.find('/', len(dir) + 1) + else: + break + + # find an explicit query string, if present. + i = rest.rfind('?') + if i >= 0: + rest, query = rest[:i], rest[i+1:] + else: + query = '' + + # dissect the part after the directory name into a script name & + # a possible additional path, to be stored in PATH_INFO. + i = rest.find('/') + if i >= 0: + script, rest = rest[:i], rest[i:] + else: + script, rest = rest, '' + + scriptname = dir + '/' + script + scriptfile = self.translate_path(scriptname) + if not os.path.exists(scriptfile): + self.send_error(404, "No such CGI script (%r)" % scriptname) + return + if not os.path.isfile(scriptfile): + self.send_error(403, "CGI script is not a plain file (%r)" % + scriptname) + return + ispy = self.is_python(scriptname) + if not ispy: + if not (self.have_fork or self.have_popen2 or self.have_popen3): + self.send_error(403, "CGI script is not a Python script (%r)" % + scriptname) + return + if not self.is_executable(scriptfile): + self.send_error(403, "CGI script is not executable (%r)" % + scriptname) + return + + # Reference: http://hoohoo.ncsa.uiuc.edu/cgi/env.html + # XXX Much of the following could be prepared ahead of time! + env = {} + env['SERVER_SOFTWARE'] = self.version_string() + env['SERVER_NAME'] = self.server.server_name + env['GATEWAY_INTERFACE'] = 'CGI/1.1' + env['SERVER_PROTOCOL'] = self.protocol_version + env['SERVER_PORT'] = str(self.server.server_port) + env['REQUEST_METHOD'] = self.command + uqrest = urllib.unquote(rest) + env['PATH_INFO'] = uqrest + env['PATH_TRANSLATED'] = self.translate_path(uqrest) + env['SCRIPT_NAME'] = scriptname + if query: + env['QUERY_STRING'] = query + host = self.address_string() + if host != self.client_address[0]: + env['REMOTE_HOST'] = host + env['REMOTE_ADDR'] = self.client_address[0] + authorization = self.headers.getheader("authorization") + if authorization: + authorization = authorization.split() + if len(authorization) == 2: + import base64, binascii + env['AUTH_TYPE'] = authorization[0] + if authorization[0].lower() == "basic": + try: + authorization = base64.decodestring(authorization[1]) + except binascii.Error: + pass + else: + authorization = authorization.split(':') + if len(authorization) == 2: + env['REMOTE_USER'] = authorization[0] + # XXX REMOTE_IDENT + if self.headers.typeheader is None: + env['CONTENT_TYPE'] = self.headers.type + else: + env['CONTENT_TYPE'] = self.headers.typeheader + length = self.headers.getheader('content-length') + if length: + env['CONTENT_LENGTH'] = length + referer = self.headers.getheader('referer') + if referer: + env['HTTP_REFERER'] = referer + accept = [] + for line in self.headers.getallmatchingheaders('accept'): + if line[:1] in "\t\n\r ": + accept.append(line.strip()) + else: + accept = accept + line[7:].split(',') + env['HTTP_ACCEPT'] = ','.join(accept) + ua = self.headers.getheader('user-agent') + if ua: + env['HTTP_USER_AGENT'] = ua + co = filter(None, self.headers.getheaders('cookie')) + if co: + env['HTTP_COOKIE'] = ', '.join(co) + # XXX Other HTTP_* headers + # Since we're setting the env in the parent, provide empty + # values to override previously set values + for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH', + 'HTTP_USER_AGENT', 'HTTP_COOKIE', 'HTTP_REFERER'): + env.setdefault(k, "") + os.environ.update(env) + + self.send_response(200, "Script output follows") + + decoded_query = query.replace('+', ' ') + + if self.have_fork: + # Unix -- fork as we should + args = [script] + if '=' not in decoded_query: + args.append(decoded_query) + nobody = nobody_uid() + self.wfile.flush() # Always flush before forking + pid = os.fork() + if pid != 0: + # Parent + pid, sts = os.waitpid(pid, 0) + # throw away additional data [see bug #427345] + while select.select([self.rfile], [], [], 0)[0]: + if not self.rfile.read(1): + break + if sts: + self.log_error("CGI script exit status %#x", sts) + return + # Child + try: + try: + os.setuid(nobody) + except os.error: + pass + os.dup2(self.rfile.fileno(), 0) + os.dup2(self.wfile.fileno(), 1) + os.execve(scriptfile, args, os.environ) + except: + self.server.handle_error(self.request, self.client_address) + os._exit(127) + + elif self.have_popen2 or self.have_popen3: + # Windows -- use popen2 or popen3 to create a subprocess + import shutil + if self.have_popen3: + popenx = os.popen3 + else: + popenx = os.popen2 + cmdline = scriptfile + if self.is_python(scriptfile): + interp = sys.executable + if interp.lower().endswith("w.exe"): + # On Windows, use python.exe, not pythonw.exe + interp = interp[:-5] + interp[-4:] + cmdline = "%s -u %s" % (interp, cmdline) + if '=' not in query and '"' not in query: + cmdline = '%s "%s"' % (cmdline, query) + self.log_message("command: %s", cmdline) + try: + nbytes = int(length) + except (TypeError, ValueError): + nbytes = 0 + files = popenx(cmdline, 'b') + fi = files[0] + fo = files[1] + if self.have_popen3: + fe = files[2] + if self.command.lower() == "post" and nbytes > 0: + data = self.rfile.read(nbytes) + fi.write(data) + # throw away additional data [see bug #427345] + while select.select([self.rfile._sock], [], [], 0)[0]: + if not self.rfile._sock.recv(1): + break + fi.close() + shutil.copyfileobj(fo, self.wfile) + if self.have_popen3: + errors = fe.read() + fe.close() + if errors: + self.log_error('%s', errors) + sts = fo.close() + if sts: + self.log_error("CGI script exit status %#x", sts) + else: + self.log_message("CGI script exited OK") + + else: + # Other O.S. -- execute script in this process + save_argv = sys.argv + save_stdin = sys.stdin + save_stdout = sys.stdout + save_stderr = sys.stderr + try: + save_cwd = os.getcwd() + try: + sys.argv = [scriptfile] + if '=' not in decoded_query: + sys.argv.append(decoded_query) + sys.stdout = self.wfile + sys.stdin = self.rfile + execfile(scriptfile, {"__name__": "__main__"}) + finally: + sys.argv = save_argv + sys.stdin = save_stdin + sys.stdout = save_stdout + sys.stderr = save_stderr + os.chdir(save_cwd) + except SystemExit, sts: + self.log_error("CGI script exit status %s", str(sts)) + else: + self.log_message("CGI script exited OK") + + +nobody = None + +def nobody_uid(): + """Internal routine to get nobody's uid""" + global nobody + if nobody: + return nobody + try: + import pwd + except ImportError: + return -1 + try: + nobody = pwd.getpwnam('nobody')[2] + except KeyError: + nobody = 1 + max(map(lambda x: x[2], pwd.getpwall())) + return nobody + + +def executable(path): + """Test for executable file.""" + try: + st = os.stat(path) + except os.error: + return False + return st.st_mode & 0111 != 0 + + +def test(HandlerClass = CGIHTTPRequestHandler, + ServerClass = BaseHTTPServer.HTTPServer): + SimpleHTTPServer.test(HandlerClass, ServerClass) + + +if __name__ == '__main__': + test() diff --git a/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.test b/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.test new file mode 100644 index 0000000..86e4fde --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/CGIHTTPServer.test @@ -0,0 +1,5 @@ +language-python-roundtrip 2 CGIHTTPServer.py +<<< +>>> +>>>2 +>>>=0 diff --git a/language-python-test/test/CPython_test_suite_v2/ConfigParser.py b/language-python-test/test/CPython_test_suite_v2/ConfigParser.py new file mode 100644 index 0000000..b6af6f9 --- /dev/null +++ b/language-python-test/test/CPython_test_suite_v2/ConfigParser.py @@ -0,0 +1,669 @@ +"""Configuration file parser. + +A setup file consists of sections, lead by a "[section]" header, +and followed by "name: value" entries, with continuations and such in +the style of RFC 822. + +The option values can contain format strings which refer to other values in +the same section, or values in a special [DEFAULT] section. + +For example: + + something: %(dir)s/whatever + +would resolve the "%(dir)s" to the value of dir. All reference +expansions are done late, on demand. + +Intrinsic defaults can be specified by passing them into the +ConfigParser constructor as a dictionary. + +class: + +ConfigParser -- responsible for parsing a list of + configuration files, and managing the parsed database. + + methods: + + __init__(defaults=None) + create the parser and specify a dictionary of intrinsic defaults. The + keys must be strings, the values must be appropriate for %()s string + interpolation. Note that `__name__' is always an intrinsic default; + its value is the section's name. + + sections() + return all the configuration section names, sans DEFAULT + + has_section(section) + return whether the given section exists + + has_option(section, option) + return whether the given option exists in the given section + + options(section) + return list of configuration options for the named section + + read(filenames) + read and parse the list of named configuration files, given by + name. A single filename is also allowed. Non-existing files + are ignored. Return list of successfully read files. + + readfp(fp, filename=None) + read and parse one configuration file, given as a file object. + The filename defaults to fp.name; it is only used in error + messages (if fp has no `name' attribute, the string `' is used). + + get(section, option, raw=False, vars=None) + return a string value for the named option. All % interpolations are + expanded in the return values, based on the defaults passed into the + constructor and the DEFAULT section. Additional substitutions may be + provided using the `vars' argument, which must be a dictionary whose + contents override any pre-existing defaults. + + getint(section, options) + like get(), but convert value to an integer + + getfloat(section, options) + like get(), but convert value to a float + + getboolean(section, options) + like get(), but convert value to a boolean (currently case + insensitively defined as 0, false, no, off for False, and 1, true, + yes, on for True). Returns False or True. + + items(section, raw=False, vars=None) + return a list of tuples with (name, value) for each option + in the section. + + remove_section(section) + remove the given file section and all its options + + remove_option(section, option) + remove the given option from the given section + + set(section, option, value) + set the given option + + write(fp) + write the configuration state in .ini format +""" + +import re + +__all__ = ["NoSectionError", "DuplicateSectionError", "NoOptionError", + "InterpolationError", "InterpolationDepthError", + "InterpolationSyntaxError", "ParsingError", + "MissingSectionHeaderError", + "ConfigParser", "SafeConfigParser", "RawConfigParser", + "DEFAULTSECT", "MAX_INTERPOLATION_DEPTH"] + +DEFAULTSECT = "DEFAULT" + +MAX_INTERPOLATION_DEPTH = 10 + + + +# exception classes +class Error(Exception): + """Base class for ConfigParser exceptions.""" + + def _get_message(self): + """Getter for 'message'; needed only to override deprecation in + BaseException.""" + return self.__message + + def _set_message(self, value): + """Setter for 'message'; needed only to override deprecation in + BaseException.""" + self.__message = value + + # BaseException.message has been deprecated since Python 2.6. To prevent + # DeprecationWarning from popping up over this pre-existing attribute, use + # a new property that takes lookup precedence. + message = property(_get_message, _set_message) + + def __init__(self, msg=''): + self.message = msg + Exception.__init__(self, msg) + + def __repr__(self): + return self.message + + __str__ = __repr__ + +class NoSectionError(Error): + """Raised when no section matches a requested option.""" + + def __init__(self, section): + Error.__init__(self, 'No section: %r' % (section,)) + self.section = section + +class DuplicateSectionError(Error): + """Raised when a section is multiply-created.""" + + def __init__(self, section): + Error.__init__(self, "Section %r already exists" % section) + self.section = section + +class NoOptionError(Error): + """A requested option was not found.""" + + def __init__(self, option, section): + Error.__init__(self, "No option %r in section: %r" % + (option, section)) + self.option = option + self.section = section + +class InterpolationError(Error): + """Base class for interpolation-related exceptions.""" + + def __init__(self, option, section, msg): + Error.__init__(self, msg) + self.option = option + self.section = section + +class InterpolationMissingOptionError(InterpolationError): + """A string substitution required a setting which was not available.""" + + def __init__(self, option, section, rawval, reference): + msg = ("Bad value substitution:\n" + "\tsection: [%s]\n" + "\toption : %s\n" + "\tkey : %s\n" + "\trawval : %s\n" + % (section, option, reference, rawval)) + InterpolationError.__init__(self, option, section, msg) + self.reference = reference + +class InterpolationSyntaxError(InterpolationError): + """Raised when the source text into which substitutions are made + does not conform to the required syntax.""" + +class InterpolationDepthError(InterpolationError): + """Raised when substitutions are nested too deeply.""" + + def __init__(self, option, section, rawval): + msg = ("Value interpolation too deeply recursive:\n" + "\tsection: [%s]\n" + "\toption : %s\n" + "\trawval : %s\n" + % (section, option, rawval)) + InterpolationError.__init__(self, option, section, msg) + +class ParsingError(Error): + """Raised when a configuration file does not follow legal syntax.""" + + def __init__(self, filename): + Error.__init__(self, 'File contains parsing errors: %s' % filename) + self.filename = filename + self.errors = [] + + def append(self, lineno, line): + self.errors.append((lineno, line)) + self.message += '\n\t[line %2d]: %s' % (lineno, line) + +class MissingSectionHeaderError(ParsingError): + """Raised when a key-value pair is found before any section header.""" + + def __init__(self, filename, lineno, line): + Error.__init__( + self, + 'File contains no section headers.\nfile: %s, line: %d\n%r' % + (filename, lineno, line)) + self.filename = filename + self.lineno = lineno + self.line = line + + +class RawConfigParser: + def __init__(self, defaults=None, dict_type=dict): + self._dict = dict_type + self._sections = self._dict() + self._defaults = self._dict() + if defaults: + for key, value in defaults.items(): + self._defaults[self.optionxform(key)] = value + + def defaults(self): + return self._defaults + + def sections(self): + """Return a list of section names, excluding [DEFAULT]""" + # self._sections will never have [DEFAULT] in it + return self._sections.keys() + + def add_section(self, section): + """Create a new section in the configuration. + + Raise DuplicateSectionError if a section by the specified name + already exists. Raise ValueError if name is DEFAULT or any of it's + case-insensitive variants. + """ + if section.lower() == "default": + raise ValueError, 'Invalid section name: %s' % section + + if section in self._sections: + raise DuplicateSectionError(section) + self._sections[section] = self._dict() + + def has_section(self, section): + """Indicate whether the named section is present in the configuration. + + The DEFAULT section is not acknowledged. + """ + return section in self._sections + + def options(self, section): + """Return a list of option names for the given section name.""" + try: + opts = self._sections[section].copy() + except KeyError: + raise NoSectionError(section) + opts.update(self._defaults) + if '__name__' in opts: + del opts['__name__'] + return opts.keys() + + def read(self, filenames): + """Read and parse a filename or a list of filenames. + + Files that cannot be opened are silently ignored; this is + designed so that you can specify a list of potential + configuration file locations (e.g. current directory, user's + home directory, systemwide directory), and all existing + configuration files in the list will be read. A single + filename may also be given. + + Return list of successfully read files. + """ + if isinstance(filenames, basestring): + filenames = [filenames] + read_ok = [] + for filename in filenames: + try: + fp = open(filename) + except IOError: + continue + self._read(fp, filename) + fp.close() + read_ok.append(filename) + return read_ok + + def readfp(self, fp, filename=None): + """Like read() but the argument must be a file-like object. + + The `fp' argument must have a `readline' method. Optional + second argument is the `filename', which if not given, is + taken from fp.name. If fp has no `name' attribute, `' is + used. + + """ + if filename is None: + try: + filename = fp.name + except AttributeError: + filename = '' + self._read(fp, filename) + + def get(self, section, option): + opt = self.optionxform(option) + if section not in self._sections: + if section != DEFAULTSECT: + raise NoSectionError(section) + if opt in self._defaults: + return self._defaults[opt] + else: + raise NoOptionError(option, section) + elif opt in self._sections[section]: + return self._sections[section][opt] + elif opt in self._defaults: + return self._defaults[opt] + else: + raise NoOptionError(option, section) + + def items(self, section): + try: + d2 = self._sections[section] + except KeyError: + if section != DEFAULTSECT: + raise NoSectionError(section) + d2 = self._dict() + d = self._defaults.copy() + d.update(d2) + if "__name__" in d: + del d["__name__"] + return d.items() + + def _get(self, section, conv, option): + return conv(self.get(section, option)) + + def getint(self, section, option): + return self._get(section, int, option) + + def getfloat(self, section, option): + return self._get(section, float, option) + + _boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True, + '0': False, 'no': False, 'false': False, 'off': False} + + def getboolean(self, section, option): + v = self.get(section, option) + if v.lower() not in self._boolean_states: + raise ValueError, 'Not a boolean: %s' % v + return self._boolean_states[v.lower()] + + def optionxform(self, optionstr): + return optionstr.lower() + + def has_option(self, section, option): + """Check for the existence of a given option in a given section.""" + if not section or section == DEFAULTSECT: + option = self.optionxform(option) + return option in self._defaults + elif section not in self._sections: + return False + else: + option = self.optionxform(option) + return (option in self._sections[section] + or option in self._defaults) + + def set(self, section, option, value): + """Set an option.""" + if not section or section == DEFAULTSECT: + sectdict = self._defaults + else: + try: + sectdict = self._sections[section] + except KeyError: + raise NoSectionError(section) + sectdict[self.optionxform(option)] = value + + def write(self, fp): + """Write an .ini-format representation of the configuration state.""" + if self._defaults: + fp.write("[%s]\n" % DEFAULTSECT) + for (key, value) in self._defaults.items(): + fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t'))) + fp.write("\n") + for section in self._sections: + fp.write("[%s]\n" % section) + for (key, value) in self._sections[section].items(): + if key != "__name__": + fp.write("%s = %s\n" % + (key, str(value).replace('\n', '\n\t'))) + fp.write("\n") + + def remove_option(self, section, option): + """Remove an option.""" + if not section or section == DEFAULTSECT: + sectdict = self._defaults + else: + try: + sectdict = self._sections[section] + except KeyError: + raise NoSectionError(section) + option = self.optionxform(option) + existed = option in sectdict + if existed: + del sectdict[option] + return existed + + def remove_section(self, section): + """Remove a file section.""" + existed = section in self._sections + if existed: + del self._sections[section] + return existed + + # + # Regular expressions for parsing section headers and options. + # + SECTCRE = re.compile( + r'\[' # [ + r'(?P

[^]]+)' # very permissive! + r'\]' # ] + ) + OPTCRE = re.compile( + r'(?P