| #!/usr/bin/env python3 |
| |
| # Copyright 2014 by Sam Mikes. All rights reserved. |
| # This code is governed by the BSD license found in the LICENSE file. |
| |
| import unittest |
| |
| import os |
| import yaml |
| |
| # add parent dir to search path |
| import sys |
| sys.path.append("src") |
| |
| from parseTestRecord import * |
| |
| def slurpFile(name): |
| with open('test/' + name) as f: |
| contents = f.read() |
| return contents |
| |
| |
| class TestOldParsing(unittest.TestCase): |
| |
| def test_test(self): |
| self.assertTrue(True) |
| |
| def test_overview(self): |
| name = 'fixtures/test262-old-headers.js' |
| contents = slurpFile(name) |
| record = parseTestRecord(contents, name) |
| |
| self.assertEqual("""// Copyright 2009 the Sputnik authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file.""", |
| record['header']) |
| self.assertEqual("""The production Block { } in strict code can't contain function |
| declaration;""", record['commentary']) |
| |
| self.assertEqual("bestPractice/Sbp_A1_T1.js", record['path']) |
| self.assertEqual("Trying to declare function at the Block statement", |
| record['description']) |
| self.assertEqual("", record['onlyStrict']) |
| self.assertEqual("SyntaxError", record['negative']) |
| self.assertEqual("http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls", |
| record['bestPractice']) |
| |
| self.assertEqual(""""use strict"; |
| { |
| function __func(){} |
| } |
| |
| """, record['test']) |
| |
| @unittest.expectedFailure |
| def test_nomatch(self): |
| with self.assertRaisesRegexp(Exception, "unrecognized"): |
| parseTestRecord("#!/usr/bin/env python", "random.py") |
| |
| def test_duplicate(self): |
| with self.assertRaisesRegexp(Exception, "duplicate: foo"): |
| parseTestRecord(""" |
| // Copyright |
| |
| /** |
| * @foo bar |
| * @foo bar |
| */ |
| |
| 1; |
| """ |
| , "name") |
| |
| def test_malformed(self): |
| with self.assertRaisesRegexp(Exception, 'Malformed "@" attribute: name'): |
| parseTestRecord(""" |
| // Copyright |
| |
| /** |
| * @ baz |
| * @foo bar |
| */ |
| |
| 1; |
| """ |
| , "name") |
| |
| def test_stripStars(self): |
| self.assertEqual("", stripStars("")) |
| self.assertEqual("foo", stripStars("\n* foo")) |
| self.assertEqual("@foo bar", stripStars("\n* @foo bar")) |
| self.assertEqual("@foo bar", stripStars("\n *@foo bar")) |
| |
| |
| class TestYAMLParsing(unittest.TestCase): |
| def test_test(self): |
| self.assertTrue(True) |
| |
| def test_split(self): |
| name = 'fixtures/test262-yaml-headers.js' |
| contents = slurpFile(name) |
| self.assertTrue('---' in contents) |
| match = matchParts(contents, name) |
| self.assertEqual("""--- |
| info: > |
| The production Block { } in strict code can't contain function |
| declaration; |
| description: Trying to declare function at the Block statement |
| negative: SyntaxError |
| bestPractice: "http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls" |
| flags: [onlyStrict] |
| ---""", match.group(2)) |
| |
| def test_yamlParse(self): |
| text = """ |
| info: > |
| The production Block { } in strict code can't contain function |
| declaration; |
| description: Trying to declare function at the Block statement |
| negative: SyntaxError |
| bestPractice: "http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls" |
| flags: [onlyStrict]""" |
| parsed = yaml.load(text) |
| |
| self.assertEqual("Trying to declare function at the Block statement", |
| parsed['description']) |
| self.assertEqual("SyntaxError", parsed['negative']) |
| self.assertEqual('http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls', parsed['bestPractice']) |
| self.assertEqual(["onlyStrict"], parsed['flags']) |
| self.assertEqual("The production Block { } in strict code can't contain function declaration;\n", parsed['info']) |
| |
| def test_hasYAML(self): |
| self.assertTrue(hasYAML("---\n some: yaml\n\n---")) |
| self.assertFalse(hasYAML("\n* Test description\n *\n * @foo bar\n* @noStrict\n")) |
| |
| def test_fixturehasYAML(self): |
| name = 'fixtures/test262-yaml-headers.js' |
| contents = slurpFile(name) |
| self.assertTrue('---' in contents) |
| match = matchParts(contents, name) |
| self.assertTrue(hasYAML(match.group(2))) |
| |
| def test_missingKeys(self): |
| result = {} |
| yamlAttrParser(result, """--- |
| info: some info (note no flags or includes) |
| ---""", "") |
| self.assertEqual("some info (note no flags or includes)", result['commentary']) |
| |
| def test_overview(self): |
| name = 'fixtures/test262-yaml-headers.js' |
| contents = slurpFile(name) |
| record = parseTestRecord(contents, name) |
| |
| self.assertEqual("""// Copyright 2009 the Sputnik authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file.""", |
| record['header']) |
| self.assertEqual("The production Block { } in strict code can't contain function declaration;\n", record['commentary']) |
| |
| self.assertEqual("Trying to declare function at the Block statement", |
| record['description']) |
| self.assertEqual(['onlyStrict'], record['flags']) |
| self.assertEqual("", record['onlyStrict']) |
| self.assertEqual("SyntaxError", record['negative']) |
| self.assertEqual("http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls", |
| record['bestPractice']) |
| |
| self.assertEqual(""""use strict"; |
| { |
| function __func(){} |
| } |
| |
| """, record['test']) |
| |
| def test_negative(self): |
| name = 'fixtures/negative.js' |
| contents = slurpFile(name) |
| record = parseTestRecord(contents, name) |
| |
| self.assertEqual('early', record['negative']['phase']) |
| self.assertEqual('SyntaxError', record['negative']['type']) |
| |
| if __name__ == '__main__': |
| unittest.main() |