test_statement.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import unittest
  2. from src.statement import Statement as S, Block as B
  3. class TestStatement(unittest.TestCase):
  4. def setUp(self):
  5. self.statement = S('command', 'foo', '$1')
  6. self.block = B([S('command', 'foo'), \
  7. S('comment', 'bar'),
  8. S('command', 'baz')])
  9. def tearDown(self):
  10. del self.block
  11. def test_getitem(self):
  12. self.assertEqual(self.statement[0], '$1')
  13. def test_setitem(self):
  14. self.statement[0] = '$2'
  15. self.assertEqual(self.statement[0], '$2')
  16. def test_eq(self):
  17. self.assertTrue(S('command', 'foo') == S('command', 'foo'))
  18. self.assertFalse(S('command', 'foo') == S('command', 'bar'))
  19. def test_stype(self):
  20. self.assertTrue(S('comment', 'foo', inline=False).is_comment())
  21. self.assertTrue(S('directive', 'foo').is_directive())
  22. self.assertTrue(S('label', 'foo').is_label())
  23. self.assertTrue(S('command', 'foo').is_command())
  24. self.assertFalse(S('command', 'foo').is_comment())
  25. self.assertFalse(S('label', 'foo').is_directive())
  26. self.assertFalse(S('comment', 'foo', inline=False).is_label())
  27. self.assertFalse(S('directive', 'foo').is_command())
  28. def test_is_inline_comment(self):
  29. self.assertTrue(S('comment', 'foo', inline=True).is_inline_comment())
  30. self.assertFalse(S('comment', 'foo', inline=False).is_inline_comment())
  31. def test_jump_target(self):
  32. self.assertEqual(S('command', 'j', 'foo').jump_target(), 'foo')
  33. self.assertRaises(Exception, S('command', 'foo').jump_target)
  34. def test_iter(self):
  35. self.assertEqual(self.block.statements, list(self.block))
  36. def test_read(self):
  37. self.assertEqual(self.block.read(), S('command', 'foo'))
  38. self.assertEqual(self.block.read(), S('comment', 'bar'))
  39. self.assertEqual(self.block.read(), S('command', 'baz'))
  40. def test_end(self):
  41. self.assertFalse(self.block.end())
  42. self.block.read()
  43. self.block.read()
  44. self.block.read()
  45. self.assertTrue(self.block.end())
  46. def test_peek(self):
  47. self.assertEqual(self.block.peek(), S('command', 'foo'))
  48. self.assertEqual(self.block.peek(2), [S('command', 'foo'), \
  49. S('comment', 'bar')])
  50. self.block.read()
  51. self.assertEqual(self.block.peek(), S('comment', 'bar'))
  52. def test_replace(self):
  53. self.block.read()
  54. self.block.replace(1, [S('command', 'foobar')])
  55. self.assertEqual(self.block.pointer, 1)
  56. self.assertEqual(self.block.statements, [S('command', 'foobar'), \
  57. S('comment', 'bar'), \
  58. S('command', 'baz')])
  59. def test_apply_filter(self):
  60. self.block.apply_filter(lambda s: s.is_command())
  61. self.assertEqual(self.block.statements, [S('command', 'foo'), \
  62. S('command', 'baz')])
  63. def test_is_shift(self):
  64. self.assertTrue(S('command', 'sll').is_shift())
  65. self.assertFalse(S('command', 'foo').is_shift())
  66. self.assertFalse(S('label', 'sll').is_shift())
  67. def test_is_load(self):
  68. self.assertTrue(S('command', 'lw').is_load())
  69. self.assertFalse(S('command', 'foo').is_load())
  70. self.assertFalse(S('label', 'lw').is_load())
  71. def test_is_arith(self):
  72. self.assertTrue(S('command', 'add', '$1', '$2', '$3').is_arith())
  73. self.assertFalse(S('command', 'foo').is_arith())
  74. self.assertFalse(S('label', 'add').is_arith())