laneya

multiplayer roguelike game
git clone https://git.ce9e.org/laneya.git

commit
cc83b1aa5bd4406519d934e90abdebd71b17c389
parent
7efd7accda07fa66c1286d38d4815407e1402c6a
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2018-08-03 10:53
update test setup

Diffstat

M setup.cfg 1 -
D tests/shared.py 29 -----------------------------
D tests/test_deferred.py 215 ------------------------------------------------------------
A tests/test_promise.py 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M tox.ini 6 +++---

5 files changed, 209 insertions, 248 deletions


diff --git a/setup.cfg b/setup.cfg

@@ -5,7 +5,6 @@ cover-inclusive=1
    5     5 cover-erase=1
    6     6 cover-branches=1
    7     7 cover-html=1
    8    -1 cover-html-dir=.cover
    9     8 
   10     9 [flake8]
   11    10 exclude=.env,.tox,.git,build,dist,docs

diff --git a/tests/shared.py b/tests/shared.py

@@ -1,29 +0,0 @@
    1    -1 try:
    2    -1     import unittest2 as unittest  # flake8: noqa
    3    -1 except ImportError:
    4    -1     import unittest  # flake8: noqa
    5    -1 
    6    -1 
    7    -1 class SpyMixin:
    8    -1     def __init__(self):
    9    -1         self._spy_calls = {}
   10    -1         self._key = 0
   11    -1 
   12    -1     def create_spy(self):
   13    -1         key = self._key
   14    -1         self._key += 1
   15    -1 
   16    -1         def spy(*args, **kwargs):
   17    -1             if not key in self._spy_calls:
   18    -1                 self._spy_calls[key] = []
   19    -1             self._spy_calls[key].append((args, kwargs))
   20    -1 
   21    -1         spy.key = key
   22    -1         return spy
   23    -1 
   24    -1     def assertCalled(self, spy):
   25    -1         self.assertIn(spy.key, self._spy_calls)
   26    -1 
   27    -1     def assertCalledWith(self, spy, *args, **kwargs):
   28    -1         self.assertCalled(spy)
   29    -1         self.assertIn((args, kwargs), self._spy_calls[spy.key])

diff --git a/tests/test_deferred.py b/tests/test_deferred.py

@@ -1,215 +0,0 @@
    1    -1 import shared
    2    -1 from shared import unittest
    3    -1 
    4    -1 from laneya import deferred as q
    5    -1 
    6    -1 
    7    -1 class TestDeferred(unittest.TestCase, shared.SpyMixin):
    8    -1     def __init__(self, *args, **kwargs):
    9    -1         unittest.TestCase.__init__(self, *args, **kwargs)
   10    -1         shared.SpyMixin.__init__(self)
   11    -1 
   12    -1     def assertNeverCalled(self, *args, **kwargs):
   13    -1         assert False
   14    -1 
   15    -1     def test_deferred_resolve(self):
   16    -1         spy = self.create_spy()
   17    -1 
   18    -1         d = q.Deferred()
   19    -1         d.resolve('foo')
   20    -1         d.promise.then(spy, self.assertNeverCalled)._raise()
   21    -1 
   22    -1         self.assertCalledWith(spy, 'foo')
   23    -1 
   24    -1     def test_deferred_resolve_inverted(self):
   25    -1         spy = self.create_spy()
   26    -1 
   27    -1         d = q.Deferred()
   28    -1         d.promise.then(spy, self.assertNeverCalled)._raise()
   29    -1         d.resolve('foo')
   30    -1 
   31    -1         self.assertCalledWith(spy, 'foo')
   32    -1 
   33    -1     def test_deferred_resolve_done(self):
   34    -1         spy = self.create_spy()
   35    -1 
   36    -1         d = q.Deferred()
   37    -1         d.promise.then(spy, self.assertNeverCalled)._raise()
   38    -1         d.resolve('foo')
   39    -1 
   40    -1         with self.assertRaises(q.AlreadyDoneError):
   41    -1             d.resolve('bar')
   42    -1 
   43    -1         with self.assertRaises(q.AlreadyDoneError):
   44    -1             d.reject('bar')
   45    -1 
   46    -1         d.resolve('bar', silent=True)
   47    -1         d.reject('bar', silent=True)
   48    -1 
   49    -1         self.assertCalledWith(spy, 'foo')
   50    -1 
   51    -1     def test_deferred_reject(self):
   52    -1         spy = self.create_spy()
   53    -1 
   54    -1         d = q.Deferred()
   55    -1         d.reject('foo')
   56    -1         d.promise.then(self.assertNeverCalled, spy)._raise()
   57    -1 
   58    -1         self.assertCalledWith(spy, 'foo')
   59    -1 
   60    -1     def test_deferred_reject_inverted(self):
   61    -1         spy = self.create_spy()
   62    -1 
   63    -1         d = q.Deferred()
   64    -1         d.promise.then(self.assertNeverCalled, spy)._raise()
   65    -1         d.reject('foo')
   66    -1 
   67    -1         self.assertCalledWith(spy, 'foo')
   68    -1 
   69    -1     def test_deferred_reject_done(self):
   70    -1         spy = self.create_spy()
   71    -1 
   72    -1         d = q.Deferred()
   73    -1         d.promise.then(self.assertNeverCalled, spy)._raise()
   74    -1         d.reject('foo')
   75    -1 
   76    -1         with self.assertRaises(q.AlreadyDoneError):
   77    -1             d.resolve('bar')
   78    -1 
   79    -1         with self.assertRaises(q.AlreadyDoneError):
   80    -1             d.reject('bar')
   81    -1 
   82    -1         d.resolve('bar', silent=True)
   83    -1         d.reject('bar', silent=True)
   84    -1 
   85    -1         self.assertCalledWith(spy, 'foo')
   86    -1 
   87    -1     def test_success_propagation(self):
   88    -1         spy = self.create_spy()
   89    -1 
   90    -1         d = q.Deferred()
   91    -1         d.resolve('foo')
   92    -1         d.promise\
   93    -1             .then(None, self.assertNeverCalled)\
   94    -1             .then(spy, self.assertNeverCalled)\
   95    -1             ._raise()
   96    -1 
   97    -1         self.assertCalledWith(spy, 'foo')
   98    -1 
   99    -1     def test_error_propagation(self):
  100    -1         spy = self.create_spy()
  101    -1 
  102    -1         d = q.Deferred()
  103    -1         d.reject('foo')
  104    -1         d.promise\
  105    -1             .then(self.assertNeverCalled)\
  106    -1             .then(self.assertNeverCalled, spy)\
  107    -1             ._raise()
  108    -1 
  109    -1         self.assertCalledWith(spy, 'foo')
  110    -1 
  111    -1     def test_success_chaining(self):
  112    -1         spy = self.create_spy()
  113    -1         fn = lambda x: x + 'bar'
  114    -1 
  115    -1         d = q.Deferred()
  116    -1         d.resolve('foo')
  117    -1         d.promise\
  118    -1             .then(fn, self.assertNeverCalled)\
  119    -1             .then(spy, self.assertNeverCalled)\
  120    -1             ._raise()
  121    -1 
  122    -1         self.assertCalledWith(spy, 'foobar')
  123    -1 
  124    -1     def test_error_chaining(self):
  125    -1         spy = self.create_spy()
  126    -1         fn = lambda x: x + 'bar'
  127    -1 
  128    -1         d = q.Deferred()
  129    -1         d.reject('foo')
  130    -1         d.promise\
  131    -1             .then(self.assertNeverCalled, fn)\
  132    -1             .then(spy, self.assertNeverCalled)\
  133    -1             ._raise()
  134    -1 
  135    -1         self.assertCalledWith(spy, 'foobar')
  136    -1 
  137    -1     def test_when_with_value(self):
  138    -1         spy = self.create_spy()
  139    -1 
  140    -1         p = q.when('foo')
  141    -1         p.then(spy, self.assertNeverCalled)._raise()
  142    -1 
  143    -1         self.assertCalledWith(spy, 'foo')
  144    -1 
  145    -1     def test_when_with_promise(self):
  146    -1         p1 = q.Promise()
  147    -1         p2 = q.when(p1)
  148    -1 
  149    -1         self.assertEqual(p1, p2)
  150    -1 
  151    -1     def test_reject(self):
  152    -1         spy = self.create_spy()
  153    -1 
  154    -1         p = q.reject('foo')
  155    -1         p.then(self.assertNeverCalled, spy)._raise()
  156    -1 
  157    -1         self.assertCalledWith(spy, 'foo')
  158    -1 
  159    -1     def test_wrap_return(self):
  160    -1         spy = self.create_spy()
  161    -1         fn = lambda x: 'foo'
  162    -1 
  163    -1         p = q.wrap(fn)('bar')
  164    -1         p.then(spy, self.assertNeverCalled)._raise()
  165    -1 
  166    -1         self.assertCalledWith(spy, 'foo')
  167    -1 
  168    -1     def test_wrap_raise(self):
  169    -1         spy = self.create_spy()
  170    -1         err = Exception('foo')
  171    -1 
  172    -1         def fn(x):
  173    -1             raise err
  174    -1 
  175    -1         p = q.wrap(fn)('bar')
  176    -1         p.then(self.assertNeverCalled, spy)._raise()
  177    -1 
  178    -1         self.assertCalledWith(spy, err)
  179    -1 
  180    -1     def test_raise(self):
  181    -1         with self.assertRaises(AssertionError):
  182    -1             q.when('foo').then(self.assertNeverCalled)._raise()
  183    -1 
  184    -1     def test_all_success(self):
  185    -1         spy = self.create_spy()
  186    -1 
  187    -1         d1 = q.Deferred()
  188    -1         d2 = q.Deferred()
  189    -1         d3 = q.Deferred()
  190    -1 
  191    -1         d1.resolve('foo')
  192    -1         d3.resolve('baz')
  193    -1         d2.resolve('bar')
  194    -1 
  195    -1         q.all(d1.promise, d2.promise, d3.promise)\
  196    -1             .then(spy, self.assertNeverCalled)\
  197    -1             ._raise()
  198    -1 
  199    -1         self.assertCalledWith(spy, ['foo', 'bar', 'baz'])
  200    -1 
  201    -1     def test_all_error(self):
  202    -1         spy = self.create_spy()
  203    -1 
  204    -1         d1 = q.Deferred()
  205    -1         d2 = q.Deferred()
  206    -1         d3 = q.Deferred()
  207    -1 
  208    -1         d2.resolve('bar')
  209    -1         d3.reject('baz')
  210    -1 
  211    -1         q.all(d1.promise, d2.promise, d3.promise)\
  212    -1             .then(self.assertNeverCalled, spy)\
  213    -1             ._raise()
  214    -1 
  215    -1         self.assertCalledWith(spy, 'baz')

diff --git a/tests/test_promise.py b/tests/test_promise.py

@@ -0,0 +1,206 @@
   -1     1 import unittest
   -1     2 
   -1     3 try:
   -1     4     from unittest.mock import Mock
   -1     5 except ImportError:
   -1     6     from mock import Mock
   -1     7 
   -1     8 from laneya import promise as q
   -1     9 
   -1    10 
   -1    11 class TestPromise(unittest.TestCase):
   -1    12     def assert_never_called(self, *args, **kwargs):
   -1    13         assert False
   -1    14 
   -1    15     def raise_rejected(self, promise):
   -1    16         if (promise._status == q.REJECTED and
   -1    17                 isinstance(promise._value, Exception)):
   -1    18             raise promise._value
   -1    19 
   -1    20     def test_promise_resolve(self):
   -1    21         mock = Mock()
   -1    22 
   -1    23         promise = q.Promise()
   -1    24         promise.resolve('foo')
   -1    25         promise.then(mock, self.assert_never_called)
   -1    26 
   -1    27         mock.assert_called_with('foo')
   -1    28 
   -1    29     def test_promise_resolve_inverted(self):
   -1    30         mock = Mock()
   -1    31 
   -1    32         promise = q.Promise()
   -1    33         promise.then(mock, self.assert_never_called)
   -1    34         promise.resolve('foo')
   -1    35 
   -1    36         mock.assert_called_with('foo')
   -1    37 
   -1    38     def test_promise_resolve_twice(self):
   -1    39         mock = Mock()
   -1    40 
   -1    41         promise = q.Promise()
   -1    42         promise.resolve('foo')
   -1    43         promise.resolve('bar')
   -1    44         promise.then(mock, self.assert_never_called)
   -1    45 
   -1    46         mock.assert_called_with('foo')
   -1    47 
   -1    48     def test_promise_reject(self):
   -1    49         mock = Mock()
   -1    50 
   -1    51         promise = q.Promise()
   -1    52         promise.reject('foo')
   -1    53         promise.then(self.assert_never_called, mock)
   -1    54 
   -1    55         mock.assert_called_with('foo')
   -1    56 
   -1    57     def test_promise_reject_inverted(self):
   -1    58         mock = Mock()
   -1    59 
   -1    60         promise = q.Promise()
   -1    61         promise.then(self.assert_never_called, mock)
   -1    62         promise.reject('foo')
   -1    63 
   -1    64         mock.assert_called_with('foo')
   -1    65 
   -1    66     def test_promise_reject_twice(self):
   -1    67         mock = Mock()
   -1    68 
   -1    69         promise = q.Promise()
   -1    70         promise.reject('foo')
   -1    71         promise.reject('bar')
   -1    72         promise.then(self.assert_never_called, mock)
   -1    73 
   -1    74         mock.assert_called_with('foo')
   -1    75 
   -1    76     def test_success_propagation(self):
   -1    77         mock = Mock()
   -1    78 
   -1    79         promise = q.Promise()
   -1    80         promise.resolve('foo')
   -1    81         promise\
   -1    82             .then(None, self.assert_never_called)\
   -1    83             .then(mock, self.assert_never_called)
   -1    84 
   -1    85         mock.assert_called_with('foo')
   -1    86 
   -1    87     def test_error_propagation(self):
   -1    88         mock = Mock()
   -1    89 
   -1    90         promise = q.Promise()
   -1    91         promise.reject('foo')
   -1    92         promise\
   -1    93             .then(self.assert_never_called)\
   -1    94             .catch(mock)
   -1    95 
   -1    96         mock.assert_called_with('foo')
   -1    97 
   -1    98     def test_success_chaining(self):
   -1    99         mock = Mock()
   -1   100 
   -1   101         def fn(x):
   -1   102             return x + 'bar'
   -1   103 
   -1   104         promise = q.Promise()
   -1   105         promise.resolve('foo')
   -1   106         promise\
   -1   107             .then(fn, self.assert_never_called)\
   -1   108             .then(mock, self.assert_never_called)
   -1   109 
   -1   110         mock.assert_called_with('foobar')
   -1   111 
   -1   112     def test_error_chaining(self):
   -1   113         mock = Mock()
   -1   114 
   -1   115         def fn(x):
   -1   116             return x + 'bar'
   -1   117 
   -1   118         promise = q.Promise()
   -1   119         promise.reject('foo')
   -1   120         promise\
   -1   121             .then(self.assert_never_called, fn)\
   -1   122             .then(mock, self.assert_never_called)
   -1   123 
   -1   124         mock.assert_called_with('foobar')
   -1   125 
   -1   126     def test_when_with_value(self):
   -1   127         mock = Mock()
   -1   128 
   -1   129         promise = q.when('foo')
   -1   130         promise.then(mock, self.assert_never_called)
   -1   131 
   -1   132         mock.assert_called_with('foo')
   -1   133 
   -1   134     def test_when_with_promise(self):
   -1   135         p1 = q.Promise()
   -1   136         p2 = q.when(p1)
   -1   137 
   -1   138         self.assertEqual(p1, p2)
   -1   139 
   -1   140     def test_reject_with_value(self):
   -1   141         mock = Mock()
   -1   142 
   -1   143         promise = q.reject('foo')
   -1   144         promise.then(self.assert_never_called, mock)
   -1   145 
   -1   146         mock.assert_called_with('foo')
   -1   147 
   -1   148     def test_reject_with_promise(self):
   -1   149         p1 = q.Promise()
   -1   150         p2 = q.reject(p1)
   -1   151 
   -1   152         self.assertEqual(p1, p2)
   -1   153 
   -1   154     def test_wrap_return(self):
   -1   155         mock = Mock()
   -1   156 
   -1   157         @q.wrap
   -1   158         def fn(x):
   -1   159             return 'foo'
   -1   160 
   -1   161         promise = fn('bar')
   -1   162         promise.then(mock, self.assert_never_called)
   -1   163 
   -1   164         mock.assert_called_with('foo')
   -1   165 
   -1   166     def test_wrap_raise(self):
   -1   167         mock = Mock()
   -1   168         err = Exception('foo')
   -1   169 
   -1   170         @q.wrap
   -1   171         def fn(x):
   -1   172             raise err
   -1   173 
   -1   174         promise = fn('bar')
   -1   175         promise.then(self.assert_never_called, mock)
   -1   176 
   -1   177         mock.assert_called_with(err)
   -1   178 
   -1   179     def test_all_success(self):
   -1   180         mock = Mock()
   -1   181 
   -1   182         p1 = q.Promise()
   -1   183         p2 = q.Promise()
   -1   184         p3 = q.Promise()
   -1   185 
   -1   186         p1.resolve('foo')
   -1   187         p3.resolve('baz')
   -1   188         p2.resolve('bar')
   -1   189 
   -1   190         q.all([p1, p2, p3]).then(mock, self.assert_never_called)
   -1   191 
   -1   192         mock.assert_called_with(['foo', 'bar', 'baz'])
   -1   193 
   -1   194     def test_all_error(self):
   -1   195         mock = Mock()
   -1   196 
   -1   197         p1 = q.Promise()
   -1   198         p2 = q.Promise()
   -1   199         p3 = q.Promise()
   -1   200 
   -1   201         p2.resolve('bar')
   -1   202         p3.reject('baz')
   -1   203 
   -1   204         q.all([p1, p2, p3]).then(self.assert_never_called, mock)
   -1   205 
   -1   206         mock.assert_called_with('baz')

diff --git a/tox.ini b/tox.ini

@@ -4,7 +4,7 @@
    4     4 # and then run "tox" from this directory.
    5     5 
    6     6 [tox]
    7    -1 envlist = py26, py27
   -1     7 envlist = py27, py3
    8     8 
    9     9 [testenv]
   10    10 commands =
@@ -15,9 +15,9 @@ deps =
   15    15     nose
   16    16     coverage
   17    17 
   18    -1 [testenv:py26]
   -1    18 [testenv:py27]
   19    19 deps =
   20    20     flake8
   21    21     nose
   22    22     coverage
   23    -1     unittest2
   -1    23     mock