| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #include <glib.h> |
| #include <string.h> |
| |
| #include <thrift/c_glib/thrift_application_exception.h> |
| |
| static void |
| test_create_and_destroy (void) |
| { |
| GObject *object = NULL; |
| |
| /* A ThriftApplicationException can be created... */ |
| object = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); |
| |
| g_assert (object != NULL); |
| g_assert (THRIFT_IS_APPLICATION_EXCEPTION (object)); |
| |
| /* ...and destroyed */ |
| g_object_unref (object); |
| } |
| |
| static void |
| test_initialize (void) |
| { |
| ThriftApplicationException *xception = NULL; |
| gint32 type = THRIFT_APPLICATION_EXCEPTION_ERROR_INTERNAL_ERROR; |
| gchar *message = "Exception message"; |
| gint32 retrieved_type = 0; |
| gchar *retrieved_message = NULL; |
| |
| /* A ThriftApplicationException has "type" and "message" properties that can |
| be initialized at object creation */ |
| xception = |
| g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, |
| "type", type, |
| "message", message, |
| NULL); |
| |
| g_assert (xception != NULL); |
| |
| /* A ThriftApplicationException's properties can be retrieved */ |
| g_object_get (xception, |
| "type", &retrieved_type, |
| "message", &retrieved_message, |
| NULL); |
| |
| g_assert (retrieved_type == type); |
| g_assert (retrieved_message != NULL); |
| g_assert_cmpstr (retrieved_message, ==, message); |
| |
| g_free (retrieved_message); |
| g_object_unref (xception); |
| } |
| |
| static void |
| test_properties_test (void) |
| { |
| ThriftApplicationException *xception = NULL; |
| gint32 retrieved_type; |
| |
| xception = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); |
| |
| #define TEST_TYPE_VALUE(_type) \ |
| retrieved_type = -1; \ |
| g_object_set (xception, "type", _type, NULL); \ |
| g_object_get (xception, "type", &retrieved_type, NULL); \ |
| g_assert_cmpint (retrieved_type, ==, _type); |
| |
| /* The "type" property can be set to any valid Thrift exception type */ |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN_METHOD); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_MESSAGE_TYPE); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_WRONG_METHOD_NAME); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_BAD_SEQUENCE_ID); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_MISSING_RESULT); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INTERNAL_ERROR); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_PROTOCOL_ERROR); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_TRANSFORM); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_PROTOCOL); |
| TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNSUPPORTED_CLIENT_TYPE); |
| |
| /* "g_test_expect_message" is required for the property range tests below but is |
| not present in GLib before version 2.34 */ |
| #if (GLIB_CHECK_VERSION (2, 34, 0)) |
| g_object_set (xception, |
| "type", THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN, |
| NULL); |
| |
| /* The "type" property cannot be set to a value too low (less than zero) */ |
| g_test_expect_message ("GLib-GObject", |
| G_LOG_LEVEL_WARNING, |
| "value*out of range*type*"); |
| g_object_set (xception, "type", -1, NULL); |
| g_test_assert_expected_messages (); |
| |
| g_object_get (xception, "type", &retrieved_type, NULL); |
| g_assert_cmpint (retrieved_type, !=, -1); |
| g_assert_cmpint (retrieved_type, |
| ==, |
| THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); |
| |
| /* The "type" property cannot be set to a value too high (greater than the |
| highest defined exception-type value) */ |
| g_test_expect_message ("GLib-GObject", |
| G_LOG_LEVEL_WARNING, |
| "value*out of range*type*"); |
| g_object_set (xception, "type", THRIFT_APPLICATION_EXCEPTION_ERROR_N, NULL); |
| g_test_assert_expected_messages (); |
| |
| g_object_get (xception, "type", &retrieved_type, NULL); |
| g_assert_cmpint (retrieved_type, !=, THRIFT_APPLICATION_EXCEPTION_ERROR_N); |
| g_assert_cmpint (retrieved_type, |
| ==, |
| THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); |
| #endif |
| |
| g_object_unref (xception); |
| } |
| |
| static void |
| test_properties_message (void) |
| { |
| ThriftApplicationException *xception = NULL; |
| gchar *message = "Exception message"; |
| gchar *retrieved_message; |
| |
| xception = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); |
| |
| /* The "message" property can be set to NULL */ |
| g_object_set (xception, "message", NULL, NULL); |
| g_object_get (xception, "message", &retrieved_message, NULL); |
| g_assert (retrieved_message == NULL); |
| |
| /* The "message" property can be set to a valid string */ |
| g_object_set (xception, "message", message, NULL); |
| g_object_get (xception, "message", &retrieved_message, NULL); |
| g_assert_cmpint (strcmp (retrieved_message, message), ==, 0); |
| |
| g_free (retrieved_message); |
| g_object_unref (xception); |
| } |
| |
| int |
| main (int argc, char **argv) |
| { |
| #if (!GLIB_CHECK_VERSION (2, 36, 0)) |
| g_type_init (); |
| #endif |
| |
| g_test_init (&argc, &argv, NULL); |
| |
| g_test_add_func ("/testapplicationexception/CreateAndDestroy", |
| test_create_and_destroy); |
| g_test_add_func ("/testapplicationexception/Initialize", |
| test_initialize); |
| g_test_add_func ("/testapplicationexception/Properties/test", |
| test_properties_test); |
| g_test_add_func ("/testapplicationexception/Properties/message", |
| test_properties_message); |
| |
| return g_test_run (); |
| } |