diff packages/infra/current/include/testcase.h @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents 3111d98ba7b3
children c38311975d4f
line wrap: on
line diff
--- a/packages/infra/current/include/testcase.h
+++ b/packages/infra/current/include/testcase.h
@@ -24,16 +24,16 @@
 // September 30, 1998.
 // 
 // The Initial Developer of the Original Code is Cygnus.  Portions created
-// by Cygnus are Copyright (C) 1998 Cygnus Solutions.  All Rights Reserved.
+// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.
 // -------------------------------------------
 //
 //####COPYRIGHTEND####
 //==========================================================================
 //#####DESCRIPTIONBEGIN####
 //
-// Author(s):     ctarpy
-// Contributors:    ctarpy
-// Date:          1998/16/3
+// Author(s):       ctarpy
+// Contributors:    ctarpy, jlarmour
+// Date:            1999-02-16
 //
 //
 //####DESCRIPTIONEND####
@@ -41,13 +41,24 @@
 #include <cyg/infra/cyg_type.h> // Common type definitions and support
 
 
-// The values of status have the following meaning:
-// 0 fail
-// 1 pass
-// 2 exit
-// 3 info
+// CONSTANTS
+
+// Status codes
+
+typedef enum {
+    CYGNUM_TEST_FAIL,
+    CYGNUM_TEST_PASS,
+    CYGNUM_TEST_EXIT,
+    CYGNUM_TEST_INFO,
+    CYGNUM_TEST_GDBCMD,
+    CYGNUM_TEST_NA
+} Cyg_test_code;
+
+// FUNCTION PROTOTYPES
+
 externC void
-cyg_test_output(int status, char* msg, int line_number, char* file);
+cyg_test_output(Cyg_test_code _status_, const char* _msg_, int _line_number_,
+                const char* _file_);
 
 // This should be called at the start of each test file
 externC void
@@ -55,8 +66,13 @@ cyg_test_init(void);
 
 // This causes the test to exit
 externC void
-cyg_test_exit(void) __attribute__ ((__noreturn__));
+cyg_test_exit(void) CYGBLD_ATTRIB_NORET;
+
+// GLOBALS
 
+externC int cyg_test_is_simulator;    // infrastructure changes as necessary
+
+// MACROS
 
 // ----------- Info -----------
 //
@@ -82,62 +98,89 @@ cyg_test_exit(void) __attribute__ ((__no
 #define CYG_TEST_INIT() cyg_test_init()
 
 #define CYG_TEST_INFO( _msg_ ) \
- cyg_test_output(3, _msg_, __LINE__, __FILE__)
+ cyg_test_output(CYGNUM_TEST_INFO, _msg_, __LINE__, __FILE__)
 
 #define CYG_TEST_PASS( _msg_ ) \
- cyg_test_output(1, _msg_, __LINE__, __FILE__)
+ cyg_test_output(CYGNUM_TEST_PASS, _msg_, __LINE__, __FILE__)
 
 #define CYG_TEST_FAIL( _msg_ ) \
- cyg_test_output(0, _msg_, __LINE__, __FILE__)
+ cyg_test_output(CYGNUM_TEST_FAIL, _msg_, __LINE__, __FILE__)
 
 #define CYG_TEST_EXIT( _msg_ ) \
- (cyg_test_output(2, _msg_, __LINE__, __FILE__), \
+ (cyg_test_output(CYGNUM_TEST_EXIT, _msg_, __LINE__, __FILE__), \
   cyg_test_exit())
 
+// Use the following macro to instruct GDB to run a command when using
+// the automatic testing infrastructure. This must be used *before*
+// CYG_TEST_INIT() is called
+
+#define CYG_TEST_GDBCMD( _command_ )                                     \
+     CYG_MACRO_START                                                     \
+     cyg_test_output(CYGNUM_TEST_GDBCMD, _command_, __LINE__, __FILE__); \
+     CYG_MACRO_END
+
+// Use the following macro to declare that a test is not applicable for
+// some reason - perhaps not appropriate due to chosen hardware,
+// configuration options governing the presence of a tested feature, or
+// even configuration options governing the presence of a feature the
+// test relies on _in_order_ to test the feature (despite being
+// unrelated!)
+
+#define CYG_TEST_NA( _msg_ )                                         \
+     CYG_MACRO_START                                                 \
+     cyg_test_output(CYGNUM_TEST_NA, _msg_, __LINE__, __FILE__);     \
+     cyg_test_exit();                                                \
+     CYG_MACRO_END
+
 #ifdef CYG_COMPOUND_TEST
-#  define CYG_TEST_FINISH( _msg_ ) \
-     (cyg_test_output(2, _msg_, __LINE__, __FILE__), \
-     return 0;
+#  define CYG_TEST_FINISH( _msg_ )                                  \
+     CYG_MACRO_START                                                \
+     cyg_test_output(CYGNUM_TEST_EXIT, _msg_, __LINE__, __FILE__);  \
+     return 0;                                                      \
+     CYG_MACRO_END
 #else
-#  define CYG_TEST_FINISH( _msg_ ) \
-   (cyg_test_output(2, _msg_, __LINE__, __FILE__), \
-   cyg_test_exit())
+#  define CYG_TEST_FINISH( _msg_ ) CYG_TEST_EXIT( _msg_ )
 #endif
 
 #define CYG_TEST_STILL_ALIVE( _ctr_ , _msg_ ) CYG_TEST_INFO( _msg_ )
 
 
-
-
 // ----- The following are convenience functions
 
 #define CYG_TEST_PASS_FINISH( _msg_ ) \
- (cyg_test_output(1, _msg_, __LINE__, __FILE__), \
- CYG_TEST_FINISH("done"))
+    CYG_MACRO_START                   \
+    CYG_TEST_PASS( _msg_ );           \
+    CYG_TEST_FINISH("done");          \
+    CYG_MACRO_END
  
 #define CYG_TEST_FAIL_FINISH( _msg_ ) \
- (cyg_test_output(0, _msg_, __LINE__, __FILE__), \
- CYG_TEST_FINISH("done"))
+    CYG_MACRO_START                   \
+    CYG_TEST_FAIL( _msg_ );           \
+    CYG_TEST_FINISH("done");          \
+    CYG_MACRO_END
 
 
-#define CYG_TEST_CHECK( _chk_ , _msg_) \
-    (void)(( _chk_ ) || ( cyg_test_output(0, _msg_, __LINE__, __FILE__),  \
-                                        cyg_test_exit(), 1) )
+#define CYG_TEST_CHECK( _chk_ , _msg_)                                   \
+    CYG_MACRO_START                                                      \
+    (void)(( _chk_ ) || ( CYG_TEST_FAIL( _msg_ ) , cyg_test_exit(), 1)); \
+    CYG_MACRO_END
 
-#define CYG_TEST_PASS_FAIL( _cdn_, _msg_ ) \
-if ( _cdn_ ) CYG_TEST_PASS( _msg_ ); else CYG_TEST_FAIL( _msg_ )
+#define CYG_TEST_PASS_FAIL( _cdn_, _msg_ )                            \
+    CYG_MACRO_START                                                   \
+    if ( _cdn_ ) CYG_TEST_PASS( _msg_ ); else CYG_TEST_FAIL( _msg_ ); \
+    CYG_MACRO_END
 
 
 // CYG_TEST_PASS_EXIT and CYG_TEST_FAIL_EXIT are now obscelete, 
 // but are here for now
 // to avoid breaking testcases which still use them. They will
 // soon go away.
-#define CYG_TEST_PASS_EXIT( _msg_ ) \
- (cyg_test_output(1, _msg_, __LINE__, __FILE__), \
+#define CYG_TEST_PASS_EXIT( _msg_ )                             \
+ (cyg_test_output(CYGNUM_TEST_PASS, _msg_, __LINE__, __FILE__), \
  CYG_TEST_EXIT("done"))
 
-#define CYG_TEST_FAIL_EXIT( _msg_ ) \
- (cyg_test_output(0, _msg_, __LINE__, __FILE__), \
+#define CYG_TEST_FAIL_EXIT( _msg_ )                             \
+ (cyg_test_output(CYGNUM_TEST_FAIL, _msg_, __LINE__, __FILE__), \
  CYG_TEST_EXIT("done"))