/*
 * Copyright 2023 GNOME Foundation, Inc.
 * Copyright 2024 Philip Chimento <philip.chimento@gmail.com>
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 */

#include "config.h"

#include "girepository.h"
#include "glib.h"
#include "test-common.h"

void
repository_init (int *argc,
                 char **argv[])
{
  /* Isolate from the system typelibs and GIRs. */
  g_setenv ("GI_TYPELIB_PATH", "/dev/null", TRUE);
  g_setenv ("GI_GIR_PATH", "/dev/null", TRUE);

  g_test_init (argc, argv, G_TEST_OPTION_ISOLATE_DIRS, NULL);
}

void
repository_setup (RepositoryFixture *fx,
                  const void *data)
{
  GITypelib *typelib = NULL;
  GError *local_error = NULL;
  TypelibLoadSpec *load_spec = (TypelibLoadSpec *) data;

  fx->repository = gi_repository_new ();
  g_assert_nonnull (fx->repository);

  fx->gobject_typelib_dir = g_test_build_filename (G_TEST_BUILT, "..", "introspection", NULL);
  g_test_message ("Using GI_TYPELIB_DIR = %s", fx->gobject_typelib_dir);
  gi_repository_prepend_search_path (fx->repository, fx->gobject_typelib_dir);

  if (load_spec)
    {
      typelib = gi_repository_require (fx->repository, load_spec->name, load_spec->version, 0, &local_error);
      g_assert_no_error (local_error);
      g_assert_nonnull (typelib);
    }
}

void
repository_teardown (RepositoryFixture *fx,
                     const void *unused)
{
  g_clear_pointer (&fx->gobject_typelib_dir, g_free);
  g_clear_object (&fx->repository);
}