Mercurial > lcfOS
annotate test/testzcc.py @ 336:d1ecc493384e
Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
author | Windel Bouwman |
---|---|
date | Wed, 19 Feb 2014 22:32:15 +0100 |
parents | 582a1aaa3983 |
children | b00219172a42 |
rev | line source |
---|---|
208 | 1 import unittest |
311 | 2 import os |
3 import sys | |
4 | |
208 | 5 import zcc |
335 | 6 from ppci.objectfile import ObjectFile |
250 | 7 import ppci |
287 | 8 import io |
292 | 9 import target |
208 | 10 |
321 | 11 # Store testdir for safe switch back to directory: |
12 testdir = os.path.dirname(os.path.abspath(__file__)) | |
13 | |
14 | |
208 | 15 class ZccTestCase(unittest.TestCase): |
16 """ Tests the compiler driver """ | |
311 | 17 def setUp(self): |
321 | 18 os.chdir(testdir) |
19 | |
20 def tearDown(self): | |
21 os.chdir(testdir) | |
208 | 22 |
331 | 23 def do(self, filenames, imps=[], extra_args=[]): |
300 | 24 basedir = os.path.join('..', 'examples', 'c3') |
331 | 25 arg_list = ['compile'] |
26 arg_list += [os.path.join(basedir, fn) for fn in filenames] | |
288 | 27 for fn in imps: |
28 arg_list.append('-i') | |
29 arg_list.append(os.path.join(basedir, fn)) | |
292 | 30 arg_list.append('--target') |
31 arg_list.append('arm') | |
331 | 32 arg_list += extra_args |
33 self.callZcc(arg_list) | |
34 | |
35 def callZcc(self, arg_list): | |
36 parser = zcc.make_parser() | |
336
d1ecc493384e
Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents:
335
diff
changeset
|
37 arg_list = ['--log', 'warn'] + arg_list |
331 | 38 args = parser.parse_args(arg_list) |
286 | 39 self.assertEqual(0, zcc.main(args)) |
208 | 40 |
331 | 41 def buildRecipe(self, recipe): |
42 arg_list = ['recipe', recipe] | |
43 self.callZcc(arg_list) | |
44 | |
311 | 45 def testDumpIr(self): |
46 basedir = os.path.join('..', 'examples', 'c3', 'comments.c3') | |
331 | 47 arg_list = ['compile', basedir] |
311 | 48 arg_list.append('--target') |
49 arg_list.append('arm') | |
331 | 50 self.callZcc(arg_list) |
311 | 51 |
52 def testKernel(self): | |
331 | 53 """ Build kernel using zcc: """ |
54 recipe = os.path.join(testdir, '..', 'kernel', 'recipe.yaml') | |
55 self.buildRecipe(recipe) | |
313 | 56 |
336
d1ecc493384e
Added spiffy armtoken class for bit fiddeling. Added cool test that checks for build repeatability
Windel Bouwman
parents:
335
diff
changeset
|
57 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
|
58 """ 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
|
59 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
|
60 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 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
|
66 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
|
67 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
|
68 |
311 | 69 def testUser(self): |
331 | 70 """ Build userspace using zcc: """ |
71 recipe = os.path.join(testdir, '..', 'user', 'recipe.yaml') | |
72 self.buildRecipe(recipe) | |
311 | 73 |
287 | 74 def testBurn2(self): |
288 | 75 self.do(['burn2.c3'], ['stm32f4xx.c3']) |
287 | 76 |
334 | 77 def testBurn2_recipe(self): |
78 recipe = os.path.join(testdir, '..', 'examples', 'c3', 'recipe.yaml') | |
79 self.buildRecipe(recipe) | |
80 | |
331 | 81 #@unittest.skip('s') |
82 def testBurn2WithLogging(self): | |
83 self.do(['burn2.c3'], ['stm32f4xx.c3'], extra_args=['--report', 'x.rst']) | |
84 | |
315 | 85 def testCommentsExample(self): |
287 | 86 self.do(['comments.c3']) |
87 | |
88 def testCast(self): | |
89 self.do(['cast.c3']) | |
90 | |
300 | 91 def testFunctions(self): |
92 self.do(['functions.c3']) | |
93 | |
250 | 94 def testSectionAddress(self): |
301 | 95 src = """module tst; |
287 | 96 function void t2() {var int t3; t3 = 2;} |
97 """ | |
98 f = io.StringIO(src) | |
335 | 99 out = ObjectFile() |
322 | 100 tg = target.target_list.armtarget |
329 | 101 tr = ppci.tasks.TaskRunner() |
335 | 102 tr.add_task(ppci.buildtasks.Compile([f], [], tg, out)) |
329 | 103 tr.run_tasks() |
335 | 104 code = out.get_section('code') |
329 | 105 self.assertEqual(0x0, code.address) |
250 | 106 |
107 | |
208 | 108 if __name__ == '__main__': |
313 | 109 unittest.main() |