have_registry = not get_option('disable_registry')
have_debug = true # FIXME
have_parse = true # FIXME

# tests and condition when to skip the test
core_tests = [
  [ 'gst/gst.c', not have_registry ],
  [ 'gst/gstabi.c', not have_registry ],
  [ 'gst/gstatomicqueue.c' ],
  [ 'gst/gstbuffer.c' ],
  [ 'gst/gstbufferlist.c' ],
  [ 'gst/gstbufferpool.c' ],
  [ 'gst/gstchildproxy.c', not have_registry ],
  [ 'gst/gstclock.c' ],
  [ 'gst/gstcontext.c' ],
  [ 'gst/gstcontroller.c' ],
  [ 'gst/gstcaps.c' ],
  [ 'gst/gstcapsfeatures.c' ],
  [ 'gst/gstdatetime.c' ],
  [ 'gst/gstdeinit.c' ],
  [ 'gst/gstdevice.c' ],
  [ 'gst/gstelement.c', not have_registry ],
  [ 'gst/gstelementfactory.c', not have_registry ],
  [ 'gst/gstghostpad.c', not have_registry ],
  [ 'gst/gstinfo.c' ],
  [ 'gst/gstiterator.c' ],
  [ 'gst/gstmessage.c' ],
  [ 'gst/gstmemory.c' ],
  [ 'gst/gstmeta.c' ],
  [ 'gst/gstminiobject.c' ],
  [ 'gst/gstobject.c' ],
  [ 'gst/gstpad.c', not have_registry ],
  [ 'gst/gstparamspecs.c' ],
  [ 'gst/gstprintf.c', disable_gst_debug, printf_lib],
  [ 'gst/gstpipeline.c', not have_registry ],
  [ 'gst/gstpoll.c' ],
  [ 'gst/gstplugin.c', not have_registry ],
  [ 'gst/gstpreset.c' ],
  [ 'gst/gstprotection.c' ],
  [ 'gst/gstquery.c', not have_registry ],
  [ 'gst/gstregistry.c', not have_registry ],
  [ 'gst/gstpromise.c'],
  [ 'gst/gstsegment.c' ],
  [ 'gst/gststream.c' ],
  [ 'gst/gststructure.c' ],
  [ 'gst/gstsystemclock.c' ],
  [ 'gst/gsttag.c' ],
  [ 'gst/gsttagsetter.c' ],
  [ 'gst/gsttask.c' ],
  [ 'gst/gsttoc.c' ],
  [ 'gst/gsttocsetter.c' ],
  [ 'gst/gsttracerrecord.c', disable_tracer_hooks or disable_gst_debug],
  [ 'gst/gsturi.c' ],
  [ 'gst/gstutils.c', not have_registry ],
  [ 'gst/gstvalue.c' ],
  [ 'generic/states.c', not have_registry ],
  [ 'libs/adapter.c' ],
  [ 'libs/aggregator.c' ],
  [ 'libs/baseparse.c' ],
  [ 'libs/basesrc.c', not have_registry ],
  [ 'libs/basesink.c', not have_registry ],
  [ 'libs/bitreader.c' ],
  [ 'libs/bytereader.c' ],
  [ 'libs/bytewriter.c' ],
  [ 'libs/bitreader-noinline.c' ],
  [ 'libs/bytereader-noinline.c' ],
  [ 'libs/bytewriter-noinline.c' ],
  [ 'libs/collectpads.c', not have_registry ],
  [ 'libs/controller.c' ],
  [ 'libs/flowcombiner.c' ],
  [ 'libs/gstharness.c' ],
  [ 'libs/gstnetclientclock.c' ],
  [ 'libs/gstnettimeprovider.c' ],
  [ 'libs/gsttestclock.c' ],
  [ 'libs/libsabi.c' ],
  [ 'libs/sparsefile.c' ],
  [ 'libs/transform1.c' ],
  [ 'libs/transform2.c' ],
  [ 'libs/typefindhelper.c' ],
  [ 'libs/queuearray.c' ],
  [ 'elements/capsfilter.c', not have_registry ],
  [ 'elements/concat.c', not have_registry ],
  [ 'elements/dataurisrc.c', not have_registry ],
  [ 'elements/fakesrc.c', not have_registry ],
  [ 'elements/fdsrc.c', not have_registry ],
  [ 'elements/filesink.c', not have_registry ],
  [ 'elements/filesrc.c', not have_registry ],
  [ 'elements/funnel.c', not have_registry ],
  [ 'elements/identity.c', not have_registry ],
  [ 'elements/multiqueue.c', not have_registry ],
  [ 'elements/selector.c', not have_registry ],
  [ 'elements/streamiddemux.c', not have_registry ],
  [ 'elements/tee.c', not have_registry ],
  [ 'elements/queue.c', not have_registry ],
  [ 'elements/queue2.c', not have_registry ],
  [ 'elements/valve.c', not have_registry ],
  [ 'pipelines/seek.c', not have_registry ],
  [ 'pipelines/queue-error.c', not have_registry ],
  [ 'pipelines/parse-disabled.c', have_parse ],
  [ 'pipelines/simple-launch-lines.c', not have_parse ],
  [ 'pipelines/parse-launch.c', not have_parse ],
  [ 'pipelines/cleanup.c', not have_parse ],
  [ 'tools/gstinspect.c' ],
  # These take quite long, put them at the end
  [ 'elements/fakesink.c', not have_registry ],
  [ 'gst/gstbin.c', not have_registry ],
  [ 'gst/gstbus.c', not have_registry ],
  [ 'gst/gstevent.c', not have_registry ],
  [ 'pipelines/stress.c', not have_registry ],
  [ 'generic/sinks.c', not have_registry ],
]

# Make sure our headers are C++ clean
if add_languages('cpp', required : false)
  core_tests += [
    [ 'gst/gstcpp.cc', not have_registry ],
    [ 'libs/gstlibscpp.cc', false ],
  ]
endif

test_defines = [
  '-UG_DISABLE_ASSERT',
  '-UG_DISABLE_CAST_CHECKS',
  '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"',
  '-DTESTFILE="' + meson.current_source_dir() + '/meson.build"',
  '-DGST_USE_UNSTABLE_API',
  '-DGST_DISABLE_DEPRECATED',
]

glib_deps = [gio_dep, gobject_dep, gmodule_dep, glib_dep]
gst_deps = [gst_dep, gst_base_dep, gst_check_dep, gst_net_dep, gst_controller_dep]

foreach t : core_tests
  fname = t[0]
  test_name = fname.split('.')[0].underscorify()
  skip_test = t.get(1, false)
  link_with_libs = t.get(2, [])

  if not skip_test
    exe = executable(test_name, fname,
        c_args : gst_c_args + test_defines,
        cpp_args : gst_c_args + test_defines,
        include_directories : [configinc],
        link_with : link_with_libs,
        dependencies : test_deps + glib_deps + gst_deps,
    )

    env = environment()
    env.set('GST_PLUGIN_PATH_1_0', meson.build_root())
    env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
    env.set('GST_STATE_IGNORE_ELEMENTS', '')
    env.set('CK_DEFAULT_TIMEOUT', '20')
    env.set('GST_REGISTRY', '@0@/@1@.registry'.format(meson.current_build_dir(), test_name))
    env.set('GST_PLUGIN_SCANNER_1_0', gst_scanner_dir + '/gst-plugin-scanner')
    env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer')

    test(test_name, exe, env: env, timeout : 3 * 60)
  endif
endforeach
