summaryrefslogblamecommitdiff
path: root/system/inih/testrun.patch
blob: 9877127736e4962867c528518a34b21ef930d6fd (plain) (tree)
























































































































































































                                                                                                                                                       
From 59461b32ee99e1573ecee98c1122815187ef6e82 Mon Sep 17 00:00:00 2001
From: matoro <matoro@users.noreply.github.com>
Date: Tue, 7 May 2024 15:41:36 -0400
Subject: [PATCH] Add meson support for tests

Allows tests to use "meson test" instead of a shell script.  This also
means that they now fully respect user-specified toolchain (e.g. clang
compiler, custom CFLAGS, etc).  Running C++ test is conditional on
enabling INIReader support in the build.

```
 1/16 test_multi                               OK              0.05s
 2/16 test_multi_max_line                      OK              0.04s
 3/16 test_single                              OK              0.04s
 4/16 test_disallow_inline_comments            OK              0.03s
 5/16 test_stop_on_first_error                 OK              0.03s
 6/16 test_handler_lineno                      OK              0.02s
 7/16 test_heap                                OK              0.06s
 8/16 test_string                              OK              0.06s
 9/16 test_heap_max_line                       OK              0.05s
10/16 test_heap_realloc                        OK              0.05s
11/16 test_heap_realloc_max_line               OK              0.05s
12/16 test_heap_string                         OK              0.04s
13/16 test_call_handler_on_new_section         OK              0.04s
14/16 test_allow_no_value                      OK              0.03s
15/16 test_alloc                               OK              0.02s
16/16 test_INIReaderExample                    OK              0.02s

Ok:                 16
Expected Fail:      0
Fail:               0
Unexpected Pass:    0
Skipped:            0
Timeout:            0
```
---
 .github/workflows/tests.yml | 13 ++++++++++++-
 examples/meson.build        | 10 ++++++++++
 meson.build                 | 15 ++++++++++++---
 tests/meson.build           | 25 +++++++++++++++++++++++++
 tests/runtest.sh            |  6 ++++++
 5 files changed, 65 insertions(+), 4 deletions(-)
 create mode 100644 examples/meson.build
 create mode 100644 tests/meson.build
 create mode 100755 tests/runtest.sh

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..bb1979e
--- /dev/null
+++ b/examples/meson.build
@@ -0,0 +1,10 @@
+runtest = files(join_paths(meson.project_source_root(), 'tests', 'runtest.sh'))
+
+tests = {
+  'INIReaderExample': { 'args': [] },
+}
+
+foreach name, properties : tests
+  exe = executable('unittest_' + name, src_inih, src_INIReader, 'INIReaderExample.cpp', 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}")