Docs and macros improvements (#2084)

* Document builtin template filters

* do not require explicit _has_error_case param for footer macro, but still allow it
This commit is contained in:
Corey McCandless
2019-10-22 10:56:24 -04:00
committed by GitHub
parent 571dcd2257
commit b965863ec9
13 changed files with 27 additions and 21 deletions

View File

@@ -42,8 +42,8 @@ from {{ exercise | to_snake }} import ({% if imports -%}
return self.assertRaisesRegex(exception, r".+") return self.assertRaisesRegex(exception, r".+")
{%- endmacro %} {%- endmacro %}
{% macro footer(has_error_case) -%} {% macro footer(_has_error_case) -%}
{% if has_error_case %} {% if has_error_case or _has_error_case %}
{{ utility() }} {{ utility() }}
{% endif %} {% endif %}
if __name__ == '__main__': if __name__ == '__main__':

View File

@@ -34,6 +34,12 @@ structure for the exercise you're working on, please consult
error to be thrown (ex: `False`) error to be thrown (ex: `False`)
- `additional_cases`: similar structure to `cases`, but is populated from the exercise's `.meta/additional_tests.json` file if one exists (for an example, see `exercises/word-count/.meta/additional_tests.json`) - `additional_cases`: similar structure to `cases`, but is populated from the exercise's `.meta/additional_tests.json` file if one exists (for an example, see `exercises/word-count/.meta/additional_tests.json`)
Additionally, the following template filters are added for convenience:
- `to_snake`: Converts a string to snake_case (ex: `{{ "CamelCaseString" | to_snake }}` -> `camel_case_string`)
- `camel_case`: Converts a string to CamelCase (ex: `{{ "snake_case_string" | camel_case }}` -> `SnakeCaseString` )
- `error_case`: Checks if a test case expects an error to be thrown (ex: `{% for case in cases%}{% if case is error_case}`)
- `regex_replace`: Regex string replacement (ex: `{{ "abc123" | regex_replace("\\d", "D") }}` -> `abcDDD`)
### Conventions ### Conventions
- General-use macros for highly repeated template structures are defined in `config/generator_macros.j2`. - General-use macros for highly repeated template structures are defined in `config/generator_macros.j2`.

View File

@@ -20,4 +20,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{%- endif %} {%- endif %}
{% endfor %} {% endfor %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}

View File

@@ -25,4 +25,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{% endfor %} {% endfor %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}

View File

@@ -47,6 +47,16 @@ class HammingTest(unittest.TestCase):
def assertRaisesWithMessage(self, exception): def assertRaisesWithMessage(self, exception):
return self.assertRaisesRegex(exception, r".+") return self.assertRaisesRegex(exception, r".+")
# Utility functions
def setUp(self):
try:
self.assertRaisesRegex
except AttributeError:
self.assertRaisesRegex = self.assertRaisesRegexp
def assertRaisesWithMessage(self, exception):
return self.assertRaisesRegex(exception, r".+")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@@ -21,4 +21,4 @@ class {{ case["description"] | camel_case }}Test(unittest.TestCase):
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}

View File

@@ -15,4 +15,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}

View File

@@ -27,4 +27,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{% endfor %} {% endfor %}
{{ macros.footer(True) }} {{ macros.footer() }}

View File

@@ -77,16 +77,6 @@ class ScaleGeneratorTest(unittest.TestCase):
expected = ["G", "G#", "B", "C#", "D#", "F", "F#"] expected = ["G", "G#", "B", "C#", "D#", "F", "F#"]
self.assertEqual(Scale("G").interval("mAMMMmm"), expected) self.assertEqual(Scale("G").interval("mAMMMmm"), expected)
# Utility functions
def setUp(self):
try:
self.assertRaisesRegex
except AttributeError:
self.assertRaisesRegex = self.assertRaisesRegexp
def assertRaisesWithMessage(self, exception):
return self.assertRaisesRegex(exception, r".+")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@@ -13,4 +13,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
self.assertEqual({{ case["property"] }}("{{ input["series"] }}", {{ input["sliceLength"] }}), {{ case["expected"] }}) self.assertEqual({{ case["property"] }}("{{ input["series"] }}", {{ input["sliceLength"] }}), {{ case["expected"] }})
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{{ macros.footer(True) }} {{ macros.footer() }}

View File

@@ -44,4 +44,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{{ test_case(case) }} {{ test_case(case) }}
{%- endfor -%} {%- endfor -%}
{{ macros.footer(True) }} {{ macros.footer() }}

View File

@@ -24,4 +24,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{% endfor %} {% endfor %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}

View File

@@ -25,4 +25,4 @@ class {{ exercise | camel_case }}Test(unittest.TestCase):
{%- endif %} {%- endif %}
{{ macros.footer(has_error_case) }} {{ macros.footer() }}