if get_option('tests')

test_env = [
  'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
  'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
  'G_DEBUG=gc-friendly,fatal-warnings',
  'GSETTINGS_BACKEND=memory',
  'MALLOC_CHECK_=2'
]

test_cflags = [
  '-I@0@/../src'.format(meson.current_source_dir()),
  '-I@0@/../src'.format(meson.current_build_dir()),
  '-DEEK_COMPILATION',
  '-DEEKBOARD_COMPILATION'
]

test_link_args = [
  '-fPIC',
]

c_tests = [
]

foreach name : c_tests

    test_sources = [name + '.c']

    t = executable(
        name,
        test_sources,
        squeekboard_resources,
        link_with: libsqueekboard,
        c_args : test_cflags,
        link_args: test_link_args,
        dependencies: deps,       # from src/meson.build
        include_directories: [
            include_directories('..'),
            include_directories('../eek')
        ]
    )

    test(name, t, env: test_env)

endforeach

# The layout test is in the examples directory
# due to the way Cargo builds executables
# and the need to call it manually.

# This is the list of tested builtin layouts.
# Please keep each block alphabetical!
# Please keep shapes (with _) on the same line,
# variants (with +) on separate lines.
foreach layout : [
    # This is the fallback layout,
    # so stays first to make sure it never goes missing.
    'us', 'us_wide',

    # Block: Languages
    'am', 'am+phonetic',
    'ara', 'ara_wide',
    'be', 'be_wide',
    'bg',
    'bg+phonetic',
    'br',
    'ch+fr',
    'ch+de',
    'ch', 'ch_wide',
    'cz', 'cz_wide',
    'cz+qwerty', 'cz+qwerty_wide',
    'de', 'de_wide',
    'dk',
    'epo',
    'es',
    'es+cat',
    'fi',
    'fr', 'fr_wide',
    'ge',
    'gr', 'gr_wide',
    'gr+polytonic',
    'fr+bepo', 'fr+bepo_wide',
    'hu', 'hu_wide',
    'il',
    'ir',
    'it',
    'it+fur',
    'jp+kana','jp+kana_wide',
    'no',
    'pl', 'pl_wide',
    'ro', 'ro_wide',
    'ru',
    'se', 'se_wide',
    'th', 'th_wide',
    'ua',
    'us+colemak', 'us+colemak_wide',
    'us+dvorak', 'us+dvorak_wide',

    # Terminal keyboards
    'terminal/fr', 
    'terminal/fr_wide', 
    'terminal/us',
    'terminal/us_wide',
    'terminal/us+dvorak',
    'terminal/us+dvorak_wide',
    
    # Block: Not languages.
    'emoji/us',
    'number/us',
    'pin/us',
]
    extra = []
    if layout.startswith('emoji/')
        extra += ['allow_missing_return']
    endif
    
    timeout = 30

    test(
        'test_layout_' + layout,
        cargo_script,
        args: ['run'] + cargo_build_flags
            + ['--example', 'test_layout', '--', layout]
            + extra,
        timeout: timeout,
        workdir: meson.build_root(),
    )
endforeach

endif

if get_option('find_orphans')
    test('test_find_orphans',
        cargo_script,
        args: ['run'] + cargo_build_flags
            + ['--example', 'find_orphan_layouts',
                '--', meson.source_root() + '/data/keyboards/'],
        timeout: timeout,
        workdir: meson.build_root(),
    )
endif
