meson: Add test meson build

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I38eba97894865909d793ed38330c47acb2f81a8e
diff --git a/src/meson.build b/src/meson.build
index 54e39f9..6a03a3e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -59,3 +59,8 @@
     install: true,
     install_dir: get_option('bindir'),
 )
+
+build_tests = get_option('tests')
+if not build_tests.disabled()
+    subdir('test')
+endif
diff --git a/src/test/meson.build b/src/test/meson.build
new file mode 100644
index 0000000..40f8406
--- /dev/null
+++ b/src/test/meson.build
@@ -0,0 +1,283 @@
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+if not gtest_dep.found() or not gmock_dep.found()
+    gtest_proj = import('cmake').subproject('googletest', required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+    else
+        assert(
+            not get_option('tests').enabled(),
+            'Googletest is required if tests are enabled'
+        )
+    endif
+endif
+
+pathgentest_hpp = custom_target(
+    'pathgentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'pathgentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/pathgentest',
+        '-o', meson.current_build_dir() + '/pathgentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/pathgentest.mako.hpp',
+        'yaml/pathgentest/groupone.yaml',
+        'yaml/pathgentest/grouptwo.yaml',
+    ],
+    output: 'pathgentest.hpp',
+)
+
+pathgentest_sources = [
+    pathgentest_hpp,
+    'pathgentest.cpp',
+]
+
+test('pathgentest.cpp',
+  executable(
+    'pathgentest',
+    pathgentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+propertygentest_hpp = custom_target(
+    'propertygentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'propertygentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/propertygentest',
+        '-o', meson.current_build_dir() + '/propertygentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/propertygentest.mako.hpp',
+        'yaml/propertygentest/groupone.yaml',
+        'yaml/propertygentest/grouptwo.yaml',
+    ],
+    output: 'propertygentest.hpp',
+)
+
+propertygentest_sources = [
+    propertygentest_hpp,
+    'propertygentest.cpp',
+]
+
+test('propertygentest.cpp',
+  executable(
+    'propertygentest',
+    propertygentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+propertywatchgentest_hpp = custom_target(
+    'propertywatchgentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'propertywatchgentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/propertywatchgentest',
+        '-o', meson.current_build_dir() + '/propertywatchgentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/propertywatchgentest.mako.hpp',
+        'yaml/propertywatchgentest/watchone.yaml',
+        'yaml/propertywatchgentest/watchtwo.yaml',
+    ],
+    output: 'propertywatchgentest.hpp',
+)
+
+propertywatchgentest_sources = [
+    propertywatchgentest_hpp,
+    'propertywatchgentest.cpp',
+]
+
+test('propertywatchgentest.cpp',
+  executable(
+    'propertywatchgentest',
+    propertywatchgentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+callbackgentest_hpp = custom_target(
+    'callbackgentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'callbackgentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/callbackgentest',
+        '-o', meson.current_build_dir() + '/callbackgentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/callbackgentest.mako.hpp',
+        'yaml/callbackgentest/one.yaml',
+        'yaml/callbackgentest/two.yaml',
+    ],
+    output: 'callbackgentest.hpp',
+)
+
+callbackgentest_sources = [
+    callbackgentest_hpp,
+    'callbackgentest.cpp',
+]
+
+test('callbackgentest.cpp',
+  executable(
+    'callbackgentest',
+    callbackgentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+callbackgroupgentest_hpp = custom_target(
+    'callbackgroupgentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'callbackgroupgentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/callbackgroupgentest',
+        '-o', meson.current_build_dir() + '/callbackgroupgentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/callbackgroupgentest.mako.hpp',
+        'yaml/callbackgroupgentest/test.yaml',
+    ],
+    output: 'callbackgroupgentest.hpp',
+)
+
+callbackgroupgentest_sources = [
+    callbackgroupgentest_hpp,
+    'callbackgroupgentest.cpp',
+]
+
+test('callbackgroupgentest.cpp',
+  executable(
+    'callbackgroupgentest',
+    callbackgroupgentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+conditiongentest_hpp = custom_target(
+    'conditiongentest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'conditiongentest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/conditiongentest',
+        '-o', meson.current_build_dir() + '/conditiongentest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/conditiongentest.mako.hpp',
+        'yaml/conditiongentest/test.yaml',
+    ],
+    output: 'conditiongentest.hpp',
+)
+
+conditiongentest_sources = [
+    conditiongentest_hpp,
+    'conditiongentest.cpp',
+]
+
+test('conditiongentest.cpp',
+  executable(
+    'conditiongentest',
+    conditiongentest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))
+
+
+callbacktest_sources = [
+    generated_hpp,
+    'callbacktest.cpp',
+    '../journal.cpp',
+    '../elog.cpp',
+    '../resolve_errors.cpp',
+    '../event_manager.cpp',
+    '../event_serialize.cpp',
+]
+
+callbacktest_deps = [
+    sdbusplus_dep,
+    sdeventplus_dep,
+    phosphor_dbus_interfaces_dep,
+    phosphor_logging_dep,
+    gtest_dep,
+    gmock_dep,
+]
+
+test('callbacktest.cpp',
+  executable(
+    'callbacktest',
+    callbacktest_sources,
+    build_by_default: false,
+    include_directories: ['..', '../../'],
+    dependencies: callbacktest_deps,
+  ))
+
+
+interfaceaddtest_hpp = custom_target(
+    'interfaceaddtest.hpp',
+    command: [
+        prog_python,
+        meson.project_source_root() + '/src/pdmgen.py',
+        '-t', 'interfaceaddtest.mako.hpp',
+        '-p', meson.project_source_root() + '/src/test/templates',
+        '-d', meson.project_source_root() + '/src/test/yaml/interfaceaddtest',
+        '-o', meson.current_build_dir() + '/interfaceaddtest.hpp',
+        'generate-cpp'
+    ],
+    input: [
+        'templates/interfaceaddtest.mako.hpp',
+        'yaml/interfaceaddtest/one.yaml',
+    ],
+    output: 'interfaceaddtest.hpp',
+)
+
+interfaceaddtest_sources = [
+    interfaceaddtest_hpp,
+    'interfaceaddtest.cpp',
+]
+
+test('interfaceaddtest.cpp',
+  executable(
+    'interfaceaddtest',
+    interfaceaddtest_sources,
+    build_by_default: false,
+    include_directories: ['..'],
+    dependencies: [gtest_dep, gmock_dep]
+  ))