forked from django-extensions/django-extensions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_dumpscript.py
69 lines (61 loc) · 2.39 KB
/
test_dumpscript.py
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
# -*- coding: utf-8 -*-
import ast
import sys
import six
from django.core.management import call_command
from django.test import TestCase
from .testapp.models import Name, Note, Person
class DumpScriptTests(TestCase):
def setUp(self):
sys.stdout = six.StringIO()
sys.stderr = six.StringIO()
def test_runs(self):
# lame test...does it run?
n = Name(name='Gabriel')
n.save()
call_command('dumpscript', 'django_extensions')
self.assertTrue('Gabriel' in sys.stdout.getvalue())
def test_replaced_stdout(self):
# check if stdout can be replaced
sys.stdout = six.StringIO()
n = Name(name='Mike')
n.save()
tmp_out = six.StringIO()
call_command('dumpscript', 'django_extensions', stdout=tmp_out)
self.assertTrue('Mike' in tmp_out.getvalue()) # script should go to tmp_out
self.assertEqual(0, len(sys.stdout.getvalue())) # there should not be any output to sys.stdout
tmp_out.close()
def test_replaced_stderr(self):
# check if stderr can be replaced, without changing stdout
n = Name(name='Fred')
n.save()
tmp_err = six.StringIO()
sys.stderr = six.StringIO()
call_command('dumpscript', 'django_extensions', stderr=tmp_err)
self.assertTrue('Fred' in sys.stdout.getvalue()) # script should still go to stdout
self.assertTrue('Name' in tmp_err.getvalue()) # error output should go to tmp_err
self.assertEqual(0, len(sys.stderr.getvalue())) # there should not be any output to sys.stderr
tmp_err.close()
def test_valid_syntax(self):
n1 = Name(name='John')
n1.save()
p1 = Person(name=n1, age=40)
p1.save()
n2 = Name(name='Jane')
n2.save()
p2 = Person(name=n2, age=18)
p2.save()
p2.children.add(p1)
note1 = Note(note="This is the first note.")
note1.save()
note2 = Note(note="This is the second note.")
note2.save()
p2.notes.add(note1, note2)
tmp_out = six.StringIO()
call_command('dumpscript', 'django_extensions', stdout=tmp_out)
ast_syntax_tree = ast.parse(tmp_out.getvalue())
if hasattr(ast_syntax_tree, 'body'):
self.assertTrue(len(ast_syntax_tree.body) > 1)
else:
self.assertTrue(len(ast_syntax_tree.asList()) > 1)
tmp_out.close()