/*
* Copyright (C) 2010 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authored by
* Mikkel Kamstrup Erlandsen
* Neil Jagdish Patel
*
*/
#include
#include
#include
typedef struct
{
DeeModel *model;
} SeqnumFixture;
static void setup (SeqnumFixture *fix, gconstpointer data);
static void teardown (SeqnumFixture *fix, gconstpointer data);
static void proxy_setup (SeqnumFixture *fix, gconstpointer data);
static void proxy_teardown (SeqnumFixture *fix, gconstpointer data);
static void txn_setup (SeqnumFixture *fix, gconstpointer data);
static void txn_teardown (SeqnumFixture *fix, gconstpointer data);
static void test_getset_last (SeqnumFixture *fix, gconstpointer data);
static void test_auto_inc (SeqnumFixture *fix, gconstpointer data);
void
test_model_seqnums_create_suite (void)
{
#define SEQ_DOMAIN "/Model/Sequence/Seqnums"
#define PROXY_DOMAIN "/Model/Proxy/Seqnums"
#define TXN_DOMAIN "/Model/Transaction/Seqnums"
g_test_add (SEQ_DOMAIN"/GetSet", SeqnumFixture, 0,
setup, test_getset_last, teardown);
g_test_add (PROXY_DOMAIN"/GetSet", SeqnumFixture, 0,
proxy_setup, test_getset_last, proxy_teardown);
g_test_add (TXN_DOMAIN"/GetSet", SeqnumFixture, 0,
txn_setup, test_getset_last, txn_teardown);
g_test_add (SEQ_DOMAIN"/AutoInc", SeqnumFixture, 0,
setup, test_auto_inc, teardown);
g_test_add (PROXY_DOMAIN"/AutoInc", SeqnumFixture, 0,
proxy_setup, test_auto_inc, proxy_teardown);
g_test_add (TXN_DOMAIN"/AutoInc", SeqnumFixture, 0,
txn_setup, test_auto_inc, txn_teardown);
}
static void
setup (SeqnumFixture *fix, gconstpointer data)
{
fix->model = dee_sequence_model_new ();
dee_model_set_schema (fix->model, "i", NULL);
g_assert (DEE_IS_SEQUENCE_MODEL (fix->model));
g_assert_cmpint (1, ==, dee_model_get_n_columns (fix->model));
g_assert_cmpstr ("i", ==, dee_model_get_column_schema (fix->model, 0));
g_assert_cmpint (0, ==, dee_model_get_n_rows (fix->model));
}
static void
teardown (SeqnumFixture *fix, gconstpointer data)
{
g_object_unref (fix->model);
}
static void
proxy_setup (SeqnumFixture *fix, gconstpointer data)
{
setup (fix, data);
fix->model = g_object_new (DEE_TYPE_PROXY_MODEL,
"back-end", fix->model,
NULL);
g_assert (DEE_IS_PROXY_MODEL (fix->model));
}
static void
proxy_teardown (SeqnumFixture *fix, gconstpointer data)
{
g_assert (DEE_IS_PROXY_MODEL (fix->model));
g_object_unref (fix->model);
}
static void
txn_setup (SeqnumFixture *fix, gconstpointer data)
{
DeeModel *dum;
setup (fix, data);
dum = fix->model;
fix->model = dee_transaction_new (dum);
g_object_unref (dum);
g_assert (DEE_IS_TRANSACTION (fix->model));
}
static void
txn_teardown (SeqnumFixture *fix, gconstpointer data)
{
g_assert (DEE_IS_TRANSACTION (fix->model));
g_object_unref (fix->model);
}
static void
test_getset_last (SeqnumFixture *fix, gconstpointer data)
{
DeeModel *model = fix->model;
g_assert_cmpint (0, ==, dee_serializable_model_get_seqnum (model));
dee_serializable_model_set_seqnum (model, 68);
g_assert_cmpint (68, ==, dee_serializable_model_get_seqnum (model));
}
static void
test_auto_inc (SeqnumFixture *fix, gconstpointer data)
{
DeeModel *model = fix->model;
g_assert_cmpint (0, ==, dee_serializable_model_get_seqnum (model));
dee_model_append (fix->model, 9);
g_assert_cmpint (1, ==, dee_serializable_model_get_seqnum (model));
dee_model_set (fix->model, dee_model_get_first_iter (fix->model), 10);
g_assert_cmpint (2, ==, dee_serializable_model_get_seqnum (model));
dee_model_clear (fix->model);
g_assert_cmpint (3, ==, dee_serializable_model_get_seqnum (model));
dee_model_append (fix->model, 11);
dee_model_append (fix->model, 12);
dee_model_append (fix->model, 13);
g_assert_cmpint (6, ==, dee_serializable_model_get_seqnum (model));
dee_model_clear (fix->model);
g_assert_cmpint (9, ==, dee_serializable_model_get_seqnum (model));
}