You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 08:49:51 +08:00
Compare commits
266 Commits
release-py
...
release-py
Author | SHA1 | Date | |
---|---|---|---|
|
1bfa4228d6 | ||
|
6116eb64d1 | ||
|
cb411bcd04 | ||
|
889417caeb | ||
|
5a83c7c643 | ||
|
31db2f3e04 | ||
|
527d1b4163 | ||
|
7fa851765d | ||
|
d7c3b8454b | ||
|
3fb8d90407 | ||
|
ff43565981 | ||
|
4365022f40 | ||
|
d343384db7 | ||
|
87a891ca54 | ||
|
b94c649776 | ||
|
f34375ba99 | ||
|
81b704f597 | ||
|
5233a0716b | ||
|
f82b862c25 | ||
|
a810ed1280 | ||
|
ab54caae34 | ||
|
d3cf87e2d9 | ||
|
c5228dbdc4 | ||
|
cafe96a44a | ||
|
a72163f6f9 | ||
|
3e1300eb23 | ||
|
a4eaeea5b2 | ||
|
1141dfefc2 | ||
|
fe5cea7042 | ||
|
302a5d53d4 | ||
|
698a3073d0 | ||
|
e6adf822cc | ||
|
8c5acef792 | ||
|
7578253f7d | ||
|
9e193fd7cb | ||
|
ab6b12be56 | ||
|
6981743788 | ||
|
5bd97aa756 | ||
|
5237d704fa | ||
|
0e0c5b91fc | ||
|
a01285e4a9 | ||
|
1d7e8f1617 | ||
|
ced33a8f0b | ||
|
dc7f1ed0cc | ||
|
fc00d394ec | ||
|
e2baccb4e5 | ||
|
c99cf7a653 | ||
|
999eee4b5f | ||
|
9ca94717e0 | ||
|
b77efec36c | ||
|
17d07eaf00 | ||
|
538c2e7efd | ||
|
ebc22e32e6 | ||
|
4796fb9e70 | ||
|
ea81ac7202 | ||
|
2fd61b1016 | ||
|
b29a008cb3 | ||
|
3bfc51e34b | ||
|
ebd0eaa609 | ||
|
badfe5456f | ||
|
486f10be6c | ||
|
f5bcdeec95 | ||
|
f117feb585 | ||
|
204b07c996 | ||
|
869e48877c | ||
|
880a60c3e4 | ||
|
7ed40d5f6e | ||
|
5c6365d8a1 | ||
|
42d3c4db61 | ||
|
f3b102600e | ||
|
f6a13302fb | ||
|
e8e7d2086d | ||
|
1367709399 | ||
|
3dcc20f6d7 | ||
|
5c83de830f | ||
|
451f0b55bb | ||
|
a5704cd462 | ||
|
52fbf1d6a7 | ||
|
0a3f951682 | ||
|
0cb0de53ae | ||
|
7b4059820f | ||
|
9caac7fc84 | ||
|
ceb26d29fd | ||
|
9ec1c420e7 | ||
|
a616e1e1c7 | ||
|
b839abcfe7 | ||
|
e2d349f781 | ||
|
af8add9df4 | ||
|
3afc5a599a | ||
|
663bc06bb9 | ||
|
f57a238e47 | ||
|
63d6054640 | ||
|
57109ed066 | ||
|
c52af6cee9 | ||
|
1c8805ecc9 | ||
|
5fde4f2e05 | ||
|
b030a5ac2b | ||
|
bd9a8261fa | ||
|
01ea45a3f5 | ||
|
2b2e7d3242 | ||
|
2448f24764 | ||
|
0e4e45518d | ||
|
299fd93125 | ||
|
d9b2d66843 | ||
|
bb5bbc9645 | ||
|
283db0faea | ||
|
049a3415a7 | ||
|
d070a28635 | ||
|
092874f8b5 | ||
|
5a6a41a608 | ||
|
201635de7b | ||
|
3d2fc7a5e6 | ||
|
2a040bee5f | ||
|
81899a82c3 | ||
|
76085a3040 | ||
|
3bd29b9c9a | ||
|
35127452f5 | ||
|
970cad7cc7 | ||
|
69064f4c23 | ||
|
28ef04d141 | ||
|
d4381ef73f | ||
|
3918bf248d | ||
|
fd36c77d2d | ||
|
a37ae1be0d | ||
|
108c6ecfe3 | ||
|
534afb3f6e | ||
|
9f4458db9a | ||
|
ac7bec5ad8 | ||
|
874d196e5c | ||
|
dca2224520 | ||
|
e90455dcb8 | ||
|
6dd97568f6 | ||
|
aa6849a570 | ||
|
749493631c | ||
|
7b3c91d23a | ||
|
74848140c5 | ||
|
9db3f1cf1d | ||
|
bd0fdd0002 | ||
|
c62daaf0b7 | ||
|
66d8526d7f | ||
|
66db4cc862 | ||
|
bf288b1871 | ||
|
d2f6223e14 | ||
|
9d5a4c822e | ||
|
05e0a5661a | ||
|
76287162da | ||
|
d64fa6ba50 | ||
|
b76f7f905c | ||
|
c31384ef81 | ||
|
727dabff6a | ||
|
946d74ad36 | ||
|
ebad4e2a9a | ||
|
799570d068 | ||
|
3db66fad1d | ||
|
4e6c449250 | ||
|
e342ef89e3 | ||
|
57d59aa481 | ||
|
da119a31f7 | ||
|
ae9f83c191 | ||
|
846020bf5a | ||
|
cf5c81ab21 | ||
|
244ab4e3b3 | ||
|
07290bd443 | ||
|
ef9c34098a | ||
|
57bca5102d | ||
|
a29d1e1531 | ||
|
3d649e049b | ||
|
26a7b984aa | ||
|
9b41dfd951 | ||
|
1091d32882 | ||
|
432859d677 | ||
|
25b7752915 | ||
|
bac3fea8cd | ||
|
6545d9a03b | ||
|
8ac35ad8ce | ||
|
8836444be2 | ||
|
339b4c56ee | ||
|
6cbb631aa6 | ||
|
5355cb5404 | ||
|
8495d208fb | ||
|
e1758a8730 | ||
|
c1a825fbbb | ||
|
8f2e408da2 | ||
|
e2504c2421 | ||
|
1d7085e5d2 | ||
|
65707fa0f8 | ||
|
b0931275a2 | ||
|
7c73536b4a | ||
|
946d46a574 | ||
|
2b50cb56d7 | ||
|
6d5fb21363 | ||
|
bd7d74fa5d | ||
|
c93a7a728b | ||
|
26a554c5c7 | ||
|
cb35ad906c | ||
|
278af38df6 | ||
|
7fb50918cd | ||
|
6525ade805 | ||
|
73951840b6 | ||
|
3438e76865 | ||
|
7480af33d9 | ||
|
88b2be70d2 | ||
|
73de86728a | ||
|
f743639bb6 | ||
|
321c7906cd | ||
|
06b281d1d8 | ||
|
a99d8da0b4 | ||
|
73e6409594 | ||
|
e93628d2dd | ||
|
e41cd9be84 | ||
|
9166fb54a1 | ||
|
3120de0c02 | ||
|
9cc9bceadf | ||
|
36e09738c3 | ||
|
68c9de60a5 | ||
|
90439c562f | ||
|
d9975defe9 | ||
|
621bc96e8a | ||
|
6f4ec21ae2 | ||
|
83e27bc427 | ||
|
9aae8f85c7 | ||
|
04f8619cf1 | ||
|
610994277c | ||
|
6fff0fc5a2 | ||
|
e4a196278a | ||
|
425b50cf1c | ||
|
6e5666c001 | ||
|
38e2b8a10b | ||
|
2216eb7b01 | ||
|
5d1bf2dd9b | ||
|
de1e7d423c | ||
|
16a51961c3 | ||
|
0798078d7e | ||
|
db3c687784 | ||
|
0fafb38d35 | ||
|
f426101000 | ||
|
cf505545c0 | ||
|
45c725feae | ||
|
4dc64063d1 | ||
|
cdc5642715 | ||
|
4f4850d9f7 | ||
|
451b18ee57 | ||
|
2d1ea6b02b | ||
|
f279cc2d70 | ||
|
cb1b2a8759 | ||
|
d64158b299 | ||
|
2ea8a2ef7f | ||
|
258fac3201 | ||
|
7c012ebdfc | ||
|
f27b72ab05 | ||
|
be022b3416 | ||
|
41f1d1ec09 | ||
|
89c2805c27 | ||
|
e639a30157 | ||
|
ee2a1f62c6 | ||
|
db46e096b4 | ||
|
ea48944fff | ||
|
31714d3420 | ||
|
6466d30e2e | ||
|
ef61f3a92a | ||
|
31468a2328 | ||
|
fdf4496a2d | ||
|
d39191477b | ||
|
b548910e57 | ||
|
c5f939e90d | ||
|
6bbafcc8dd |
@@ -1,7 +1,6 @@
|
||||
version: 2
|
||||
jobs:
|
||||
build:
|
||||
working_directory: ~/rocky/python-uncompyle6
|
||||
parallelism: 1
|
||||
shell: /bin/bash --login
|
||||
# CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did.
|
||||
@@ -12,9 +11,8 @@ jobs:
|
||||
COMPILE: --compile
|
||||
# To see the list of pre-built images that CircleCI provides for most common languages see
|
||||
# https://circleci.com/docs/2.0/circleci-images/
|
||||
machine:
|
||||
python:
|
||||
version: 2.7.14
|
||||
docker:
|
||||
- image: circleci/python:2.7
|
||||
steps:
|
||||
# Machine Setup
|
||||
# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
|
||||
@@ -24,10 +22,6 @@ jobs:
|
||||
# In many cases you can simplify this from what is generated here.
|
||||
# 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/'
|
||||
- run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
|
||||
# This is based on your 1.0 configuration file or project settings
|
||||
- run:
|
||||
working_directory: ~/rocky/python-uncompyle6
|
||||
command: pyenv install 2.4.6 && pyenv local 2.4.6 && pyenv rehash && easy_install nose && pyenv rehash
|
||||
# Dependencies
|
||||
# This would typically go in either a build or a build-and-test job when using workflows
|
||||
# Restore the dependency cache
|
||||
@@ -37,9 +31,8 @@ jobs:
|
||||
# fallback to using the latest cache if no exact match is found
|
||||
- v2-dependencies-
|
||||
|
||||
# This is based on your 1.0 configuration file or project settings
|
||||
- run: easy_install xdis spark-parser
|
||||
- run: pip install -e .
|
||||
- run:
|
||||
command: sudo easy_install xdis spark-parser && sudo pip install -e . && sudo pip install -r requirements-dev.txt
|
||||
|
||||
# Save dependency cache
|
||||
- save_cache:
|
||||
@@ -57,8 +50,8 @@ jobs:
|
||||
# Test
|
||||
# This would typically be a build job when using workflows, possibly combined with build
|
||||
# This is based on your 1.0 configuration file or project settings
|
||||
- run: python ./setup.py develop && make check-2.4
|
||||
- run: cd ./test/stdlib && pyenv local 2.4.6 && bash ./runtests.sh 'test_[p-z]*.py'
|
||||
- run: sudo python ./setup.py develop && make check-2.7
|
||||
- run: cd test/stdlib && bash ./runtests.sh 'test_[p-z]*.py'
|
||||
# Teardown
|
||||
# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
|
||||
# Save test results
|
||||
|
12
.github/FUNDING.yml
vendored
Normal file
12
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [rocky]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,6 +10,7 @@
|
||||
/.pytest_cache
|
||||
/.python-version
|
||||
/.tox
|
||||
.mypy_cache
|
||||
/.venv*
|
||||
/README
|
||||
/__pkginfo__.pyc
|
||||
|
88
NEWS.md
88
NEWS.md
@@ -1,3 +1,91 @@
|
||||
3.7.0: 2020-5-19 Primidi 1st Prairial - Alfalfa - HF
|
||||
====================================================
|
||||
|
||||
The main impetus for this release is to pull in the recent changes from xdis.
|
||||
We simplify imports using xdis 4.6.0.
|
||||
|
||||
There were some bugfixes to Python 3.4-3.8. See the ChangeLog for details
|
||||
|
||||
|
||||
3.6.7: 2020-4-27 xdis again
|
||||
===========================
|
||||
|
||||
More upheaval in xdis which we need to track here.
|
||||
|
||||
3.6.6: 2020-4-20 Love in the time of Cholera
|
||||
============================================
|
||||
|
||||
The main reason for this release is an incompatablity bump in xdis which handles
|
||||
3.7 SipHash better.
|
||||
|
||||
* Go over "yield" as an expression precidence
|
||||
* Some small alignment with code in decompyle3 for "or" and "and" was done
|
||||
|
||||
|
||||
3.6.5: 2020-4-1 April Fool
|
||||
==========================
|
||||
|
||||
Back port some of the changes in decompile3 here which mostly helps 3.7 and 3.8 decompilation, although this may also help 3.6ish versions too.
|
||||
|
||||
- Handle nested `async for in for...` and better async comprehension detection via `xdis`. Still more work is needed.
|
||||
- include token number in listings when `-g` and there is a parser error
|
||||
- remove unneeded `Makefile`s now that remake 4.3+1.5dbg is a thing that has `-c`
|
||||
- Bug in finding annotations in functions with docstrings
|
||||
- Fix bug found by 2.4 sre_parse.py testing
|
||||
- Fix `transform` module's `ifelseif` bugs
|
||||
- Fix bug in 3.0 name module detection
|
||||
- Fix docstring detection
|
||||
|
||||
3.6.4: 2020-2-9 Plateau
|
||||
=======================
|
||||
|
||||
The main focus in this release was fix some of the more glaring problems creapt in from the last release due to that refactor.
|
||||
|
||||
`uncompyle6` code is at a plateau where what is most needed is a code refactoring. In doing this, until everything refactored and replaced, decomplation may get worse.
|
||||
Therefore, this release largely serves as a checkpoint before more major upheaval.
|
||||
|
||||
The upheaval, in started last release, I believe the pinnicle was around c90ff51 which wasn't a release. I suppose I should tag that.
|
||||
|
||||
After c90ff5, I started down the road of redoing control flow in a more comprehensible, debuggable, and scalable way. See [The Control Flow Mess](https://github.com/rocky/python-uncompyle6/wiki/The-Control-Flow-Mess)
|
||||
|
||||
The bulk of the refactoring going on in the [decompyle3](https://github.com/rocky/python-decompil3) project, but I try to trickle down the changes.
|
||||
|
||||
It is tricky because the changes are large and I have to figure decompose things so that little testable pieces can be done. And there is also the problem that what is in decompyle3 is incomplete as well.
|
||||
|
||||
Other than control flow, another change that will probably happen in the next release is to redo the grammar for lambda expressions. Right now, we treat them as Python statements, you know, things with compound statements in them. But lambda aren't that. And so there is hackery to paper over difference making a statement out of an expression the wrong thing to do. For example, a return of an "and" expression can be expressed as nested "if" statements with return inside them, but the "if" variant of the bytecode is not valid in a lambda.
|
||||
|
||||
In the decompyle3 code, I've gone down the road making the grammar goal symbol be an expression. This also offers the opportunity to split the grammar making parsing inside lambda not only more reliable because the wrong choices don't exist, but also simpler and faster because all those rules just need don't need to exist in parsing.
|
||||
|
||||
I cringe in thinking about how the code has lived for so long without noticing such a simple stupidity, and lapse of sufficient thought.
|
||||
|
||||
Some stats from testing. The below give numbers of decompiled tests from Python's test suite which succesfully ran
|
||||
|
||||
```
|
||||
Version test-suites passing
|
||||
------- -------------------
|
||||
2.4.6 243
|
||||
2.5.6 265
|
||||
2.6.9 305
|
||||
3.3.7 300
|
||||
3.4.10 304
|
||||
3.5.9 260
|
||||
3.6.10 236
|
||||
3.7.6 306
|
||||
3.8.1 114
|
||||
```
|
||||
|
||||
Decompiled bytecode files distributed with Python (syntax check only):
|
||||
|
||||
```
|
||||
2.7.17 647 files: 0 failed
|
||||
3.2.6 900 files: 0 failed
|
||||
3.3.7 1256 files: 0 failed
|
||||
3.4.10 800 files: 0 failed
|
||||
3.5.9 900 files: 0 failed
|
||||
3.6.10 1300 files: 28 failed
|
||||
```
|
||||
|
||||
|
||||
3.6.3: 2020-1-26 Martin and Susanne
|
||||
===================================
|
||||
|
||||
|
19
README.rst
19
README.rst
@@ -54,7 +54,7 @@ only; another patched that and handled only 3.3. You get the
|
||||
idea. This code pulls all of these forks together and *moves
|
||||
forward*. There is some serious refactoring and cleanup in this code
|
||||
base over those old forks. Even more experimental refactoring is going
|
||||
on in decompile3_.
|
||||
on in decompyle3_.
|
||||
|
||||
This demonstrably does the best in decompiling Python across all
|
||||
Python versions. And even when there is another project that only
|
||||
@@ -139,9 +139,16 @@ Python syntax changes, you should use this option if the bytecode is
|
||||
the right bytecode for the Python interpreter that will be checking
|
||||
the syntax.
|
||||
|
||||
You can also cross compare the results with another python decompiler
|
||||
like pycdc_ . Since they work differently, bugs here often aren't in
|
||||
that, and vice versa.
|
||||
You can also cross compare the results with either another version of
|
||||
`uncompyle6` since there are are sometimes regressions in decompiling
|
||||
specific bytecode as the overall quality improves.
|
||||
|
||||
For Python 3.7 and above, the code in decompyle3_ is generally
|
||||
better.
|
||||
|
||||
Or try specific another python decompiler like uncompyle2_, unpyc37_,
|
||||
or pycdc_. Since the later two work differently, bugs here often
|
||||
aren't in that, and vice versa.
|
||||
|
||||
There is an interesting class of these programs that is readily
|
||||
available give stronger verification: those programs that when run
|
||||
@@ -240,7 +247,9 @@ See Also
|
||||
.. _debuggers: https://pypi.python.org/pypi/trepan3k
|
||||
.. _remake: https://bashdb.sf.net/remake
|
||||
.. _pycdc: https://github.com/zrax/pycdc
|
||||
.. _decompile3: https://github.com/rocky/python-decompile3
|
||||
.. _decompyle3: https://github.com/rocky/python-decompile3
|
||||
.. _uncompyle2: https://github.com/wibiti/uncompyle2
|
||||
.. _unpyc37: https://github.com/andrew-tavera/unpyc37
|
||||
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
|
||||
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg :target: https://travis-ci.org/rocky/python-uncompyle6
|
||||
.. |packagestatus| image:: https://repology.org/badge/vertical-allrepos/python:uncompyle6.svg :target: https://repology.org/project/python:uncompyle6/versions
|
||||
|
@@ -21,6 +21,17 @@
|
||||
# less elegant than having it here with reduced code, albeit there
|
||||
# still is some room for improvement.
|
||||
|
||||
# Python-version | package | last-version |
|
||||
# -----------------------------------------
|
||||
# 2.5 | pip | 1.1 |
|
||||
# 2.6 | pip | 1.5.6 |
|
||||
# 2.7 | pip | 19.2.3 |
|
||||
# 2.7 | pip | 1.2.1 |
|
||||
# 3.1 | pip | 1.5.6 |
|
||||
# 3.2 | pip | 7.1.2 |
|
||||
# 3.3 | pip | 10.0.1 |
|
||||
# 3.4 | pip | 19.1.1 |
|
||||
|
||||
# Things that change more often go here.
|
||||
copyright = """
|
||||
Copyright (C) 2015-2020 Rocky Bernstein <rb@dustyfeet.com>.
|
||||
@@ -58,7 +69,7 @@ entry_points = {
|
||||
]}
|
||||
ftp_url = None
|
||||
install_requires = ["spark-parser >= 1.8.9, < 1.9.0",
|
||||
"xdis >= 4.2.2, < 4.3.0"]
|
||||
"xdis >= 4.6.0, < 4.7.0"]
|
||||
|
||||
license = "GPL3"
|
||||
mailing_list = "python-debugger@googlegroups.com"
|
||||
|
@@ -55,11 +55,11 @@
|
||||
# Make packages and tag
|
||||
|
||||
$ . ./admin-tools/make-dist-older.sh
|
||||
$ pyenv local 3.8.1
|
||||
$ pyenv local 3.8.3
|
||||
$ twine check dist/uncompyle6-$VERSION*
|
||||
$ git tag release-python-2.4-$VERSION
|
||||
$ . ./admin-tools/make-dist-newer.sh
|
||||
$ twine check dist/uncompyle6-$VERSION*
|
||||
$ . ./admin-tools/make-dist-newer.sh
|
||||
|
||||
# Upload single package and look at Rst Formating
|
||||
|
||||
|
@@ -5,4 +5,4 @@ if [[ $0 == ${BASH_SOURCE[0]} ]] ; then
|
||||
echo "This script should be *sourced* rather than run directly through bash"
|
||||
exit 1
|
||||
fi
|
||||
export PYVERSIONS='3.5.9 3.6.10 2.6.9 3.3.7 2.7.17 3.2.6 3.1.5 3.4.10 3.7.6 3.8.1'
|
||||
export PYVERSIONS='3.5.9 3.6.10 2.6.9 3.3.7 2.7.18 3.2.6 3.1.5 3.4.10 3.7.7 3.8.3'
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
PYTHON_VERSION=3.7.6
|
||||
PYTHON_VERSION=3.7.7
|
||||
|
||||
# FIXME put some of the below in a common routine
|
||||
function finish {
|
||||
|
@@ -53,6 +53,7 @@ install:
|
||||
# compiled extensions and are not provided as pre-built wheel packages,
|
||||
# pip will build them from source using the MSVC compiler matching the
|
||||
# target Python version and architecture
|
||||
- "%CMD_IN_ENV% pip install git+git://github.com/rocky/python-uncompyle6.git#egg=uncompyle6-3.6.6"
|
||||
- "%CMD_IN_ENV% pip install -r requirements.txt"
|
||||
|
||||
build_script:
|
||||
|
@@ -1,14 +1,13 @@
|
||||
from uncompyle6 import PYTHON_VERSION
|
||||
from uncompyle6.scanners.tok import Token
|
||||
|
||||
|
||||
def test_token():
|
||||
# Test token formatting of: LOAD_CONST None
|
||||
t = Token("LOAD_CONST", offset=0, attr=None, pattr=None, has_arg=True)
|
||||
expect = " 0 LOAD_CONST None"
|
||||
expect = "0 LOAD_CONST None"
|
||||
# print(t.format())
|
||||
assert t
|
||||
assert t.format() == expect
|
||||
assert t.format().strip() == expect.strip()
|
||||
|
||||
# Make sure equality testing of tokens ignores offset
|
||||
t2 = Token("LOAD_CONST", offset=2, attr=None, pattr=None, has_arg=True)
|
||||
@@ -17,8 +16,8 @@ def test_token():
|
||||
# Make sure formatting of: LOAD_CONST False. We assume False is the 0th index
|
||||
# of co_consts.
|
||||
t = Token("LOAD_CONST", offset=1, attr=False, pattr=False, has_arg=True)
|
||||
expect = " 1 LOAD_CONST False"
|
||||
assert t.format() == expect
|
||||
expect = "1 LOAD_CONST False"
|
||||
assert t.format().strip() == expect.strip()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
16
pytest/testdata/if-2.7.right
vendored
16
pytest/testdata/if-2.7.right
vendored
@@ -1,12 +1,12 @@
|
||||
# Python 2.7
|
||||
# Embedded file name: simple_source/branching/05_if.py
|
||||
|
||||
6 0 LOAD_NAME 0 'True'
|
||||
3 POP_JUMP_IF_FALSE 15 'to 15'
|
||||
L. 6 0 LOAD_NAME 0 'True'
|
||||
3 POP_JUMP_IF_FALSE 15 'to 15'
|
||||
|
||||
7 6 LOAD_NAME 1 'False'
|
||||
9 STORE_NAME 2 'b'
|
||||
12 JUMP_FORWARD 0 'to 15'
|
||||
15_0 COME_FROM 12 '12'
|
||||
15 LOAD_CONST None
|
||||
18 RETURN_VALUE
|
||||
L. 7 6 LOAD_NAME 1 'False'
|
||||
9 STORE_NAME 2 'b'
|
||||
12 JUMP_FORWARD 0 'to 15'
|
||||
15_0 COME_FROM 12 '12'
|
||||
15 LOAD_CONST None
|
||||
18 RETURN_VALUE
|
||||
|
20
pytest/testdata/ifelse-2.7.right
vendored
20
pytest/testdata/ifelse-2.7.right
vendored
@@ -1,15 +1,15 @@
|
||||
# Python 2.7
|
||||
# Embedded file name: simple_source/branching/05_ifelse.py
|
||||
|
||||
3 0 LOAD_NAME 0 'True'
|
||||
3 POP_JUMP_IF_FALSE 15 'to 15'
|
||||
L. 3 0 LOAD_NAME 0 'True'
|
||||
3 POP_JUMP_IF_FALSE 15 'to 15'
|
||||
|
||||
4 6 LOAD_CONST 1
|
||||
9 STORE_NAME 1 'b'
|
||||
12 JUMP_FORWARD 6 'to 21'
|
||||
L. 4 6 LOAD_CONST 1
|
||||
9 STORE_NAME 1 'b'
|
||||
12 JUMP_FORWARD 6 'to 21'
|
||||
|
||||
6 15 LOAD_CONST 2
|
||||
18 STORE_NAME 2 'd'
|
||||
21_0 COME_FROM 12 '12'
|
||||
21 LOAD_CONST None
|
||||
24 RETURN_VALUE
|
||||
L. 6 15 LOAD_CONST 2
|
||||
18 STORE_NAME 2 'd'
|
||||
21_0 COME_FROM 12 '12'
|
||||
21 LOAD_CONST None
|
||||
24 RETURN_VALUE
|
||||
|
@@ -12,8 +12,7 @@ import functools
|
||||
from uncompyle6 import PYTHON_VERSION, PYTHON3, IS_PYPY, code_deparse
|
||||
|
||||
# TODO : I think we can get xdis to support the dis api (python 3 version) by doing something like this there
|
||||
from xdis.bytecode import Bytecode
|
||||
from xdis.main import get_opcode
|
||||
from xdis import Bytecode, get_opcode
|
||||
|
||||
opc = get_opcode(PYTHON_VERSION, IS_PYPY)
|
||||
Bytecode = functools.partial(Bytecode, opc=opc)
|
||||
|
57
setup.py
57
setup.py
@@ -15,29 +15,40 @@ if not ((2, 4) <= SYS_VERSION <= (2, 7)):
|
||||
print(mess)
|
||||
raise Exception(mess)
|
||||
|
||||
from __pkginfo__ import \
|
||||
author, author_email, install_requires, \
|
||||
license, long_description, classifiers, \
|
||||
entry_points, modname, py_modules, \
|
||||
short_desc, VERSION, web, \
|
||||
zip_safe
|
||||
from __pkginfo__ import (
|
||||
author,
|
||||
author_email,
|
||||
install_requires,
|
||||
license,
|
||||
long_description,
|
||||
classifiers,
|
||||
entry_points,
|
||||
modname,
|
||||
py_modules,
|
||||
short_desc,
|
||||
VERSION,
|
||||
web,
|
||||
zip_safe,
|
||||
)
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
author = author,
|
||||
author_email = author_email,
|
||||
classifiers = classifiers,
|
||||
description = short_desc,
|
||||
entry_points = entry_points,
|
||||
install_requires = install_requires,
|
||||
license = license,
|
||||
long_description = long_description,
|
||||
long_description_content_type = "text/x-rst",
|
||||
name = modname,
|
||||
packages = find_packages(),
|
||||
py_modules = py_modules,
|
||||
test_suite = 'nose.collector',
|
||||
url = web,
|
||||
tests_require = ['nose>=1.0'],
|
||||
version = VERSION,
|
||||
zip_safe = zip_safe)
|
||||
author=author,
|
||||
author_email=author_email,
|
||||
classifiers=classifiers,
|
||||
description=short_desc,
|
||||
entry_points=entry_points,
|
||||
install_requires=install_requires,
|
||||
license=license,
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/x-rst",
|
||||
name=modname,
|
||||
packages=find_packages(),
|
||||
py_modules=py_modules,
|
||||
test_suite="nose.collector",
|
||||
url=web,
|
||||
tests_require=["nose>=1.0"],
|
||||
version=VERSION,
|
||||
zip_safe=zip_safe,
|
||||
)
|
||||
|
6
test/.gitignore
vendored
6
test/.gitignore
vendored
@@ -1,2 +1,8 @@
|
||||
/.coverage
|
||||
/.python-version
|
||||
/nohup.out
|
||||
/pycdc
|
||||
/test_pycdc_tests.sh
|
||||
/test_uncompyle2.py
|
||||
/test_unpy33.py
|
||||
/test_unpy37.py
|
||||
|
@@ -78,7 +78,7 @@ check-3.7: check-bytecode
|
||||
# $(PYTHON) test_pythonlib.py --bytecode-3.8 --syntax-verify $(COMPILE)
|
||||
|
||||
# FIXME
|
||||
#: this is called when running under pypy3.5-5.8.0 or pypy2-5.6.0
|
||||
#: this is called when running under pypy3.5-5.8.0, pypy2-5.6.0, or pypy3.6-7.3.0
|
||||
5.8 5.6:
|
||||
|
||||
#: Check deparsing only, but from a different Python version
|
||||
@@ -95,12 +95,19 @@ check-bytecode-2:
|
||||
--bytecode-2.5 --bytecode-2.6 --bytecode-2.7 --bytecode-pypy2.7
|
||||
|
||||
#: Check deparsing bytecode 3.x only
|
||||
# check-bytecode-3:
|
||||
# $(PYTHON) test_pythonlib.py \
|
||||
# --bytecode-3.0 \
|
||||
# --bytecode-3.1 --bytecode-3.2 --bytecode-3.3 \
|
||||
# --bytecode-3.4 --bytecode-3.5 --bytecode-3.6 \
|
||||
# --bytecode-3.7 \
|
||||
# --bytecode-pypy3.2 --bytecode-pypy3.6 --bytecode-3.8
|
||||
|
||||
# FIXME: Until we shaked out problems with xdis...
|
||||
check-bytecode-3:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.0 \
|
||||
--bytecode-3.1 --bytecode-3.2 --bytecode-3.3 \
|
||||
$(PYTHON) test_pythonlib.py \
|
||||
--bytecode-3.4 --bytecode-3.5 --bytecode-3.6 \
|
||||
--bytecode-3.7 \
|
||||
--bytecode-pypy3.2 --bytecode-pypy3.6
|
||||
--bytecode-3.7 --bytecode-3.8
|
||||
|
||||
#: Check deparsing on selected bytecode 3.x
|
||||
check-bytecode-3-short:
|
||||
@@ -344,8 +351,8 @@ check-bytecode-pypy3.6: 7.1
|
||||
$(PYTHON) test_pythonlib.py --bytecode-pypy3.6 --verify
|
||||
|
||||
#: PyPy 5.0.x with Python 3.6.9
|
||||
check-bytecode-pypy3.6: 7.2
|
||||
7.2:
|
||||
check-bytecode-pypy3.6: 7.2 7.3
|
||||
7.3 7.2:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-pypy3.6-run --verify-run
|
||||
$(PYTHON) test_pythonlib.py --bytecode-pypy3.6 --verify
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_2.7_run/05_control_flow_bugs.pyc
Normal file
BIN
test/bytecode_2.7_run/05_control_flow_bugs.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.0_run/05_block_fallback.pyc
Normal file
BIN
test/bytecode_3.0_run/05_block_fallback.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.3_run/03_if_elif.pyc
Normal file
BIN
test/bytecode_3.3_run/03_if_elif.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.5_run/03_if_elif.pyc
Normal file
BIN
test/bytecode_3.5_run/03_if_elif.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.5_run/05_block_fallback.pyc
Normal file
BIN
test/bytecode_3.5_run/05_block_fallback.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.5_run/05_control_flow_bugs.pyc
Normal file
BIN
test/bytecode_3.5_run/05_control_flow_bugs.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.6/04_async.pyc
Normal file
BIN
test/bytecode_3.6/04_async.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.6_run/03_if_elif.pyc
Normal file
BIN
test/bytecode_3.6_run/03_if_elif.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.6_run/05_control_flow_bugs.pyc
Normal file
BIN
test/bytecode_3.6_run/05_control_flow_bugs.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.7_run/03_if_elif.pyc
Normal file
BIN
test/bytecode_3.7_run/03_if_elif.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.7_run/05_block_fallback.pyc
Normal file
BIN
test/bytecode_3.7_run/05_block_fallback.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.7_run/05_control_flow_bugs.pyc
Normal file
BIN
test/bytecode_3.7_run/05_control_flow_bugs.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.7_run/10_async.pyc
Normal file
BIN
test/bytecode_3.7_run/10_async.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.8/04_async.pyc
Normal file
BIN
test/bytecode_3.8/04_async.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.8_run/05_control_flow_bugs.pyc-notyet
Normal file
BIN
test/bytecode_3.8_run/05_control_flow_bugs.pyc-notyet
Normal file
Binary file not shown.
BIN
test/bytecode_3.8_run/10_async.pyc
Normal file
BIN
test/bytecode_3.8_run/10_async.pyc
Normal file
Binary file not shown.
@@ -8,7 +8,7 @@ See http://www.goebel-consult.de/decompyle/ for download and
|
||||
for further information
|
||||
"""
|
||||
|
||||
# This is a seperate test pattern, since 'continue' within 'try'
|
||||
# This is a separate test pattern, since 'continue' within 'try'
|
||||
# was not allowed till Python 2.1
|
||||
|
||||
for term in args:
|
||||
|
@@ -3,32 +3,54 @@
|
||||
function displaytime {
|
||||
printf "ran in "
|
||||
local T=$1
|
||||
local D=$((T/60/60/24))
|
||||
local H=$((T/60/60%24))
|
||||
local M=$((T/60%60))
|
||||
local S=$((T%60))
|
||||
(( $D > 0 )) && printf '%d days ' $D
|
||||
(( $H > 0 )) && printf '%d hours ' $H
|
||||
(( $M > 0 )) && printf '%d minutes ' $M
|
||||
(( $D > 0 || $H > 0 || $M > 0 )) && printf 'and '
|
||||
((D=T/60/60/24))
|
||||
((H=T/60/60%24))
|
||||
((M=T/60%60))
|
||||
((S=T%60))
|
||||
(( D > 0 )) && printf '%d days ' $D
|
||||
(( H > 0 )) && printf '%d hours ' $H
|
||||
(( M > 0 )) && printf '%d minutes ' $M
|
||||
(( D > 0 || H > 0 || M > 0 )) && printf 'and '
|
||||
printf '%d seconds\n' $S
|
||||
}
|
||||
|
||||
. ../admin-tools/pyenv-newer-versions
|
||||
bs=${BASH_SOURCE[0]}
|
||||
if [[ $0 != $bs ]] ; then
|
||||
echo "This script should not be *sourced* but run through bash"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mydir=$(dirname $bs)
|
||||
cd $mydir
|
||||
|
||||
branch=$(cat ../.git/HEAD | cut -d'/' -f 3)
|
||||
if [[ $branch == 'python-2.4' ]]; then
|
||||
. ../admin-tools/pyenv-older-versions
|
||||
elif [[ $branch == 'master' ]]; then
|
||||
. ../admin-tools/pyenv-newer-versions
|
||||
else
|
||||
echo &1>2 "Error git branch should either be 'master' or 'python-2.4'; got: '$branch'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAIN="test_pyenvlib.py"
|
||||
USER=${USER:-rocky}
|
||||
EMAIL=${EMAIL:-rb@dustyfeet.com}
|
||||
WHAT="uncompyle6 2.4 ${MAIN}"
|
||||
MAX_TESTS=${MAX_TESTS:-800}
|
||||
export BATCH=1
|
||||
|
||||
typeset -i RUN_STARTTIME=$(date +%s)
|
||||
|
||||
# PYVERSIONS="3.5.6"
|
||||
actual_versions=""
|
||||
MAILBODY=/tmp/${MAIN}-mailbody-$$.txt
|
||||
# for VERSION in 2.4.6 2.5.9 ; do
|
||||
for VERSION in $PYVERSIONS ; do
|
||||
typeset -i rc=0
|
||||
LOGFILE=/tmp/pyenvlib-$VERSION-$$.log
|
||||
LOGFILE=/tmp/${MAIN}-$VERSION-$$.log
|
||||
|
||||
case "$VERSION" in
|
||||
3.7.6 | 3.8.1 | 3.1.5 | 3.0.1 )
|
||||
3.7.7 | 3.8.2 | 3.1.5 | 3.0.1 )
|
||||
continue
|
||||
;;
|
||||
3.5.9 )
|
||||
@@ -44,7 +66,15 @@ for VERSION in $PYVERSIONS ; do
|
||||
MAX_TESTS=800
|
||||
;;
|
||||
3.6.10 )
|
||||
MAX_TESTS=1300 # about 2139 exist
|
||||
# MAX_TESTS=1300 # about 2139 exist
|
||||
# fails on _pyio.cpython-36.opt-1.pyc
|
||||
MAX_TESTS=34
|
||||
;;
|
||||
2.4.6 )
|
||||
MAX_TESTS=600
|
||||
;;
|
||||
2.5.6 )
|
||||
MAX_TESTS=600
|
||||
;;
|
||||
2.6.9 )
|
||||
MAX_TESTS=1300
|
||||
@@ -58,11 +88,13 @@ for VERSION in $PYVERSIONS ; do
|
||||
|
||||
if ! pyenv local $VERSION ; then
|
||||
rc=1
|
||||
mailbody_line="pyenv local $VERSION not installed"
|
||||
echo $mailbody_line >> $MAILBODY
|
||||
else
|
||||
echo Python Version $(pyenv local) > $LOGFILE
|
||||
echo "" >> $LOGFILE
|
||||
typeset -i ALL_FILES_STARTTIME=$(date +%s)
|
||||
cmd="python ./test_pyenvlib.py --max ${MAX_TESTS} --syntax-verify --$VERSION"
|
||||
cmd="python ./${MAIN} --max ${MAX_TESTS} --syntax-verify --$VERSION"
|
||||
echo "$cmd" >>$LOGFILE 2>&1
|
||||
$cmd >>$LOGFILE 2>&1
|
||||
rc=$?
|
||||
@@ -72,20 +104,25 @@ for VERSION in $PYVERSIONS ; do
|
||||
|
||||
typeset -i ALL_FILES_ENDTIME=$(date +%s)
|
||||
(( time_diff = ALL_FILES_ENDTIME - ALL_FILES_STARTTIME))
|
||||
displaytime $time_diff >> $LOGFILE
|
||||
time_str=$(displaytime $time_diff)
|
||||
echo ${time_str}. >> $LOGFILE
|
||||
fi
|
||||
|
||||
SUBJECT_PREFIX="pyenv weak verify (max $MAX_TESTS) for"
|
||||
SUBJECT_PREFIX="$WHAT (max $MAX_TESTS) for"
|
||||
if ((rc == 0)); then
|
||||
mailbody_line="Python $VERSION ok; ${time_str}."
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION ok" ${USER}@localhost
|
||||
else
|
||||
mailbody_line="Python $VERSION failed; ${time_str}."
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION not ok" ${USER}@localhost
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION not ok" ${EMAIL}
|
||||
tail -v $LOGFILE | mail -s "$HOST $SUBJECT_PREFIX $VERSION not ok" ${EMAIL}
|
||||
fi
|
||||
echo $mailbody_line >> $MAILBODY
|
||||
rm .python-version
|
||||
done
|
||||
|
||||
typeset -i RUN_ENDTIME=$(date +%s)
|
||||
(( time_diff = RUN_ENDTIME - RUN_STARTTIME))
|
||||
elapsed_time=$(displaytime $time_diff)
|
||||
echo "Run complete $elapsed_time for versions $actual_versions" | mail -s "pyenv weak verify in $elapsed_time" ${EMAIL}
|
||||
echo "${WHAT} complete; ${elapsed_time}." >> $MAILBODY
|
||||
cat $MAILBODY | mail -s "$HOST $WHAT ${elapsed_time}." ${EMAIL}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
from uncompyle6 import uncompyle
|
||||
from uncompyle6.main import decompile
|
||||
from xdis.magics import sysinfo2float
|
||||
from xdis import sysinfo2float
|
||||
import sys, inspect
|
||||
|
||||
def uncompyle_test():
|
@@ -22,7 +22,7 @@ assert i[0]('a') == True
|
||||
assert i[0]('A') == False
|
||||
|
||||
# Issue #170. Bug is needing an "conditional_not_lambda" grammar rule
|
||||
# in addition the the "if_expr_lambda" rule
|
||||
# in addition the the "if_exp_lambda" rule
|
||||
j = lambda a: False if not a else True
|
||||
assert j(True) == True
|
||||
assert j(False) == False
|
||||
|
@@ -1,8 +1,8 @@
|
||||
# Tests:
|
||||
|
||||
# ret_expr_or_cond ::= ret_expr
|
||||
# ret_cond ::= expr POP_JUMP_IF_FALSE expr RETURN_END_IF ret_expr_or_cond
|
||||
# ret_expr_or_cond ::= ret_cond
|
||||
# if_exp_ret ::= expr POP_JUMP_IF_FALSE expr RETURN_END_IF ret_expr_or_cond
|
||||
# ret_expr_or_cond ::= if_exp_ret
|
||||
# ret_or ::= expr JUMP_IF_TRUE_OR_POP ret_expr_or_cond COME_FROM
|
||||
|
||||
# See https://github.com/rocky/python-uncompyle6/issues/5
|
||||
|
4
test/simple_source/bug26/00_future_divide.py
Normal file
4
test/simple_source/bug26/00_future_divide.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# From 2.7.17 fractions
|
||||
"""Rational, infinite-precision, real numbers."""
|
||||
|
||||
from __future__ import division
|
@@ -8,7 +8,7 @@ list(x for x in range(10) if x % 2 if x % 3)
|
||||
|
||||
# expresion which evaluates True unconditionally,
|
||||
# but leave dead code or junk around that we have to match on.
|
||||
# Tests "if_expr_true" rule
|
||||
# Tests "if_exp_true" rule
|
||||
5 if 1 else 2
|
||||
|
||||
0 or max(5, 3) if 0 else 3
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# Bug found in 2.7 test_itertools.py
|
||||
# Bug was erroneously using reduction to if_expr_true
|
||||
# A proper fix would be to use if_expr_true only when we
|
||||
# Bug was erroneously using reduction to if_exp_true
|
||||
# A proper fix would be to use if_exp_true only when we
|
||||
# can determine there is or was dead code.
|
||||
from itertools import izip_longest
|
||||
for args in [['abc', range(6)]]:
|
||||
|
32
test/simple_source/bug30/05_block_fallback.py
Normal file
32
test/simple_source/bug30/05_block_fallback.py
Normal file
@@ -0,0 +1,32 @@
|
||||
# Adapted from 3.7.6 test_contains
|
||||
# The bug was in reconstructing something equivalent to
|
||||
# "while False: yelid None" which is *needed* in __iter__().
|
||||
# Sheeh!
|
||||
|
||||
# RUNNABLE!
|
||||
def test_block_fallback():
|
||||
# blocking fallback with __contains__ = None
|
||||
class ByContains(object):
|
||||
def __contains__(self, other):
|
||||
return False
|
||||
c = ByContains()
|
||||
class BlockContains(ByContains):
|
||||
"""Is not a container
|
||||
|
||||
This class is a perfectly good iterable (as tested by
|
||||
list(bc)), as well as inheriting from a perfectly good
|
||||
container, but __contains__ = None prevents the usual
|
||||
fallback to iteration in the container protocol. That
|
||||
is, normally, 0 in bc would fall back to the equivalent
|
||||
of any(x==0 for x in bc), but here it's blocked from
|
||||
doing so.
|
||||
"""
|
||||
def __iter__(self):
|
||||
while False:
|
||||
yield None
|
||||
__contains__ = None
|
||||
bc = BlockContains()
|
||||
assert not (0 in c)
|
||||
assert not (0 in list(bc))
|
||||
|
||||
test_block_fallback()
|
@@ -66,6 +66,14 @@ def div(a: dict(type=float, help='the dividend'),
|
||||
"""Divide a by b"""
|
||||
return a / b
|
||||
|
||||
# From 3.7.6 functools.py
|
||||
# Bug is in picking up the annotation.
|
||||
def f(a:"This is a new annotation"):
|
||||
"""This is a test"""
|
||||
assert f.__annotations__['a'] == "This is a new annotation"
|
||||
|
||||
f(5)
|
||||
|
||||
class TestSignatureObject1():
|
||||
def test_signature_on_wkwonly(self):
|
||||
def test(*, a:float, b:str, c:str = 'test', **kwargs: int) -> int:
|
||||
|
@@ -1,6 +1,8 @@
|
||||
# Python 3.3+
|
||||
#
|
||||
# From Python 3.3.6 hmac.py
|
||||
# Problem was getting wrong placement of positional args.
|
||||
# In 3.6+ paramter handling changes
|
||||
# In 3.6+ parameter handling changes
|
||||
|
||||
# RUNNABLE!
|
||||
|
||||
|
@@ -1,3 +1,12 @@
|
||||
async def a(b, c):
|
||||
async for b in c:
|
||||
pass
|
||||
|
||||
# From 3.7 test_generators.py
|
||||
# Bug was getting indentation correct for multiple async's
|
||||
async def foo(X):
|
||||
async for i in X:
|
||||
pass
|
||||
async for i in X:
|
||||
pass
|
||||
raise Done
|
||||
|
@@ -1,6 +1,9 @@
|
||||
# 3.6+ type annotations on variables
|
||||
from typing import List
|
||||
|
||||
# This test program is part of the uncompyle6 test suite
|
||||
# tests STORE_ANNOTATION and SETUP_ANOTATIONS
|
||||
|
||||
# RUNNABLE!
|
||||
y = 2
|
||||
x: bool
|
||||
|
@@ -6,3 +6,11 @@ def make_arange(n):
|
||||
|
||||
async def run(m):
|
||||
return [i async for i in m]
|
||||
|
||||
# From 3.7.6 test_coroutines.py
|
||||
async def run_list(pair, f):
|
||||
return [i for pair in p async for i in f]
|
||||
|
||||
# FIXME: add this. It works in decompyle3
|
||||
# async def run_gen():
|
||||
# return (i async for i in f if 0 < i < 4)
|
||||
|
@@ -1,12 +0,0 @@
|
||||
# from 3.7 test_contextlib_async.py
|
||||
# Bugs were not adding "async" when a function is a decorator,
|
||||
# and a misaligment when using "async with as".
|
||||
@_async_test
|
||||
async def test_enter(self):
|
||||
self.assertIs(await manager.__aenter__(), manager)
|
||||
|
||||
async with manager as context:
|
||||
async with woohoo() as x:
|
||||
x = 1
|
||||
y = 2
|
||||
assert manager is context
|
87
test/simple_source/bug37/04_grammar.py
Normal file
87
test/simple_source/bug37/04_grammar.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# From test_grammar.py
|
||||
# RUNNABLE!
|
||||
def check_syntax_error(statement):
|
||||
try:
|
||||
compile(statement, '<test string>', 'exec')
|
||||
except SyntaxError:
|
||||
return
|
||||
assert False
|
||||
|
||||
def test_yield():
|
||||
# Requires parentheses as call argument
|
||||
def g():
|
||||
f((yield 1), 1)
|
||||
def g():
|
||||
f((yield from ()))
|
||||
def g():
|
||||
f((yield from ()), 1)
|
||||
def g():
|
||||
f((yield 1))
|
||||
|
||||
# Allowed as standalone statement
|
||||
def g():
|
||||
yield 1
|
||||
|
||||
def g():
|
||||
yield from ()
|
||||
|
||||
# Allowed as RHS of assignment
|
||||
def g():
|
||||
x = yield 1
|
||||
|
||||
def g():
|
||||
x = yield from ()
|
||||
|
||||
# Ordinary yield accepts implicit tuples
|
||||
def g():
|
||||
yield 1, 1
|
||||
|
||||
def g():
|
||||
x = yield 1, 1
|
||||
|
||||
# 'yield from' does not
|
||||
check_syntax_error("def g(): yield from (), 1")
|
||||
check_syntax_error("def g(): x = yield from (), 1")
|
||||
# Requires parentheses as subexpression
|
||||
def g():
|
||||
1, (yield 1)
|
||||
|
||||
def g():
|
||||
1, (yield from ())
|
||||
|
||||
check_syntax_error("def g(): 1, yield 1")
|
||||
check_syntax_error("def g(): 1, yield from ()")
|
||||
# Requires parentheses as call argument
|
||||
def g():
|
||||
f((yield 1))
|
||||
|
||||
def g():
|
||||
f((yield 1), 1)
|
||||
|
||||
def g():
|
||||
f((yield from ()))
|
||||
|
||||
def g():
|
||||
f((yield from ()), 1)
|
||||
|
||||
check_syntax_error("def g(): f(yield 1)")
|
||||
check_syntax_error("def g(): f(yield 1, 1)")
|
||||
check_syntax_error("def g(): f(yield from ())")
|
||||
check_syntax_error("def g(): f(yield from (), 1)")
|
||||
# Not allowed at top level
|
||||
check_syntax_error("yield")
|
||||
check_syntax_error("yield from")
|
||||
# Not allowed at class scope
|
||||
check_syntax_error("class foo:yield 1")
|
||||
check_syntax_error("class foo:yield from ()")
|
||||
# Check annotation refleak on SyntaxError
|
||||
check_syntax_error("def g(a:(yield)): pass")
|
||||
|
||||
test_yield()
|
||||
|
||||
# From test_types.py
|
||||
# Bug was needing parens around (yield 2)
|
||||
def gen_func():
|
||||
yield 1
|
||||
return (yield 2)
|
||||
gen = gen_func()
|
70
test/simple_source/bug37/10_async.py
Normal file
70
test/simple_source/bug37/10_async.py
Normal file
@@ -0,0 +1,70 @@
|
||||
# from 3.7 test_contextlib_async.py
|
||||
# Bugs were not adding "async" when a function is a decorator,
|
||||
# and a misaligment when using "async with ... as".
|
||||
|
||||
"""This program is self-checking!"""
|
||||
import asyncio
|
||||
from contextlib import asynccontextmanager, AbstractAsyncContextManager
|
||||
import functools
|
||||
|
||||
|
||||
def _async_test(func):
|
||||
"""Decorator to turn an async function into a test case."""
|
||||
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
coro = func(*args, **kwargs)
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
try:
|
||||
return loop.run_until_complete(coro)
|
||||
finally:
|
||||
loop.close()
|
||||
asyncio.set_event_loop(None)
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
state = []
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def woohoo():
|
||||
state.append(1)
|
||||
yield 42
|
||||
state.append(999)
|
||||
|
||||
|
||||
@_async_test
|
||||
async def test_enter():
|
||||
class DefaultEnter(AbstractAsyncContextManager):
|
||||
async def __aexit__(*args):
|
||||
return
|
||||
# await super().__aexit__(*args)
|
||||
|
||||
manager = DefaultEnter()
|
||||
got_manager = await manager.__aenter__()
|
||||
# print(got_manager, manager)
|
||||
assert got_manager is manager
|
||||
|
||||
async with manager as context:
|
||||
async with woohoo() as x:
|
||||
x = 1
|
||||
y = 2
|
||||
assert manager is context
|
||||
|
||||
|
||||
# From 3.7.6 test_coroutines.py
|
||||
# Bug was different form of code for "async with" below
|
||||
class CoroutineTest:
|
||||
def test_with_8(self):
|
||||
CNT = 0
|
||||
|
||||
async def foo():
|
||||
nonlocal CNT
|
||||
async with CM():
|
||||
CNT += 1
|
||||
return
|
||||
|
||||
|
||||
test_enter()
|
@@ -12,3 +12,9 @@ class abstractclassmethod(classmethod):
|
||||
def __init__(self, callable):
|
||||
callable.__isabstractmethod__ = True
|
||||
super().__init__(callable)
|
||||
|
||||
# From 2.7.17 test_abc.py
|
||||
# Bug was handling OldstyleClass correctly without
|
||||
# a "return locals() but with a "pass"
|
||||
class OldstyleClass:
|
||||
pass
|
||||
|
@@ -17,9 +17,9 @@ def ybug(g):
|
||||
# From 3.5.1 _wakrefset.py
|
||||
#
|
||||
# 3.5:
|
||||
# withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt
|
||||
# POP_BLOCK LOAD_CONST COME_FROM
|
||||
# WITH_CLEANUP_START WITH_CLEANUP_FINISH END_FINALLY
|
||||
# with ::= expr SETUP_WITH POP_TOP suite_stmts_opt
|
||||
# POP_BLOCK LOAD_CONST COME_FROM
|
||||
# WITH_CLEANUP_START WITH_CLEANUP_FINISH END_FINALLY
|
||||
|
||||
|
||||
def __iter__(self, IterationGuard):
|
||||
|
@@ -7,3 +7,40 @@ def readline (self):
|
||||
continue
|
||||
|
||||
return
|
||||
|
||||
# From 2.4.6 sre.py
|
||||
# Bug has to do with "break" not being recognized
|
||||
# and is a JUMP_FORWARD.
|
||||
def _parse(a, b, source, state):
|
||||
while 1:
|
||||
if b:
|
||||
while 1:
|
||||
break
|
||||
else:
|
||||
raise
|
||||
|
||||
def _parse2(source, state):
|
||||
while 1:
|
||||
if a:
|
||||
if b:
|
||||
while 1:
|
||||
this = 1
|
||||
break
|
||||
continue
|
||||
|
||||
while 1:
|
||||
if b:
|
||||
break
|
||||
|
||||
x = 3
|
||||
|
||||
# Bug was in 2.3 decompilation
|
||||
def _parse3(source, state):
|
||||
while 1:
|
||||
if a:
|
||||
if b:
|
||||
x = 1
|
||||
while 1:
|
||||
if a:
|
||||
break
|
||||
raise
|
||||
|
76
test/simple_source/operation_logic/05_control_flow_bugs.py
Normal file
76
test/simple_source/operation_logic/05_control_flow_bugs.py
Normal file
@@ -0,0 +1,76 @@
|
||||
# From 3.6.10 test_binascii.py
|
||||
# Bug was getting "while c and noise" parsed correclty
|
||||
# and not put into the "ifelsesmt"
|
||||
|
||||
# RUNNABLE!
|
||||
def addnoise(c, noise):
|
||||
while c and noise:
|
||||
if c < 3:
|
||||
c = 2
|
||||
else:
|
||||
c = 3
|
||||
noise = False
|
||||
return c
|
||||
|
||||
assert addnoise(0, True) == 0
|
||||
assert addnoise(1, False) == 1
|
||||
assert addnoise(2, True) == 2
|
||||
assert addnoise(3, True) == 3
|
||||
assert addnoise(4, True) == 3
|
||||
assert addnoise(5, False) == 5
|
||||
|
||||
# From 3.6.10 test_dbm_dumb.py
|
||||
# Bug was getting attaching "else" to the right "if" in the
|
||||
# presense of a loop.
|
||||
def test_random(a, r):
|
||||
x = 0
|
||||
for dummy in r:
|
||||
if dummy:
|
||||
if a:
|
||||
x += 2
|
||||
else:
|
||||
x += 1
|
||||
return x
|
||||
|
||||
assert test_random(True, [1]) == 2
|
||||
assert test_random(True, [1, 1]) == 4
|
||||
assert test_random(False, [1]) == 0
|
||||
assert test_random(False, [1, 1]) == 0
|
||||
|
||||
# From 2.7.17 test_frozen.py
|
||||
# Bug was getting making sure we have "try" not
|
||||
# "try"/"else"
|
||||
def test_frozen(a, b):
|
||||
try:
|
||||
x = 1 / a
|
||||
except:
|
||||
x = 2
|
||||
|
||||
try:
|
||||
x += 3 / b
|
||||
except:
|
||||
x += 4
|
||||
|
||||
return x
|
||||
|
||||
assert test_frozen(1, 1) == 4.0
|
||||
assert test_frozen(0, 1) == 5.0
|
||||
assert test_frozen(0.5, 0) == 6.0
|
||||
assert test_frozen(0, 0.5) == 8.0
|
||||
|
||||
# From 3.6.10 test_binop.py
|
||||
# Bug was getting "other += 3" outside of "if"/"else.
|
||||
def __floordiv__(a, b):
|
||||
other = 0
|
||||
if a:
|
||||
other = 1
|
||||
else:
|
||||
if not b:
|
||||
return 2
|
||||
other += 3
|
||||
return other
|
||||
|
||||
assert __floordiv__(True, True) == 4
|
||||
assert __floordiv__(True, False) == 4
|
||||
assert __floordiv__(False, True) == 3
|
||||
assert __floordiv__(False, False) == 2
|
@@ -1,11 +1,13 @@
|
||||
# 2.6.9 symbols.py
|
||||
# Bug in 2.6 is having multple COME_FROMs due to the
|
||||
# "and" in the "if" clause
|
||||
|
||||
# RUNNABLE
|
||||
if __name__:
|
||||
if __file__ and __name__:
|
||||
pass
|
||||
elif __name__:
|
||||
pass
|
||||
elif not __name__:
|
||||
assert False
|
||||
|
||||
# 2.6.9 transformer.py
|
||||
# Bug in 2.6 is multple COME_FROMs as a result
|
||||
@@ -21,3 +23,20 @@ elif __file__:
|
||||
assert __name__ or __file__
|
||||
else:
|
||||
pass
|
||||
|
||||
# From 3.3.7 test_binop.py
|
||||
# Bug was in ifelsestmt(c) ensuring b+=5 is not in "else"
|
||||
# Also note: ifelsetmtc should not have been used since this
|
||||
# this is not in a loop!
|
||||
def __floordiv__(a, b):
|
||||
if a:
|
||||
b += 1
|
||||
elif not b:
|
||||
return a
|
||||
b += 5
|
||||
return b
|
||||
|
||||
assert __floordiv__(1, 1) == 7
|
||||
assert __floordiv__(1, 0) == 6
|
||||
assert __floordiv__(0, 3) == 8
|
||||
assert __floordiv__(0, 0) == 0
|
||||
|
2
test/stdlib/.gitignore
vendored
2
test/stdlib/.gitignore
vendored
@@ -1 +1,3 @@
|
||||
/.python-version
|
||||
/runun33.sh
|
||||
/runun7.sh
|
||||
|
55
test/stdlib/2.4-exclude.sh
Normal file
55
test/stdlib/2.4-exclude.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
SKIP_TESTS=(
|
||||
[test_aepack.py]=1 # it fails on its own
|
||||
[test_al.py]=1 # it fails on its own
|
||||
[test_applesingle.py]=1 # it fails on its own
|
||||
[test_bsddb185.py]=1 # it fails on its own
|
||||
[test_bsddb3.py]=1 # it fails on its own
|
||||
[test_bsddb.py]=1 # it fails on its own
|
||||
[test_cd.py]=1 # it fails on its own
|
||||
[test_cl.py]=1 # it fails on its own
|
||||
[test_codecmaps_cn.py]=1 # it fails on its own
|
||||
[test_codecmaps_hk.py]=1 # it fails on its own
|
||||
[test_codecmaps_jp.py]=1 # it fails on its own
|
||||
[test_codecmaps_kr.py]=1 # it fails on its own
|
||||
[test_codecmaps_tw.py]=1 # it fails on its own
|
||||
[test_curses.py]=1 # it fails on its own
|
||||
[test_dbm.py]=1 # it fails on its own
|
||||
[test_dl.py]=1 # it fails on its own
|
||||
[test_gdbm.py]=1 # it fails on its own
|
||||
[test_gl.py]=1 # it fails on its own
|
||||
[test_imageop.py]=1 # it fails on its own
|
||||
[test_imgfile.py]=1 # it fails on its own
|
||||
[test_linuxaudiodev.py]=1 # it fails on its own
|
||||
[test_macfs.py]=1 # it fails on its own
|
||||
[test_macostools.py]=1 # it fails on its own
|
||||
[test_nis.py]=1 # it fails on its own
|
||||
[test_normalization.py]=1 # it fails on its own
|
||||
[test_ossaudiodev.py]=1 # it fails on its own
|
||||
[test_pep277.py]=1 # it fails on its own
|
||||
[test_plistlib.py]=1 # it fails on its own
|
||||
[test_rgbimg.py]=1 # it fails on its own
|
||||
[test_scriptpackages.py]=1 # it fails on its own
|
||||
[test_socket_ssl.py]=1 # it fails on its own
|
||||
[test_sunaudiodev.py]=1 # it fails on its own
|
||||
[test_support.py]=1 # it fails on its own
|
||||
[test_tcl.py]=1 # it fails on its own
|
||||
[test_urllib2net.py]=1 # it fails on its own
|
||||
[test_urllibnet.py]=1 # it fails on its own
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
[test_zlib.py]=1 # it fails on its own
|
||||
|
||||
[test_decimal.py]=1 #
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_generators.py]=1 # Investigate
|
||||
[test_grammar.py]=1 # Too many stmts. Handle large stmts
|
||||
[test_grp.py]=1 # Long test - might work Control flow?
|
||||
[test_pep247.py]=1 # Long test - might work? Control flow?
|
||||
[test_pwd.py]=1 # Long test - might work? Control flow?
|
||||
[test_socketserver.py]=1 # -- test takes too long to run: 40 seconds
|
||||
[test_threading.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_thread.py]=1 # test takes too long to run: 36 seconds
|
||||
[test_trace.py]=1 # Long test - works
|
||||
[test_zipfile64.py]=1 # Runs ok but takes 204 seconds
|
||||
)
|
||||
# About 243 files, 0 in 19 minutes
|
@@ -1,4 +1,44 @@
|
||||
SKIP_TESTS=(
|
||||
[test_aepack.py]=1 # it fails on its own
|
||||
[test_al.py]=1 # it fails on its own
|
||||
[test_applesingle.py]=1 # it fails on its own
|
||||
[test_bsddb185.py]=1 # it fails on its own
|
||||
[test_bsddb3.py]=1 # it fails on its own
|
||||
[test_bsddb.py]=1 # it fails on its own
|
||||
[test_cd.py]=1 # it fails on its own
|
||||
[test_cl.py]=1 # it fails on its own
|
||||
[test_codecmaps_cn.py]=1 # it fails on its own
|
||||
[test_codecmaps_hk.py]=1 # it fails on its own
|
||||
[test_codecmaps_jp.py]=1 # it fails on its own
|
||||
[test_codecmaps_kr.py]=1 # it fails on its own
|
||||
[test_codecmaps_tw.py]=1 # it fails on its own
|
||||
[test_curses.py]=1 # it fails on its own
|
||||
[test_dbm.py]=1 # it fails on its own
|
||||
[test_dl.py]=1 # it fails on its own
|
||||
[test_gdbm.py]=1 # it fails on its own
|
||||
[test_gl.py]=1 # it fails on its own
|
||||
[test_imageop.py]=1 # it fails on its own
|
||||
[test_imgfile.py]=1 # it fails on its own
|
||||
[test_linuxaudiodev.py]=1 # it fails on its own
|
||||
[test_macfs.py]=1 # it fails on its own
|
||||
[test_macostools.py]=1 # it fails on its own
|
||||
[test_nis.py]=1 # it fails on its own
|
||||
[test_normalization.py]=1 # it fails on its own
|
||||
[test_ossaudiodev.py]=1 # it fails on its own
|
||||
[test_pep277.py]=1 # it fails on its own
|
||||
[test_plistlib.py]=1 # it fails on its own
|
||||
[test_rgbimg.py]=1 # it fails on its own
|
||||
[test_scriptpackages.py]=1 # it fails on its own
|
||||
[test_sunaudiodev.py]=1 # it fails on its own
|
||||
[test_support.py]=1 # it fails on its own
|
||||
[test_tcl.py]=1 # it fails on its own
|
||||
[test_urllib2net.py]=1 # it fails on its own
|
||||
[test_urllibnet.py]=1 # it fails on its own
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
[test_zlib.py]=1 # it fails on its own
|
||||
|
||||
|
||||
[test_coercion.py]=1
|
||||
[test_decimal.py]=1
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
@@ -28,14 +68,19 @@ SKIP_TESTS=(
|
||||
[test_struct.py]=1 # "if and" confused for if .. assert and
|
||||
[test_sunaudiodev.py]=1 # it fails on its own
|
||||
[test_support.py]=1 # it fails on its own
|
||||
[test_tcl.py=1] # it fails on its own
|
||||
[test_tcl.py]=1 # it fails on its own
|
||||
[test_threading.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_thread.py]=1 # test takes too long to run: 36 seconds
|
||||
[test_trace.py]=1 # Line numbers are expected to be different
|
||||
[test_urllib2net.py]=1 # is interactive?
|
||||
[test_urllibnet.py]=1 # it fails on its own
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py[=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
[test_zipfile64.py]=1 # Runs ok but takes 204 seconds
|
||||
[test_zlib]=1 # fails on its own
|
||||
)
|
||||
# About 265 tests in 14 minutes
|
||||
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_doctest.py]=1 # Fails on ppc64le
|
||||
fi
|
||||
|
@@ -1,4 +1,12 @@
|
||||
SKIP_TESTS=(
|
||||
# ifelsestmt is borked in:
|
||||
# if filename == 'srcfile':
|
||||
# return srcfile
|
||||
# if filename == 'destfile':
|
||||
# return destfile
|
||||
# assert 0 # shouldn't reach here.
|
||||
[test_shutil.py]=1
|
||||
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
@@ -59,6 +67,7 @@ SKIP_TESTS=(
|
||||
|
||||
[test_scriptpackages.py]=1 # it fails on its own
|
||||
[test_select.py]=1 # test takes too long to run: 11 seconds
|
||||
|
||||
[test_socket.py]=1 # test takes too long to run: 12 seconds
|
||||
[test_startfile.py]=1 # it fails on its own
|
||||
[test_structmembers.py]=1 # it fails on its own
|
||||
@@ -85,7 +94,7 @@ SKIP_TESTS=(
|
||||
)
|
||||
# About 305 unit-test files in about 12 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
SKIP_TESTS[test_aifc.py]=1
|
||||
|
@@ -1,4 +1,6 @@
|
||||
SKIP_TESTS=(
|
||||
[test_cgi.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test_bsddb3.py]=1 # test takes too long to run: 110 seconds
|
||||
[test_compile.py]=1 # Code introspects on co_consts in a non-decompilable way
|
||||
[test_curses.py]=1 # Possibly fails on its own but not detected
|
||||
@@ -25,6 +27,7 @@ SKIP_TESTS=(
|
||||
[test_ssl.py]=1 #
|
||||
[test_subprocess.py]=1 # Runs ok but takes 22 seconds
|
||||
[test_sys_settrace.py]=1 # Line numbers are expected to be different
|
||||
|
||||
[test_tokenize.py]=1 # test takes too long to run: 19 seconds
|
||||
[test_traceback.py]=1 # Line numbers change - duh.
|
||||
[test_unicode.py]=1 # Too long to run 11 seconds
|
||||
@@ -34,7 +37,7 @@ SKIP_TESTS=(
|
||||
)
|
||||
# 334 unit-test files in about 15 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
SKIP_TESTS[test_array.py]=1
|
||||
@@ -43,6 +46,7 @@ if (( batch )) ; then
|
||||
SKIP_TESTS[test_doctest2.py]=1 # a POWER thing?
|
||||
SKIP_TESTS[test_httplib.py]=1 # Ok, but POWER has problems with this
|
||||
SKIP_TESTS[test_pdb.py]=1 # Ok, but POWER has problems with this
|
||||
SKIP_TESTS[test_tarfile.py]=1 # test can take over 15 seconds to run on an overloaded POWER7 system
|
||||
|
||||
# SyntaxError: Non-ASCII character '\xdd' in file test_base64.py on line 153, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
|
||||
SKIP_TESTS[test_base64.py]=1
|
||||
|
@@ -1,14 +1,5 @@
|
||||
SKIP_TESTS=(
|
||||
[test_decorators.py]=1 # FIXME: Works on c90ff51
|
||||
[test_optparse.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test_binop.py]=1 # FIXME: Works on c90ff51?
|
||||
[test_cgi.py]=1 # FIXME: Works on c90ff51?
|
||||
[test_descr.py]=1 # FIXME: Works on c90ff51?
|
||||
[test_doctest2.py]=1 # FIXME: Works on c90ff51?
|
||||
|
||||
[test_cmd_line.py]=1
|
||||
[test_collections.py]=1
|
||||
@@ -40,7 +31,7 @@ SKIP_TESTS=(
|
||||
|
||||
)
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
SKIP_TESTS[test_exception_variations.py]=1
|
||||
|
@@ -1,20 +1,9 @@
|
||||
SKIP_TESTS=(
|
||||
[test_binop.py]=1 # FIXME: Works on c90ff51
|
||||
[test_cgi.py]=1 # FIXME: Works on c90ff51
|
||||
[test_decorators.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
[test_optparse.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pep352.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
[test_shutil.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
[test_symtable.py]=1 # FIXME: Works on c90ff51
|
||||
[test_buffer.py]=1 # FIXME: Works on c90ff51
|
||||
[test_cmath.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test_atexit.py]=1 # The atexit test starting at 3.3 looks for specific comments in error lines
|
||||
|
||||
[test_buffer.py]=1 # parse error
|
||||
|
||||
[test_cmd_line.py]=1 # too long?
|
||||
[test_concurrent_futures.py]=1 # too long?
|
||||
|
||||
@@ -42,6 +31,7 @@ SKIP_TESTS=(
|
||||
|
||||
[test_nntplib.py]=1
|
||||
|
||||
[test_pep352.py]=1 # test failures
|
||||
[test_peepholer.py]=1
|
||||
[test_poll.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_pty.py]=1 # FIXME: Needs grammar loop isolation separation
|
||||
@@ -69,7 +59,7 @@ SKIP_TESTS=(
|
||||
)
|
||||
# About 300 unit-test files in about 20 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_ftplib.py]=1 # Runs too long on POWER; over 15 seconds
|
||||
SKIP_TESTS[test_idle.py]=1 # No tk
|
||||
SKIP_TESTS[test_pep352.py]=1 # UnicodeDecodeError may be funny on weird environments
|
||||
|
@@ -1,20 +1,18 @@
|
||||
SKIP_TESTS=(
|
||||
[test_buffer.py]=1 # FIXME: Works on c90ff51
|
||||
[test_decorators.py]=1 # FIXME: Works on c90ff51
|
||||
[test_faulthandler.py]=1 # FIXME: too long to run 20 seconds. Works on c90ff51
|
||||
[test_decimal.py]=1 # FIXME: Works on c90ff51
|
||||
[test_optparse.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # FIXME: Works on c90ff51
|
||||
[test_shutil.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
[test_buffer.py]=1 # FIXME: Works on c90ff51
|
||||
[test_cmath.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test_atexit.py]=1 # The atexit test looks for specific comments in error lines
|
||||
|
||||
[test_cmd_line.py]=1 # takes too long to run
|
||||
[test_concurrent_futures.py]=1 # too long?
|
||||
|
||||
[test_configparser.py]=1 # Doesn't terminate
|
||||
[test_ctypes.py]=1 # it fails on its own
|
||||
[test_curses.py]=1 # Investigate
|
||||
|
||||
[test_dbm_gnu.py]=1 # fails on its own
|
||||
[test_devpoll.py]=1 # it fails on its own
|
||||
[test_descr.py]=1 # test assertion errors
|
||||
@@ -23,33 +21,44 @@ SKIP_TESTS=(
|
||||
[test_doctest2.py]=1
|
||||
[test_doctest.py]=1 # test assert failures
|
||||
[test_docxmlrpc.py]=1
|
||||
|
||||
[test_enum.py]=1 # compile syntax?
|
||||
[test_exceptions.py]=1
|
||||
|
||||
[test_faulthandler.py]=1
|
||||
[test_file_eintr.py]=1 # parse error
|
||||
[test_fork1.py]=1 # too long
|
||||
|
||||
[test_gdb.py]=1 # it fails on its own
|
||||
[test_grammar.py]=1 # parse error
|
||||
|
||||
[test_httplib.py]=1 # it fails on its own
|
||||
|
||||
[test_import.py]=1 # it fails on its own
|
||||
[test_io.py]=1
|
||||
[test_ioctl.py]=1 # it fails on its own
|
||||
[test_inspect.py]=1 # Syntax error Investigate
|
||||
|
||||
[test_logging.py]=1 # Too long to run
|
||||
[test_long.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test_modulefinder.py]=1 # test assertion error
|
||||
[test_multiprocessing_fork.py]=1 # doesn't terminate
|
||||
[test_multiprocessing_forkserver.py]=1 # doesn't terminate
|
||||
[test_multiprocessing_main_handling.py]=1 # doesn't terminate
|
||||
[test_multiprocessing_spawn.py]=1 # doesn't terminate
|
||||
|
||||
[test_nntplib.py]=1 # too long to run
|
||||
|
||||
[test_peepholer.py]=1 # control flow?
|
||||
[test_pep352.py]=1 # test assert failures
|
||||
[test_pickle.py]=1 # test assert failures
|
||||
[test_pkgimport.py]=1 # long
|
||||
[test_poll.py]=1 # Too long to run: 11 seconds
|
||||
[test_pydoc.py]=1 # test assertion failures
|
||||
|
||||
[test_runpy.py]=1 # Too long:
|
||||
|
||||
[test_select.py]=1 # Too long: 11 seconds
|
||||
[test_selectors.py]=1 # Too long: 11 seconds
|
||||
[test_signal.py]=1 # Too long: 22 seconds
|
||||
@@ -59,12 +68,15 @@ SKIP_TESTS=(
|
||||
[test_subprocess.py]=1 # Too long
|
||||
[test_symtable.py]=1 # Investigate bad output
|
||||
[test_sys_settrace.py]=1 # test assert failures
|
||||
|
||||
[test_tcl.py]=1 # May be implementation specific. On POWER though it fails
|
||||
[test_threading.py]=1 # Too long
|
||||
[test_threadsignals.py]=1 # Too long to run: 12 seconds
|
||||
[test_timeout.py]=1 # Too long to run: 19 seconds
|
||||
[test_traceback.py]=1 # introspects on code
|
||||
|
||||
[test_urllib2net.py]=1 # Doesn't terminate
|
||||
|
||||
[test_zipfile64.py]=1
|
||||
[test_zlib.py]=1
|
||||
)
|
||||
|
@@ -1,20 +1,7 @@
|
||||
SKIP_TESTS=(
|
||||
[test_buffer.py]=1 # FIXME: Works on c90ff51
|
||||
[test_decorators.py]=1 # FIXME: Works on c90ff51
|
||||
[test_faulthandler.py]=1 # FIXME: too long to run 20 seconds. Works on c90ff51
|
||||
[test_ftplib.py]=1 # Works on c90ff51
|
||||
[test_marshal.py]=1 # FIXME: Works on c90ff51
|
||||
[test_optparse.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # FIXME: Works on c90ff51
|
||||
[test_platform.py]=1 # FIXME: Works on c90ff51
|
||||
[test_poplib.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
[test_smtplib.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
[test_shutil.py]=1 # FIXME: Works on c90ff51
|
||||
[test_sysconfig.py]=1 # FIXME: Works on c90ff51
|
||||
[test_tempfile.py]=1 # FIXME: Works on c90ff51
|
||||
[test_uu.py]=1 # FIXME: Works on c90ff51
|
||||
[test_buffer.py]=1 # FIXME: Works on c90ff51
|
||||
[test_platform.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test_aifc.py]=1 #
|
||||
@@ -33,7 +20,6 @@ SKIP_TESTS=(
|
||||
[test_collections.py]=1
|
||||
[test_compile.py]=1 # Code introspects on co_consts in a non-decompilable way
|
||||
[test_concurrent_futures.py]=1 # Takes long to run
|
||||
[test_coroutines.py]=1 # Syntax error Investigate
|
||||
[test_curses.py]=1 #
|
||||
|
||||
[test_devpoll.py]=1 # it fails on its own
|
||||
@@ -50,6 +36,7 @@ SKIP_TESTS=(
|
||||
[test_exceptions.py]=1 # parse error
|
||||
|
||||
[test_format.py]=1
|
||||
[test_ftplib.py]=1 # Test assertion failures
|
||||
|
||||
[test_gdb.py]=1 # it fails on its own
|
||||
[test_glob.py]=1 #
|
||||
@@ -65,6 +52,7 @@ SKIP_TESTS=(
|
||||
[test_logging.py]=1 #
|
||||
[test_long.py]=1 # too long run time: 20 seconds
|
||||
|
||||
[test_marshal.py]=1 # test assertion errors
|
||||
[test_math.py]=1 # test assertion errors TypeError: a float is required
|
||||
[test_modulefinder.py]=1 # test assertion error
|
||||
[test_msilib.py]=1 # it fails on its own
|
||||
@@ -99,7 +87,7 @@ SKIP_TESTS=(
|
||||
[test_selectors.py]=1 # Takes too long 17 seconds
|
||||
[test_set.py]=1 # # test assert failure and doesn't terminate
|
||||
[test_signal.py]=1 # too long?
|
||||
[test_smtpd.py]=1 # test failures
|
||||
[test_smtplib.py]=1 # probably control flow
|
||||
[test_socket.py]=1 # long
|
||||
[test_socketserver.py]=1
|
||||
[test_strtod.py]=1 # Test assert failure
|
||||
@@ -108,6 +96,7 @@ SKIP_TESTS=(
|
||||
[test_sys_settrace.py]=1 # test assert fail
|
||||
|
||||
[test_tcl.py]=1 # it fails on its own
|
||||
[test_tempfile.py]=1 # test assertion failures
|
||||
[test_thread.py]=1
|
||||
[test_threading.py]=1
|
||||
[test_timeout.py]=1
|
||||
@@ -123,6 +112,7 @@ SKIP_TESTS=(
|
||||
[test_urllib2net.py]=1 # it fails on its own
|
||||
[test_urllibnet.py]=1 # it fails on its own
|
||||
[test_urlparse.py]=1 # test assert error
|
||||
[test_uu.py]=1 # test assert error
|
||||
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
@@ -137,18 +127,19 @@ SKIP_TESTS=(
|
||||
)
|
||||
# About 260 unit-test in about 16 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_asyncore.py]=1 # Ok, but takes more than 15 seconds to run
|
||||
SKIP_TESTS[test_bisect.py]=1
|
||||
SKIP_TESTS[test_buffer.py]=1 # too long
|
||||
SKIP_TESTS[test_compileall.py]=1 # Something weird on POWER
|
||||
SKIP_TESTS[test_codeccallbacks.py]=1 # Something differenet in locale?
|
||||
SKIP_TESTS[test_distutils.py]=1
|
||||
|
||||
SKIP_TESTS[test_exception_variations.py]=1
|
||||
SKIP_TESTS[test_quopri.py]=1
|
||||
SKIP_TESTS[test_ioctl.py]=1 # it fails on its own
|
||||
SKIP_TESTS[test_poplib.py]=1 # May be a result of POWER installation
|
||||
|
||||
SKIP_TESTS[test_quopri.py]=1
|
||||
SKIP_TESTS[test_sysconfig.py]=1 # POWER extension fails
|
||||
SKIP_TESTS[test_tarfile.py]=1 # too long to run on POWER 15 secs
|
||||
SKIP_TESTS[test_venv.py]=1 # takes too long 11 seconds
|
||||
fi
|
||||
|
@@ -1,14 +1,13 @@
|
||||
SKIP_TESTS=(
|
||||
[test_binop.py]=1 # FIXME: Works on c90ff51
|
||||
[test_cmath.py]=1 # FIXME: Works on c90ff51
|
||||
[test_decorators.py]=1 # FIXME: Works on c90ff51
|
||||
[test_format.py]=1 # FIXME: works on c90ff51
|
||||
[test_locale.py]=1 # FIXME: Works on c90ff51
|
||||
[test_optparse.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # FIXME: Works on c90ff51
|
||||
[test_pyclbr.py]=1 # FIXME: Works on c90ff51
|
||||
[test_ast.py]=1 # FIXME: Works on c90ff51
|
||||
[test_cmath.py]=1 # FIXME: Works on c90ff51
|
||||
[test_format.py]=1 # FIXME: Works on c90ff51
|
||||
[test_ftplib.py]=1 # FIXME: Works on c90ff51
|
||||
[test_slice.py]=1 # FIXME: Works on c90ff51
|
||||
[test_sort.py]=1 # FIXME: Works on c90ff51
|
||||
[test_strftime.py]=1 # FIXME: Works on c90ff51
|
||||
[test_timeit.py]=1 # FIXME: Works on c90ff51
|
||||
[test_os.py]=1 # parse error FIXME: Works on c90ff51
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test_aifc.py]=1 #
|
||||
@@ -22,9 +21,10 @@ SKIP_TESTS=(
|
||||
[test_bisect.py]=1 # it fails on its own
|
||||
[test_buffer.py]=1 # parse error
|
||||
[test_builtin.py]=1 # Fails on its own
|
||||
|
||||
[test test_capi.py]=1 # it fails on its own
|
||||
[test_cmd_line.py]=1 # Interactive?
|
||||
|
||||
[test_codeccallbacks.py]=1 # TypeError: ... must return (str/bytes, int) tuple
|
||||
[test_codecencodings_cn.py]=1 # it fails on its own
|
||||
[test_codecencodings_hk.py]=1 # it fails on its own
|
||||
[test_codecencodings_iso2022.py]=1 # it fails on its own
|
||||
@@ -42,13 +42,14 @@ SKIP_TESTS=(
|
||||
[test_concurrent_futures.py]=1 # Takes long
|
||||
[test_contextlib.py]=1 # test assertion failure
|
||||
[test_contextlib_async.py]=1 # Investigate
|
||||
[test_coroutines.py]=1 # Parse error
|
||||
[test_coroutines.py]=1 # parse error
|
||||
[test_curses.py]=1 # Parse error
|
||||
[test_ctypes.py]=1 # it fails on its own
|
||||
|
||||
[test_datetime.py]=1 # it fails on its own
|
||||
[test_dbm_ndbm.py]=1 # it fails on its own
|
||||
[test_decimal.py]=1
|
||||
[test_decorators.py]=1 # control-flow failures
|
||||
[test_descr.py]=1 # syntax error: Investigate
|
||||
[test_devpoll.py]=1 # it fails on its own
|
||||
[test_dict.py]=1 # it fails on its own
|
||||
@@ -106,7 +107,8 @@ SKIP_TESTS=(
|
||||
[test_nntplib.py]=1 # test takes too long to run: 31 seconds
|
||||
[test_normalization.py]=1 # it fails on its own
|
||||
|
||||
[test_ordered_dict.py]= # it fails on its own
|
||||
[test_optparse.py]=1 # test fails
|
||||
[test_ordered_dict.py]=1 # it fails on its own
|
||||
[test_ossaudiodev.py]=1 # it fails on its own
|
||||
|
||||
[test_pdb.py]=1 # Probably introspection
|
||||
@@ -147,11 +149,13 @@ SKIP_TESTS=(
|
||||
[test_startfile.py]=1 # it fails on its own
|
||||
[test_statistics.py]=1 # it fails on its own
|
||||
[test_string_literals.py]=1
|
||||
[test_strftime.py]=1 # test assertion failures
|
||||
[test_strtod.py]=1 # it fails on its own
|
||||
[test_struct.py]=1 # test assertion errors
|
||||
[test_subprocess.py]=1
|
||||
[test_sys.py]=1 # Investigate confusing "and" with nested "if" when there is an "else
|
||||
[test_sys_settrace.py]=1 # parse error
|
||||
[test_sysconfig.py]=1 # if confused for ifelse in "test_triplet_in_ext_suffix"
|
||||
|
||||
[test_tarfile.py]=1 # it fails on its own
|
||||
[test_tcl.py]=1 # Test assert failures
|
||||
@@ -159,6 +163,9 @@ SKIP_TESTS=(
|
||||
[test_thread.py]=1 # it fails on its own
|
||||
[test_threading.py]=1
|
||||
[test_threadsignals.py]=1
|
||||
|
||||
[test_time.py]=1 # Works but not on POWER: Rounding error?
|
||||
|
||||
[test_timeout.py]=1
|
||||
[test_tix.py]=1 # it fails on its own
|
||||
[test_tk.py]=1 # it fails on its own
|
||||
@@ -177,6 +184,7 @@ SKIP_TESTS=(
|
||||
[test_urllib2.py]=1 # it fails on its own
|
||||
[test_urllibnet.py]=1 # it fails on its own
|
||||
[test_urllib.py]=1 # it fails on its own
|
||||
[test_urlparse.py]=1 # test failure
|
||||
|
||||
[test_venv.py]=1 # test takes too long to run: 13 seconds
|
||||
|
||||
@@ -195,8 +203,10 @@ SKIP_TESTS=(
|
||||
)
|
||||
# 236 unit-test files in about 13 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_codeccallbacks.py]=1
|
||||
SKIP_TESTS[test_complex.py]=1 # Something funky with POWER8
|
||||
|
||||
# locale on test machine is probably customized
|
||||
SKIP_TESTS[test__locale.py]=1
|
||||
fi
|
||||
|
@@ -1,136 +1,149 @@
|
||||
SKIP_TESTS=(
|
||||
[test_builtin.py]=1 # FIXME works on decompyle6
|
||||
[test_context.py]=1 # FIXME works on decompyle6
|
||||
[test_doctest2.py]=1 # FIXME works on decompyle6
|
||||
[test_format.py]=1 # FIXME works on decompyle6
|
||||
[test_marshal.py]=1 # FIXME works on decompyle6
|
||||
[test_normalization.py]=1 # FIXME works on decompyle6
|
||||
[test_os.py]=1 # FIXME works on decompyle6
|
||||
[test_pow.py]=1 # FIXME works on decompyle6
|
||||
[test_slice.py]=1 # FIXME works on decompyle6
|
||||
[test_sort.py]=1 # FIXME works on decompyle6
|
||||
[test_statistics.py]=1 # FIXME works on decompyle6
|
||||
[test_timeit.py]=1 # FIXME works on decompyle6
|
||||
[test_urllib2_localnet.py]=1 # FIXME works on decompyle6
|
||||
[test_urllib2.py]=1 # FIXME: works on uncompyle6
|
||||
[test_generators.py]=1 # FIXME: works on uncompyle6 - lambda parsing probably
|
||||
[test_grammar.py]=1 # FIXME: works on uncompyle6 - lambda parsing probably
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test_argparse.py]=1 #- it fails on its own
|
||||
[test_asdl_parser.py]=1 # it fails on its own
|
||||
[test_ast.py]=1 # Depends on comments in code
|
||||
[test_atexit.py]=1 # The atexit test looks for specific comments in error lines
|
||||
[test_baseexception.py]=1 # UnboundLocalError: local variable 'exc' referenced before assignment
|
||||
[test_bdb.py]=1 #
|
||||
[test_buffer.py]=1 # test assertion errors
|
||||
[test_builtin.py]=1 # parse error, but decompyle3 doesn't have this. (It has test assert failures though)
|
||||
[test_buffer.py]=1 # parse error
|
||||
[test_clinic.py]=1 # it fails on its own
|
||||
[test_cmath.py]=1 # test assertion failure
|
||||
[test_cmd_line.py]=1 # Interactive?
|
||||
[test_cmd_line_script.py]=1
|
||||
[test_compare.py]=1 # Weird test assert faiure AssertionError: [1] == [1]
|
||||
[test_compileall.py]=1 # fails on its own
|
||||
[test_compile.py]=1 # Code introspects on co_consts in a non-decompilable way
|
||||
[test_concurrent_futures.py]=1 # too long
|
||||
[test_context.py]=1
|
||||
[test_coroutines.py]=1 # Investigate: Parse error - async/yield stuff?
|
||||
[test_coroutines.py]=1 # parse error
|
||||
[test_codecs.py]=1 # test assert failures; encoding/decoding stuff
|
||||
[test_ctypes.py]=1 # it fails on its own
|
||||
[test_curses.py]=1 # probably byte string not handled properly
|
||||
[test_dataclasses.py]=1 # FIXME: control flow probably: AssertionError: unknown result 'exception'
|
||||
[test_datetime.py]=1 # Takes too long
|
||||
[test_dbm_gnu.py]=1 # Takes too long
|
||||
[test_dbm_ndbm.py]=1 # it fails on its own
|
||||
[test_decimal.py]=1 # test assertion failures
|
||||
[test_decimal.py]=1 # parse error
|
||||
[test_descr.py]=1 # test assertion failures
|
||||
[test_devpoll.py]=1 # it fails on its own
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_doctest2.py]=1 # FIXME: assert failure - works on decompyle3
|
||||
[test_dis.py]=1 # Investigate async out of place. Then We change line numbers - duh!
|
||||
[test_doctest.py]=1 # test failures
|
||||
[test_docxmlrpc.py]=1
|
||||
|
||||
[test_enum.py]=1 # probably bad control flow
|
||||
[test_faulthandler.py]=1 # takes too long
|
||||
[test_fcntl.py]=1
|
||||
|
||||
[test_faulthandler.py]=1 # test takes too long before decompiling
|
||||
[test_fileinput.py]=1 # Test assertion failures
|
||||
[test_format.py]=1 # Probably not handling bytestrings properly
|
||||
[test_frame.py]=1 # test assertion errors
|
||||
[test_ftplib.py]=1 # parse error
|
||||
[test_functools.py]=1 # parse error
|
||||
[test_fstring.py]=1 # need to disambiguate leading fstrings from docstrings
|
||||
[test_functools.py]=1 # parse error
|
||||
|
||||
[test_gdb.py]=1 # it fails on its own
|
||||
[test_generators.py]=1 # Investigate improper lamdba with bogus "False" added
|
||||
[test_glob.py]=1 # TypeError: join() argument must be str or bytes, not 'tuple'
|
||||
[test_grammar.py]=1 # investigate: index out of range in decompiler (template_engine?)
|
||||
[test_grp.py]=1 # Doesn't terminate (killed)
|
||||
[test_hashlib.py]=1 # test assert failures
|
||||
[test_imaplib-3.7.py]=1 # test assert failures
|
||||
[test_idle.py]=1 # Probably installation specific
|
||||
|
||||
[test_imaplib.py]=1 # test run loops before decompiling? More than 15 seconds to run
|
||||
[test_io.py]=1 # test takes too long to run: 37 seconds
|
||||
[test_imaplib.py]=1 # test assert failures
|
||||
[test_imaplib.py]=1 # decompiled test loops - killing after 15 seconds
|
||||
[test_inspect.py]=1 # Investigate test failures involving lambda
|
||||
|
||||
[test_kqueue.py]=1 # it fails on its own
|
||||
|
||||
[test_lib2to3.py]=1 # it fails on its own
|
||||
[test_long.py]=1 # FIX: if boundaries wrong in Rat __init__
|
||||
[test_logging.py]=1 # test takes too long to run: 20 seconds
|
||||
[test_mailbox.py]=1
|
||||
[test_marshal.py]=1
|
||||
|
||||
[test_mailbox.py]=1 # probably control flow
|
||||
[test_math.py]=1 # test assert failures
|
||||
[test_modulefinder.py]=1
|
||||
[test_msilib.py]=1
|
||||
[test_msilib.py]=1 # it fails on its own
|
||||
[test_multiprocessing_fork.py]=1 # test takes too long to run: 62 seconds
|
||||
[test_multiprocessing_forkserver.py]=1
|
||||
[test_multiprocessing_spawn.py]=1
|
||||
[test_normalization.py]=1 # probably control flow (uninitialized variable)
|
||||
[test_nntplib.py]=1
|
||||
|
||||
[test_nntplib.py]=1 # Too long in running before decomplation takes 25 seconds
|
||||
|
||||
[test_optparse.py]=1 # doesn't terminate at test_consume_separator_stop_at_option
|
||||
[test_os.py]=1 # probably control flow (uninitialized variable)
|
||||
[test_ossaudiodev.py]=1 # it fails on its own
|
||||
|
||||
[test_pdb.py]=1 # Probably relies on comments
|
||||
[test_peepholer.py]=1 # test assert error
|
||||
[test_pickle.py]=1 # Probably relies on comments
|
||||
[test_poll.py]=1
|
||||
[test_poplib.py]=1
|
||||
[test_pydoc.py]=1 # it fails on its own
|
||||
[test_runpy.py]=1 #
|
||||
[test_pkg.py]=1 # Investigate: lists differ
|
||||
[test_pkgutil.py]=1 # Investigate:
|
||||
[test_platform.py]=1 # probably control flow: uninitialized variable
|
||||
[test_pow.py]=1 # probably control flow: test assertion failure
|
||||
[test_poll.py]=1 # Takes too long to run before decompiling 11 seconds
|
||||
[test_pwd.py]=1 # killing - doesn't terminate
|
||||
[test_pydoc.py]=1 # it fails on its own
|
||||
|
||||
[test_regrtest.py]=1 # lists differ
|
||||
[test_re.py]=1 # test assertion error
|
||||
[test_richcmp.py]=1 # parse error
|
||||
[test_runpy.py]=1 # Too long to run before decompiling
|
||||
|
||||
[test_select.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_selectors.py]=1
|
||||
[test_selectors.py]=1 # Takes too long to run before decompling: 17 seconds
|
||||
[test_shutil.py]=1 # fails on its own
|
||||
[test_signal.py]=1 #
|
||||
[test_slice.py]=1 # test assert error in data; Investigate
|
||||
[test_smtplib.py]=1 #
|
||||
[test_socket.py]=1
|
||||
[test_socketserver.py]=1
|
||||
[test_sort.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_ssl.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_signal.py]=1 # Takes too long to run before decompiling: 22 seconds
|
||||
[test_smtplib.py]=1 # test failures
|
||||
[test_socket.py]=1 # Takes too long to run before decompiling
|
||||
[test_ssl.py]=1 # Takes too long to run more than 15 seconds. Probably control flow; unintialized variable
|
||||
[test_startfile.py]=1 # it fails on its own
|
||||
[test_statistics.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_string_literals.py]=1 # Investigate boolean parsing
|
||||
[test_strptime.py]=1 # test assertions failed
|
||||
[test_strptime.py]=1 # parfse error
|
||||
[test_strtod.py]=1 # test assertions failed
|
||||
[test_structmembers.py]=1 # test assertions failed
|
||||
[test_struct.py]=1 # test assertions failed
|
||||
[test_subprocess.py]=1
|
||||
[test_sys_setprofile.py]=1 # test assertions failed
|
||||
[test_struct.py]=1 # probably control flow
|
||||
[test_subprocess.py]=1 # Takes too long to run before decompile: 25 seconds
|
||||
[test_sys_settrace.py]=1 # parse error
|
||||
|
||||
[test_tarfile.py]=1 # test assertions failed
|
||||
[test_threading.py]=1 #
|
||||
[test_timeit.py]=1 # probably control flow uninitialized variable
|
||||
[test_threading.py]=1 # test assertion failers
|
||||
[test_tk.py]=1 # test takes too long to run: 13 seconds
|
||||
[test_tokenize.py]=1
|
||||
[test_tokenize.py]=1 # test takes too long to run before decompilation: 43 seconds
|
||||
[test_trace.py]=1 # it fails on its own
|
||||
[test_traceback.py]=1 # Probably uses comment for testing
|
||||
[test_tracemalloc.py]=1 #
|
||||
[test_tracemalloc.py]=1 # test assert failres
|
||||
[test_ttk_guionly.py]=1 # implementation specfic and test takes too long to run: 19 seconds
|
||||
[test_ttk_guionly.py]=1 # implementation specfic and test takes too long to run: 19 seconds
|
||||
[test_typing.py]=1 # parse error
|
||||
[test_types.py]=1 # parse error
|
||||
|
||||
[test_unicode.py]=1 # unicode thing
|
||||
[test_urllib2_localnet.py]=1 #
|
||||
[test_urllibnet.py]=1 # probably control flow - uninitialized variable
|
||||
|
||||
[test_weakref.py]=1 # probably control flow - uninitialized variable
|
||||
[test_with.py]=1 # probably control flow - uninitialized variable
|
||||
[test_xml_dom_minicompat.py]=1 # FIXME: parse error; imports again
|
||||
|
||||
[test_winconsoleio.py]=1 # it fails on its own
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
|
||||
[test_zipfile.py]=1 # it fails on its own
|
||||
[test_zipfile64.py]=1 # Too long to run
|
||||
)
|
||||
# 278 unit-test files in about 15 minutes
|
||||
# 306 unit-test files in about 19 minutes
|
||||
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_capi.py]=1 # more than 15 secs to run on POWER
|
||||
SKIP_TESTS[test_dbm_gnu.py]=1 # fails on its own on POWER
|
||||
SKIP_TESTS[test_distutils.py]=1
|
||||
SKIP_TESTS[test_fileio.py]=1
|
||||
SKIP_TESTS[test_gc.py]=1
|
||||
SKIP_TESTS[test_idle.py]=1 # Probably installation specific
|
||||
SKIP_TESTS[test_sqlite.py]=1 # fails on its own on POWER
|
||||
SKIP_TESTS[test_tix.py]=1 # it fails on its own
|
||||
SKIP_TESTS[test_ttk_textonly.py]=1 # Installation dependent?
|
||||
SKIP_TESTS[test_venv.py]=1 # Too long to run: 11 seconds
|
||||
SKIP_TESTS[test_zipimport_support.py]=1
|
||||
|
||||
fi
|
||||
|
@@ -1,152 +1,343 @@
|
||||
SKIP_TESTS=(
|
||||
[test_mimetypes.py]=1 # parse error. decompile3 works. Release 3.6.4 works?
|
||||
[test_time.py]=1 # FIXME: parse eror. decompyle3 works. Release 3.6.4 works?
|
||||
[test_aifc.py]=1 # parse error; decompile3 works
|
||||
|
||||
[test_doctest2.py]=1 # test failures release 3.6.4 works?
|
||||
[test_finalization.py]=1 # test failures release 3.6.4 works?
|
||||
[test_urllib2.py]=1 # FIXME: works on uncompyle6?
|
||||
[test_zipimport.py]=1 # FIXME: works on uncompyle6
|
||||
|
||||
[test___all__.py]=1 # it fails on its own
|
||||
[test_argparse.py]=1 #- it fails on its own
|
||||
[test_array.py]=1 #- parse error
|
||||
[test_asdl_parser.py]=1 # it fails on its own
|
||||
[test_ast.py]=1 # Depends on comments in code
|
||||
[test_asyncgen.py]=1 # parse error
|
||||
[test_asynchat.py]=1 # parse error
|
||||
[test_asyncore.py]=1 # parse error
|
||||
[test_atexit.py]=1 # The atexit test looks for specific comments in error lines
|
||||
[test_audioop.py]=1 # test failure
|
||||
[test_audit.py]=1 # parse error
|
||||
|
||||
[test_base64.py]=1 # parse error
|
||||
[test_baseexception.py]=1 #
|
||||
[test_bigaddrspace.py]=1 # parse error
|
||||
[test_bigmem.py]=1 # parse error
|
||||
[test_bdb.py]=1 #
|
||||
[test_binascii.py]=1 # test failure
|
||||
[test_binhex.py]=1 # parse error
|
||||
[test_binop.py]=1 # parse error
|
||||
[test_bool.py]=1 # parse error
|
||||
[test_buffer.py]=1 # parse error
|
||||
[test_builtin.py]=1 # parse error
|
||||
[test_bytes.py]=1 # parse error
|
||||
[test_bz2.py]=1 # parse error
|
||||
|
||||
[test_calendar.py]=1 # parse error
|
||||
[test_cgi.py]=1 # parse error
|
||||
[test_cgitb.py]=1 # parse error
|
||||
[test_clinic.py]=1 # it fails on its own
|
||||
[test_cmath.py]=1 # test assertion failure
|
||||
[test_cmd.py]=1 # parse error
|
||||
[test_cmd_line.py]=1 # Interactive?
|
||||
[test_cmd_line_script.py]=1
|
||||
[test_code_module.py]=1 # test failure
|
||||
[test_codecmaps_cn.py]=1 # test before decompile takes too long to run 135 secs
|
||||
[test_codecmaps_hk.py]=1 # test before decompile takes too long to run 46 secs
|
||||
[test_codecs.py]=1
|
||||
[test_collections.py]=1
|
||||
[test_compare.py]=1
|
||||
[test_compileall.py]=1 # fails on its own
|
||||
[test_compile.py]=1
|
||||
[test_compileall.py]=1 # fails on its own
|
||||
[test_complex.py]=1 # Investigate
|
||||
[test_concurrent_futures.py]=1 # too long
|
||||
[test_configparser.py]=1
|
||||
[test_context.py]=1
|
||||
[test_contextlib.py]=1 # parse error
|
||||
[test_contextlib_async.py]=1 # parse error
|
||||
[test_coroutines.py]=1 # Parse error
|
||||
[test_codecs.py]=1
|
||||
[test_compile.py]=1 # Parse error, but after that, the code introspects on co_consts in a non-decompilable way
|
||||
[test_complex.py]=1 # Investigate
|
||||
[test_cprofile.py]=1 # parse error
|
||||
[test_crypt.py]=1 # Parse error
|
||||
[test_csv.py]=1 # Parse error
|
||||
[test_ctypes.py]=1 # it fails on its own
|
||||
[test_curses.py]=1 # Parse error
|
||||
|
||||
[test_dataclasses.py]=1 # test assertion errors
|
||||
[test_datetime.py]=1 # Takes too long
|
||||
[test_dbm.py]=1 # parse error
|
||||
[test_dbm_dumb.py]=1 # parse error
|
||||
[test_dbm_gnu.py]=1 # Takes too long
|
||||
[test_dbm_ndbm.py]=1 # it fails on its own
|
||||
[test_decimal.py]=1 # Parse error
|
||||
[test_decorators.py]=1 # parse error
|
||||
[test_deque.py]=1 # parse error
|
||||
[test_descr.py]=1 # Parse error
|
||||
[test_descrtut.py]=1 # parse error
|
||||
[test_devpoll.py]=1 # it fails on its own
|
||||
[test_dict.py]=1 # parse error
|
||||
[test_dictcomps.py]=1 # Bad semantics - Investigate
|
||||
[test_difflib.py]=1 # parse error
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_doctest.py]=1 # parse error
|
||||
[test_doctest2.py]=1 # test faiures relesae 3.6.4 works?
|
||||
[test_docxmlrpc.py]=1
|
||||
[test_dtrace.py]=1 # parse error
|
||||
[test_dummy_thread.py]=1 # parse error
|
||||
|
||||
[test_exceptions.py]=1 # parse error
|
||||
[test_enumerate.py]=1 #
|
||||
[test_embed.py]=1 # parse error
|
||||
[test_ensureip.py]=1 #
|
||||
[test_ensurepip.py]=1 # parse error
|
||||
[test_enum.py]=1 #
|
||||
[test_enumerate.py]=1 #
|
||||
[test_eof.py]=1 # parse error
|
||||
[test_epoll.py]=1 # parse error
|
||||
[test_exception_hierarchy.py]=1 # control flow?
|
||||
[test_exceptions.py]=1 # parse error
|
||||
|
||||
[test_faulthandler.py]=1 # takes too long
|
||||
[test_file_eintr.py]=1 # too long to run test; works on 3.7.7
|
||||
[test_fcntl.py]=1
|
||||
[test_filecmp.py]=1 # parse error
|
||||
[test_fileinput.py]=1
|
||||
[test_float.py]=1
|
||||
[test_fileio.py]=1
|
||||
[test_float.py]=1 # Takes a long time to decompile
|
||||
[test_flufl.py]=1 # parse error
|
||||
[test_format.py]=1
|
||||
[test_frame.py]=1
|
||||
[test_frozen.py]=1 # parse error
|
||||
[test_fstring.py]=1 # Investigate
|
||||
[test_ftplib.py]=1
|
||||
[test_functools.py]=1
|
||||
[test_future.py]=1 # parse error
|
||||
[test___future__.py]=1 # test failure
|
||||
[test_future5.py]=1 # parse error
|
||||
|
||||
[test_gc.py]=1 # parse error
|
||||
[test_gdb.py]=1 # it fails on its own
|
||||
[test_genericpath.py]=1 # parse error
|
||||
[test_generators.py]=1 # improper decompile of assert i < n and (n-i) % 3 == 0
|
||||
[test_getpass.py]=1 # parse error
|
||||
[test_gettext.py]=1 # parse error
|
||||
[test_glob.py]=1 #
|
||||
[test_grammar.py]=1
|
||||
[test_grp.py]=1 # Doesn't terminate (killed)
|
||||
[test_gzip.py]=1 # parse error
|
||||
|
||||
[test_hashlib.py]=1 # test assert failures
|
||||
[test_heapq.py]=1 # test failure
|
||||
[test_hmac.py]=1 # parse error
|
||||
[test_httplib.py]=1 # parse error
|
||||
[test_http_cookiejar.py]=1
|
||||
[test_imaplib-3.7.py]=1
|
||||
[test_idle.py]=1 # Probably installation specific
|
||||
[test_httpservers.py]=1 # parse error
|
||||
|
||||
[test_imghdr.py]=1 # parse error
|
||||
[test_imp.py]=1 # parse error
|
||||
[test_int.py]=1 # parse error
|
||||
[test_io.py]=1 # test takes too long to run: 37 seconds
|
||||
[test_ioctl.py]=1 # parse error
|
||||
[test_imaplib.py]=1
|
||||
[test_ipaddress.py]=1 # parse error
|
||||
[test_index.py]=1
|
||||
[test_inspect.py]=1
|
||||
[test_iter.py]=1 # parse error
|
||||
[test_itertools.py]=1 # parse error
|
||||
|
||||
[test_keywordonlyarg.py]=1 # parse error
|
||||
[test_kqueue.py]=1 # it fails on its own
|
||||
|
||||
[test__locale.py]=1 # parse error
|
||||
[test_largefile.py]=1 # parse error
|
||||
[test_lib2to3.py]=1 # it fails on its own
|
||||
[test_long.py]=1 # investigate
|
||||
[test_linecache.py]=1 # parse error
|
||||
[test_lltrace.py]=1 # parse error
|
||||
[test_locale.py]=1 # parse error
|
||||
[test_logging.py]=1 # test takes too long to run: 20 seconds
|
||||
[test_mailbox.py]=1
|
||||
[test_long.py]=1 # investigate
|
||||
[test_lzma.py]=1 # it fails on its own
|
||||
|
||||
[test_mailbox.py]=1 # parse error
|
||||
[test_mailcap.py]=1 # parse error
|
||||
[test_marshal.py]=1
|
||||
[test_math.py]=1
|
||||
[test_memoryio.py]=1 # test failure
|
||||
[test_memoryview.py]=1 # parse error
|
||||
[test_minidom.py]=1 # test failure
|
||||
[test_mmap.py]=1 # parse error
|
||||
[test_modulefinder.py]=1
|
||||
[test_msilib.py]=1
|
||||
[test_multiprocessing_fork.py]=1 # test takes too long to run: 62 seconds
|
||||
[test_multiprocessing_forkserver.py]=1
|
||||
[test_multiprocessing_main_handling.py]=1 # parse error
|
||||
[test_multiprocessing_spawn.py]=1
|
||||
|
||||
[test_named_expressions.py]=1 # parse error
|
||||
[test_netrc.py]=1 # parse error
|
||||
[test_nis.py]=1 # break outside of loop
|
||||
[test_normalization.py]=1 # probably control flow (uninitialized variable)
|
||||
[test_nntplib.py]=1
|
||||
[test_ntpath.py]=1
|
||||
|
||||
[test__osx_support.py]=1 # parse error
|
||||
[test_opcodes.py]=1 # parse error
|
||||
[test_operator.py]=1 # parse error
|
||||
[test_optparse.py]=1 # doesn't terminate (killed)
|
||||
[test_ordered_dict.py]=1 # parse error
|
||||
[test_os.py]=1 # probably control flow (uninitialized variable)
|
||||
[test_ossaudiodev.py]=1 # it fails on its own
|
||||
[test_osx_env.py]=1 # parse error
|
||||
|
||||
[test_pathlib.py]=1 # parse error
|
||||
[test_pdb.py]=1 # Probably relies on comments
|
||||
[test_peepholer.py]=1 # decompile takes a long time; then test assert error
|
||||
[test_pickle.py]=1 # Probably relies on comments
|
||||
[test_poll.py]=1
|
||||
[test_poplib.py]=1
|
||||
[test_pydoc.py]=1 # it fails on its own
|
||||
[test_runpy.py]=1 #
|
||||
[test_pkg.py]=1 # parse error; Investigate: lists differ
|
||||
[test_pkgutil.py]=1 # parse error
|
||||
[test_picklebuffer.py]=1 # parse error
|
||||
[test_pipes.py]=1 # parse error
|
||||
[test_pkg.py]=1 # Investigate: lists differ
|
||||
[test_pkgimport.py]=1 # parse error
|
||||
[test_pkgutil.py]=1 # Investigate:
|
||||
[test_platform.py]=1 # parse error
|
||||
[test_plistlib.py]=1 # parse error
|
||||
[test_poll.py]=1
|
||||
[test_popen.py]=1 # parse error
|
||||
[test_poplib.py]=1 # Parse error
|
||||
[test_positional_only_arg.py]=1 # test failures
|
||||
[test_posixpath.py]=1 # parse error
|
||||
[test_posix.py]=1 # parse error
|
||||
[test_print.py]=1 # parse error
|
||||
[test_profile.py]=1 # parse error
|
||||
[test_pwd.py]=1 # killing - doesn't terminate
|
||||
[test_regrtest.py]=1 # parse error; test assertion error: lists differ
|
||||
[test_re.py]=1 # parse error; test assertion error
|
||||
[test_richcmp.py]=1 # Investigate: data[i] index error in semantic handling
|
||||
[test_pulldom.py]=1 # killing - doesn't terminate
|
||||
[test_py_compile.py]=1 # parse error
|
||||
[test_pyexpat.py]=1 # parse error
|
||||
[test_pyclbr.py]=1 # test failure
|
||||
[test_pydoc.py]=1 # it fails on its own
|
||||
|
||||
[test_queue.py]=1 # parse error
|
||||
|
||||
[test_raise.py]=1 # parse error
|
||||
[test_random.py]=1 # parse error
|
||||
[test_range.py]=1 # parse error
|
||||
[test_rcompleter.py]=1 # parse error
|
||||
[test_re.py]=1 # test assertion error
|
||||
[test_readline.py]=1 # parse error
|
||||
[test_robotparser.py]=1 # too long to run before decompiling: 31 secs
|
||||
[test_regrtest.py]=1 # lists differ
|
||||
[test_reprlib.py]=1 # parse error
|
||||
[test_resource.py]=1 # parse error
|
||||
[test_richcmp.py]=1 # parse error
|
||||
[test_runpy.py]=1 #
|
||||
|
||||
[test_sax.py]=1 # parse error
|
||||
[test_sched.py]=1 # parse error
|
||||
[test_scope.py]=1 # parse error
|
||||
[test_script_helper.py]=1 # parse error
|
||||
[test_select.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_selectors.py]=1
|
||||
[test_set.py]=1 # parse error
|
||||
[test_shelve.py]=1 # parse error
|
||||
[test_shlex.py]=1 # probably control flow
|
||||
[test_shutil.py]=1 # fails on its own
|
||||
[test_signal.py]=1 #
|
||||
[test_slice.py]=1 # Investigate: test assertion error
|
||||
[test_site.py]=1 # parse error
|
||||
[test_slice.py]=1 # Investigate
|
||||
[test_smtpd.py]=1 # parse error
|
||||
[test_smtplib.py]=1 #
|
||||
[test_smtpnet.py]=1 # parse error
|
||||
[test_socket.py]=1
|
||||
[test_socketserver.py]=1
|
||||
[test_sort.py]=1 # parse error;
|
||||
[test_ssl.py]=1 # parse error
|
||||
[test_sort.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_source_encoding.py]=1 # parse error
|
||||
[test_spwd.py]=1 # parse error
|
||||
[test_ssl.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_startfile.py]=1 # it fails on its own
|
||||
[test_statistics.py]=1 # Takes more than 15 secs to run. Assert failures
|
||||
[test_stat.py]=1 # parse error; test assertions failed
|
||||
[test_string_literals.py]=1 # parse error; Investigate boolean parsing
|
||||
[test_stat.py]=1 # test assertions failed
|
||||
[test_statistics.py]=1 # Probably control flow; unintialized varaible
|
||||
[test_strftime.py]=1 # parse error
|
||||
[test_string.py]=1 # parse error
|
||||
[test_string_literals.py]=1 # parse error
|
||||
[test_strptime.py]=1 # test assertions failed
|
||||
[test_strtod.py]=1 # test assertions failed
|
||||
[test_structmembers.py]=1 # test assertions failed
|
||||
[test_struct.py]=1 # test assertions failed
|
||||
[test_structmembers.py]=1 # test assertions failed
|
||||
[test_subclassinit.py]=1 # parse error
|
||||
[test_subprocess.py]=1
|
||||
[test_super.py]=1 # parse error
|
||||
[test_support.py]=1 # parse error
|
||||
[test_symbol.py]=1 # parse error
|
||||
[test_sys.py]=1 # parse error
|
||||
[test_sys_setprofile.py]=1 # test assertions failed
|
||||
[test_sys_settrace.py]=1 # parse error
|
||||
[test_sysconfig.py]=1 # parse error
|
||||
|
||||
[test_tabnanny.py]=1 # parse error
|
||||
[test_tarfile.py]=1 # parse error
|
||||
[test_tcl.py]=1 # parse error
|
||||
[test_telnetlib.py]=1 # parse error
|
||||
[test_tempfile.py]=1 # parse error
|
||||
[test_thread.py]=1 # parse error
|
||||
[test_threaded_import.py]=1 # parse error
|
||||
[test_threading.py]=1 #
|
||||
[test_timeit.py]=1 # probably control flow uninitialized variable
|
||||
[test_timeout.py]=1 # parse error
|
||||
[test_tk.py]=1 # test takes too long to run: 13 seconds
|
||||
[test_tokenize.py]=1
|
||||
[test_trace.py]=1 # it fails on its own
|
||||
[test_traceback.py]=1 # Probably uses comment for testing
|
||||
[test_tracemalloc.py]=1 #
|
||||
[test_ttk_guionly.py]=1 # implementation specfic and test takes too long to run: 19 seconds
|
||||
[test_typing.py]=1 # parse error
|
||||
[test_turtle_import.py]=1 # parse error
|
||||
[test_turtle.py]=1 # parse error
|
||||
[test_types.py]=1 # parse error
|
||||
[test_typing.py]=1 # parse error
|
||||
|
||||
[test_ucn.py]=1 # parse error
|
||||
[test_unicode.py]=1 # unicode thing
|
||||
[test_unicode_file_functions.py]=1 # parse faiure
|
||||
[test_unicodedata.py]=1 # test faiure
|
||||
[test_univnewlines.py]=1 # parse error
|
||||
[test_urllib.py]=1 # parse error
|
||||
[test_urllib2.py]=1 #
|
||||
[test_urllib_response.py]=1 # parse error
|
||||
[test_urllib2_localnet.py]=1 #
|
||||
[test_urllib2net.py]=1 # parse error
|
||||
[test_urllibnet.py]=1 # probably control flow - uninitialized variable
|
||||
[test_urlparse.py]=1 # parse error
|
||||
[test_userdict.py]=1 # test failures
|
||||
[test_userstring.py]=1 # parse error
|
||||
[test_utf8.py]=1 # parse error
|
||||
[test_utf8_mode.py]=1 # parse error
|
||||
[test_uu.py]=1 # parse error
|
||||
[test_uuid.py]=1 # parse error
|
||||
|
||||
[test_venv.py]=1 # parse error
|
||||
|
||||
[test_weakref.py]=1 # probably control flow - uninitialized variable
|
||||
[test_weakset.py]=1 # parse error
|
||||
[test_webbrowser.py]=1 # parse error
|
||||
[test_with.py]=1 # probably control flow - uninitialized variable
|
||||
[test_xml_dom_minicompat.py]=1 # parse error
|
||||
[test_winconsoleio.py]=1 # it fails on its own
|
||||
[test_winreg.py]=1 # it fails on its own
|
||||
[test_winsound.py]=1 # it fails on its own
|
||||
[test_wsgiref.py]=1 # parse error
|
||||
|
||||
[test_xml_etree.py]=1 # parse error
|
||||
[test_xmlrpc.py]=1 # parse error
|
||||
[test__xxsubinterpreters.py]=1 # parse error
|
||||
|
||||
[test_yield_from.py]=1 # parse error
|
||||
|
||||
[test_zlib.py]=1 # test looping take more than 15 seconds to run
|
||||
[test_zipapp.py]=1 # parse error
|
||||
[test_zipimport_support.py]=1 # parse error
|
||||
[test_zipfile.py]=1 # it fails on its own
|
||||
[test_zipfile64.py]=1 #
|
||||
)
|
||||
# 268 About unit-test files, in about 11 minutes
|
||||
# 114 test files, Elapsed time about 7 minutes
|
||||
|
||||
if (( BATCH )) ; then
|
||||
SKIP_TESTS[test_idle.py]=1 # Probably installation specific
|
||||
SKIP_TESTS[test_tix.py]=1 # fails on its own
|
||||
SKIP_TESTS[test_ttk_textonly.py]=1 # Installation dependent?
|
||||
|
||||
fi
|
||||
|
@@ -19,6 +19,6 @@ bytecode = "%s-%s.pyc" % (basename, PY_VERSION)
|
||||
|
||||
import py_compile
|
||||
print("compiling %s to %s" % (source, bytecode))
|
||||
py_compile.compile(source, bytecode, 'exec')
|
||||
py_compile.compile(source, bytecode, source)
|
||||
# import os
|
||||
# os.system("../bin/uncompyle6 %s" % bytecode)
|
||||
|
@@ -3,28 +3,50 @@
|
||||
function displaytime {
|
||||
printf "ran in "
|
||||
local T=$1
|
||||
local D=$((T/60/60/24))
|
||||
local H=$((T/60/60%24))
|
||||
local M=$((T/60%60))
|
||||
local S=$((T%60))
|
||||
(( $D > 0 )) && printf '%d days ' $D
|
||||
(( $H > 0 )) && printf '%d hours ' $H
|
||||
(( $M > 0 )) && printf '%d minutes ' $M
|
||||
(( $D > 0 || $H > 0 || $M > 0 )) && printf 'and '
|
||||
((D=T/60/60/24))
|
||||
((H=T/60/60%24))
|
||||
((M=T/60%60))
|
||||
((S=T%60))
|
||||
(( D > 0 )) && printf '%d days ' $D
|
||||
(( H > 0 )) && printf '%d hours ' $H
|
||||
(( M > 0 )) && printf '%d minutes ' $M
|
||||
(( D > 0 || H > 0 || M > 0 )) && printf 'and '
|
||||
printf '%d seconds\n' $S
|
||||
}
|
||||
|
||||
. ../../admin-tools/pyenv-newer-versions
|
||||
bs=${BASH_SOURCE[0]}
|
||||
if [[ $0 != $bs ]] ; then
|
||||
echo "This script should not be *sourced* but run through bash"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mydir=$(dirname $bs)
|
||||
cd $mydir
|
||||
|
||||
branch=$(cat ../../.git/HEAD | cut -d'/' -f 3)
|
||||
if [[ $branch == 'python-2.4' ]]; then
|
||||
. ../../admin-tools/pyenv-older-versions
|
||||
elif [[ $branch == 'master' ]]; then
|
||||
. ../../admin-tools/pyenv-newer-versions
|
||||
else
|
||||
echo &1>2 "Error git branch should either be 'master' or 'python-2.4'; got: '$branch'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAIN="runtests.sh"
|
||||
|
||||
|
||||
USER=${USER:-rocky}
|
||||
EMAIL=${EMAIL:-rb@dustyfeet.com}
|
||||
SUBJECT_PREFIX="stdlib unit testing for"
|
||||
WHAT="uncompyle6 ${MAIN}"
|
||||
export BATCH=1
|
||||
|
||||
typeset -i RUN_STARTTIME=$(date +%s)
|
||||
|
||||
actual_versions=""
|
||||
DEBUG="" # -x
|
||||
|
||||
MAILBODY=/tmp/${MAIN}-mailbody-$$.txt
|
||||
|
||||
for VERSION in $PYVERSIONS ; do
|
||||
typeset -i rc=0
|
||||
LOGFILE=/tmp/runtests-$VERSION-$$.log
|
||||
@@ -34,24 +56,37 @@ for VERSION in $PYVERSIONS ; do
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
actual_versions="$actual_versions $VERSION"
|
||||
|
||||
if ! pyenv local $VERSION ; then
|
||||
rc=1
|
||||
else
|
||||
STOP_ONERROR=1 /bin/bash $DEBUG ./runtests.sh >$LOGFILE 2>&1
|
||||
rc=$?
|
||||
typeset -i ALL_FILES_STARTTIME=$(date +%s)
|
||||
STOP_ONERROR=1 /bin/bash $DEBUG ./runtests.sh >$LOGFILE 2>&1
|
||||
rc=$?
|
||||
|
||||
echo Python Version $(pyenv local) >> $LOGFILE
|
||||
echo "" >>$LOGFILE
|
||||
typeset -i ALL_FILES_ENDTIME=$(date +%s)
|
||||
(( time_diff = ALL_FILES_ENDTIME - ALL_FILES_STARTTIME))
|
||||
time_str=$(displaytime $time_diff)
|
||||
echo ${time_str}. >> $LOGFILE
|
||||
fi
|
||||
SUBJECT_PREFIX="runtests verify for"
|
||||
|
||||
SUBJECT_PREFIX="$WHAT for"
|
||||
if ((rc == 0)); then
|
||||
mailbody_line="Python $VERSION ok; ${time_str}."
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION ok" ${USER}@localhost
|
||||
else
|
||||
mailbody_line="Python $VERSION failed; ${time_str}."
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION not ok" ${USER}@localhost
|
||||
tail -v $LOGFILE | mail -s "$SUBJECT_PREFIX $VERSION not ok" $EMAIL
|
||||
tail -v $LOGFILE | mail -s "$HOST $SUBJECT_PREFIX $VERSION not ok" $EMAIL
|
||||
fi
|
||||
echo $mailbody_line >> $MAILBODY
|
||||
done
|
||||
|
||||
typeset -i RUN_ENDTIME=$(date +%s)
|
||||
(( time_diff = RUN_ENDTIME - RUN_STARTTIME))
|
||||
elapsed_time=$(displaytime $time_diff)
|
||||
echo "Run complete $elapsed_time for versions $actual_versions" | mail -s "runtests in $elapsed_time" ${EMAIL}
|
||||
echo "${WHAT} complete; ${elapsed_time}." >> $MAILBODY
|
||||
echo "Full results are in ${LOGFILE}." >> $MAILBODY
|
||||
cat $MAILBODY | mail -s "$HOST $WHAT $elapsed_time" ${EMAIL}
|
||||
|
@@ -1,10 +1,12 @@
|
||||
#!/bin/bash
|
||||
me=${BASH_SOURCE[0]}
|
||||
|
||||
typeset -i batch=1
|
||||
isatty=$(/usr/bin/tty 2>/dev/null)
|
||||
if [[ -n $isatty ]] && [[ "$isatty" != 'not a tty' ]] ; then
|
||||
batch=0
|
||||
typeset -i BATCH=${BATCH:-0}
|
||||
if (( ! BATCH )) ; then
|
||||
isatty=$(/usr/bin/tty 2>/dev/null)
|
||||
if [[ -n $isatty ]] && [[ "$isatty" != 'not a tty' ]] ; then
|
||||
BATCH=0
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -51,20 +53,7 @@ function timeout_cmd {
|
||||
typeset -A SKIP_TESTS
|
||||
case $PYVERSION in
|
||||
2.4)
|
||||
SKIP_TESTS=(
|
||||
[test_decimal.py]=1 #
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_generators.py]=1 # Investigate
|
||||
[test_grammar.py]=1 # Too many stmts. Handle large stmts
|
||||
[test_grp.py]=1 # Long test - might work Control flow?
|
||||
[test_pep247.py]=1 # Long test - might work? Control flow?
|
||||
[test_pwd.py]=1 # Long test - might work? Control flow?
|
||||
[test_socketserver.py]=1 # -- test takes too long to run: 40 seconds
|
||||
[test_threading.py]=1 # test takes too long to run: 11 seconds
|
||||
[test_thread.py]=1 # test takes too long to run: 36 seconds
|
||||
[test_trace.py]=1 # Long test - works
|
||||
[test_zipfile64.py]=1 # Runs ok but takes 204 seconds
|
||||
)
|
||||
. ./2.4-exclude.sh
|
||||
;;
|
||||
2.5)
|
||||
. ./2.5-exclude.sh
|
||||
@@ -85,7 +74,7 @@ case $PYVERSION in
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_fileio.py]=1
|
||||
)
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
SKIP_TESTS[test_exception_variations.py]=1
|
||||
@@ -98,7 +87,7 @@ case $PYVERSION in
|
||||
[test_dis.py]=1 # We change line numbers - duh!
|
||||
[test_fileio.py]=1
|
||||
)
|
||||
if (( batch )) ; then
|
||||
if (( BATCH )) ; then
|
||||
# Fails in crontab environment?
|
||||
# Figure out what's up here
|
||||
SKIP_TESTS[test_exception_variations.py]=1
|
||||
@@ -142,6 +131,7 @@ fulldir=$(pwd)
|
||||
|
||||
# DECOMPILER=uncompyle2
|
||||
DECOMPILER=${DECOMPILER:-"$fulldir/../../bin/uncompyle6"}
|
||||
OPTS=${OPTS:-""}
|
||||
TESTDIR=/tmp/test${PYVERSION}
|
||||
if [[ -e $TESTDIR ]] ; then
|
||||
rm -fr $TESTDIR
|
||||
@@ -150,6 +140,8 @@ fi
|
||||
PYENV_ROOT=${PYENV_ROOT:-$HOME/.pyenv}
|
||||
pyenv_local=$(pyenv local)
|
||||
|
||||
echo Python version is $pyenv_local
|
||||
|
||||
# pyenv version update
|
||||
for dir in ../ ../../ ; do
|
||||
cp -v .python-version $dir
|
||||
@@ -158,18 +150,25 @@ done
|
||||
|
||||
mkdir $TESTDIR || exit $?
|
||||
cp -r ${PYENV_ROOT}/versions/${PYVERSION}.${MINOR}/lib/python${PYVERSION}/test $TESTDIR
|
||||
cd $TESTDIR/test
|
||||
if [[ $PYVERSION == 3.2 ]] ; then
|
||||
cp ${PYENV_ROOT}/versions/${PYVERSION}.${MINOR}/lib/python${PYVERSION}/test/* $TESTDIR
|
||||
cd $TESTDIR
|
||||
else
|
||||
cd $TESTDIR/test
|
||||
fi
|
||||
pyenv local $FULLVERSION
|
||||
export PYTHONPATH=$TESTDIR
|
||||
export PATH=${PYENV_ROOT}/shims:${PATH}
|
||||
|
||||
DONT_SKIP_TESTS=${DONT_SKIP_TESTS:-0}
|
||||
|
||||
# Run tests
|
||||
typeset -i i=0
|
||||
typeset -i allerrs=0
|
||||
if [[ -n $1 ]] ; then
|
||||
files=$1
|
||||
typeset -a files_ary=( $(echo $1) )
|
||||
if (( ${#files_ary[@]} == 1 )) ; then
|
||||
files=$@
|
||||
typeset -a files_ary=( $(echo $@) )
|
||||
if (( ${#files_ary[@]} == 1 || DONT_SKIP_TESTS == 1 )) ; then
|
||||
SKIP_TESTS=()
|
||||
fi
|
||||
else
|
||||
@@ -179,9 +178,12 @@ fi
|
||||
typeset -i ALL_FILES_STARTTIME=$(date +%s)
|
||||
typeset -i skipped=0
|
||||
|
||||
NOT_INVERTED_TESTS=${NOT_INVERTED_TESTS:-1}
|
||||
|
||||
for file in $files; do
|
||||
# AIX bash doesn't grok [[ -v SKIP... ]]
|
||||
if [[ ${SKIP_TESTS[$file]} == 1 ]] ; then
|
||||
[[ -z ${SKIP_TESTS[$file]} ]] && SKIP_TESTS[$file]=0
|
||||
if [[ ${SKIP_TESTS[$file]} == ${NOT_INVERTED_TESTS} ]] ; then
|
||||
((skipped++))
|
||||
continue
|
||||
fi
|
||||
@@ -198,7 +200,7 @@ for file in $files; do
|
||||
typeset -i ENDTIME=$(date +%s)
|
||||
typeset -i time_diff
|
||||
(( time_diff = ENDTIME - STARTTIME))
|
||||
if (( time_diff > 10 )) ; then
|
||||
if (( time_diff > $timeout )) ; then
|
||||
echo "Skipping test $file -- test takes too long to run: $time_diff seconds"
|
||||
continue
|
||||
fi
|
||||
@@ -210,7 +212,7 @@ for file in $files; do
|
||||
$fulldir/compile-file.py $file && \
|
||||
mv $file{,.orig} && \
|
||||
echo ========== $(date +%X) Decompiling $file ===========
|
||||
$DECOMPILER $decompiled_file > $file
|
||||
$DECOMPILER $OPTS $decompiled_file > $file
|
||||
rc=$?
|
||||
if (( rc == 0 )) ; then
|
||||
echo ========== $(date +%X) Running $file ===========
|
||||
|
@@ -228,6 +228,6 @@ if __name__ == "__main__":
|
||||
|
||||
# Verification notes:
|
||||
# - xdrlib fails verification due the same lambda used twice
|
||||
# (verification is successfull when using original .pyo as
|
||||
# (verification is successful when using original .pyo as
|
||||
# input)
|
||||
#
|
||||
|
@@ -1,7 +0,0 @@
|
||||
# Whatever it is you want to do, it should be forwarded to the
|
||||
# to top-level irectories
|
||||
PHONY=check all
|
||||
all: check
|
||||
|
||||
%:
|
||||
$(MAKE) -C .. $@
|
@@ -18,7 +18,7 @@ Usage:
|
||||
Disassemble FILE with the instruction mangling that is done to
|
||||
assist uncompyle6 in parsing the instruction stream. For example
|
||||
instructions with variable-length arguments like CALL_FUNCTION and
|
||||
BUILD_LIST have arguement counts appended to the instruction name, and
|
||||
BUILD_LIST have argument counts appended to the instruction name, and
|
||||
COME_FROM instructions are inserted into the instruction stream.
|
||||
|
||||
Examples:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user