Scl test cclass: Difference between revisions

From STRIDE Wiki
Jump to navigation Jump to search
Line 30: Line 30:
** Requires STRIDE version 2.1 or later.
** Requires STRIDE version 2.1 or later.
** Requires that the host PC have a recent ActiveState Perl distribution installed.
** Requires that the host PC have a recent ActiveState Perl distribution installed.
** Synthesizes a function with the following declaration:
** Synthesizes a function with the following declaration:<br><br>
       extern "C" srTestCaseTotals_t cclass-name();
       extern "C" srTestCaseTotals_t cclass-name();<br><br>
   where the cclass-name is the user-declared cclass name.
   where the cclass-name is the user-declared cclass name.<br>


* The test C class identified:
* The cclass-name identified:
** May not appear as a specifier of a prior pragma.
** may not appear as a specifier of a prior pragma.
** Must be a struct in C.
** must be a struct in C.
** Must be either a struct or class in C++.
** must be either a struct or class in C++.
** Must be [http://en.wikipedia.org/wiki/Plain_Old_Data_Structures POD] type.
** must be [http://en.wikipedia.org/wiki/Plain_Old_Data_Structures POD] type.
** Must not be a template class.
** must not be a template class.
** Must not be a nested class.
** must not be a nested class.
** Must contain at least one member function pointer with a prototype that returns an integral type: void, int, bool (bool only accepted for C++). This prototype must contain a pointer-to-CClass as its first parameter.
** must contain at least one member function pointer with a prototype that returns an integral type: void, int, bool (bool only accepted for C++). This prototype must contain a pointer-to-CClass as its first parameter.


* The initialization routine:
* The init-function-name identified:
** Must be declared prior to this pragma.
** must be declared prior to this pragma.
** Must not have been used in any prior or subsequent SCL pragma.
** must not have been used in any prior or subsequent SCL pragma.
** Must have its first parameter declared as a pointer to the identified cclass.
** must have its first parameter declared as a pointer to the identified cclass.


* The deinitialization routine:
* The deinit-function-name:
** Is optional.
** is optional.
** Must be declared prior to this pragma if it appears in pragma.
** must be declared prior to this pragma if it appears in pragma.
** Must not have been used in any prior or subsequent SCL pragma.
** must not have been used in any prior or subsequent SCL pragma.
** Must have its first parameter declared as a pointer to the identified class.
** must have its first parameter declared as a pointer to the identified class.


== Examples ==
== Examples ==

Revision as of 22:02, 31 July 2008

The scl_test_cclass pragma

The scl_test_cclass pragma declares a "C" language struct (class) to be captured as a test unit. Once captured, STRIDE will generate the appropriate code for executing test methods defined for this "C" Class.

Syntax

#pragma scl_test_cclass(cclass-name, init-function-name { , deinit-function-name })
Parameters Type Description
cclass-name Object The name of the test cclass. This is a struct name in C. It is a struct or class name in C++.
init-function-name Identifier The initialization function name. This is synonymous with a class constructor. There must be a prior user-declared function with this name. The first parameter must be a pointer to cclass-name. Additional parameters are left up to the user's implementation.
deinit-function-name (optional) Identifier The deinitialization function name. This is synonymous with a class destructor. If declared, there must be a user-declared function with this name. The first parameter must be a pointer to cclass-name. Additional parameters are left up to the user's implementation.

Notes

  • This pragma:
    • Requires the inclusion of srtest.h prior to its declaration.
    • Requires STRIDE version 2.1 or later.
    • Requires that the host PC have a recent ActiveState Perl distribution installed.
    • Synthesizes a function with the following declaration:

     extern "C" srTestCaseTotals_t cclass-name();

where the cclass-name is the user-declared cclass name.
  • The cclass-name identified:
    • may not appear as a specifier of a prior pragma.
    • must be a struct in C.
    • must be either a struct or class in C++.
    • must be POD type.
    • must not be a template class.
    • must not be a nested class.
    • must contain at least one member function pointer with a prototype that returns an integral type: void, int, bool (bool only accepted for C++). This prototype must contain a pointer-to-CClass as its first parameter.
  • The init-function-name identified:
    • must be declared prior to this pragma.
    • must not have been used in any prior or subsequent SCL pragma.
    • must have its first parameter declared as a pointer to the identified cclass.
  • The deinit-function-name:
    • is optional.
    • must be declared prior to this pragma if it appears in pragma.
    • must not have been used in any prior or subsequent SCL pragma.
    • must have its first parameter declared as a pointer to the identified class.

Examples

   #include <srtest.h>
   typedef struct CClass_Basic_Simple {
       int   (*pf_TestMethod)(struct CClass_Basic_Simple* pcc);
   } CClass_Basic_Simple;
   #ifdef __cplusplus
   extern "C" {
   #endif
   void CClass_Basic_Simple_init(struct CClass_Basic_Simple* pcc);
   #ifdef __cplusplus
   }
   #endif
   #ifdef _SCL
   #pragma scl_test_cclass(CClass_Basic_Simple, CClass_Basic_Simple_init)
   #endif

See Also