summaryrefslogtreecommitdiff
path: root/tests/conform/test-conform-common.c
blob: e7cd42bc4a516905cd30fa7de76a88fa86faaa9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "config.h"

#include <clutter/clutter.h>
#include <stdlib.h>

#ifdef CLUTTER_WINDOWING_X11
#include <X11/Xlib.h>
#include <clutter/x11/clutter-x11.h>
#endif

#include "test-conform-common.h"

/**
 * test_conform_simple_fixture_setup:
 *
 * Initialise stuff before each test is run
 */
void
test_conform_simple_fixture_setup (TestConformSimpleFixture *fixture,
				   gconstpointer data)
{
  const TestConformSharedState *shared_state = data;
  static int counter = 0;

  if (counter != 0)
    g_critical ("We don't support running more than one test at a time\n"
                "in a single test run due to the state leakage that often\n"
                "causes subsequent tests to fail.\n"
                "\n"
                "If you want to run all the tests you should run\n"
                "$ make test-report");
  counter++;

#ifdef HAVE_CLUTTER_GLX
  {
    /* on X11 we need a display connection to run the test suite */
    const gchar *display = g_getenv ("DISPLAY");
    if (!display || *display == '\0')
      {
        g_print ("No DISPLAY found. Unable to run the conformance "
                 "test suite without a display.\n");

        exit (EXIT_SUCCESS);
      }
  }
#endif

  g_assert (clutter_init (shared_state->argc_addr, shared_state->argv_addr)
            == CLUTTER_INIT_SUCCESS);

#ifdef CLUTTER_WINDOWING_X11
  /* A lot of the tests depend on a specific stage / framebuffer size
   * when they read pixels back to verify the results of the test.
   *
   * Normally the asynchronous nature of X means that setting the
   * clutter stage size may really happen an indefinite amount of time
   * later but since the tests are so short lived and may only render
   * a single frame this is not an acceptable semantic.
   */
  XSynchronize (clutter_x11_get_default_display(), TRUE);
#endif
}


/**
 * test_conform_simple_fixture_teardown:
 *
 * Cleanup stuff after each test has finished
 */
void
test_conform_simple_fixture_teardown (TestConformSimpleFixture *fixture,
				      gconstpointer data)
{
  /* const TestConformSharedState *shared_state = data; */
}

void
test_conform_get_gl_functions (TestConformGLFunctions *functions)
{
  functions->glGetString = (void *) cogl_get_proc_address ("glGetString");
  g_assert (functions->glGetString != NULL);
  functions->glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
  g_assert (functions->glGetIntegerv != NULL);
  functions->glPixelStorei = (void *) cogl_get_proc_address ("glPixelStorei");
  g_assert (functions->glPixelStorei != NULL);
  functions->glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
  g_assert (functions->glBindTexture != NULL);
  functions->glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
  g_assert (functions->glGenTextures != NULL);
  functions->glGetError = (void *) cogl_get_proc_address ("glGetError");
  g_assert (functions->glGetError != NULL);
  functions->glDeleteTextures =
    (void *) cogl_get_proc_address ("glDeleteTextures");
  g_assert (functions->glDeleteTextures != NULL);
  functions->glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
  g_assert (functions->glTexImage2D != NULL);
  functions->glTexParameteri =
    (void *) cogl_get_proc_address ("glTexParameteri");
  g_assert (functions->glTexParameteri != NULL);
}