diff --git a/src/i18n.py b/src/i18n.py new file mode 100644 index 0000000..1b9baa0 --- /dev/null +++ b/src/i18n.py @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: LGPL-2.1-only +# Copyright 2022 Jookia + + +class Message: + def __init__(self, id, values): + self.id = id + self.values = values + + def __repr__(self): + return "Message('%s', %s)" % (self.id, self.values) + + def __eq__(self, other): + return self.id == other.id and self.values == other.values diff --git a/tests/test_i18n.py b/tests/test_i18n.py new file mode 100644 index 0000000..189f04c --- /dev/null +++ b/tests/test_i18n.py @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: LGPL-2.1-only +# Copyright 2022 Jookia + +# The i18n module provides the following: +# - A Message data structure +# +# The Message data structure contains: +# - A string identifier +# - A dictionary of string keys to arbitrary values + +from hypothesis.strategies import ( + binary, + composite, + lists, + text, +) + +from src.i18n import Message +from tests.templates import template_test_structure + + +# Draws a message identifier +@composite +def draw_message_identifier(draw): + return draw(text()) + + +# Draws a message key and value +@composite +def draw_message_keyvalue(draw): + return (draw(text()), draw(binary())) + + +# Draws a values for a message +@composite +def draw_message_values(draw): + values = {} + keyvalues = draw(lists(draw_message_keyvalue())) + for (key, value) in keyvalues: + values[key] = value + return values + + +# Draws a random message +@composite +def draw_message_random(draw): + id = draw(draw_message_identifier()) + values = draw(draw_message_values()) + return Message(id, values) + + +# Test message structure +@template_test_structure( + Message, + draw_message_random(), + id=draw_message_identifier(), + values=draw_message_values(), +) +def test_i18n_message_structure(): + pass