Source code for ifgen.enum.test
"""
A module implementing a unit-test output generator for enums.
"""
# third-party
from vcorelib.io import IndentedFileWriter
# internal
from ifgen.generation.interface import GenerateTask
from ifgen.generation.test import unit_test_boilerplate
[docs]
def test_single(
task: GenerateTask, writer: IndentedFileWriter, enum: str
) -> None:
"""Generate test code for a single enumeration instance."""
writer.empty()
with_namespace = f"{task.name}::{enum}"
writer.c_comment(f"Test {with_namespace}.")
writer.write(f"std::cout << {with_namespace} << std::endl;")
writer.write(f'assert(!strcmp(to_string({with_namespace}), "{enum}"));')
writer.write(f'assert(from_string("{enum}", instance));')
writer.write(f"assert(instance == {with_namespace});")
[docs]
def unit_test_body(task: GenerateTask, writer: IndentedFileWriter) -> None:
"""Implement a simple unit test for the enumeration."""
writer.write(f"{task.name} instance;")
for enum in task.instance.get("enum", {}):
test_single(task, writer, enum)
if task.instance["json"]:
writer.empty()
writer.c_comment("Attempt to decode this?")
writer.write(f"std::cout << {task.name}_json();")
writer.empty()
[docs]
def create_enum_test(task: GenerateTask) -> None:
"""Create a unit test for the enum string-conversion methods."""
if task.is_python:
return
if task.instance["unit_test"]:
with unit_test_boilerplate(task) as writer:
unit_test_body(task, writer)