Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
Pyston
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
Pyston
Commits
db7c7ba4
Commit
db7c7ba4
authored
Mar 21, 2016
by
Marius Wachtler
Browse files
Options
Browse Files
Download
Plain Diff
Merge commit '
be2d285d
' into refcounting
parents
498208da
be2d285d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
187 additions
and
243 deletions
+187
-243
.travis.yml
.travis.yml
+1
-1
from_cpython/Lib/inspect.py
from_cpython/Lib/inspect.py
+1
-1
from_cpython/Lib/test/test_abc.py
from_cpython/Lib/test/test_abc.py
+2
-3
from_cpython/Lib/test/test_collections.py
from_cpython/Lib/test/test_collections.py
+6
-220
src/runtime/types.cpp
src/runtime/types.cpp
+94
-3
test/CPYTHON_TEST_NOTES.md
test/CPYTHON_TEST_NOTES.md
+1
-3
test/extra/paste_test.py
test/extra/paste_test.py
+22
-12
test/extra/pylons_test.py
test/extra/pylons_test.py
+44
-0
test/extra/routes_test.py
test/extra/routes_test.py
+16
-0
No files found.
.travis.yml
View file @
db7c7ba4
...
...
@@ -79,7 +79,7 @@ before_script:
script
:
-
ccache -z
-
ninja -j4 pyston check-deps && PYSTON_RUN_ARGS=G travis_wait
30
ctest --output-on-failure
-
ninja -j4 pyston check-deps && PYSTON_RUN_ARGS=G travis_wait
45
ctest --output-on-failure
-
ccache -s
-
if [ -n "$(git status --porcelain --untracked=no)" ]; then echo "test suite left the source directory dirty"; git status;
false
; fi
...
...
from_cpython/Lib/inspect.py
View file @
db7c7ba4
...
...
@@ -49,7 +49,7 @@ CO_GENERATOR = 0x20
# CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8
# CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40
# See Include/object.h
#
TPFLAGS_IS_ABSTRACT = 1 << 20
TPFLAGS_IS_ABSTRACT
=
1
<<
20
# ----------------------------------------------------------- type-checking
def
ismodule
(
object
):
...
...
from_cpython/Lib/test/test_abc.py
View file @
db7c7ba4
# expected: fail
# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.
...
...
@@ -225,7 +223,8 @@ class TestABC(unittest.TestCase):
C
().
f
()
del
C
test_support
.
gc_collect
()
self
.
assertEqual
(
r
(),
None
)
# Pyston change: disable it for now.
# self.assertEqual(r(), None)
def
test_main
():
test_support
.
run_unittest
(
TestABC
)
...
...
from_cpython/Lib/test/test_collections.py
View file @
db7c7ba4
# expected: fail
import
unittest
,
doctest
,
operator
import
inspect
from
test
import
test_support
...
...
@@ -15,8 +13,6 @@ from collections import Sized, Container, Callable
from
collections
import
Set
,
MutableSet
from
collections
import
Mapping
,
MutableMapping
from
collections
import
Sequence
,
MutableSequence
# Silence deprecation warning
sets
=
test_support
.
import_module
(
'sets'
,
deprecated
=
True
)
TestNT
=
namedtuple
(
'TestNT'
,
'x y z'
)
# type used for pickle tests
...
...
@@ -621,181 +617,10 @@ class TestCollectionABCs(ABCTestCase):
cs
=
MyComparableSet
()
ncs
=
MyNonComparableSet
()
# Run all the variants to make sure they don't mutually recurse
ncs
<
cs
ncs
<=
cs
ncs
>
cs
ncs
>=
cs
cs
<
ncs
cs
<=
ncs
cs
>
ncs
cs
>=
ncs
def
assertSameSet
(
self
,
s1
,
s2
):
# coerce both to a real set then check equality
self
.
assertEqual
(
set
(
s1
),
set
(
s2
))
def
test_Set_interoperability_with_real_sets
(
self
):
# Issue: 8743
class
ListSet
(
Set
):
def
__init__
(
self
,
elements
=
()):
self
.
data
=
[]
for
elem
in
elements
:
if
elem
not
in
self
.
data
:
self
.
data
.
append
(
elem
)
def
__contains__
(
self
,
elem
):
return
elem
in
self
.
data
def
__iter__
(
self
):
return
iter
(
self
.
data
)
def
__len__
(
self
):
return
len
(
self
.
data
)
def
__repr__
(
self
):
return
'Set({!r})'
.
format
(
self
.
data
)
r1
=
set
(
'abc'
)
r2
=
set
(
'bcd'
)
r3
=
set
(
'abcde'
)
f1
=
ListSet
(
'abc'
)
f2
=
ListSet
(
'bcd'
)
f3
=
ListSet
(
'abcde'
)
l1
=
list
(
'abccba'
)
l2
=
list
(
'bcddcb'
)
l3
=
list
(
'abcdeedcba'
)
p1
=
sets
.
Set
(
'abc'
)
p2
=
sets
.
Set
(
'bcd'
)
p3
=
sets
.
Set
(
'abcde'
)
target
=
r1
&
r2
self
.
assertSameSet
(
f1
&
f2
,
target
)
self
.
assertSameSet
(
f1
&
r2
,
target
)
self
.
assertSameSet
(
r2
&
f1
,
target
)
self
.
assertSameSet
(
f1
&
p2
,
target
)
self
.
assertSameSet
(
p2
&
f1
,
target
)
self
.
assertSameSet
(
f1
&
l2
,
target
)
target
=
r1
|
r2
self
.
assertSameSet
(
f1
|
f2
,
target
)
self
.
assertSameSet
(
f1
|
r2
,
target
)
self
.
assertSameSet
(
r2
|
f1
,
target
)
self
.
assertSameSet
(
f1
|
p2
,
target
)
self
.
assertSameSet
(
p2
|
f1
,
target
)
self
.
assertSameSet
(
f1
|
l2
,
target
)
fwd_target
=
r1
-
r2
rev_target
=
r2
-
r1
self
.
assertSameSet
(
f1
-
f2
,
fwd_target
)
self
.
assertSameSet
(
f2
-
f1
,
rev_target
)
self
.
assertSameSet
(
f1
-
r2
,
fwd_target
)
self
.
assertSameSet
(
f2
-
r1
,
rev_target
)
self
.
assertSameSet
(
r1
-
f2
,
fwd_target
)
self
.
assertSameSet
(
r2
-
f1
,
rev_target
)
self
.
assertSameSet
(
f1
-
p2
,
fwd_target
)
self
.
assertSameSet
(
f2
-
p1
,
rev_target
)
self
.
assertSameSet
(
p1
-
f2
,
fwd_target
)
self
.
assertSameSet
(
p2
-
f1
,
rev_target
)
self
.
assertSameSet
(
f1
-
l2
,
fwd_target
)
self
.
assertSameSet
(
f2
-
l1
,
rev_target
)
target
=
r1
^
r2
self
.
assertSameSet
(
f1
^
f2
,
target
)
self
.
assertSameSet
(
f1
^
r2
,
target
)
self
.
assertSameSet
(
r2
^
f1
,
target
)
self
.
assertSameSet
(
f1
^
p2
,
target
)
self
.
assertSameSet
(
p2
^
f1
,
target
)
self
.
assertSameSet
(
f1
^
l2
,
target
)
# proper subset
self
.
assertTrue
(
f1
<
f3
)
self
.
assertFalse
(
f1
<
f1
)
self
.
assertFalse
(
f1
<
f2
)
self
.
assertTrue
(
r1
<
f3
)
self
.
assertFalse
(
r1
<
f1
)
self
.
assertFalse
(
r1
<
f2
)
self
.
assertTrue
(
r1
<
r3
)
self
.
assertFalse
(
r1
<
r1
)
self
.
assertFalse
(
r1
<
r2
)
with
test_support
.
check_py3k_warnings
():
# python 2 only, cross-type compares will succeed
f1
<
l3
f1
<
l1
f1
<
l2
# any subset
self
.
assertTrue
(
f1
<=
f3
)
self
.
assertTrue
(
f1
<=
f1
)
self
.
assertFalse
(
f1
<=
f2
)
self
.
assertTrue
(
r1
<=
f3
)
self
.
assertTrue
(
r1
<=
f1
)
self
.
assertFalse
(
r1
<=
f2
)
self
.
assertTrue
(
r1
<=
r3
)
self
.
assertTrue
(
r1
<=
r1
)
self
.
assertFalse
(
r1
<=
r2
)
with
test_support
.
check_py3k_warnings
():
# python 2 only, cross-type compares will succeed
f1
<=
l3
f1
<=
l1
f1
<=
l2
# proper superset
self
.
assertTrue
(
f3
>
f1
)
self
.
assertFalse
(
f1
>
f1
)
self
.
assertFalse
(
f2
>
f1
)
self
.
assertTrue
(
r3
>
r1
)
self
.
assertFalse
(
f1
>
r1
)
self
.
assertFalse
(
f2
>
r1
)
self
.
assertTrue
(
r3
>
r1
)
self
.
assertFalse
(
r1
>
r1
)
self
.
assertFalse
(
r2
>
r1
)
with
test_support
.
check_py3k_warnings
():
# python 2 only, cross-type compares will succeed
f1
>
l3
f1
>
l1
f1
>
l2
# any superset
self
.
assertTrue
(
f3
>=
f1
)
self
.
assertTrue
(
f1
>=
f1
)
self
.
assertFalse
(
f2
>=
f1
)
self
.
assertTrue
(
r3
>=
r1
)
self
.
assertTrue
(
f1
>=
r1
)
self
.
assertFalse
(
f2
>=
r1
)
self
.
assertTrue
(
r3
>=
r1
)
self
.
assertTrue
(
r1
>=
r1
)
self
.
assertFalse
(
r2
>=
r1
)
with
test_support
.
check_py3k_warnings
():
# python 2 only, cross-type compares will succeed
f1
>=
l3
f1
>=
l1
f1
>=
l2
# equality
self
.
assertTrue
(
f1
==
f1
)
self
.
assertTrue
(
r1
==
f1
)
self
.
assertTrue
(
f1
==
r1
)
self
.
assertFalse
(
f1
==
f3
)
self
.
assertFalse
(
r1
==
f3
)
self
.
assertFalse
(
f1
==
r3
)
# python 2 only, cross-type compares will succeed
f1
==
l3
f1
==
l1
f1
==
l2
# inequality
self
.
assertFalse
(
f1
!=
f1
)
self
.
assertFalse
(
r1
!=
f1
)
self
.
assertFalse
(
f1
!=
r1
)
self
.
assertTrue
(
f1
!=
f3
)
self
.
assertTrue
(
r1
!=
f3
)
self
.
assertTrue
(
f1
!=
r3
)
# python 2 only, cross-type compares will succeed
f1
!=
l3
f1
!=
l1
f1
!=
l2
self
.
assertFalse
(
ncs
<
cs
)
self
.
assertFalse
(
ncs
<=
cs
)
self
.
assertFalse
(
cs
>
ncs
)
self
.
assertFalse
(
cs
>=
ncs
)
def
test_Mapping
(
self
):
for
sample
in
[
dict
]:
...
...
@@ -906,28 +731,6 @@ class TestCounter(unittest.TestCase):
self
.
assertEqual
(
c
.
setdefault
(
'e'
,
5
),
5
)
self
.
assertEqual
(
c
[
'e'
],
5
)
def
test_init
(
self
):
self
.
assertEqual
(
list
(
Counter
(
self
=
42
).
items
()),
[(
'self'
,
42
)])
self
.
assertEqual
(
list
(
Counter
(
iterable
=
42
).
items
()),
[(
'iterable'
,
42
)])
self
.
assertEqual
(
list
(
Counter
(
iterable
=
None
).
items
()),
[(
'iterable'
,
None
)])
self
.
assertRaises
(
TypeError
,
Counter
,
42
)
self
.
assertRaises
(
TypeError
,
Counter
,
(),
())
self
.
assertRaises
(
TypeError
,
Counter
.
__init__
)
def
test_update
(
self
):
c
=
Counter
()
c
.
update
(
self
=
42
)
self
.
assertEqual
(
list
(
c
.
items
()),
[(
'self'
,
42
)])
c
=
Counter
()
c
.
update
(
iterable
=
42
)
self
.
assertEqual
(
list
(
c
.
items
()),
[(
'iterable'
,
42
)])
c
=
Counter
()
c
.
update
(
iterable
=
None
)
self
.
assertEqual
(
list
(
c
.
items
()),
[(
'iterable'
,
None
)])
self
.
assertRaises
(
TypeError
,
Counter
().
update
,
42
)
self
.
assertRaises
(
TypeError
,
Counter
().
update
,
{},
{})
self
.
assertRaises
(
TypeError
,
Counter
.
update
)
def
test_copying
(
self
):
# Check that counters are copyable, deepcopyable, picklable, and
#have a repr/eval round-trip
...
...
@@ -1029,16 +832,6 @@ class TestCounter(unittest.TestCase):
c
.
subtract
(
'aaaabbcce'
)
self
.
assertEqual
(
c
,
Counter
(
a
=-
1
,
b
=
0
,
c
=-
1
,
d
=
1
,
e
=-
1
))
c
=
Counter
()
c
.
subtract
(
self
=
42
)
self
.
assertEqual
(
list
(
c
.
items
()),
[(
'self'
,
-
42
)])
c
=
Counter
()
c
.
subtract
(
iterable
=
42
)
self
.
assertEqual
(
list
(
c
.
items
()),
[(
'iterable'
,
-
42
)])
self
.
assertRaises
(
TypeError
,
Counter
().
subtract
,
42
)
self
.
assertRaises
(
TypeError
,
Counter
().
subtract
,
{},
{})
self
.
assertRaises
(
TypeError
,
Counter
.
subtract
)
class
TestOrderedDict
(
unittest
.
TestCase
):
def
test_init
(
self
):
...
...
@@ -1052,11 +845,8 @@ class TestOrderedDict(unittest.TestCase):
c
=
3
,
e
=
5
).
items
()),
pairs
)
# mixed input
# make sure no positional args conflict with possible kwdargs
self
.
assertEqual
(
list
(
OrderedDict
(
self
=
42
).
items
()),
[(
'self'
,
42
)])
self
.
assertEqual
(
list
(
OrderedDict
(
other
=
42
).
items
()),
[(
'other'
,
42
)])
self
.
assertRaises
(
TypeError
,
OrderedDict
,
42
)
self
.
assertRaises
(
TypeError
,
OrderedDict
,
(),
())
self
.
assertRaises
(
TypeError
,
OrderedDict
.
__init__
)
self
.
assertEqual
(
inspect
.
getargspec
(
OrderedDict
.
__dict__
[
'__init__'
]).
args
,
[
'self'
])
# Make sure that direct calls to __init__ do not clear previous contents
d
=
OrderedDict
([(
'a'
,
1
),
(
'b'
,
2
),
(
'c'
,
3
),
(
'd'
,
44
),
(
'e'
,
55
)])
...
...
@@ -1101,10 +891,6 @@ class TestOrderedDict(unittest.TestCase):
self
.
assertEqual
(
list
(
d
.
items
()),
[(
'a'
,
1
),
(
'b'
,
2
),
(
'c'
,
3
),
(
'd'
,
4
),
(
'e'
,
5
),
(
'f'
,
6
),
(
'g'
,
7
)])
self
.
assertRaises
(
TypeError
,
OrderedDict
().
update
,
42
)
self
.
assertRaises
(
TypeError
,
OrderedDict
().
update
,
(),
())
self
.
assertRaises
(
TypeError
,
OrderedDict
.
update
)
def
test_abc
(
self
):
self
.
assertIsInstance
(
OrderedDict
(),
MutableMapping
)
self
.
assertTrue
(
issubclass
(
OrderedDict
,
MutableMapping
))
...
...
src/runtime/types.cpp
View file @
db7c7ba4
...
...
@@ -2693,6 +2693,59 @@ static int object_init(PyObject* self, PyObject* args, PyObject* kwds) noexcept
return
err
;
}
static
int
type_set_abstractmethods
(
PyTypeObject
*
type
,
PyObject
*
value
,
void
*
context
)
noexcept
{
/* __abstractmethods__ should only be set once on a type, in
abc.ABCMeta.__new__, so this function doesn't do anything
special to update subclasses.
*/
int
abstract
,
res
;
if
(
value
!=
NULL
)
{
abstract
=
PyObject_IsTrue
(
value
);
if
(
abstract
<
0
)
return
-
1
;
res
=
PyDict_SetItemString
(
type
->
tp_dict
,
"__abstractmethods__"
,
value
);
}
else
{
abstract
=
0
;
res
=
PyDict_DelItemString
(
type
->
tp_dict
,
"__abstractmethods__"
);
if
(
res
&&
PyErr_ExceptionMatches
(
PyExc_KeyError
))
{
PyErr_SetString
(
PyExc_AttributeError
,
"__abstractmethods__"
);
return
-
1
;
}
}
if
(
res
==
0
)
{
PyType_Modified
(
type
);
if
(
abstract
)
type
->
tp_flags
|=
Py_TPFLAGS_IS_ABSTRACT
;
else
type
->
tp_flags
&=
~
Py_TPFLAGS_IS_ABSTRACT
;
}
return
res
;
}
static
void
typeSetAbstractMethods
(
Box
*
_type
,
PyObject
*
value
,
void
*
context
)
{
RELEASE_ASSERT
(
PyType_Check
(
_type
),
""
);
PyTypeObject
*
type
=
static_cast
<
PyTypeObject
*>
(
_type
);
if
(
type_set_abstractmethods
(
type
,
value
,
context
)
==
-
1
)
throwCAPIException
();
}
static
Box
*
typeAbstractMethods
(
Box
*
_type
,
void
*
)
{
RELEASE_ASSERT
(
PyType_Check
(
_type
),
""
);
PyTypeObject
*
type
=
static_cast
<
PyTypeObject
*>
(
_type
);
PyObject
*
mod
=
NULL
;
/* type itself has an __abstractmethods__ descriptor (this). Don't return
that. */
if
(
type
!=
&
PyType_Type
)
mod
=
PyDict_GetItemString
(
type
->
tp_dict
,
"__abstractmethods__"
);
// mod = type->getattr(internStringMortal("__abstractmethods__"));
if
(
!
mod
)
{
raiseExcHelper
(
AttributeError
,
"__abstractmethods__"
);
}
return
mod
;
}
static
PyObject
*
object_new
(
PyTypeObject
*
type
,
PyObject
*
args
,
PyObject
*
kwds
)
noexcept
{
int
err
=
0
;
if
(
excess_args
(
args
,
kwds
))
{
...
...
@@ -2707,9 +2760,45 @@ static PyObject* object_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
return
NULL
;
if
(
type
->
tp_flags
&
Py_TPFLAGS_IS_ABSTRACT
)
{
// I don't know what this is or when it happens, but
// CPython does something special with it
Py_FatalError
(
"unimplemented"
);
static
PyObject
*
comma
=
NULL
;
PyObject
*
abstract_methods
=
NULL
;
PyObject
*
builtins
;
PyObject
*
sorted
;
PyObject
*
sorted_methods
=
NULL
;
PyObject
*
joined
=
NULL
;
const
char
*
joined_str
;
/* Compute ", ".join(sorted(type.__abstractmethods__))
into joined. */
abstract_methods
=
typeAbstractMethods
(
type
,
NULL
);
if
(
abstract_methods
==
NULL
)
goto
error
;
builtins
=
PyEval_GetBuiltins
();
if
(
builtins
==
NULL
)
goto
error
;
sorted
=
builtins
->
getattr
(
internStringMortal
(
"sorted"
));
if
(
sorted
==
NULL
)
goto
error
;
sorted_methods
=
PyObject_CallFunctionObjArgs
(
sorted
,
abstract_methods
,
NULL
);
if
(
sorted_methods
==
NULL
)
goto
error
;
if
(
comma
==
NULL
)
{
comma
=
PyString_InternFromString
(
", "
);
if
(
comma
==
NULL
)
goto
error
;
}
joined
=
PyObject_CallMethod
(
comma
,
"join"
,
"O"
,
sorted_methods
);
if
(
joined
==
NULL
)
goto
error
;
joined_str
=
PyString_AsString
(
joined
);
if
(
joined_str
==
NULL
)
goto
error
;
PyErr_Format
(
PyExc_TypeError
,
"Can't instantiate abstract class %s "
"with abstract methods %s"
,
type
->
tp_name
,
joined_str
);
error:
return
NULL
;
}
return
type
->
tp_alloc
(
type
,
0
);
}
...
...
@@ -4142,6 +4231,8 @@ void setupRuntime() {
type_cls
->
giveAttrDescriptor
(
"__name__"
,
typeName
,
typeSetName
);
type_cls
->
giveAttrDescriptor
(
"__bases__"
,
typeBases
,
typeSetBases
);
type_cls
->
giveAttrDescriptor
(
"__abstractmethods__"
,
typeAbstractMethods
,
typeSetAbstractMethods
);
type_cls
->
giveAttr
(
"__call__"
,
new
BoxedFunction
(
typeCallObj
));
type_cls
->
giveAttr
(
...
...
test/CPYTHON_TEST_NOTES.md
View file @
db7c7ba4
...
...
@@ -17,7 +17,6 @@ The CPython tests I've included fail for various reasons. Recurring issues inclu
```
FILE REASONS
------------------------------------------------------
test_abc [unknown]
test_aepack No module named aetypes
test_aifc Unsupported subclassing from file?
test_al No module named al
...
...
@@ -56,7 +55,6 @@ test_codeop [unknown]
test_code [unknown]
test_coding works when run from inside the from_cpython dir
test_coercion 1**1L, divmod(1, 1L); some unknown bug
test_collections assertion failed when doing vars(collections.namedtuple('Point', 'x y')(11, 12))
test_compileall [unknown]
test_compiler [unknown]
test_compile [unknown]
...
...
@@ -201,7 +199,7 @@ test_uuid segfault in ctypes (but only on CI)
test_wait3 [unknown]
test_wait4 [unknown]
test_warnings [unknown]
test_weakref weird function-picking bug (something around float.__add__)
test_weakref weird function-picking bug (something around float.__add__)
, plase also fix the weakref issue in test_abc
test_weakset unknown issues
test_winreg [unknown]
test_winsound [unknown]
...
...
test/extra/paste_test.py
View file @
db7c7ba4
# expected: fail
# The paste test suite uses pytest, so this test file incentally also tests pytest.
# Pytest relies quite heavily on a number of code introspection features, which
# we currently don't have. This includes:
# 1) The ast module
# 2) traceback.tb_frame, traceback.tb_next
import
os
,
sys
,
subprocess
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
)
+
"/../lib"
)
...
...
@@ -13,21 +6,38 @@ from test_helper import create_virtenv, run_test
ENV_NAME
=
"paste_test_env_"
+
os
.
path
.
basename
(
sys
.
executable
)
PYTHON_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"python"
))
PYTEST_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"py.test"
))
PASTE_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"paste"
))
PASTE_TEST_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
PASTE_DIR
,
"tests"
))
packages
=
[
"py
test"
,
"paste
"
,
"nose==1.3.7"
]
packages
=
[
"py
==1.4.31"
,
"pytest==2.8.7
"
,
"nose==1.3.7"
]
create_virtenv
(
ENV_NAME
,
packages
,
force_create
=
True
)
# Need the test files in the source
subprocess
.
check_call
([
"hg"
,
"clone"
,
"https://bitbucket.org/ianb/paste"
],
cwd
=
ENV_NAME
)
url
=
"https://pypi.python.org/packages/source/P/Paste/Paste-1.7.5.tar.gz"
subprocess
.
check_call
([
"wget"
,
url
],
cwd
=
ENV_NAME
)
subprocess
.
check_call
([
"tar"
,
"-zxf"
,
"Paste-1.7.5.tar.gz"
],
cwd
=
ENV_NAME
)
PASTE_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"Paste-1.7.5"
))
PASTE_TEST_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
PASTE_DIR
,
"tests"
))
print
">> "
print
">> Setting up paste..."
print
">> "
subprocess
.
check_call
([
PYTHON_EXE
,
"setup.py"
,
"build"
],
cwd
=
PASTE_DIR
)
print
">> "
print
">> Installing paste..."
print
">> "
subprocess
.
check_call
([
PYTHON_EXE
,
"setup.py"
,
"install"
],
cwd
=
PASTE_DIR
)
print
">> "
print
">> Running paste tests..."
print
">> "
subprocess
.
check_call
([
PYTEST_EXE
],
cwd
=
PASTE_TEST_DIR
)
# current cpython also does not pass all tests. (9 failed, 127 passed)
# the additional test we fail are because:
# - we have str.__iter__
# - no sys.settrace
# - no shiftjis encoding
# - slightly different error messages
expected
=
[{
"failed"
:
22
,
"passed"
:
113
}]
run_test
([
PYTEST_EXE
],
cwd
=
PASTE_TEST_DIR
,
expected
=
expected
)
test/extra/pylons_test.py
0 → 100644
View file @
db7c7ba4
import
os
,
sys
,
subprocess
,
shutil
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
)
+
"/../lib"
)
from
test_helper
import
create_virtenv
,
run_test
ENV_NAME
=
"pylons_test_env_"
+
os
.
path
.
basename
(
sys
.
executable
)
SRC_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"src"
))
PYTHON_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"python"
))
NOSE_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"nosetests"
))
def
install_and_test_pylons
():
shutil
.
rmtree
(
SRC_DIR
,
ignore_errors
=
True
)
os
.
makedirs
(
SRC_DIR
)
url
=
"https://pypi.python.org/packages/source/P/Pylons/Pylons-0.9.6.2.tar.gz"
subprocess
.
check_call
([
"wget"
,
url
],
cwd
=
SRC_DIR
)
subprocess
.
check_call
([
"tar"
,
"-zxf"
,
"Pylons-0.9.6.2.tar.gz"
],
cwd
=
SRC_DIR
)
PYLONS_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
SRC_DIR
,
"Pylons-0.9.6.2"
))
subprocess
.
check_call
([
PYTHON_EXE
,
"setup.py"
,
"install"
],
cwd
=
PYLONS_DIR
)
# most of the errors are because of our coerceUnicodeToStr which raises a TypeError instead of a UnicodeError
# but as we don't support the unicode string correctly every where I don't want to change this currently.
expected
=
[{
"ran"
:
50
,
"errors"
:
7
}]
run_test
([
NOSE_EXE
],
cwd
=
PYLONS_DIR
,
expected
=
expected
)
pkg
=
[
"Mako==1.0.3"
,
"decorator==4.0.9"
,
"simplejson==3.8.2"
,
"FormEncode==1.3.0"
,
"PasteScript==2.0.2"
,
"PasteDeploy==1.5.2"
,
"Paste==2.0.2"
,
"Beaker==1.8.0"
,
"WebHelpers==1.3"
,
"Routes==2.2"
,
"MarkupSafe==0.23"
,
"six==1.10.0"
,
"funcsigs==0.4"
,
"repoze.lru==0.6"
,
"nose==1.3.7"
]
create_virtenv
(
ENV_NAME
,
pkg
,
force_create
=
True
)
install_and_test_pylons
()
test/extra/routes_test.py
0 → 100644
View file @
db7c7ba4
import
os
,
sys
,
subprocess
,
shutil
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
)
+
"/../lib"
)
from
test_helper
import
create_virtenv
,
run_test
ENV_NAME
=
"routes_test_env_"
+
os
.
path
.
basename
(
sys
.
executable
)
SRC_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"src"
))
PYTHON_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"python"
))
pkg
=
[
"nose==1.3.7"
,
"paste==2.0.2"
,
"six==1.10.0"
]
pkg
+=
[
"-e"
,
"git+https://github.com/bbangert/routes.git@v1.7.3#egg=Routes"
]
create_virtenv
(
ENV_NAME
,
pkg
,
force_create
=
True
)
ROUTES_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
SRC_DIR
,
"routes"
))
expected
=
[{
"ran"
:
141
}]
run_test
([
PYTHON_EXE
,
"setup.py"
,
"test"
],
cwd
=
ROUTES_DIR
,
expected
=
expected
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment