Skip to content

Commit

Permalink
Update pyhit interface and tests (idaholab#17989)
Browse files Browse the repository at this point in the history
  • Loading branch information
dschwen committed Jun 9, 2021
1 parent a6d02bc commit 9f8b142
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 21 deletions.
16 changes: 16 additions & 0 deletions python/pyhit/pyhit.py
Expand Up @@ -221,6 +221,22 @@ def line(self, name=None, default=None):

return default

def filename(self, name=None, default=None):
"""
Return the file name for node itself or for the supplied *name*.
When the *name* is not included the file name for the beginning of the block is returned;
and when it is included the file name is returned.
When *name* is used and the parameter is not located, the *default* is returned.
"""
if name is None:
return self.__hitnode.filename()

for child in self.__hitnode.children(hit.NodeType.Field):
if child.path() == name:
return child.filename()

return default

def __getitem__(self, name):
"""
Provides operator [] access to the parameters of this node.
Expand Down
68 changes: 47 additions & 21 deletions python/pyhit/tests/test_tokenize.py
Expand Up @@ -17,7 +17,7 @@ class TestHitTokenize(unittest.TestCase):
Test the load function.
"""
def testToken(self):
tok = pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 6, 1980)
tok = pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'', 6, 1980)
self.assertEqual(tok.type, pyhit.TokenType.LEFTBRACKET)
self.assertEqual(tok.value, b'[')
self.assertEqual(tok.offset, 6)
Expand All @@ -26,34 +26,60 @@ def testToken(self):
self.assertEqual(tok, pyhit.TokenType.LEFTBRACKET)
self.assertNotEqual(tok, pyhit.TokenType.RIGHTBRACKET)

self.assertEqual(tok, pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 6, 1980))
self.assertNotEqual(tok, pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 10, 1980))
self.assertEqual(tok, pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'', 6, 1980))
self.assertNotEqual(tok, pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'', 10, 1980))

with self.assertRaises(TypeError) as cm:
tok == 'WRONG'
self.assertIn("Comparison is only valid with Token and TokenType, <class 'str'> provided", str(cm.exception))
self.assertIn("Comparison is only valid with Token and TokenType, <class 'str'> provided",
str(cm.exception))

def testTokenize(self):
text = '[Kernels]\n [diff]\n type = Diffusion # DOOSE!\n []\n[]'
tokens = pyhit.tokenize(text, filename='simple_diffusion.i')
self.assertEqual(len(tokens), 17)
self.assertEqual(tokens[0], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 0, 1))
self.assertEqual(tokens[1], pyhit.Token(pyhit.TokenType.PATH, b'Kernels', 1, 1))
self.assertEqual(tokens[2], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', 8, 1))
self.assertEqual(tokens[3], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 12, 2))
self.assertEqual(tokens[4], pyhit.Token(pyhit.TokenType.PATH, b'diff', 13, 2))
self.assertEqual(tokens[5], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', 17, 2))
self.assertEqual(tokens[6], pyhit.Token(pyhit.TokenType.IDENT, b'type', 23, 3))
self.assertEqual(tokens[7], pyhit.Token(pyhit.TokenType.EQUALS, b'=', 28, 3))
self.assertEqual(tokens[8], pyhit.Token(pyhit.TokenType.STRING, b'Diffusion', 30, 3))
self.assertEqual(tokens[9], pyhit.Token(pyhit.TokenType.INLINECOMMENT, b'# DOOSE!', 40, 3))
self.assertEqual(tokens[10], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 51, 4))
self.assertEqual(tokens[11], pyhit.Token(pyhit.TokenType.PATH, b'', 52, 4))
self.assertEqual(tokens[12], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', 52, 4))
self.assertEqual(tokens[13], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', 54, 5))
self.assertEqual(tokens[14], pyhit.Token(pyhit.TokenType.PATH,b'',55, 5))
self.assertEqual(tokens[15], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', 55, 5))
self.assertEqual(tokens[16], pyhit.Token(pyhit.TokenType.EOF, b'', 56, 5))
self.assertEqual(
tokens[0], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'simple_diffusion.i', 0, 1))
self.assertEqual(tokens[1],
pyhit.Token(pyhit.TokenType.PATH, b'Kernels', b'simple_diffusion.i', 1, 1))
self.assertEqual(
tokens[2], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', b'simple_diffusion.i', 8, 1))
self.assertEqual(
tokens[3], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'simple_diffusion.i', 12, 2))
self.assertEqual(tokens[4],
pyhit.Token(pyhit.TokenType.PATH, b'diff', b'simple_diffusion.i', 13, 2))
self.assertEqual(
tokens[5], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', b'simple_diffusion.i', 17,
2))
self.assertEqual(tokens[6],
pyhit.Token(pyhit.TokenType.IDENT, b'type', b'simple_diffusion.i', 23, 3))
self.assertEqual(tokens[7],
pyhit.Token(pyhit.TokenType.EQUALS, b'=', b'simple_diffusion.i', 28, 3))
self.assertEqual(
tokens[8],
pyhit.Token(pyhit.TokenType.STRING, b'Diffusion', b'simple_diffusion.i', 30, 3))
self.assertEqual(
tokens[9],
pyhit.Token(pyhit.TokenType.INLINECOMMENT, b'# DOOSE!', b'simple_diffusion.i', 40, 3))
self.assertEqual(
tokens[10], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'simple_diffusion.i', 51,
4))
self.assertEqual(tokens[11],
pyhit.Token(pyhit.TokenType.PATH, b'', b'simple_diffusion.i', 52, 4))
self.assertEqual(
tokens[12], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', b'simple_diffusion.i', 52,
4))
self.assertEqual(
tokens[13], pyhit.Token(pyhit.TokenType.LEFTBRACKET, b'[', b'simple_diffusion.i', 54,
5))
self.assertEqual(tokens[14],
pyhit.Token(pyhit.TokenType.PATH, b'', b'simple_diffusion.i', 55, 5))
self.assertEqual(
tokens[15], pyhit.Token(pyhit.TokenType.RIGHTBRACKET, b']', b'simple_diffusion.i', 55,
5))
self.assertEqual(tokens[16],
pyhit.Token(pyhit.TokenType.EOF, b'', b'simple_diffusion.i', 56, 5))


if __name__ == '__main__':
unittest.main(module=__name__, verbosity=2)

0 comments on commit 9f8b142

Please sign in to comment.