diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4971e43..b34ab59 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run Diff Tests run: | @@ -20,3 +20,14 @@ jobs: cd ../examples ./cpptest.sh git diff --exit-code + + build-meson: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - uses: BSFishy/meson-build@v1.0.3 + with: + action: test + meson-version: 1.4.1 diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 0000000..66baaf3 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,11 @@ +runtest = files(join_paths(meson.project_source_root(), 'tests', 'runtest.sh')) + +tests = { + 'INIReaderExample': { 'args': [] }, +} + +foreach name, properties : tests + test_src = 'src' in properties ? properties['src'] : 'INIReaderExample.cpp' + exe = executable('unittest_' + name, src_inih, src_INIReader, test_src, cpp_args : ['-Wall', properties['args']]) + test('test_' + name, runtest, depends : [exe], args : [files('cpptest.txt'), exe.full_path()]) +endforeach diff --git a/meson.build b/meson.build index d440cbc..4e4fe4b 100644 --- a/meson.build +++ b/meson.build @@ -2,7 +2,8 @@ project('inih', ['c'], license : 'BSD-3-Clause', version : '58', - default_options : ['cpp_std=c++11'] + default_options : ['cpp_std=c++11'], + meson_version: '>=0.56.0' ) #### options #### @@ -71,8 +72,10 @@ endif #### inih #### inc_inih = include_directories('.') +src_inih = files('ini.c') + lib_inih = library('inih', - ['ini.c'], + [src_inih], include_directories : inc_inih, c_args : [arg_static, extra_args], install : distro_install, @@ -96,13 +99,17 @@ inih_dep = declare_dependency( include_directories : inc_inih ) +subdir('tests') + #### INIReader #### if get_option('with_INIReader') add_languages('cpp') inc_INIReader = include_directories('cpp') + src_INIReader = files(join_paths('cpp', 'INIReader.cpp')) + lib_INIReader = library('INIReader', - ['cpp/INIReader.cpp'], + src_INIReader, cpp_args : extra_args, include_directories : inc_INIReader, dependencies : inih_dep, @@ -126,4 +133,6 @@ if get_option('with_INIReader') include_directories : inc_INIReader, compile_args : extra_args ) + + subdir('examples') endif diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 0000000..d0a2c52 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,25 @@ +runtest = files(join_paths(meson.project_source_root(), 'tests', 'runtest.sh')) + +tests = { + 'multi': { 'args': [] }, + 'multi_max_line': { 'args': ['-DINI_MAX_LINE=20'] }, + 'single': { 'args': ['-DINI_ALLOW_MULTILINE=0'] }, + 'disallow_inline_comments': { 'args': ['-DINI_ALLOW_INLINE_COMMENTS=0'] }, + 'stop_on_first_error': { 'args': ['-DINI_STOP_ON_FIRST_ERROR=1'] }, + 'handler_lineno': { 'args': ['-DINI_HANDLER_LINENO=1'] }, + 'string': { 'src': 'unittest_string.c', 'args': ['-DINI_MAX_LINE=20'] }, + 'heap': { 'args': ['-DINI_USE_STACK=0'] }, + 'heap_max_line': { 'args': ['-DINI_USE_STACK=0', '-DINI_MAX_LINE=20', '-DINI_INITIAL_ALLOC=20'] }, + 'heap_realloc': { 'args': ['-DINI_USE_STACK=0', '-DINI_ALLOW_REALLOC=1', '-DINI_INITIAL_ALLOC=5'] }, + 'heap_realloc_max_line': { 'args': ['-DINI_USE_STACK=0', '-DINI_MAX_LINE=20', '-DINI_ALLOW_REALLOC=1', '-DINI_INITIAL_ALLOC=5'] }, + 'heap_string': { 'src': 'unittest_string.c', 'args': ['-DINI_USE_STACK=0', '-DINI_MAX_LINE=20', '-DINI_INITIAL_ALLOC=20'] }, + 'call_handler_on_new_section': { 'args': ['-DINI_CALL_HANDLER_ON_NEW_SECTION=1'] }, + 'allow_no_value': { 'args': ['-DINI_ALLOW_NO_VALUE=1'] }, + 'alloc': { 'src': 'unittest_alloc.c', 'args': ['-DINI_CUSTOM_ALLOCATOR=1', '-DINI_USE_STACK=0', '-DINI_ALLOW_REALLOC=1', '-DINI_INITIAL_ALLOC=12'] } +} + +foreach name, properties : tests + test_src = 'src' in properties ? properties['src'] : 'unittest.c' + exe = executable('unittest_' + name, src_inih, test_src, c_args : ['-Wall', properties['args']]) + test('test_' + name, runtest, depends : [exe], args : [files('baseline_' + name + '.txt'), exe.full_path()]) +endforeach diff --git a/tests/runtest.sh b/tests/runtest.sh new file mode 100755 index 0000000..9db945b --- /dev/null +++ b/tests/runtest.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -euo pipefail + +cd "$(dirname "${1}")" +diff "${1}" <("${2}")