Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions .github/workflows/generator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,14 @@ env:

jobs:
Build:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install
run: |
cd flatdata-generator
# runtime requirements
pip install -r requirements.txt
# CI requirements
pip install nose pylint
- name: Dependencies
uses: astral-sh/setup-uv@v6
- name: Run tests
run: |
cd flatdata-generator
python -m nose
uv run --with pytest pytest -v
pip install .
flatdata-generator --help
17 changes: 6 additions & 11 deletions .github/workflows/py.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,15 @@ env:

jobs:
Build:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install
run: |
pip install ./flatdata-generator
cd flatdata-py
# runtime requirements
pip install -r requirements.txt
# CI requirements
pip install nose pylint
- name: Dependencies
uses: astral-sh/setup-uv@v6
- name: Run tests
run: |
cd flatdata-py
python -m nose
uv run --with pytest --with ../flatdata-generator pytest -v
pip install .
flatdata-inspector --help
flatdata-inspector --help

2 changes: 1 addition & 1 deletion flatdata-cpp/ci/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ RUN apk --no-cache add \
breathe \
sphinx \
jinja2 \
nose \
pytest \
pandas \
pyparsing

6 changes: 6 additions & 0 deletions flatdata-generator/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,9 @@ include = [

[tool.hatch.build.targets.wheel]
packages = ["flatdata"]

[tool.pytest.ini_options]
testpaths = [ "tests" ]
python_files = [ "test_*.py" ]
python_classes = [ "Test*" ]
python_functions = [ "test_*" ]
14 changes: 11 additions & 3 deletions flatdata-generator/tests/generators/test_cpp_generator.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
'''
Copyright (c) 2019 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
import glob
import pytest

from flatdata.generator.generators.cpp import CppGenerator
from .assertions import generate_and_assert_in
from .schemas import schemas_and_expectations


def generate_and_compare(test_case):
with open(test_case[0], 'r') as test_file:
test = test_file.read()
Expand All @@ -19,6 +21,12 @@ def generate_and_compare(test_case):

generate_and_assert_in(test, CppGenerator, *expectations)

def test_against_expectations():
def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='cpp', extension='h'):
yield generate_and_compare, x
test_cases.append(x)
return test_cases

@pytest.mark.parametrize("case", get_test_cases())
def test_against_expectations(case):
generate_and_compare(case)
14 changes: 11 additions & 3 deletions flatdata-generator/tests/generators/test_dot_generator.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
'''
Copyright (c) 2017 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
import glob
import pytest

from flatdata.generator.generators.dot import DotGenerator
from .assertions import generate_and_assert_in
from .schemas import schemas_and_expectations


def test_structures_outside_of_archives_are_not_represented():
unexpected_lines = [
"_n_S"
Expand All @@ -31,6 +33,12 @@ def generate_and_compare(test_case):

generate_and_assert_in(test, DotGenerator, *expectations)

def test_against_expectations():
def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='dot', extension='dot'):
yield generate_and_compare, x
test_cases.append(x)
return test_cases

@pytest.mark.parametrize("case", get_test_cases())
def test_against_expectations(case):
generate_and_compare(case)
26 changes: 16 additions & 10 deletions flatdata-generator/tests/generators/test_flatdata_generator.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
'''
Copyright (c) 2018 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
from nose.tools import assert_equal
import pytest

from flatdata.generator.generators.flatdata import FlatdataGenerator
from flatdata.generator.tree.builder import build_ast
from .schemas import schemas_and_expectations


def generate_and_compare(test_case):
with open(test_case[0], 'r') as test_file:
test = test_file.read()
with open(test_case[1], 'r') as expectation_file:
expectation = expectation_file.read()
tree = build_ast(definition=test)
contents = FlatdataGenerator().render(tree)
assert_equal.__self__.maxDiff = None
assert_equal(expectation, contents, test_case)
assert expectation == contents

def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='flatdata', extension='flatdata'):
test_cases.append(x)
return test_cases

def test_against_expectations():
for i in schemas_and_expectations(generator='flatdata', extension='flatdata'):
yield generate_and_compare, i
@pytest.mark.parametrize("case", get_test_cases())
def test_against_expectations(case):
generate_and_compare(case)

def test_normalization_is_fixed_point():
for i in schemas_and_expectations(generator='flatdata', extension='flatdata'):
yield generate_and_compare, (i[1], i[1])
@pytest.mark.parametrize("case", get_test_cases())
def test_normalization_is_fixed_point(case):
generate_and_compare((case[1], case[1]))
26 changes: 15 additions & 11 deletions flatdata-generator/tests/generators/test_go_generator.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
'''
Copyright (c) 2017 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
import glob
import pytest

from flatdata.generator.generators.go import GoGenerator
from .assertions import generate_and_assert_in
from .schemas import schemas_and_expectations

from nose.plugins.skip import SkipTest


def generate_and_compare(test_case):
with open(test_case[0], 'r') as test_file:
Expand All @@ -24,13 +23,18 @@ def generate_and_compare(test_case):


def skip(test_case):
raise SkipTest("Test %s is skipped" % test_case[0])

raise pytest.skip("Test %s is skipped" % test_case[0])

def test_against_expectations():
def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='go', extension='go'):
# Go does not yet support namespaces, enums, ranges, or constants, skip those tests
if "enums" not in x[0] and "constants" not in x[0] and "namespaces" not in x[0] and "ranges" not in x[0]:
yield generate_and_compare, x
else:
yield skip, x
test_cases.append(x)
return test_cases

@pytest.mark.parametrize("test_case", get_test_cases())
def test_against_expectations(test_case):
# Go does not yet support namespaces, enums, ranges, or constants, skip those tests
if "enums" not in test_case[0] and "constants" not in test_case[0] and "namespaces" not in test_case[0] and "ranges" not in test_case[0]:
generate_and_compare(test_case)
else:
skip(test_case)
24 changes: 15 additions & 9 deletions flatdata-generator/tests/generators/test_python_generator.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
'''
Copyright (c) 2017 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
import glob
import pytest

from flatdata.generator.generators.python import PythonGenerator
from .assertions import generate_and_assert_in
from .schemas import schemas_and_expectations

from nose.plugins.skip import SkipTest

def generate_and_compare(test_case):
with open(test_case[0], 'r') as test_file:
Expand All @@ -22,12 +22,18 @@ def generate_and_compare(test_case):
generate_and_assert_in(test, PythonGenerator, *expectations)

def skip(test_case):
raise SkipTest("Test %s is skipped" % test_case[0])
raise pytest.skip("Test %s is skipped" % test_case[0])

def test_against_expectations():
def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='py', extension='py'):
# Python does not yet support enums or constants, skip those tests
if "enums" not in x[0] and "constants" not in x[0]:
yield generate_and_compare, x
else:
yield skip, x
test_cases.append(x)
return test_cases

@pytest.mark.parametrize("test_case", get_test_cases())
def test_against_expectations(test_case):
# Python does not yet support enums or constants, skip those tests
if "enums" not in test_case[0] and "constants" not in test_case[0]:
generate_and_compare(test_case)
else:
skip(test_case)
44 changes: 25 additions & 19 deletions flatdata-generator/tests/generators/test_rust_generator.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
'''
Copyright (c) 2019 HERE Europe B.V.
Copyright (c) 2025 HERE Europe B.V.
See the LICENSE file in the root of this project for license details.
'''
import glob
from nose.tools import eq_
import pytest

from flatdata.generator.generators.rust import RustGenerator
from .assertions import generate_and_assert_in
from .schemas import schemas_and_expectations

def test_format_numeric_literals():
eq_(RustGenerator._format_numeric_literal(1), "1")
eq_(RustGenerator._format_numeric_literal(123), "123")
eq_(RustGenerator._format_numeric_literal(-123), "-123")
eq_(RustGenerator._format_numeric_literal(1), "1")
eq_(RustGenerator._format_numeric_literal(10), "10")
eq_(RustGenerator._format_numeric_literal(100), "100")
eq_(RustGenerator._format_numeric_literal(1000), "1_000")
eq_(RustGenerator._format_numeric_literal(10000), "10_000")
eq_(RustGenerator._format_numeric_literal(100000), "100_000")
eq_(RustGenerator._format_numeric_literal(1000000), "1_000_000")
eq_(RustGenerator._format_numeric_literal(-1000000), "-1_000_000")
eq_(RustGenerator._format_numeric_literal(2147483647), "2_147_483_647")
eq_(RustGenerator._format_numeric_literal("hello"), "hello")
eq_(RustGenerator._format_numeric_literal("hello1234"), "hello1234")
eq_(RustGenerator._format_numeric_literal("1234hello"), "1234hello")
assert RustGenerator._format_numeric_literal(1) == "1"
assert RustGenerator._format_numeric_literal(123) == "123"
assert RustGenerator._format_numeric_literal(-123) == "-123"
assert RustGenerator._format_numeric_literal(1) == "1"
assert RustGenerator._format_numeric_literal(10) == "10"
assert RustGenerator._format_numeric_literal(100) == "100"
assert RustGenerator._format_numeric_literal(1000) == "1_000"
assert RustGenerator._format_numeric_literal(10000) == "10_000"
assert RustGenerator._format_numeric_literal(100000) == "100_000"
assert RustGenerator._format_numeric_literal(1000000) == "1_000_000"
assert RustGenerator._format_numeric_literal(-1000000) == "-1_000_000"
assert RustGenerator._format_numeric_literal(2147483647) == "2_147_483_647"
assert RustGenerator._format_numeric_literal("hello") == "hello"
assert RustGenerator._format_numeric_literal("hello1234") == "hello1234"
assert RustGenerator._format_numeric_literal("1234hello") == "1234hello"

def generate_and_compare(test_case):
with open(test_case[0], 'r') as test_file:
Expand All @@ -37,6 +37,12 @@ def generate_and_compare(test_case):

generate_and_assert_in(test, RustGenerator, *expectations)

def test_against_expectations():
def get_test_cases():
test_cases = []
for x in schemas_and_expectations(generator='rust', extension='rs'):
yield generate_and_compare, x
test_cases.append(x)
return test_cases

@pytest.mark.parametrize("test_case", get_test_cases())
def test_against_expectations(test_case):
generate_and_compare(test_case)
Loading