File: test_compileall.py

package info (click to toggle)
python-enaml 0.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,284 kB
  • sloc: python: 31,443; cpp: 4,499; makefile: 140; javascript: 68; lisp: 53; sh: 20
file content (75 lines) | stat: -rw-r--r-- 2,233 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#------------------------------------------------------------------------------
# Copyright (c) 2013-2025, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
import os
import shutil
import pytest
import importlib
from enaml.compile_all import compileall
from utils import cd


def clean_cache(path):
    """ Clean the cache files in the path

    """
    with cd(path):
        if os.path.exists('__enamlcache__'):
            shutil.rmtree('__enamlcache__')
        if os.path.exists('__pycache__'):
            shutil.rmtree('__pycache__')
        for f in os.listdir('.'):
            if f.endswith('.pyc'):
                os.remove(f)


def clean_source(path):
    """ Clean the source files in the path

    """
    with cd(path):
        for f in os.listdir('.'):
            if os.path.splitext(f)[-1] in ('.py',  '.enaml'):
                os.remove(f)


@pytest.mark.parametrize("tutorial", [
    'employee',
    'hello_world',
    'person'
])
def test_tutorials(enaml_run, tmpdir, tutorial):
    # Run normally to generate cache files

    dir_path = os.path.abspath(os.path.split(os.path.dirname(__file__))[0])
    source = os.path.join(dir_path, 'examples', 'tutorial', tutorial)
    example = os.path.join(tmpdir.strpath, tutorial)

    # Copy to a tmp dir
    shutil.copytree(source, example)
    clean_cache(example)  # To be safe

    # Run compileall
    compileall.compile_dir(example)

    # Remove source files
    clean_source(example)

    # Add to example folder to the sys path or we get an import error
    with cd(example, add_to_sys_path=True):
        # Python only uses pyc files if copied from the pycache folder
        for f in os.listdir('__pycache__'):
            cf = ".".join(f.split(".")[:-2]) + ".pyc"
            shutil.copy(os.path.join('__pycache__', f), cf)

        # Verify it's clean
        assert not os.path.exists(tutorial + ".py")
        assert not os.path.exists(tutorial + "_view.enaml")

        # Now run from cache
        mod = importlib.import_module(tutorial)
        mod.main()