2004-10-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
[reactos.git] / reactos / regtests / shared / regtests.c
1 /*
2 * PROJECT: ReactOS kernel
3 * FILE: regtests/shared/regtests.c
4 * PURPOSE: Regression testing framework
5 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
6 * UPDATE HISTORY:
7 * 06-07-2003 CSH Created
8 */
9 #include <roscfg.h>
10 #include <ctype.h>
11 #include <stdlib.h>
12 #include <stdio.h>
13 #include <string.h>
14 #define NTOS_MODE_USER
15 #include <ntos.h>
16 #include "regtests.h"
17
18 #define NDEBUG
19 #include <debug.h>
20
21 int _Result;
22 char *_Buffer;
23
24 static LIST_ENTRY AllTests;
25
26 int
27 DriverTest()
28 {
29 /* Dummy */
30 return 0;
31 }
32
33
34 int
35 _regtestsTest()
36 {
37 /* Dummy */
38 return 0;
39 }
40
41
42 VOID
43 InitializeTests()
44 {
45 InitializeListHead(&AllTests);
46 }
47
48 VOID
49 PerformTest(TestOutputRoutine OutputRoutine, PROS_TEST Test, LPSTR TestName)
50 {
51 char OutputBuffer[5000];
52 char Buffer[5000];
53 char Name[200];
54
55 memset(Buffer, 0, sizeof(Buffer));
56 memset(Name, 0, sizeof(Name));
57
58 _Result = TS_OK;
59 _Buffer = Name;
60 (Test->Routine)(TESTCMD_TESTNAME);
61 if (_Result != TS_OK)
62 {
63 if (TestName != NULL)
64 {
65 return;
66 }
67 strcpy(Name, "Unnamed");
68 }
69
70 if (TestName != NULL)
71 {
72 if (_stricmp(Name, TestName) != 0)
73 {
74 return;
75 }
76 }
77
78 #ifdef SEH
79 __try {
80 #endif
81 _Result = TS_OK;
82 _Buffer = Buffer;
83 (Test->Routine)(TESTCMD_RUN);
84 #ifdef SEH
85 } __except(EXCEPTION_EXECUTE_HANDLER) {
86 Result = TS_FAILED;
87 strcpy(Buffer, "Failed due to exception");
88 }
89 #endif
90
91 if (_Result != TS_OK)
92 {
93 sprintf(OutputBuffer, "ROSREGTEST: |%s| Status: Failed (%s)\n", Name, Buffer);
94 }
95 else
96 {
97 sprintf(OutputBuffer, "ROSREGTEST: |%s| Status: Success\n", Name);
98 }
99 if (OutputRoutine != NULL)
100 {
101 (*OutputRoutine)(OutputBuffer);
102 }
103 else
104 {
105 DbgPrint(OutputBuffer);
106 }
107 }
108
109 VOID
110 PerformTests(TestOutputRoutine OutputRoutine, LPSTR TestName)
111 {
112 PLIST_ENTRY CurrentEntry;
113 PLIST_ENTRY NextEntry;
114 PROS_TEST Current;
115
116 CurrentEntry = AllTests.Flink;
117 while (CurrentEntry != &AllTests)
118 {
119 NextEntry = CurrentEntry->Flink;
120 Current = CONTAINING_RECORD(CurrentEntry, ROS_TEST, ListEntry);
121 PerformTest(OutputRoutine, Current, TestName);
122 CurrentEntry = NextEntry;
123 }
124 }
125
126 VOID
127 AddTest(TestRoutine Routine)
128 {
129 PROS_TEST Test;
130
131 Test = (PROS_TEST) AllocateMemory(sizeof(ROS_TEST));
132 if (Test == NULL)
133 {
134 DbgPrint("Out of memory");
135 return;
136 }
137
138 Test->Routine = Routine;
139
140 InsertTailList(&AllTests, &Test->ListEntry);
141 }