tests/test.py
author David Anderson <dvander@alliedmods.net>
Sat Dec 22 16:42:20 2012 -0800 (2012-12-22)
changeset 229 ce072f38628c
parent 214 e1a6deaa6ebe
child 232 2b8512340180
permissions -rw-r--r--
Add divide-by-zero test.
dvander@195
     1
# vim: set ts=2 sw=4 tw=99 ft=python et:
dvander@195
     2
import os
dvander@195
     3
import os.path
dvander@195
     4
dvander@195
     5
class Result:
dvander@195
     6
  def __init__(self, ok, out, err, code, timeout, message):
dvander@195
     7
    self.ok = ok
dvander@195
     8
    self.out = out
dvander@195
     9
    self.err = err
dvander@195
    10
    self.code = code
dvander@195
    11
    self.timeout = timeout
dvander@195
    12
    self.message = message
dvander@195
    13
dvander@195
    14
class Test:
dvander@195
    15
  def __init__(self, path, name, type):
dvander@195
    16
    self.path = path
dvander@195
    17
    self.name = name
dvander@195
    18
    self.type = type
dvander@195
    19
dvander@195
    20
  def cmd(self):
dvander@195
    21
    return os.path.join(self.path, self.name + '.sp')
dvander@195
    22
dvander@195
    23
  def compare(self, text):
dvander@195
    24
    ok = True
dvander@195
    25
    message = None
dvander@229
    26
    with open(os.path.join(self.path, self.name + '.' + self.type), 'rt') as f:
dvander@229
    27
      text = str.replace(text, '\r', '')
dvander@195
    28
      lines = text.split('\n')
dvander@195
    29
      i = 0
dvander@195
    30
      for line in f:
dvander@195
    31
        line = line.rstrip('\r\n')
dvander@195
    32
        if line != lines[i]:
dvander@195
    33
          message = 'Got "' + lines[i] + '", expected "' + line + '"'
dvander@195
    34
          ok = False
dvander@195
    35
          break
dvander@195
    36
        i += 1
dvander@195
    37
    return (ok, message)
dvander@195
    38
dvander@195
    39
  def check(self, out, err, code, timeout):
dvander@195
    40
    if not out:
dvander@195
    41
      out = ''
dvander@195
    42
    if not err:
dvander@195
    43
      err = ''
dvander@195
    44
    if self.type == 'err':
dvander@195
    45
      if code == 0:
dvander@195
    46
        message = 'Expected failure, got success'
dvander@195
    47
        ok = False
dvander@195
    48
      else:
dvander@195
    49
        (ok, message) = self.compare(err)
dvander@195
    50
    elif self.type == 'out':
dvander@195
    51
      if code != 0:
dvander@195
    52
        message = 'Expected success, got failure (code: ' + str(code) + ')'
dvander@195
    53
        ok = False
dvander@195
    54
      else:
dvander@195
    55
        (ok, message) = self.compare(out)
dvander@195
    56
dvander@195
    57
    if timeout:
dvander@214
    58
      ok = False
dvander@195
    59
      message = 'timeout'
dvander@195
    60
dvander@195
    61
    return Result(ok, out, err, code, timeout, message)