Simulating Functions with char* parameters
You can use Component Testing for C to stub functions that take a parameter of the char* type.
This feature applies to Component Testing for C.
The char* type causes problems with the Component Testing feature because of the ambiguity built into the C programming language. The char* type can represent:
-
Pointers
-
Pointers to a single char
-
Arrays of characters of indeterminate size
-
Arrays of characters of which the last character is the character \0, a C string.
By default, the product treats all variables of this type as C strings. To specify a different behavior, you must use one of the following methods.
Pointers
Use the FORMAT command to specify that the test required is that of a pointer. For example:
HEADER charp, ,
#extern int CharPointer(char* pChar);
BEGIN
DEFINE STUB CH
#int CharPointer(void* pChar);
END DEFINE
SERVICE CharPointer1
#char *Chars;
#int ret;
TEST 1
ELEMENT
FORMAT Chars = void*
VAR Chars, init = NIL, ev = init
VAR ret, init = 0, ev = 0
STUB CharPointer(NIL)0
#ret = CharPointer(Chars);
END ELEMENT
END TEST -- TEST 1
END SERVICE -- CharPointer1
Pointers to a Single char
Define the type as _inout, as in the following example.
HEADER charp, ,
#extern int CharPointer(char* pChar);
BEGIN
DEFINE STUB CH
#int CharPointer(char Char);
END DEFINE
SERVICE CharPointer1
#char AChar;
#int ret;
TEST 1
ELEMENT
VAR AChar, init = 'A', ev = init
VAR ret, init = 0, ev = 'A'
STUB CharPointer('A')'A'
#ret = CharPointer(&AChar);
END ELEMENT
END TEST -- TEST 1
END SERVICE -- CharPointer1
Arrays of Characters of Indeterminate Size
Use the FORMAT command to specify that the array is in fact an array of unsigned chars not chars, as the product considers that char arrays are C strings. For example:
HEADER charp, ,
#extern int CharPointer(char* pChar);
BEGIN
DEFINE STUB CH
#int CharPointer(unsigned char Chars[4]);
END DEFINE
SERVICE CharPointer1
#char Chars[4];
#int ret;
TEST 1
ELEMENT
FORMAT Chars = unsigned char[4]
ARRAY Chars, init = {'a','b','c','d'}, ev = init
VAR ret, init = 0, ev = 'a'
STUB CharPointer({'a','b','c','d'})0
#ret = CharPointer(Chars);
END ELEMENT
END TEST -- TEST 1
END SERVICE -- CharPointer1
C strings
Use an array of characters in which the last character is the character '\0', a C string.
HEADER charp, ,
#extern int CharPointer(char* pChar);
BEGIN
DEFINE STUB CH
#int CharPointer(char* pChar);
END DEFINE
SERVICE CharPointer1
#char Chars[10];
#int ret;
TEST 1
ELEMENT
VAR Chars, init = "Hello", ev = init
VAR ret, init = 0, ev = 'H'
STUB CharPointer("Hello")'H'
#ret = CharPointer(Chars);
END ELEMENT
END TEST -- TEST 1
END SERVICE -- CharPointer1