t-exc.c revision 90792
1492SN/A/* 21345Sihse * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. 3492SN/A * All rights reserved. 4492SN/A * 5492SN/A * By using this file, you agree to the terms and conditions set 6492SN/A * forth in the LICENSE file which can be found at the top level of 7492SN/A * the sendmail distribution. 8492SN/A */ 9492SN/A 10492SN/A#include <sm/gen.h> 11492SN/ASM_IDSTR(id, "@(#)$Id: t-exc.c,v 1.20 2001/09/11 04:04:49 gshapiro Exp $") 12492SN/A 13492SN/A#include <string.h> 14492SN/A#include <sm/heap.h> 15492SN/A#include <sm/io.h> 16492SN/A#include <sm/test.h> 17492SN/A 18492SN/Aconst SM_EXC_TYPE_T EtypeTest1 = 19492SN/A{ 20492SN/A SmExcTypeMagic, 21492SN/A "E:test1", 22492SN/A "i", 23492SN/A sm_etype_printf, 24492SN/A "test1 exception argv[0]=%0", 25492SN/A}; 261120Schegar 271120Schegarconst SM_EXC_TYPE_T EtypeTest2 = 281120Schegar{ 291410Sihse SmExcTypeMagic, 301120Schegar "E:test2", 311120Schegar "i", 321120Schegar sm_etype_printf, 33492SN/A "test2 exception argv[0]=%0", 341410Sihse}; 351410Sihse 361410Sihseint 371410Sihsemain(argc, argv) 38492SN/A int argc; 39492SN/A char **argv; 40492SN/A{ 411410Sihse void *p; 421120Schegar int volatile x; 43837SN/A char *unknown, *cant; 44910Sihse 451131Serikj sm_test_begin(argc, argv, "test exception handling"); 46492SN/A 471120Schegar /* 481236Sihse ** SM_TRY 491120Schegar */ 501120Schegar 511120Schegar cant = "can't happen"; 52968Sihse x = 0; 53968Sihse SM_TRY 54492SN/A x = 1; 551120Schegar SM_END_TRY 561120Schegar SM_TEST(x == 1); 571120Schegar 581120Schegar /* 591120Schegar ** SM_FINALLY-0 601120Schegar */ 611120Schegar 621120Schegar x = 0; 631120Schegar SM_TRY 641120Schegar x = 1; 651120Schegar SM_FINALLY 661120Schegar x = 2; 671120Schegar SM_END_TRY 681120Schegar SM_TEST(x == 2); 691223Schegar 701223Schegar /* 711223Schegar ** SM_FINALLY-1 721120Schegar */ 731120Schegar 741120Schegar x = 0; 751120Schegar SM_TRY 761120Schegar SM_TRY 771120Schegar x = 1; 781600Snaoto sm_exc_raisenew_x(&EtypeTest1, 17); 791600Snaoto SM_FINALLY 801600Snaoto x = 2; 811223Schegar sm_exc_raisenew_x(&EtypeTest2, 42); 821120Schegar SM_END_TRY 831120Schegar SM_EXCEPT(exc, "E:test2") 841659Serikj (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, 851600Snaoto "got exception test2: can't happen\n"); 861120Schegar SM_EXCEPT(exc, "E:test1") 871120Schegar SM_TEST(x == 2 && exc->exc_argv[0].v_int == 17); 881120Schegar if (!(x == 2 && exc->exc_argv[0].v_int == 17)) 891120Schegar { 901120Schegar (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, 911120Schegar "can't happen: x=%d argv[0]=%d\n", 92492SN/A x, exc->exc_argv[0].v_int); 931120Schegar } 941120Schegar SM_EXCEPT(exc, "*") 951120Schegar { 961735Sbobv unknown = "unknown exception: "; 971735Sbobv SM_TEST(strcmp(unknown, cant) == 0); 981735Sbobv } 991735Sbobv SM_END_TRY 100492SN/A 1011120Schegar x = 3; 1021120Schegar SM_TRY 1031223Schegar x = 4; 1041223Schegar sm_exc_raisenew_x(&EtypeTest1, 94); 1051223Schegar SM_FINALLY 1061223Schegar x = 5; 1071223Schegar sm_exc_raisenew_x(&EtypeTest2, 95); 1081223Schegar SM_EXCEPT(exc, "E:test2") 109492SN/A { 1101223Schegar unknown = "got exception test2: "; 1111223Schegar SM_TEST(strcmp(unknown, cant) == 0); 1121223Schegar } 1131695Stwisti SM_EXCEPT(exc, "E:test1") 114557SN/A SM_TEST(x == 5 && exc->exc_argv[0].v_int == 94); 1151120Schegar if (!(x == 5 && exc->exc_argv[0].v_int == 94)) 1161120Schegar { 1171120Schegar (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, 1181120Schegar "can't happen: x=%d argv[0]=%d\n", 1191223Schegar x, exc->exc_argv[0].v_int); 1201223Schegar } 1211223Schegar SM_EXCEPT(exc, "*") 1221223Schegar { 1231223Schegar unknown = "unknown exception: "; 1241223Schegar SM_TEST(strcmp(unknown, cant) == 0); 1251120Schegar } 1261120Schegar SM_END_TRY 1271120Schegar 1281120Schegar SM_TRY 1291120Schegar sm_exc_raisenew_x(&SmEtypeErr, "test %d", 0); 1301223Schegar SM_EXCEPT(exc, "*") 1311223Schegar#if DEBUG 1321223Schegar (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, 1331223Schegar "test 0 got an exception, as expected:\n"); 1341223Schegar sm_exc_print(exc, smioout); 1351695Stwisti#endif /* DEBUG */ 1361695Stwisti return sm_test_end(); 1371120Schegar SM_END_TRY 1381120Schegar 139607SN/A p = sm_malloc_x((size_t)(-1)); 1401120Schegar (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, 1411120Schegar "sm_malloc_x unexpectedly succeeded, returning %p\n", p); 1421120Schegar unknown = "sm_malloc_x unexpectedly succeeded"; 1431120Schegar SM_TEST(strcmp(unknown, cant) == 0); 144492SN/A return sm_test_end(); 1451120Schegar} 1461120Schegar