annotate test/testzcc.py @ 338:8eb4a6fe8fc8

Added testcase with emulator
author Windel Bouwman
date Fri, 21 Feb 2014 13:31:29 +0100
parents b00219172a42
children 4d204f6f7d4e
rev   line source
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
1 import unittest
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
2 import os
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
3 import sys
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
4
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
5 import zcc
335
582a1aaa3983 Added long branch format
Windel Bouwman
parents: 334
diff changeset
6 from ppci.objectfile import ObjectFile
250
f5fba5b554d7 Removal of obsolete editor
Windel Bouwman
parents: 237
diff changeset
7 import ppci
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
8 import io
292
534b94b40aa8 Fixup reorganize
Windel Bouwman
parents: 289
diff changeset
9 import target
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
10
321
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
11 # Store testdir for safe switch back to directory:
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
12 testdir = os.path.dirname(os.path.abspath(__file__))
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
13
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
14
338
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
15 class ZccBaseTestCase(unittest.TestCase):
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
16 def callZcc(self, arg_list):
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
17 parser = zcc.make_parser()
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
18 arg_list = ['--log', 'warn'] + arg_list
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
19 args = parser.parse_args(arg_list)
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
20 self.assertEqual(0, zcc.main(args))
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
21
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
22 def buildRecipe(self, recipe):
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
23 arg_list = ['recipe', recipe]
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
24 self.callZcc(arg_list)
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
25
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
26
8eb4a6fe8fc8 Added testcase with emulator
Windel Bouwman
parents: 337
diff changeset
27 class ZccTestCase(ZccBaseTestCase):
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
28 """ Tests the compiler driver """
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
29 def setUp(self):
321
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
30 os.chdir(testdir)
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
31
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
32 def tearDown(self):
8c569fbe60e4 Load yacc and burg dynamic
Windel Bouwman
parents: 315
diff changeset
33 os.chdir(testdir)
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
34
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
35 def do(self, filenames, imps=[], extra_args=[]):
300
Windel Bouwman
parents: 292
diff changeset
36 basedir = os.path.join('..', 'examples', 'c3')
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
37 arg_list = ['compile']
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
38 arg_list += [os.path.join(basedir, fn) for fn in filenames]
288
a747a45dcd78 Various styling work
Windel Bouwman
parents: 287
diff changeset
39 for fn in imps:
a747a45dcd78 Various styling work
Windel Bouwman
parents: 287
diff changeset
40 arg_list.append('-i')
a747a45dcd78 Various styling work
Windel Bouwman
parents: 287
diff changeset
41 arg_list.append(os.path.join(basedir, fn))
292
534b94b40aa8 Fixup reorganize
Windel Bouwman
parents: 289
diff changeset
42 arg_list.append('--target')
534b94b40aa8 Fixup reorganize
Windel Bouwman
parents: 289
diff changeset
43 arg_list.append('arm')
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
44 arg_list += extra_args
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
45 self.callZcc(arg_list)
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
46
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
47
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
48 def testDumpIr(self):
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
49 basedir = os.path.join('..', 'examples', 'c3', 'comments.c3')
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
50 arg_list = ['compile', basedir]
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
51 arg_list.append('--target')
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
52 arg_list.append('arm')
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
53 self.callZcc(arg_list)
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
54
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
55 def testKernel(self):
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
56 """ Build kernel using zcc: """
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
57 recipe = os.path.join(testdir, '..', 'kernel', 'recipe.yaml')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
58 self.buildRecipe(recipe)
313
04cf4d26a3bc Added constant function
Windel Bouwman
parents: 312
diff changeset
59
337
b00219172a42 Added cool lm3s811 qemu project
Windel Bouwman
parents: 336
diff changeset
60 @unittest.skip('Too difficult to fix')
336
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
61 def testKernelBuildsEqualTwice(self):
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
62 """ Build kernel two times and check the output is equal """
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
63 recipe = os.path.join(testdir, '..', 'kernel', 'recipe.yaml')
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
64 bin_filename = os.path.join(testdir, '..', 'kernel', 'kernel.bin')
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
65 self.buildRecipe(recipe)
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
66 with open(bin_filename, 'rb') as f:
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
67 a = f.read()
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
68 self.buildRecipe(recipe)
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
69 with open(bin_filename, 'rb') as f:
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
70 b = f.read()
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
71 self.assertSequenceEqual(a, b)
d1ecc493384e Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents: 335
diff changeset
72
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
73 def testUser(self):
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
74 """ Build userspace using zcc: """
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
75 recipe = os.path.join(testdir, '..', 'user', 'recipe.yaml')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
76 self.buildRecipe(recipe)
311
ff665880a6b0 Added testcase for kernel and userspace
Windel Bouwman
parents: 301
diff changeset
77
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
78 def testBurn2(self):
288
a747a45dcd78 Various styling work
Windel Bouwman
parents: 287
diff changeset
79 self.do(['burn2.c3'], ['stm32f4xx.c3'])
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
80
334
6f4753202b9a Added more recipes
Windel Bouwman
parents: 331
diff changeset
81 def testBurn2_recipe(self):
6f4753202b9a Added more recipes
Windel Bouwman
parents: 331
diff changeset
82 recipe = os.path.join(testdir, '..', 'examples', 'c3', 'recipe.yaml')
6f4753202b9a Added more recipes
Windel Bouwman
parents: 331
diff changeset
83 self.buildRecipe(recipe)
6f4753202b9a Added more recipes
Windel Bouwman
parents: 331
diff changeset
84
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
85 #@unittest.skip('s')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
86 def testBurn2WithLogging(self):
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
87 self.do(['burn2.c3'], ['stm32f4xx.c3'], extra_args=['--report', 'x.rst'])
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
88
315
084cccaa5deb Added console and screen
Windel Bouwman
parents: 313
diff changeset
89 def testCommentsExample(self):
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
90 self.do(['comments.c3'])
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
91
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
92 def testCast(self):
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
93 self.do(['cast.c3'])
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
94
300
Windel Bouwman
parents: 292
diff changeset
95 def testFunctions(self):
Windel Bouwman
parents: 292
diff changeset
96 self.do(['functions.c3'])
Windel Bouwman
parents: 292
diff changeset
97
250
f5fba5b554d7 Removal of obsolete editor
Windel Bouwman
parents: 237
diff changeset
98 def testSectionAddress(self):
301
6753763d3bec merge codegen into ppci package
Windel Bouwman
parents: 300
diff changeset
99 src = """module tst;
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
100 function void t2() {var int t3; t3 = 2;}
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
101 """
1c7c1e619be8 File movage
Windel Bouwman
parents: 286
diff changeset
102 f = io.StringIO(src)
335
582a1aaa3983 Added long branch format
Windel Bouwman
parents: 334
diff changeset
103 out = ObjectFile()
322
44f336460c2a Half of use of burg spec for arm
Windel Bouwman
parents: 321
diff changeset
104 tg = target.target_list.armtarget
329
8f6f3ace4e78 Added build tasks
Windel Bouwman
parents: 322
diff changeset
105 tr = ppci.tasks.TaskRunner()
335
582a1aaa3983 Added long branch format
Windel Bouwman
parents: 334
diff changeset
106 tr.add_task(ppci.buildtasks.Compile([f], [], tg, out))
329
8f6f3ace4e78 Added build tasks
Windel Bouwman
parents: 322
diff changeset
107 tr.run_tasks()
335
582a1aaa3983 Added long branch format
Windel Bouwman
parents: 334
diff changeset
108 code = out.get_section('code')
329
8f6f3ace4e78 Added build tasks
Windel Bouwman
parents: 322
diff changeset
109 self.assertEqual(0x0, code.address)
250
f5fba5b554d7 Removal of obsolete editor
Windel Bouwman
parents: 237
diff changeset
110
f5fba5b554d7 Removal of obsolete editor
Windel Bouwman
parents: 237
diff changeset
111
208
4cb47d80fd1f Added zcc test
Windel Bouwman
parents:
diff changeset
112 if __name__ == '__main__':
313
04cf4d26a3bc Added constant function
Windel Bouwman
parents: 312
diff changeset
113 unittest.main()