-
-
Notifications
You must be signed in to change notification settings - Fork 276
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #64 from mcepl/denose
Denose
- Loading branch information
Showing
1 changed file
with
190 additions
and
193 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,193 +1,190 @@ | ||
""" Test for bibparse grammar """ | ||
|
||
from pyparsing import ParseException | ||
from .btpyparse import Macro | ||
from . import btpyparse as bp | ||
|
||
from nose.tools import assert_equal, assert_raises | ||
|
||
|
||
def test_names(): | ||
# check various types of names | ||
# All names can contains alphas, but not some special chars | ||
bad_chars = '"#%\'(),={}' | ||
for name_type, dig1f in ((bp.macro_def, False), | ||
(bp.field_name, False), | ||
(bp.entry_type, False), | ||
(bp.cite_key, True)): | ||
if dig1f: # can start with digit | ||
assert_equal(name_type.parseString('2t')[0], '2t') | ||
else: | ||
assert_raises(ParseException, name_type.parseString, '2t') | ||
# All of the names cannot contain some characters | ||
for char in bad_chars: | ||
assert_raises(ParseException, name_type.parseString, char) | ||
# standard strings all OK | ||
assert_equal(name_type.parseString('simple_test')[0], 'simple_test') | ||
# Test macro ref | ||
mr = bp.macro_ref | ||
# can't start with digit | ||
assert_raises(ParseException, mr.parseString, '2t') | ||
for char in bad_chars: | ||
assert_raises(ParseException, mr.parseString, char) | ||
assert_equal(mr.parseString('simple_test')[0].name, 'simple_test') | ||
|
||
|
||
def test_numbers(): | ||
assert_equal(bp.number.parseString('1066')[0], '1066') | ||
assert_equal(bp.number.parseString('0')[0], '0') | ||
assert_raises(ParseException, bp.number.parseString, '-4') | ||
assert_raises(ParseException, bp.number.parseString, '+4') | ||
assert_raises(ParseException, bp.number.parseString, '.4') | ||
# something point something leaves a trailing .4 unmatched | ||
assert_equal(bp.number.parseString('0.4')[0], '0') | ||
|
||
|
||
def test_parse_string(): | ||
# test string building blocks | ||
assert_equal(bp.chars_no_quotecurly.parseString('x')[0], 'x') | ||
assert_equal(bp.chars_no_quotecurly.parseString("a string")[0], 'a string') | ||
assert_equal(bp.chars_no_quotecurly.parseString('a "string')[0], 'a ') | ||
assert_equal(bp.chars_no_curly.parseString('x')[0], 'x') | ||
assert_equal(bp.chars_no_curly.parseString("a string")[0], 'a string') | ||
assert_equal(bp.chars_no_curly.parseString('a {string')[0], 'a ') | ||
assert_equal(bp.chars_no_curly.parseString('a }string')[0], 'a ') | ||
# test more general strings together | ||
for obj in (bp.curly_string, bp.string, bp.field_value): | ||
assert_equal(obj.parseString('{}').asList(), []) | ||
assert_equal(obj.parseString('{a "string}')[0], 'a "string') | ||
assert_equal(obj.parseString('{a {nested} string}').asList(), | ||
['a ', ['nested'], ' string']) | ||
assert_equal(obj.parseString('{a {double {nested}} string}').asList(), | ||
['a ', ['double ', ['nested']], ' string']) | ||
for obj in (bp.quoted_string, bp.string, bp.field_value): | ||
assert_equal(obj.parseString('""').asList(), []) | ||
assert_equal(obj.parseString('"a string"')[0], 'a string') | ||
assert_equal(obj.parseString('"a {nested} string"').asList(), | ||
['a ', ['nested'], ' string']) | ||
assert_equal(obj.parseString('"a {double {nested}} string"').asList(), | ||
['a ', ['double ', ['nested']], ' string']) | ||
# check macro def in string | ||
assert_equal(bp.string.parseString('someascii')[0], Macro('someascii')) | ||
assert_raises(ParseException, bp.string.parseString, '%#= validstring') | ||
# check number in string | ||
assert_equal(bp.string.parseString('1994')[0], '1994') | ||
|
||
|
||
def test_parse_field(): | ||
# test field value - hashes included | ||
fv = bp.field_value | ||
# Macro | ||
assert_equal(fv.parseString('aname')[0], Macro('aname')) | ||
assert_equal(fv.parseString('ANAME')[0], Macro('aname')) | ||
# String and macro | ||
assert_equal(fv.parseString('aname # "some string"').asList(), | ||
[Macro('aname'), 'some string']) | ||
# Nested string | ||
assert_equal(fv.parseString('aname # {some {string}}').asList(), | ||
[Macro('aname'), 'some ', ['string']]) | ||
# String and number | ||
assert_equal(fv.parseString('"a string" # 1994').asList(), | ||
['a string', '1994']) | ||
# String and number and macro | ||
assert_equal(fv.parseString('"a string" # 1994 # a_macro').asList(), | ||
['a string', '1994', Macro('a_macro')]) | ||
|
||
|
||
def test_comments(): | ||
res = bp.comment.parseString('@Comment{about something}') | ||
assert_equal(res.asList(), ['comment', '{about something}']) | ||
assert_equal( | ||
bp.comment.parseString('@COMMENT{about something').asList(), | ||
['comment', '{about something']) | ||
assert_equal( | ||
bp.comment.parseString('@comment(about something').asList(), | ||
['comment', '(about something']) | ||
assert_equal( | ||
bp.comment.parseString('@COMment about something').asList(), | ||
['comment', ' about something']) | ||
assert_raises(ParseException, bp.comment.parseString, | ||
'@commentabout something') | ||
assert_raises(ParseException, bp.comment.parseString, | ||
'@comment+about something') | ||
assert_raises(ParseException, bp.comment.parseString, | ||
'@comment"about something') | ||
|
||
|
||
def test_preamble(): | ||
res = bp.preamble.parseString('@preamble{"about something"}') | ||
assert_equal(res.asList(), ['preamble', 'about something']) | ||
assert_equal(bp.preamble.parseString( | ||
'@PREamble{{about something}}').asList(), | ||
['preamble', 'about something']) | ||
assert_equal(bp.preamble.parseString("""@PREamble{ | ||
{about something} | ||
}""").asList(), | ||
['preamble', 'about something']) | ||
|
||
|
||
def test_macro(): | ||
res = bp.macro.parseString('@string{ANAME = "about something"}') | ||
assert_equal(res.asList(), ['string', 'aname', 'about something']) | ||
assert_equal( | ||
bp.macro.parseString('@string{aname = {about something}}').asList(), | ||
['string', 'aname', 'about something']) | ||
|
||
|
||
def test_entry(): | ||
txt = """@some_entry{akey, aname = "about something", | ||
another={something else}}""" | ||
res = bp.entry.parseString(txt) | ||
assert_equal(res.asList(), | ||
['some_entry', 'akey', | ||
['aname', 'about something'], ['another', 'something else']]) | ||
# Case conversion | ||
txt = """@SOME_ENTRY{akey, ANAME = "about something", | ||
another={something else}}""" | ||
res = bp.entry.parseString(txt) | ||
assert_equal(res.asList(), | ||
['some_entry', 'akey', | ||
['aname', 'about something'], ['another', 'something else']]) | ||
|
||
|
||
def test_bibfile(): | ||
txt = """@some_entry{akey, aname = "about something", | ||
another={something else}}""" | ||
res = bp.bibfile.parseString(txt) | ||
assert_equal(res.asList(), | ||
[['some_entry', 'akey', | ||
['aname', 'about something'], | ||
['another', 'something else']]]) | ||
|
||
|
||
def test_bib1(): | ||
# First pass whole bib-like tests | ||
txt = """ | ||
Some introductory text | ||
(implicit comment) | ||
@ARTICLE{Brett2002marsbar, | ||
author = {Matthew Brett and Jean-Luc Anton and Romain Valabregue and Jean-Baptise | ||
Poline}, | ||
title = {{Region of interest analysis using an SPM toolbox}}, | ||
journal = {Neuroimage}, | ||
year = {2002}, | ||
volume = {16}, | ||
pages = {1140--1141}, | ||
number = {2} | ||
} | ||
@some_entry{akey, aname = "about something", | ||
another={something else}} | ||
""" | ||
res = bp.bibfile.parseString(txt) | ||
assert_equal(len(res), 3) | ||
res2 = bp.parse_str(txt) | ||
assert_equal(res.asList(), res2.asList()) | ||
res3 = [r.asList()[0] for r, start, end in bp.definitions.scanString(txt)] | ||
assert_equal(res.asList(), res3) | ||
|
||
|
||
if __name__ == '__main__': | ||
import nose | ||
nose.main() | ||
""" Test for bibparse grammar """ | ||
|
||
import unittest | ||
from pyparsing import ParseException | ||
from .btpyparse import Macro | ||
from . import btpyparse as bp | ||
|
||
class TestBibparse(unittest.TestCase): | ||
def test_names(self): | ||
# check various types of names | ||
# All names can contains alphas, but not some special chars | ||
bad_chars = '"#%\'(),={}' | ||
for name_type, dig1f in ((bp.macro_def, False), | ||
(bp.field_name, False), | ||
(bp.entry_type, False), | ||
(bp.cite_key, True)): | ||
if dig1f: # can start with digit | ||
self.assertEqual(name_type.parseString('2t')[0], '2t') | ||
else: | ||
self.assertRaises(ParseException, name_type.parseString, '2t') | ||
# All of the names cannot contain some characters | ||
for char in bad_chars: | ||
self.assertRaises(ParseException, name_type.parseString, char) | ||
# standard strings all OK | ||
self.assertEqual(name_type.parseString('simple_test')[0], 'simple_test') | ||
# Test macro ref | ||
mr = bp.macro_ref | ||
# can't start with digit | ||
self.assertRaises(ParseException, mr.parseString, '2t') | ||
for char in bad_chars: | ||
self.assertRaises(ParseException, mr.parseString, char) | ||
self.assertEqual(mr.parseString('simple_test')[0].name, 'simple_test') | ||
|
||
def test_numbers(self): | ||
self.assertEqual(bp.number.parseString('1066')[0], '1066') | ||
self.assertEqual(bp.number.parseString('0')[0], '0') | ||
self.assertRaises(ParseException, bp.number.parseString, '-4') | ||
self.assertRaises(ParseException, bp.number.parseString, '+4') | ||
self.assertRaises(ParseException, bp.number.parseString, '.4') | ||
# something point something leaves a trailing .4 unmatched | ||
self.assertEqual(bp.number.parseString('0.4')[0], '0') | ||
|
||
|
||
def test_parse_string(self): | ||
# test string building blocks | ||
self.assertEqual(bp.chars_no_quotecurly.parseString('x')[0], 'x') | ||
self.assertEqual(bp.chars_no_quotecurly.parseString("a string")[0], 'a string') | ||
self.assertEqual(bp.chars_no_quotecurly.parseString('a "string')[0], 'a ') | ||
self.assertEqual(bp.chars_no_curly.parseString('x')[0], 'x') | ||
self.assertEqual(bp.chars_no_curly.parseString("a string")[0], 'a string') | ||
self.assertEqual(bp.chars_no_curly.parseString('a {string')[0], 'a ') | ||
self.assertEqual(bp.chars_no_curly.parseString('a }string')[0], 'a ') | ||
# test more general strings together | ||
for obj in (bp.curly_string, bp.string, bp.field_value): | ||
self.assertEqual(obj.parseString('{}').asList(), []) | ||
self.assertEqual(obj.parseString('{a "string}')[0], 'a "string') | ||
self.assertEqual(obj.parseString('{a {nested} string}').asList(), | ||
['a ', ['nested'], ' string']) | ||
self.assertEqual(obj.parseString('{a {double {nested}} string}').asList(), | ||
['a ', ['double ', ['nested']], ' string']) | ||
for obj in (bp.quoted_string, bp.string, bp.field_value): | ||
self.assertEqual(obj.parseString('""').asList(), []) | ||
self.assertEqual(obj.parseString('"a string"')[0], 'a string') | ||
self.assertEqual(obj.parseString('"a {nested} string"').asList(), | ||
['a ', ['nested'], ' string']) | ||
self.assertEqual(obj.parseString('"a {double {nested}} string"').asList(), | ||
['a ', ['double ', ['nested']], ' string']) | ||
# check macro def in string | ||
self.assertEqual(bp.string.parseString('someascii')[0], Macro('someascii')) | ||
self.assertRaises(ParseException, bp.string.parseString, '%#= validstring') | ||
# check number in string | ||
self.assertEqual(bp.string.parseString('1994')[0], '1994') | ||
|
||
|
||
def test_parse_field(self): | ||
# test field value - hashes included | ||
fv = bp.field_value | ||
# Macro | ||
self.assertEqual(fv.parseString('aname')[0], Macro('aname')) | ||
self.assertEqual(fv.parseString('ANAME')[0], Macro('aname')) | ||
# String and macro | ||
self.assertEqual(fv.parseString('aname # "some string"').asList(), | ||
[Macro('aname'), 'some string']) | ||
# Nested string | ||
self.assertEqual(fv.parseString('aname # {some {string}}').asList(), | ||
[Macro('aname'), 'some ', ['string']]) | ||
# String and number | ||
self.assertEqual(fv.parseString('"a string" # 1994').asList(), | ||
['a string', '1994']) | ||
# String and number and macro | ||
self.assertEqual(fv.parseString('"a string" # 1994 # a_macro').asList(), | ||
['a string', '1994', Macro('a_macro')]) | ||
|
||
|
||
def test_comments(self): | ||
res = bp.comment.parseString('@Comment{about something}') | ||
self.assertEqual(res.asList(), ['comment', '{about something}']) | ||
self.assertEqual( | ||
bp.comment.parseString('@COMMENT{about something').asList(), | ||
['comment', '{about something']) | ||
self.assertEqual( | ||
bp.comment.parseString('@comment(about something').asList(), | ||
['comment', '(about something']) | ||
self.assertEqual( | ||
bp.comment.parseString('@COMment about something').asList(), | ||
['comment', ' about something']) | ||
self.assertRaises(ParseException, bp.comment.parseString, | ||
'@commentabout something') | ||
self.assertRaises(ParseException, bp.comment.parseString, | ||
'@comment+about something') | ||
self.assertRaises(ParseException, bp.comment.parseString, | ||
'@comment"about something') | ||
|
||
|
||
def test_preamble(self): | ||
res = bp.preamble.parseString('@preamble{"about something"}') | ||
self.assertEqual(res.asList(), ['preamble', 'about something']) | ||
self.assertEqual(bp.preamble.parseString( | ||
'@PREamble{{about something}}').asList(), | ||
['preamble', 'about something']) | ||
self.assertEqual(bp.preamble.parseString("""@PREamble{ | ||
{about something} | ||
}""").asList(), | ||
['preamble', 'about something']) | ||
|
||
|
||
def test_macro(self): | ||
res = bp.macro.parseString('@string{ANAME = "about something"}') | ||
self.assertEqual(res.asList(), ['string', 'aname', 'about something']) | ||
self.assertEqual( | ||
bp.macro.parseString('@string{aname = {about something}}').asList(), | ||
['string', 'aname', 'about something']) | ||
|
||
|
||
def test_entry(self): | ||
txt = """@some_entry{akey, aname = "about something", | ||
another={something else}}""" | ||
res = bp.entry.parseString(txt) | ||
self.assertEqual(res.asList(), | ||
['some_entry', 'akey', | ||
['aname', 'about something'], ['another', 'something else']]) | ||
# Case conversion | ||
txt = """@SOME_ENTRY{akey, ANAME = "about something", | ||
another={something else}}""" | ||
res = bp.entry.parseString(txt) | ||
self.assertEqual(res.asList(), | ||
['some_entry', 'akey', | ||
['aname', 'about something'], ['another', 'something else']]) | ||
|
||
|
||
def test_bibfile(self): | ||
txt = """@some_entry{akey, aname = "about something", | ||
another={something else}}""" | ||
res = bp.bibfile.parseString(txt) | ||
self.assertEqual(res.asList(), | ||
[['some_entry', 'akey', | ||
['aname', 'about something'], | ||
['another', 'something else']]]) | ||
|
||
|
||
def test_bib1(self): | ||
# First pass whole bib-like tests | ||
txt = """ | ||
Some introductory text | ||
(implicit comment) | ||
@ARTICLE{Brett2002marsbar, | ||
author = {Matthew Brett and Jean-Luc Anton and Romain Valabregue and Jean-Baptise | ||
Poline}, | ||
title = {{Region of interest analysis using an SPM toolbox}}, | ||
journal = {Neuroimage}, | ||
year = {2002}, | ||
volume = {16}, | ||
pages = {1140--1141}, | ||
number = {2} | ||
} | ||
@some_entry{akey, aname = "about something", | ||
another={something else}} | ||
""" | ||
res = bp.bibfile.parseString(txt) | ||
self.assertEqual(len(res), 3) | ||
res2 = bp.parse_str(txt) | ||
self.assertEqual(res.asList(), res2.asList()) | ||
res3 = [r.asList()[0] for r, start, end in bp.definitions.scanString(txt)] | ||
self.assertEqual(res.asList(), res3) | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |