diff --git a/python/pyhit/pyhit.py b/python/pyhit/pyhit.py index aa7195517425..c484b9e6a676 100644 --- a/python/pyhit/pyhit.py +++ b/python/pyhit/pyhit.py @@ -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. diff --git a/python/pyhit/tests/test_tokenize.py b/python/pyhit/tests/test_tokenize.py index 8f56ea48c0a5..e6e60845c67a 100755 --- a/python/pyhit/tests/test_tokenize.py +++ b/python/pyhit/tests/test_tokenize.py @@ -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) @@ -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, provided", str(cm.exception)) + self.assertIn("Comparison is only valid with Token and TokenType, 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)