Package lepl :: Package core :: Package _test :: Module parser
[hide private]
[frames] | no frames]

Source Code for Module lepl.core._test.parser

  1   
  2  # The contents of this file are subject to the Mozilla Public License 
  3  # (MPL) Version 1.1 (the "License"); you may not use this file except 
  4  # in compliance with the License. You may obtain a copy of the License 
  5  # at http://www.mozilla.org/MPL/ 
  6  # 
  7  # Software distributed under the License is distributed on an "AS IS" 
  8  # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
  9  # the License for the specific language governing rights and 
 10  # limitations under the License. 
 11  # 
 12  # The Original Code is LEPL (http://www.acooke.org/lepl) 
 13  # The Initial Developer of the Original Code is Andrew Cooke. 
 14  # Portions created by the Initial Developer are Copyright (C) 2009-2010 
 15  # Andrew Cooke (andrew@acooke.org). All Rights Reserved. 
 16  # 
 17  # Alternatively, the contents of this file may be used under the terms 
 18  # of the LGPL license (the GNU Lesser General Public License, 
 19  # http://www.gnu.org/licenses/lgpl.html), in which case the provisions 
 20  # of the LGPL License are applicable instead of those above. 
 21  # 
 22  # If you wish to allow use of your version of this file only under the 
 23  # terms of the LGPL License and not to allow others to use your version 
 24  # of this file under the MPL, indicate your decision by deleting the 
 25  # provisions above and replace them with the notice and other provisions 
 26  # required by the LGPL License.  If you do not delete the provisions 
 27  # above, a recipient may use your version of this file under either the 
 28  # MPL or the LGPL License. 
 29   
 30  ''' 
 31  Tests for the lepl.core.parser module. 
 32  ''' 
 33   
 34  from traceback import format_exc 
 35  from types import MethodType 
 36  from unittest import TestCase 
 37   
 38  from lepl.matchers.core import Any, Literal 
 39  from lepl.matchers.support import function_matcher 
40 41 42 # pylint: disable-msg=C0103, C0111, C0301, W0702, C0324, C0102, E1101 43 # (dude this is just a test) 44 45 46 -class InstanceMethodTest(TestCase):
47
48 - class Foo(object):
49 class_attribute = 1
50 - def __init__(self):
51 self.instance_attribute = 2
52 - def bar(self):
53 return (self.class_attribute, 54 self.instance_attribute, 55 hasattr(self, 'baz'))
56
57 - def test_method(self):
58 foo = self.Foo() 59 assert foo.bar() == (1, 2, False) 60 def my_baz(myself): 61 return (myself.class_attribute, 62 myself.instance_attribute, 63 hasattr(myself, 'baz'))
64 # pylint: disable-msg=W0201 65 foo.baz = MethodType(my_baz, foo) 66 assert foo.baz() == (1, 2, True) 67 assert foo.bar() == (1, 2, True)
68
69 70 71 -class FlattenTest(TestCase):
72 - def test_flatten(self):
73 matcher = Literal('a') & Literal('b') & Literal('c') 74 assert str(matcher) == "And(And, Literal)", str(matcher) 75 matcher.config.clear().flatten() 76 parser = matcher.get_parse_string() 77 assert str(parser.matcher) == "And(Literal, Literal, Literal)", str(parser.matcher)
78
79 80 -class RepeatTest(TestCase):
81
82 - def test_depth(self):
83 matcher = Any()[:,...] 84 matcher.config.clear() 85 matcher = matcher.get_match_string() 86 #print(repr(matcher.matcher)) 87 results = [m for (m, _s) in matcher('abc')] 88 assert results == [['abc'], ['ab'], ['a'], []], results
89
90 - def test_breadth(self):
91 matcher = Any()[::'b',...] 92 matcher.config.clear() 93 matcher = matcher.get_match_string() 94 results = [m for (m, _s) in matcher('abc')] 95 assert results == [[], ['a'], ['ab'], ['abc']], results
96
97 98 -class ErrorTest(TestCase):
99
100 - def test_error(self):
101 class TestException(Exception): pass 102 @function_matcher 103 def Error(supprt, stream): 104 raise TestException('here')
105 matcher = Error() 106 matcher.config.clear() 107 try: 108 matcher.parse('a') 109 except TestException: 110 trace = format_exc() 111 assert "TestException('here')" in trace, trace
112