// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:ffigen/src/header_parser.dart';
import 'package:logging/logging.dart';
import 'package:yaml/yaml.dart';
import 'package:ffigen/src/config_provider/config.dart';
import 'package:ffigen/src/strings.dart' as strings;
import 'package:test/test.dart';

import '../test_utils.dart';

void main() {
  group('example_test', () {
    setUpAll(() {
      logWarnings(Level.SEVERE);
    });
    test('libclang-example', () {
      final config = Config.fromYaml(loadYaml('''
${strings.output}: 'generated_bindings.dart'
${strings.sort}: true
${strings.headers}:
  ${strings.entryPoints}:
    - third_party/libclang/include/clang-c/Index.h
  ${strings.include}-directives:
    - '**CXString.h'
    - '**Index.h'

${strings.compilerOpts}: '-I/usr/lib/llvm-9/include/ -I/usr/lib/llvm-10/include/ -IC:\Progra~1\LLVM\include -I/usr/local/opt/llvm/include/ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ -Wno-nullability-completeness'
${strings.functions}:
  ${strings.include}:
    ${strings.matches}:
      - 'clang_.*'
${strings.structs}:
  ${strings.include}:
      ${strings.matches}:
        - 'CX.*'
${strings.enums}:
  ${strings.include}:
    ${strings.names}:
      - 'CXTypeKind'
      - 'CXGlobalOptFlags'

${strings.name}: 'LibClang'
${strings.description}: 'Holds bindings to LibClang.'
${strings.arrayWorkaround}: true
${strings.preamble}: |
  /// AUTO GENERATED FILE, DO NOT EDIT.
  ///
  /// Generated by `package:ffigen`.
${strings.comments}:
  ${strings.style}: ${strings.doxygen}
  ${strings.length}: ${strings.full}
''') as YamlMap);
      final library = parse(config);

      matchLibraryWithExpected(
        library,
        ['test', 'debug_generated', 'libclang-example.dart'],
        ['example', 'libclang-example', config.output],
      );
    });
  });
}
