tests/test.py
author Asher Baker <asherkin@gmail.com>
Mon Jun 10 15:52:44 2013 +0100 (2013-06-10)
changeset 265 3a903b89a514
parent 263 ba85a47ee414
permissions -rw-r--r--
Fixed type checking for multidimensional arrays.
asherkin@263
     1
# vim: set ts=2 sw=4 tw=99 ft=python et:
asherkin@263
     2
import os
asherkin@263
     3
import os.path
asherkin@263
     4
asherkin@263
     5
class Result:
asherkin@263
     6
  def __init__(self, ok, out, err, code, timeout, message):
asherkin@263
     7
    self.ok = ok
asherkin@263
     8
    self.out = out
asherkin@263
     9
    self.err = err
asherkin@263
    10
    self.code = code
asherkin@263
    11
    self.timeout = timeout
asherkin@263
    12
    self.message = message
asherkin@263
    13
asherkin@263
    14
class Test:
asherkin@263
    15
  def __init__(self, path, name, type):
asherkin@263
    16
    self.path = path
asherkin@263
    17
    self.name = name
asherkin@263
    18
    self.type = type
asherkin@263
    19
asherkin@263
    20
  def cmd(self):
asherkin@263
    21
    return os.path.join(self.path, self.name + '.sp')
asherkin@263
    22
asherkin@263
    23
  def compare(self, text):
asherkin@263
    24
    ok = True
asherkin@263
    25
    message = None
asherkin@263
    26
    with open(os.path.join(self.path, self.name + '.' + self.type), 'rt') as f:
asherkin@263
    27
      text = str.replace(text, '\r', '')
asherkin@263
    28
      lines = text.split('\n')
asherkin@263
    29
      i = 0
asherkin@263
    30
      for line in f:
asherkin@263
    31
        line = line.rstrip('\r\n')
asherkin@263
    32
        if "Displaying compilation errors for" in lines[i]:
asherkin@263
    33
          i += 1
asherkin@263
    34
          continue
asherkin@263
    35
        if line != lines[i]:
asherkin@263
    36
          message = 'Got "' + lines[i] + '", expected "' + line + '"'
asherkin@263
    37
          ok = False
asherkin@263
    38
          break
asherkin@263
    39
        i += 1
asherkin@263
    40
    return (ok, message)
asherkin@263
    41
asherkin@263
    42
  def check(self, out, err, code, timeout):
asherkin@263
    43
    if not out:
asherkin@263
    44
      out = ''
asherkin@263
    45
    if not err:
asherkin@263
    46
      err = ''
asherkin@263
    47
    if self.type == 'err':
asherkin@263
    48
      if code == 0:
asherkin@263
    49
        message = 'Expected failure, got success'
asherkin@263
    50
        ok = False
asherkin@263
    51
      else:
asherkin@263
    52
        (ok, message) = self.compare(err)
asherkin@263
    53
    elif self.type == 'out':
asherkin@263
    54
      if code != 0:
asherkin@263
    55
        message = 'Expected success, got failure (code: ' + str(code) + ')'
asherkin@263
    56
        ok = False
asherkin@263
    57
      else:
asherkin@263
    58
        (ok, message) = self.compare(out)
asherkin@263
    59
asherkin@263
    60
    if timeout:
asherkin@263
    61
      ok = False
asherkin@263
    62
      message = 'timeout'
asherkin@263
    63
asherkin@263
    64
    return Result(ok, out, err, code, timeout, message)