omegaup.validator.validatortest

Allows a validator to be modeled as a standard unit test.

To use, write your validator as if it were a normal unittest.TestCase:

import logging
import unittest
import sys

from omegaup.validator import validatortest


class MyTest(unittest.TestCase):
  def test_foo(self):
    contestant_output = sys.stdin
    original_input = open('data.in', 'r')
    original_output = open('data.out', 'r')

    logging.info('This will be printed to stderr')

    self.assertAlmostEqual(float(contestant_output.readline().strip()),
                           float(original_output.readline().strip()))


if __name__ == '__main__':
    validatortest.main()
 1# -*- coding: utf-8 -*-
 2"""Allows a validator to be modeled as a standard unit test.
 3
 4To use, write your validator as if it were a normal
 5[unittest.TestCase](https://docs.python.org/3/library/unittest.html#unittest.TestCase):
 6
 7```python
 8import logging
 9import unittest
10import sys
11
12from omegaup.validator import validatortest
13
14
15class MyTest(unittest.TestCase):
16  def test_foo(self):
17    contestant_output = sys.stdin
18    original_input = open('data.in', 'r')
19    original_output = open('data.out', 'r')
20
21    logging.info('This will be printed to stderr')
22
23    self.assertAlmostEqual(float(contestant_output.readline().strip()),
24                           float(original_output.readline().strip()))
25
26
27if __name__ == '__main__':
28    validatortest.main()
29```
30"""
31
32import logging
33import sys
34import unittest
35import unittest.case
36import unittest.suite
37
38from typing import Union
39
40
41class TestRunner(unittest.TextTestRunner):
42    """A unittest.TestRunner that prints 1 on standard output on success."""
43    def run(
44        self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]
45    ) -> unittest.result.TestResult:
46        result = super().run(test)
47        if result is not None and result.wasSuccessful():
48            print(1)
49        else:
50            print(0)
51        return result
52
53
54def main() -> None:
55    """Executes the tests on the current file."""
56    logging.basicConfig(level=logging.DEBUG)
57    unittest.main(testRunner=TestRunner, argv=[sys.argv[0], '-v'])
class TestRunner(unittest.runner.TextTestRunner):
42class TestRunner(unittest.TextTestRunner):
43    """A unittest.TestRunner that prints 1 on standard output on success."""
44    def run(
45        self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]
46    ) -> unittest.result.TestResult:
47        result = super().run(test)
48        if result is not None and result.wasSuccessful():
49            print(1)
50        else:
51            print(0)
52        return result

A unittest.TestRunner that prints 1 on standard output on success.

def run( self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]) -> unittest.result.TestResult:
44    def run(
45        self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]
46    ) -> unittest.result.TestResult:
47        result = super().run(test)
48        if result is not None and result.wasSuccessful():
49            print(1)
50        else:
51            print(0)
52        return result

Run the given test case or test suite.

Inherited Members
unittest.runner.TextTestRunner
TextTestRunner
resultclass
def main() -> None:
55def main() -> None:
56    """Executes the tests on the current file."""
57    logging.basicConfig(level=logging.DEBUG)
58    unittest.main(testRunner=TestRunner, argv=[sys.argv[0], '-v'])

Executes the tests on the current file.