-
-//static local variables
-typedef struct Node Node;
-
-struct Node {
- Node* next;
- char* string;
- SlimList* list;
-};
-
-struct SlimList {
- int length;
- Node* head;
- Node* tail;
-};
-
-static void insertNode(SlimList* self, Node* node);
-
-SlimList* SlimList_Create(void)
-{
- SlimList* self = (SlimList*)malloc(sizeof(SlimList));
- memset(self, 0, sizeof(SlimList));
- return self;
-}
-
-void SlimList_Destroy(SlimList* self)
-{
- Node * node;
- Node * next;
- for(node = self->head; node; node = next)
- {
- if (node->string)
- free(node->string);
-
- if (node->list)
- SlimList_Destroy(node->list);
-
- next = node->next;
- free(node);
- }
- free(self);
-}
-
-void SlimList_AddBuffer(SlimList* self, char const* buffer, int length)
-{
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->next = 0;
- newNode->list = 0;
-
- insertNode(self, newNode);
-
- newNode->string = CSlim_BuyBuf(buffer, length);
-}
-
-
-void SlimList_AddString(SlimList* self, char const* string)
-{
- SlimList_AddBuffer(self, string, string ? (int)strlen(string) : 0);
-}
-
-void SlimList_AddList(SlimList* self, SlimList* element)
-{
- char * embedded = SlimList_Serialize(element);
- SlimList_AddString(self, embedded);
- SlimList_Release(embedded);
-}
-
-int SlimList_GetLength(SlimList* self)
-{
- return self->length;
-}
-
-
-int SlimList_Equals(SlimList* self, SlimList* other){
- Node *p, *q;
- if (self->length != other->length)
- return 0;
-
- for (p = self->head, q=other->head; p; p=p->next, q=q->next)
- {
- if (strcmp(p->string, q->string) != 0)
- return 0;
- }
-
- return 1;
-}
-
-Node * SlimList_GetNodeAt(SlimList* self, int index)
-{
- int i;
- Node* node = self->head;
-
- if (index >= self->length)
- return 0;
-
- for (i = 0; i < index; i++)
- {
- node = node->next;
- }
- return node;
-}
-
-SlimList * SlimList_GetListAt(SlimList* self, int index)
-{
- Node * node = SlimList_GetNodeAt(self, index);
- if (node)
- {
- if (node->list == 0)
- node->list = SlimList_Deserialize(node->string);
- }
- return node->list;
-}
-
-char * SlimList_GetStringAt(SlimList* self, int index)
-{
- Node* node = SlimList_GetNodeAt(self, index);
- if(node == 0)
- return 0;
- return node->string;
-}
-
-double SlimList_GetDoubleAt(SlimList* self, int index)
-{
- char* speed_s = SlimList_GetStringAt(self, index);
- return atof(speed_s);
-}
-
-static char * parseHashCell(char ** cellStart)
-{
- char * cellValue = *cellStart + strlen("| ");
- char * cellStop = strstr(cellValue, " | ");
-
- int length = (int)(cellStop - cellValue);
- char * buf = (char*)malloc(length + 1);
- strncpy(buf, cellValue, length);
- buf[length] = 0;
-
- *cellStart = strstr(cellStop + strlen(""), " | ");
-
- return buf;
-}
-
-static SlimList* parseHashEntry(char * row)
-{
- SlimList * element = SlimList_Create();
-
- char * cellStart = strstr(row, " | ");
-
- char* hashKey = parseHashCell(&cellStart);
- SlimList_AddString(element, hashKey);
- free(hashKey);
-
- char * hashValue = parseHashCell(&cellStart);
- SlimList_AddString(element, hashValue);
- free(hashValue);
-
- return element;
-}
-
-static SlimList* SlimList_deserializeHash(char * serializedHash)
-{
- SlimList *element;
- SlimList *hash = SlimList_Create();
-
- char * row = strstr(serializedHash, " | ");
- while (row != NULL)
- {
- element = parseHashEntry(row);
- SlimList_AddList(hash, element);
- SlimList_Destroy(element);
- row = strstr(row + strlen("
"), "
");
- }
- return hash;
-}
-
-SlimList* SlimList_GetHashAt(SlimList* self, int index)
-{
- return SlimList_deserializeHash(SlimList_GetStringAt(self, 0));
-}
-
-void SlimList_ReplaceAt(SlimList* self, int index, char const * replacementString)
-{
- Node* node = SlimList_GetNodeAt(self, index);
- if(node->list != 0){
- SlimList_Destroy(node->list);
- node->list = 0;
- }
- char * newString = CSlim_BuyString(replacementString);
- free(node->string);
- node->string = newString;
-}
-
-static void insertNode(SlimList* self, Node* node)
-{
- if (self->length == 0)
- {
- self->head = node;
- }
- else
- {
- self->tail->next = node;
- }
- self->tail = node;
- self->length++;
-}
-
-SlimList* SlimList_GetTailAt(SlimList* self, int index)
-{
- SlimList * tail = SlimList_Create();
- int length = SlimList_GetLength(self);
- for(;index < length; index++) {
- SlimList_AddString(tail, SlimList_GetStringAt(self, index));
- }
- return tail;
-}
-
-char* SlimList_ToString(SlimList* self) {
- static char string[128];
- char buf[128];
- buf[0] = '\0';
- strncat(buf, "[", 128);
- int length = SlimList_GetLength(self);
- int i;
- for (i = 0; i
-#include
-
-#define SKIP(a) \
-if (*current != (a))\
-{\
- SlimList_Destroy(list); \
- return 0;\
-}\
-current++;
-
-int readLength(char const** readPtr)
-{
- int length = atoi(*readPtr);
- *readPtr += 6;
- return length;
-}
-
-SlimList* SlimList_Deserialize(char const* serializedList)
-{
- int listLength;
- SlimList * list = 0;
- char const* current = 0;
-
- if(serializedList == 0 || strlen(serializedList) == 0)
- return 0;
-
- current = serializedList;
- list = SlimList_Create();
-
- SKIP('[')
-
- listLength = readLength(¤t);
-
- SKIP(':')
-
- while (listLength--)
- {
- int elementLength = readLength(¤t);
- SKIP(':')
- SlimList_AddBuffer(list, current, elementLength);
- current += elementLength;
- SKIP(':')
- }
-
- SKIP(']')
- return list;
-}
diff --git a/src/CSlim/SlimListSerializer.c b/src/CSlim/SlimListSerializer.c
deleted file mode 100644
index c9804e6..0000000
--- a/src/CSlim/SlimListSerializer.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "SlimList.h"
-#include "SlimListSerializer.h"
-#include
-#include
-#include
-
-enum {LIST_OVERHEAD=9, ELEMENT_OVERHEAD=8};
-
-char* nodeStringAt(SlimList* self, int i)
-{
- char * nodeString = SlimList_GetStringAt(self, i);
- if (nodeString == NULL)
- nodeString = "null";
- return nodeString;
-}
-
-int SlimList_SerializedLength(SlimList* self)
-{
- int length = LIST_OVERHEAD;
- int i;
- for(i = 0; i < SlimList_GetLength(self); i++)
- {
- length += strlen(nodeStringAt(self, i)) + ELEMENT_OVERHEAD;
- }
- return length;
-}
-
-char* SlimList_Serialize(SlimList* self)
-{
- char* buf = (char*)malloc(SlimList_SerializedLength(self)+1);
- char* write_ptr = buf;
- int listLength = SlimList_GetLength(self);
- int i;
-
- write_ptr += sprintf(write_ptr, "[%06d:", listLength);
-
- for(i = 0; i < listLength; i++)
- {
- char * nodeString = nodeStringAt(self, i);
- write_ptr += sprintf(write_ptr, "%06ld:%s:", (long)strlen(nodeString), nodeString);
- }
- strcpy(write_ptr, "]");
- return buf;
-}
-
-void SlimList_Release(char *serializedResults)
-{
- if(serializedResults)
- free(serializedResults);
-}
diff --git a/src/CSlim/SlimUtil.c b/src/CSlim/SlimUtil.c
deleted file mode 100644
index 6373a17..0000000
--- a/src/CSlim/SlimUtil.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include
-#include
-#include "SlimUtil.h"
-char * CSlim_BuyBuf(char const* buffer, int length)
-{
- if (buffer == NULL)
- return NULL;
-
- char * purchase = (char*)malloc(length+1);
- strncpy(purchase, buffer, length);
- purchase[length] = 0;
- return purchase;
-}
-char * CSlim_BuyString(char const* string)
-{
- if (string == NULL)
- return NULL;
- return CSlim_BuyBuf(string, (int)strlen(string));
-}
-
-int CSlim_MapToIntFrom(MapStringInt* map, const char* name)
-{
- MapStringInt* p = map;
- while (p->string != NULL && 0 != strcmp(name, p->string))
- {
- p++;
- }
-
- return p->n;
-}
-
-const char* CSlim_MapToStringFrom(MapStringInt* map, int n)
-{
- MapStringInt* p = map;
- while (p->string != NULL && n != p->n)
- {
- p++;
- }
-
- return p->string;
-}
-
diff --git a/src/Com/SocketServer.c b/src/Com/SocketServer.c
deleted file mode 100644
index ddd5884..0000000
--- a/src/Com/SocketServer.c
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "SocketServer.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-
-//static local variables
-struct SocketServer
-{
- int (*handler)(int);
-};
-
-SocketServer* SocketServer_Create(void)
-{
- SocketServer* self = (SocketServer*)malloc(sizeof(SocketServer));
- memset(self, 0, sizeof(SocketServer));
- return self;
-}
-
-void SocketServer_Destroy(SocketServer* self)
-{
- free(self);
-}
-
-#define BACKLOG 10 // how many pending connections queue will hold
-
-void sigchld_handler(int s)
-{
- while(waitpid(-1, NULL, WNOHANG) > 0);
-}
-
-// get sockaddr, IPv4 or IPv6:
-void *get_in_addr(struct sockaddr *sa)
-{
- if (sa->sa_family == AF_INET) {
- return &(((struct sockaddr_in*)sa)->sin_addr);
- }
-
- return &(((struct sockaddr_in6*)sa)->sin6_addr);
-}
-
-void SocketServer_register_handler(SocketServer* self, int (*handlerFunction)(int))
-{
- self->handler = handlerFunction;
-}
-
-void serve(SocketServer* self, int socket)
-{
- (*self->handler)(socket);
-}
-
-int SocketServer_Run(SocketServer* self, char * listening_port_number)
-{
- int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
- struct addrinfo hints, *servinfo, *p;
- struct sockaddr_storage their_addr; // connector's address information
- socklen_t sin_size;
- struct sigaction sa;
- int yes=1;
- char s[INET6_ADDRSTRLEN];
- int rv;
-
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags = AI_PASSIVE; // use my IP
-
- if ((rv = getaddrinfo(NULL, listening_port_number, &hints, &servinfo)) != 0) {
- fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
- return 1;
- }
-
- // loop through all the results and bind to the first we can
- for(p = servinfo; p != NULL; p = p->ai_next) {
- if ((sockfd = socket(p->ai_family, p->ai_socktype,
- p->ai_protocol)) == -1) {
- perror("server: socket");
- continue;
- }
-
- if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
- sizeof(int)) == -1) {
- perror("setsockopt");
- exit(1);
- }
-
- if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
- close(sockfd);
- perror("server: bind");
- continue;
- }
-
- break;
- }
-
- if (p == NULL) {
- fprintf(stderr, "server: failed to bind\n");
- return 2;
- }
-
- freeaddrinfo(servinfo); // all done with this structure
-
- if (listen(sockfd, BACKLOG) == -1) {
- perror("listen");
- exit(1);
- }
-
- sa.sa_handler = sigchld_handler; // reap all dead processes
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART;
- if (sigaction(SIGCHLD, &sa, NULL) == -1) {
- perror("sigaction");
- exit(1);
- }
-
- sin_size = sizeof their_addr;
- new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
- if (new_fd == -1) {
- perror("accept");
- return -1;
- }
-
- inet_ntop(their_addr.ss_family,
- get_in_addr((struct sockaddr *)&their_addr),
- s, sizeof s);
-
- serve(self, new_fd);
-
- close(new_fd);
-
- return 0;
-}
-
diff --git a/src/Com/TcpComLink.c b/src/Com/TcpComLink.c
deleted file mode 100644
index 214b54e..0000000
--- a/src/Com/TcpComLink.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "TcpComLink.h"
-#include
-#include
-#include
-
-//static local variables
-struct TcpComLink
-{
- int socket;
-};
-
-TcpComLink* TcpComLink_Create(int socket)
-{
- TcpComLink* self = (TcpComLink*)malloc(sizeof(TcpComLink));
- memset(self, 0, sizeof(TcpComLink));
- self->socket = socket;
- return self;
-}
-
-void TcpComLink_Destroy(TcpComLink* self)
-{
- free(self);
-}
-
-
-int TcpComLink_send(void * voidSelf, char * msg, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
- int total = 0; // how many bytes we've sent
- int bytesleft = length; // how many we have left to send
- int n;
-
- while(total < length) {
- n = (int)send(self->socket, msg+total, bytesleft, 0);
- if (n == -1) { break; }
- total += n;
- bytesleft -= n;
- }
-
- return total;
-}
-
-
-int TcpComLink_recv(void * voidSelf, char * buffer, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
- return (int)recv(self->socket, buffer, length, MSG_WAITALL);
-}
diff --git a/src/ComArduino/SerialComLink.cpp b/src/ComArduino/SerialComLink.cpp
deleted file mode 100644
index 9f959db..0000000
--- a/src/ComArduino/SerialComLink.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include
-
-#include "SerialComLink.h"
-#include "WProgram.h"
-//static local variables
-struct SerialComLink
-{
-};
-
-SerialComLink* SerialComLink_Create()
-{
- return 0;
-}
-
-void SerialComLink_Destroy(SerialComLink* self)
-{
-}
-
-
-int SerialComLink_send(void * voidSelf, char * msg, int length)
-{
- Serial.write((uint8_t*)msg, length);
- return length;
-}
-
-int SerialComLink_recv(void * voidSelf, char * buffer, int length)
-{
- int bytes_read = 0;
-
- while(Serial.available() <= 0)
- {
- delay(100);
- }
-
- while(bytes_read < length) {
- while(Serial.available() <= 0);
- buffer[bytes_read] = (char) Serial.read();
- bytes_read += 1;
- }
-
- return bytes_read;
-}
diff --git a/src/ComArduino/TcpComLink.cpp b/src/ComArduino/TcpComLink.cpp
deleted file mode 100644
index 9045ae7..0000000
--- a/src/ComArduino/TcpComLink.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "Ethernet.h"
-
-#include
-
-
-#include "TcpComLink.h"
-
-//static local variables
-struct TcpComLink
-{
- Client * client;
-};
-
-TcpComLink* TcpComLink_Create(Client * client)
-{
- TcpComLink* self = (TcpComLink*)malloc(sizeof(TcpComLink));
- memset(self, 0, sizeof(TcpComLink));
- self->client = client;
- return self;
-}
-
-void TcpComLink_Destroy(TcpComLink* self)
-{
- free(self);
-}
-
-
-int TcpComLink_send(void * voidSelf, char * msg, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
- self->client->write((uint8_t*)(msg), length);
- return length;
-}
-
-
-int TcpComLink_recv(void * voidSelf, char * buffer, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
- int bytes_read = 0;
-
- Client * client = self->client;
- while(client->available() > 0 && bytes_read < length) {
- buffer[bytes_read] = client->read();
- bytes_read += 1;
- }
-
- return bytes_read;
-}
diff --git a/src/ComWin32/SocketServer.c b/src/ComWin32/SocketServer.c
deleted file mode 100644
index 5c0f324..0000000
--- a/src/ComWin32/SocketServer.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "SocketServer.h"
-#include
-#include
-
-static void StartWSA(SocketServer* self);
-static void BindToSocket(SocketServer* self);
-static void Shutdown(SocketServer* self);
-static void CreateSocket(SocketServer* self);
-static void WaitForConnection(SocketServer* self);
-
-//static local variables
-struct SocketServer
-{
- int (*handler)(int);
- SOCKET Socket;
- int itsPort;
-};
-
-SocketServer* SocketServer_Create(void)
-{
- SocketServer* self = (SocketServer*)malloc(sizeof(SocketServer));
- memset(self, 0, sizeof(SocketServer));
- return self;
-}
-
-void SocketServer_Destroy(SocketServer* self)
-{
- Shutdown(self);
- free(self);
-}
-
-void SocketServer_register_handler(SocketServer* self, int (*handlerFunction)(int))
-{
- self->handler = handlerFunction;
-}
-
-void serve(SocketServer* self, int socket)
-{
- (*self->handler)(socket);
-}
-
-int SocketServer_Run(SocketServer* self, char * listening_port_number)
-{
- self->itsPort = atoi(listening_port_number);
- StartWSA(self);
- CreateSocket(self);
- BindToSocket(self);
- WaitForConnection(self);
- Shutdown(self);
-
- return 0;
-}
-
-void Shutdown(SocketServer* self)
-{
- shutdown(self->Socket,SD_SEND);
- closesocket(self->Socket);
- WSACleanup();
-}
-
-void WaitForConnection(SocketServer* self)
-{
- listen(self->Socket,1);
-
- SOCKET TempSock = SOCKET_ERROR;
- while(TempSock==SOCKET_ERROR)
- {
- TempSock = accept(self->Socket,NULL,NULL);
- }
-
- serve(self, TempSock);
-
- closesocket(TempSock);
-}
-
-void StartWSA(SocketServer* self)
-{
- WSADATA WsaDat;
- if(WSAStartup(MAKEWORD(2,2),&WsaDat) != 0)
- {
- printf("WSA Initialization failed!");
- }
-}
-
-void CreateSocket(SocketServer* self)
-{
- self->Socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- if(self->Socket == INVALID_SOCKET)
- {
- printf("Socket creationg failed.");
- }
-}
-
-void BindToSocket(SocketServer* self)
-{
- SOCKADDR_IN serverInf;
- serverInf.sin_family=AF_INET;
- serverInf.sin_addr.s_addr=INADDR_ANY;
- serverInf.sin_port=htons(self->itsPort);
-
- if(bind(self->Socket,(SOCKADDR*)(&serverInf),sizeof(serverInf)) == SOCKET_ERROR)
- {
- printf("Unable to bind socket!");
- }
-}
diff --git a/src/ComWin32/TcpComLink.c b/src/ComWin32/TcpComLink.c
deleted file mode 100644
index f2ec7df..0000000
--- a/src/ComWin32/TcpComLink.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "TcpComLink.h"
-#include
-
-//static local variables
-struct TcpComLink
-{
- SOCKET Socket;
-};
-
-TcpComLink* TcpComLink_Create(int socket)
-{
- TcpComLink* self = (TcpComLink*)malloc(sizeof(TcpComLink));
- memset(self, 0, sizeof(TcpComLink));
- self->Socket = socket;
- return self;
-}
-
-void TcpComLink_Destroy(TcpComLink* self)
-{
- free(self);
-}
-
-int TcpComLink_send(void * voidSelf, char * msg, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
- int total = 0; // how many bytes we've sent
- int bytesleft = length; // how many we have left to send
- int n;
-
- while(total < length) {
- n = send(self->Socket, msg+total, bytesleft, 0);
- if (n == -1) { break; }
- total += n;
- bytesleft -= n;
- }
-
- return total;
-}
-
-int TcpComLink_recv(void * voidSelf, char * buffer, int length)
-{
- TcpComLink * self = (TcpComLink *)voidSelf;
-
- //No MSG_WAITALL flag in winsock2 ????
- int bytesReceived = 0;
- while (bytesReceived < length)
- {
- bytesReceived += recv(self->Socket, buffer + bytesReceived, length - bytesReceived, 0);
- }
- return bytesReceived;
-}
diff --git a/src/ExecutorC/StatementExecutor.c b/src/ExecutorC/StatementExecutor.c
deleted file mode 100644
index 2bd06dd..0000000
--- a/src/ExecutorC/StatementExecutor.c
+++ /dev/null
@@ -1,310 +0,0 @@
-#include "StatementExecutor.h"
-#include "SlimList.h"
-#include "SlimListDeserializer.h"
-#include "SlimListSerializer.h"
-#include
-#include
-#include
-#include "SlimUtil.h"
-// #include
-#include "SymbolTable.h"
-#include "assert.h"
-#include
-
-
-typedef struct methodNode {
- struct methodNode* next;
- char const* name;
- Method method;
-} MethodNode;
-
-typedef struct fixtureNode {
- struct fixtureNode* next;
- Constructor constructor;
- Destructor destructor;
- MethodNode* methods;
- char const* name;
-} FixtureNode;
-
-typedef struct instanceNode {
- struct instanceNode* next;
- char const* name;
- void* instance;
- FixtureNode* fixture;
-} InstanceNode;
-
-typedef struct symbolNode {
- struct symbolNode* next;
- char const* name;
- char const* value;
-} SymbolNode;
-
-struct StatementExecutor
-{
- FixtureNode* fixtures;
- InstanceNode* instances;
- SymbolTable * symbolTable;
- char message[120];
- char const* userMessage;
-};
-
-
-
-static void destroyInstances(InstanceNode*);
-static void destroyFixtures(FixtureNode*);
-static void destroyMethods(MethodNode*);
-void replaceSymbols(SymbolTable*, SlimList*);
-static char* replaceString(SymbolTable*, char*);
-static char* replaceStringFrom(SymbolTable*, char*, char*);
-static int lengthOfSymbol(char *);
-static FixtureNode * findFixture(StatementExecutor* executor, char const * className);
-static void Null_Destroy(void* self);
-static void* Null_Create(StatementExecutor* executor, SlimList* args);
-
-
-StatementExecutor* StatementExecutor_Create(void)
-{
- StatementExecutor* self = (StatementExecutor*)malloc(sizeof(StatementExecutor));
- memset(self, 0, sizeof(StatementExecutor));
- self->symbolTable = SymbolTable_Create();
- return self;
-}
-
-InstanceNode* GetInstanceNode(StatementExecutor* executor, char const* instanceName)
-{
- InstanceNode* instanceNode;
- for (instanceNode = executor->instances; instanceNode; instanceNode = instanceNode->next) {
- if (strcmp(instanceNode->name, instanceName) == 0) {
- return instanceNode;
- }
- }
- return NULL;
-}
-
-void StatementExecutor_Destroy(StatementExecutor* self)
-{
- destroyInstances(self->instances);
- destroyFixtures(self->fixtures);
- SymbolTable_Destroy(self->symbolTable);
- free(self);
-}
-
-static void destroyInstances(InstanceNode* head) {
- InstanceNode* instanceNode;
- for (instanceNode = head; instanceNode;) {
- InstanceNode* nextInstanceNode = instanceNode->next;
- instanceNode->fixture->destructor(instanceNode->instance);
- free(instanceNode);
- instanceNode = nextInstanceNode;
- }
-}
-
-static void destroyFixtures(FixtureNode* head) {
- FixtureNode* fixtureNode;
- for (fixtureNode = head; fixtureNode;) {
- FixtureNode* nextFixtureNode = fixtureNode->next;
- destroyMethods(fixtureNode->methods);
- free(fixtureNode);
- fixtureNode = nextFixtureNode;
- }
-}
-
-static void destroyMethods(MethodNode* head) {
- MethodNode* node;
- for (node = head; node;) {
- MethodNode* nextNode = node->next;
- free(node);
- node = nextNode;
- }
-}
-
-char* StatementExecutor_Make(StatementExecutor* executor, char const* instanceName, char const* className, SlimList* args){
- FixtureNode* fixtureNode = findFixture(executor, className);
- if (fixtureNode) {
- InstanceNode* instanceNode = (InstanceNode* )malloc(sizeof(InstanceNode));
- instanceNode->next = executor->instances;
- executor->instances = instanceNode;
- instanceNode->name = instanceName;
- instanceNode->fixture = fixtureNode;
- replaceSymbols(executor->symbolTable, args);
- executor->userMessage = NULL;
- instanceNode->instance = (fixtureNode->constructor)(executor, args);
- if (instanceNode->instance != NULL) {
- return "OK";
- } else {
- char * formatString = "__EXCEPTION__:message:<>";
- snprintf(executor->message, 120, formatString, className, executor->userMessage ? executor->userMessage : "");
- return executor->message;
- }
- }
- char * formatString = "__EXCEPTION__:message:<>";
- snprintf(executor->message, 120, formatString, className);
- return executor->message;
-}
-
-char* StatementExecutor_Call(StatementExecutor* executor, char const* instanceName, char const* methodName, SlimList* args){
- InstanceNode* instanceNode = GetInstanceNode(executor, instanceName);
- if (instanceNode)
- {
- MethodNode* node;
- for (node = instanceNode->fixture->methods; node; node = node->next) {
- if (strcmp(methodName, node->name) == 0) {
- replaceSymbols(executor->symbolTable, args);
- char* retval = node->method(instanceNode->instance, args);
- return retval;
- }
- }
- char * formatString = "__EXCEPTION__:message:<>";
- snprintf(executor->message, 120, formatString, methodName, SlimList_GetLength(args), instanceNode->fixture->name);
- return executor->message;
- }
- char * formatString = "__EXCEPTION__:message:<>";
- snprintf(executor->message, 120, formatString, instanceName);
- return executor->message;
-}
-
-void replaceSymbols(SymbolTable* symbolTable, SlimList* list) {
- int i;
- for (i=0; iinstance;
- return NULL;
-}
-
-void StatementExecutor_AddFixture(StatementExecutor* executor, Fixture fixture) {
- fixture(executor);
-}
-
-void StatementExecutor_RegisterFixture(StatementExecutor* executor, char const * className, Constructor constructor, Destructor destructor){
- FixtureNode* fixtureNode = findFixture(executor, className);
- if (!fixtureNode)
- {
- fixtureNode = (FixtureNode*)malloc(sizeof(FixtureNode));
- fixtureNode->next = executor->fixtures;
- executor->fixtures = fixtureNode;
- fixtureNode->name = className;
- fixtureNode->methods = NULL;
- }
-
- fixtureNode->constructor = constructor;
- fixtureNode->destructor = destructor;
-}
-
-static FixtureNode * findFixture(StatementExecutor* executor, char const* className)
-{
- FixtureNode* fixtureNode = NULL;
- for (fixtureNode = executor->fixtures; fixtureNode; fixtureNode = fixtureNode->next) {
- if (strcmp(fixtureNode->name, className) == 0) {
- break;
- }
- }
- return fixtureNode;
-}
-
-void StatementExecutor_RegisterMethod(StatementExecutor* executor, char const * className, char const * methodName, Method method){
- FixtureNode* fixtureNode = findFixture(executor, className);
- if (fixtureNode == NULL) {
- StatementExecutor_RegisterFixture(executor, className, Null_Create, Null_Destroy);
- fixtureNode = findFixture(executor, className);
- }
-
- MethodNode* node = (MethodNode*)malloc(sizeof(MethodNode));
- node->name = methodName;
- node->method = method;
- node->next = fixtureNode->methods;
- fixtureNode->methods = node;
- return;
-}
-
-void StatementExecutor_SetSymbol(StatementExecutor* self, char const* symbol, char const* value) {
- SymbolTable_SetSymbol(self->symbolTable, symbol, value);
-}
-
-void StatementExecutor_ConstructorError(StatementExecutor* executor, char const* message) {
- executor->userMessage = message;
-}
-
-char* StatementExecutor_FixtureError(char const* message) {
- static char buffer[128];
- char * formatString = "__EXCEPTION__:message:<<%.100s.>>";
- snprintf(buffer, 128, formatString, message);
- return buffer;
-}
-
-static void* Null_Create(StatementExecutor* executor, SlimList* args)
-{
- return NULL;
-}
-
-static void Null_Destroy(void* self)
-{
-}
-
-
diff --git a/src/ExecutorC/SymbolTable.c b/src/ExecutorC/SymbolTable.c
deleted file mode 100644
index 3f6ad02..0000000
--- a/src/ExecutorC/SymbolTable.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "SymbolTable.h"
-#include
-#include
-#include "SlimUtil.h"
-
-typedef struct symbolNode {
- struct symbolNode* next;
- char* name;
- char* value;
-} SymbolNode;
-
-struct SymbolTable
-{
- SymbolNode * head;
-};
-
-SymbolTable* SymbolTable_Create(void)
-{
- SymbolTable* self = (SymbolTable*)malloc(sizeof(SymbolTable));
- memset(self, 0, sizeof(SymbolTable));
- return self;
-}
-
-void SymbolTable_Destroy(SymbolTable* self)
-{
- SymbolNode* node;
- for (node = self->head; node;) {
- SymbolNode* nextSymbolNode = node->next;
- free(node->name);
- free(node->value);
- free(node);
- node = nextSymbolNode;
- }
- free(self);
-}
-
-char * SymbolTable_FindSymbol(SymbolTable* self, char const * name, int length) {
- SymbolNode* node;
- for (node = self->head; node; node = node->next)
- {
- if (strlen(node->name) == length && strncmp(node->name, name, length) == 0)
- return node->value;
- }
- return NULL;
-}
-
-void SymbolTable_SetSymbol(SymbolTable* self, char const * symbol, char const * value) {
- SymbolNode * symbolNode = (SymbolNode * )malloc(sizeof(SymbolNode));
- symbolNode->name = CSlim_BuyString(symbol);
- symbolNode->value = CSlim_BuyString(value);
- symbolNode->next = self->head;
- self->head = symbolNode;
-}
-
-int SymbolTable_GetSymbolLength(SymbolTable* self, char const* symbol, int length)
-{
- char * symbolValue = SymbolTable_FindSymbol(self, symbol, length);
- if (symbolValue == NULL)
- return -1;
- return strlen(symbolValue);
-}
-
-
diff --git a/src/ExecutorObjectiveC/StatementExecutor.m b/src/ExecutorObjectiveC/StatementExecutor.m
deleted file mode 100644
index afcd12e..0000000
--- a/src/ExecutorObjectiveC/StatementExecutor.m
+++ /dev/null
@@ -1,160 +0,0 @@
-#import "StatementExecutor.h"
-
-void StatementExecutor_ReplaceSymbols(StatementExecutor* executor, SlimList* args);
-SEL NSSelectorFromCStringAndLength(char const* methodName, int numberOrArguments);
-NSString* SlimList_GetNSStringAt(SlimList* self, int index);
-char* noMethodErrorFor(char const* methodName, int length);
-NSArray* SlimList_ToNSArray(SlimList* self);
-char* NSStringToCString(NSString* string);
-
-struct StatementExecutor
-{
- NSMutableDictionary* instances;
- NSMutableDictionary* symbols;
- NSAutoreleasePool* pool;
-};
-
-StatementExecutor* StatementExecutor_Create(void) {
- StatementExecutor* self = (StatementExecutor*)malloc(sizeof(StatementExecutor));
- memset(self, 0, sizeof(StatementExecutor));
- self->pool = [[NSAutoreleasePool alloc] init];
- self->instances = [[NSMutableDictionary dictionary] retain];
- self->symbols = [[NSMutableDictionary dictionary] retain];
- return self;
-}
-
-void* StatementExecutor_Instance(StatementExecutor* executor, char const* instanceName) {
- return [executor->instances valueForKey: [NSString stringWithFormat: @"%s", instanceName]];
-}
-
-char* StatementExecutor_Make(StatementExecutor* executor, char const* instanceName, char const* className, SlimList* args){
- NSString* newClassName = [NSString stringWithFormat: @"%s", className];
- for(NSString* symbol in [[executor->symbols keyEnumerator] allObjects]) {
- newClassName = [newClassName stringByReplacingOccurrencesOfString: [NSString stringWithFormat: @"$%@", symbol]
- withString: [executor->symbols objectForKey: symbol]];
- }
- Class class = NSClassFromString(newClassName);
- if(class == nil) {
- [executor->instances removeObjectForKey: [NSString stringWithFormat: @"%s", instanceName]];
- return NSStringToCString([NSString stringWithFormat: @"__EXCEPTION__:message:<>", newClassName]);
- } else {
- int length = SlimList_GetLength(args);
- StatementExecutor_ReplaceSymbols(executor, args);
- @try {
- id instance;
- if(length == 0) {
- instance = [[class alloc] init];
- } else if(length == 1) {
- instance = [[class alloc] initWithString: SlimList_GetNSStringAt(args, 0)];
- } else {
- instance = [[class alloc] initWithArray: SlimList_ToNSArray(args)];
- }
- [executor->instances setValue: instance
- forKey: [NSString stringWithFormat: @"%s", instanceName]];
- }
- @catch (NSException* exception) {
- return "__EXCEPTION__:message:<>";
- }
- return "OK";
- }
-}
-
-char* StatementExecutor_Call(StatementExecutor* executor, char const* instanceName, char const* methodName, SlimList* args) {
- id instance = StatementExecutor_Instance(executor, instanceName);
- int length = SlimList_GetLength(args);
- SEL selector = NSSelectorFromCStringAndLength(methodName, length);
- if(instance == NULL) {
- return NSStringToCString([NSString stringWithFormat: @"__EXCEPTION__:message:<>", instanceName]);
- }
- if(![instance respondsToSelector: selector]) {
- return noMethodErrorFor(methodName, length);
- }
- StatementExecutor_ReplaceSymbols(executor, args);
- NSMethodSignature* signature = [instance methodSignatureForSelector: selector];
- NSString* returnType = [NSString stringWithUTF8String: [signature methodReturnType]];
- id result;
- @try {
- if(length == 0) {
- result = [instance performSelector: selector];
- } else if (length == 1) {
- result = [instance performSelector: selector withObject: SlimList_GetNSStringAt(args, 0)];
- } else {
- result = [instance performSelector: selector withObject: SlimList_ToNSArray(args)];
- }
- if ([returnType isEqualToString: @"@"]) {
- if([NSStringFromClass([result class]) isEqualToString: @"NSCFString"]) {
- return NSStringToCString(result);
- } else {
- return NSStringToCString([result stringValue]);
- }
- } else if ([returnType isEqualToString: @"i"]) {
- return NSStringToCString([NSString stringWithFormat: @"%d", result]);
- } else {
- return "OK";
- }
- } @catch (NSException* e) {
- return NSStringToCString([NSString stringWithFormat: @"__EXCEPTION__:message:<<%@ %@>>", [e name], [e reason]]);
- }
-}
-
-void StatementExecutor_ReplaceSymbols(StatementExecutor* executor, SlimList* args) {
- for(int i=0; isymbols keyEnumerator] allObjects]) {
- newArgument = [newArgument stringByReplacingOccurrencesOfString: [NSString stringWithFormat: @"$%@", symbol]
- withString: [executor->symbols objectForKey: symbol]];
- SlimList_ReplaceAt(args, i, NSStringToCString(newArgument));
- }
- }
-}
-
-void StatementExecutor_SetSymbol(StatementExecutor* self, char const* symbol, char const* value) {
- [self->symbols setObject: [NSString stringWithUTF8String: value]
- forKey: [NSString stringWithUTF8String: symbol]];
-}
-
-
-void StatementExecutor_Destroy(StatementExecutor* self) {
- [self->instances release];
- [self->symbols release];
- [self->pool drain];
- free(self);
-}
-
-
-void StatementExecutor_AddFixture(StatementExecutor* executor, Fixture fixture) {
-}
-void StatementExecutor_RegisterFixture(StatementExecutor* executor, char const * className, Constructor constructor, Destructor destructor){
-}
-void StatementExecutor_RegisterMethod(StatementExecutor* executor, char const * className, char const * methodName, Method method){
-}
-
-
-char* noMethodErrorFor(char const* methodName, int length) {
- return NSStringToCString([NSString stringWithFormat: @"__EXCEPTION__:message:<>", methodName, length]);
-}
-
-SEL NSSelectorFromCStringAndLength(char const* methodName, int numberOrArguments) {
- if (numberOrArguments == 0) {
- return NSSelectorFromString([NSString stringWithFormat:@"%s", methodName]);
- } else {
- return NSSelectorFromString([NSString stringWithFormat:@"%s:", methodName]);
- }
-}
-
-NSArray* SlimList_ToNSArray(SlimList* self) {
- int length = SlimList_GetLength(self);
- NSMutableArray* array = [NSMutableArray array];
- for(int i=0; i>", SlimList_GetStringAt(invalidStatementResult, 1));
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanCallASimpleFunction)
-{
- char const * call[] = {"call1", "call", "test_slim", "returnValue", 0};
- addStatementTo(instructions, call);
-
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
- LONGS_EQUAL(3, SlimList_GetLength(results));
-
- SlimList * makeResult = SlimList_GetListAt(results, 1);
- STRCMP_EQUAL("m1", SlimList_GetStringAt(makeResult, 0));
- STRCMP_EQUAL("OK", SlimList_GetStringAt(makeResult, 1));
-
- SlimList * callResult = SlimList_GetListAt(results, 2);
- STRCMP_EQUAL("call1", SlimList_GetStringAt(callResult, 0));
- STRCMP_EQUAL("value", SlimList_GetStringAt(callResult, 1));
-
- SlimList_Destroy(results);
-
-}
-
-TEST(ListExecutor, CantExecuteMalformedInstruction)
-{
- char const * call[] = {"call1", "call", "notEnoughArguments", 0};
- addStatementTo(instructions, call);
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
- SlimList * invalidStatementResult = SlimList_GetListAt(results, 2);
- STRCMP_EQUAL("__EXCEPTION__:message:<>", SlimList_GetStringAt(invalidStatementResult, 1));
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CantCallAmethodOnAnInstanceThatDoesntExist)
-{
- char const * call[] = {"call1", "call", "noSuchInstance", "method", 0};
- addStatementTo(instructions, call);
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
- SlimList * invalidStatementResult = SlimList_GetListAt(results, 2);
- STRCMP_EQUAL("__EXCEPTION__:message:<>", SlimList_GetStringAt(invalidStatementResult, 1));
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, ShouldRespondToAnEmptySetOfInstructionsWithAnEmptySetOfResults)
-{
- SlimList* instructions = SlimList_Create();
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
- LONGS_EQUAL(0, SlimList_GetLength(results));
- SlimList_Destroy(results);
- SlimList_Destroy(instructions);
-}
-
-TEST(ListExecutor, CanPassArgumentsToConstructor)
-{
- char const * make2[] = {"make2", "make", "test_slim2", "TestSlim", "ConstructorArgument", 0};
- char const * call[] = {"call1", "call", "test_slim2", "getConstructionArg", 0};
- addStatementTo(instructions, make2);
- addStatementTo(instructions, call);
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
- SlimList * callResult = SlimList_GetListAt(results, 3);
- STRCMP_EQUAL("ConstructorArgument", SlimList_GetStringAt(callResult, 1));
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanCallAFunctionMoreThanOnce)
-{
- char const * call[] = {"call1", "call", "test_slim", "echo", "Hello", 0};
- addStatementTo(instructions, call);
- char const * call2[] = {"call2", "call", "test_slim", "echo", "Goodbye", 0};
- addStatementTo(instructions, call2);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 2);
- STRCMP_EQUAL("Hello", SlimList_GetStringAt(callResult, 1));
- callResult = SlimList_GetListAt(results, 3);
- STRCMP_EQUAL("Goodbye", SlimList_GetStringAt(callResult, 1));
-
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanAssignTheReturnValueToASymbol)
-{
- char const * call[] = {"id1", "callAndAssign", "v", "test_slim", "add", "x", "y", 0};
- addStatementTo(instructions, call);
-
- char const * call2[] = {"id2", "call", "test_slim", "echo", "$v", 0};
- addStatementTo(instructions, call2);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 2);
- STRCMP_EQUAL("xy", SlimList_GetStringAt(callResult, 1));
- callResult = SlimList_GetListAt(results, 3);
- STRCMP_EQUAL("xy", SlimList_GetStringAt(callResult, 1));
-
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanReplateMultipleSymbolsInASingleArgument)
-{
- char const * call[] = {"id1", "callAndAssign", "v1", "test_slim", "echo", "Bob", 0};
- addStatementTo(instructions, call);
-
- char const * call2[] = {"id2", "callAndAssign", "v2", "test_slim", "echo", "Martin", 0};
- addStatementTo(instructions, call2);
-
- char const * call3[] = {"id2", "call", "test_slim", "echo", "name: $v1 $v2 $12.23", 0};
- addStatementTo(instructions, call3);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 4);
- STRCMP_EQUAL("name: Bob Martin $12.23", SlimList_GetStringAt(callResult, 1));
-
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanPassAndReturnAList)
-{
- SlimList* l = SlimList_Create();
- SlimList_AddString(l, "1");
- SlimList_AddString(l, "2");
-
- SlimList* statement = SlimList_Create();
- SlimList_AddString(statement, "id1");
- SlimList_AddString(statement, "call");
- SlimList_AddString(statement, "test_slim");
- SlimList_AddString(statement, "echo");
- SlimList_AddList(statement, l);
-
- SlimList_AddList(instructions, statement);
- SlimList_Destroy(statement);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 2);
- SlimList * resultList = SlimList_GetListAt(callResult, 1);
- CHECK(SlimList_Equals(l, resultList));
-
- SlimList_Destroy(results);
- SlimList_Destroy(l);
-}
-
-TEST(ListExecutor, CanReturnNull)
-{
- char const * call[] = {"id1", "call", "test_slim", "null", 0};
- addStatementTo(instructions, call);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 2);
-
- STRCMP_EQUAL("null", SlimList_GetStringAt(callResult, 1));
-
- SlimList_Destroy(results);
-}
-
-TEST(ListExecutor, CanPassASymbolInAList)
-{
- char const * call[] = {"id1", "callAndAssign", "v", "test_slim", "echo", "Bob", 0};
- addStatementTo(instructions, call);
-
- SlimList* statement = SlimList_Create();
- SlimList_AddString(statement, "id2");
- SlimList_AddString(statement, "call");
- SlimList_AddString(statement, "test_slim");
- SlimList_AddString(statement, "echo");
-
- SlimList* l = SlimList_Create();
- SlimList_AddString(l, "$v");
- SlimList_AddList(statement, l);
-
- SlimList_AddList(instructions, statement);
- SlimList_Destroy(statement);
-
- SlimList * results = ListExecutor_Execute(listExecutor, instructions);
-
- SlimList * callResult = SlimList_GetListAt(results, 3);
- SlimList * resultList = SlimList_GetListAt(callResult, 1);
-
- SlimList* expected = SlimList_Create();
- SlimList_AddString(expected, "Bob");
-
- CHECK(SlimList_Equals(expected, resultList));
-
- SlimList_Destroy(results);
- SlimList_Destroy(l);
- SlimList_Destroy(expected);
-
-}
diff --git a/tests/CSlim/SlimConnectionHandlerTest.cpp b/tests/CSlim/SlimConnectionHandlerTest.cpp
deleted file mode 100644
index 1fa20fc..0000000
--- a/tests/CSlim/SlimConnectionHandlerTest.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "CppUTest/TestHarness.h"
-#include
-#include
-#include
-
-extern "C"
-{
- #include "SlimConnectionHandler.h"
- #include "CppUTest/TestHarness_c.h"
-
- struct MockComLink {
- char lastSendMsg[32];
- int lastSendIndex;
- char const * recvStream;
- char const * recvPtr;
- };
- int mock_send_func(void * voidSelf, char * msg, int length)
- {
- MockComLink * self = (MockComLink*)voidSelf;
- strncpy(self->lastSendMsg + self->lastSendIndex, msg, length);
- self->lastSendIndex += length;
- return length;
- }
- int mock_recv_func(void * voidSelf, char * buffer, int length)
- {
- MockComLink * self = (MockComLink*)voidSelf;
- strncpy(buffer, self->recvPtr, length);
- self->recvPtr += length;
- return length;
- }
-
- char * slimResponse;
- char sentSlimMessage[32];
- void * sentMsgHandler;
- char * mock_handle_slim_message(void* self, char * message)
- {
- strcpy(sentSlimMessage, message);
- sentMsgHandler = self;
- return slimResponse;
- }
-
-}
-
-TEST_GROUP(SlimConnectionHandler)
-{
- SlimConnectionHandler* slimConnectionHandler;
- MockComLink comLink;
- void* mockMessageHandler;
- void setup()
- {
- slimConnectionHandler = SlimConnectionHandler_Create(&mock_send_func, &mock_recv_func, (void*)&comLink);
- memset(comLink.lastSendMsg, 0, 32);
- comLink.lastSendIndex = 0;
- mockMessageHandler = (void*)0x123456;
- SlimConnectionHandler_RegisterSlimMessageHandler(slimConnectionHandler, mockMessageHandler, &mock_handle_slim_message);
- }
-
- void teardown()
- {
- SlimConnectionHandler_Destroy(slimConnectionHandler);
- }
-};
-
-TEST(SlimConnectionHandler, ShouldSendVersion)
-{
- comLink.recvStream = "000003:bye";
- comLink.recvPtr = comLink.recvStream;
-
- SlimConnectionHandler_Run(slimConnectionHandler);
-
- STRCMP_EQUAL("Slim -- V0.0\n", comLink.lastSendMsg);
-}
-
-TEST(SlimConnectionHandler, ShouldReadMessageAndCallSlimHandler)
-{
- comLink.recvStream = "000006:abcdef000003:bye";
- comLink.recvPtr = comLink.recvStream;
-
- slimResponse = (char*)cpputest_malloc(8);
- strcpy(slimResponse, "ghijklm");
-
- SlimConnectionHandler_Run(slimConnectionHandler);
-
- STRCMP_EQUAL("Slim -- V0.0\n000007:ghijklm", comLink.lastSendMsg);
- STRCMP_EQUAL("abcdef", sentSlimMessage);
- CHECK_EQUAL(mockMessageHandler, sentMsgHandler);
-}
diff --git a/tests/CSlim/SlimListDeserializerTest.cpp b/tests/CSlim/SlimListDeserializerTest.cpp
deleted file mode 100644
index 85cd583..0000000
--- a/tests/CSlim/SlimListDeserializerTest.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-#include
-#include
-#include
-
-extern "C"
-{
-#include "SlimList.h"
-#include "SlimListDeserializer.h"
-#include "SlimListSerializer.h"
-}
-
-#include "CppUTest/TestHarness.h"
-#include "CppUTest/TestHarness_c.h"
-
-TEST_GROUP(SlimListDeserializer)
-{
- SlimList* slimList;
- SlimList* deserializedList;
- char* serializedList;
-
- void setup()
- {
- slimList = SlimList_Create();
- serializedList = 0;
- deserializedList = 0;
- }
-
- void teardown()
- {
- SlimList_Destroy(slimList);
-
- if (deserializedList)
- SlimList_Destroy(deserializedList);
-
- if (serializedList != 0)
- SlimList_Release(serializedList);
- }
-
- void check_lists_equal(SlimList* expected, SlimList* actual) {
- CHECK(SlimList_Equals(expected, actual));
- }
-
-};
-
-
-TEST(SlimListDeserializer, deserializeEmptyList)
-{
- deserializedList = SlimList_Deserialize("[000000:]");
- CHECK(deserializedList != 0);
- LONGS_EQUAL(0, SlimList_GetLength(deserializedList));
-}
-
-TEST(SlimListDeserializer, deserializeNull)
-{
- SlimList* list = SlimList_Deserialize(0);
- POINTERS_EQUAL(0, list);
-}
-
-TEST(SlimListDeserializer, deserializeEmptyString)
-{
- SlimList* list = SlimList_Deserialize("");
- POINTERS_EQUAL(0, list);
-}
-
-TEST(SlimListDeserializer, MissingOpenBracketReturnsNull)
-{
- SlimList* list = SlimList_Deserialize("hello");
- POINTERS_EQUAL(0, list);
-}
-
-TEST(SlimListDeserializer, MissingClosingBracketReturnsNull)
-{
- SlimList* list = SlimList_Deserialize("[000000:");
- POINTERS_EQUAL(0, list);
-}
-
-TEST(SlimListDeserializer, canDeserializeCanonicalListWithOneElement)
-{
- char const* canonicalList = "[000001:000008:Hi doug.:]";
- SlimList* deserializedList = SlimList_Deserialize(canonicalList);
- CHECK(deserializedList != NULL);
- LONGS_EQUAL(1, SlimList_GetLength(deserializedList));
- STRCMP_EQUAL("Hi doug.", SlimList_GetStringAt(deserializedList, 0));
- SlimList_Destroy(deserializedList);
-}
-
-
-TEST(SlimListDeserializer, canDeSerializeListWithOneElement)
-{
- SlimList_AddString(slimList, "hello");
- serializedList = SlimList_Serialize(slimList);
- deserializedList = SlimList_Deserialize(serializedList);
- CHECK(deserializedList != 0);
- check_lists_equal(slimList, deserializedList);
-}
-
-TEST(SlimListDeserializer, canDeSerializeListWithTwoElements)
-{
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(slimList, "bob");
- serializedList = SlimList_Serialize(slimList);
- deserializedList = SlimList_Deserialize(serializedList);
- CHECK(deserializedList != 0);
- check_lists_equal(slimList, deserializedList);
-}
-
-TEST(SlimListDeserializer, canAddSubList)
-{
- SlimList* embeddedList;
- embeddedList = SlimList_Create();
- SlimList_AddString(embeddedList, "element");
- SlimList_AddList(slimList, embeddedList);
- serializedList = SlimList_Serialize(slimList);
- deserializedList = SlimList_Deserialize(serializedList);
- SlimList * subList = SlimList_GetListAt(deserializedList, 0);
- subList = SlimList_GetListAt(deserializedList, 0);
- check_lists_equal(embeddedList, subList);
-
- SlimList_Destroy(embeddedList);
-}
-
-TEST(SlimListDeserializer, getStringWhereThereIsAList)
-{
- SlimList* embeddedList;
- embeddedList = SlimList_Create();
- SlimList_AddString(embeddedList, "element");
- SlimList_AddList(slimList, embeddedList);
- serializedList = SlimList_Serialize(slimList);
- deserializedList = SlimList_Deserialize(serializedList);
- char * string = SlimList_GetStringAt(deserializedList, 0);
-
- STRCMP_EQUAL("[000001:000007:element:]", string);
- // POINTERS_EQUAL(0, string); ?????????????????????????????????????
-
- SlimList_Destroy(embeddedList);
-}
diff --git a/tests/CSlim/SlimListSerializerTest.cpp b/tests/CSlim/SlimListSerializerTest.cpp
deleted file mode 100644
index 85dd805..0000000
--- a/tests/CSlim/SlimListSerializerTest.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#include
-#include
-#include
-
-
-extern "C"
-{
-#include "SlimList.h"
-#include "SlimListSerializer.h"
-}
-
-#include "CppUTest/TestHarness.h"
-#include "CppUTest/TestHarness_c.h"
-
-TEST_GROUP(SlimListSerializer)
-{
- SlimList* slimList;
- char* serializedList;
-
- void setup()
- {
- slimList = SlimList_Create();
- serializedList = 0;
- }
-
- void teardown()
- {
- SlimList_Destroy(slimList);
-
- SlimList_Release(serializedList);
- }
-};
-
-TEST(SlimListSerializer, SerializeAListWithNoElements)
-{
- serializedList = SlimList_Serialize(slimList);
- STRCMP_EQUAL("[000000:]", serializedList);
-}
-
-TEST(SlimListSerializer, SerializeAListWithOneElements)
-{
- SlimList_AddString(slimList, "hello");
- serializedList = SlimList_Serialize(slimList);
- STRCMP_EQUAL("[000001:000005:hello:]", serializedList);
-}
-
-TEST(SlimListSerializer, SerializeAListWithTwoElements)
-{
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(slimList, "world");
-
- serializedList = SlimList_Serialize(slimList);
-
- STRCMP_EQUAL("[000002:000005:hello:000005:world:]", serializedList);
-}
-
-TEST(SlimListSerializer, ListCopysItsString)
-{
- char string[12] = "Hello";
- SlimList_AddString(slimList, string);
- strcpy(string, "Goodbye");
- serializedList = SlimList_Serialize(slimList);
- STRCMP_EQUAL("[000001:000005:Hello:]", serializedList);
-}
-
-TEST(SlimListSerializer, canCopyAList)
-{
- SlimList_AddString(slimList, "123456");
- SlimList_AddString(slimList, "987654");
-
- SlimList* copy = SlimList_Create();
- int i;
- for (i=0; i
-#include
-#include
-
-extern "C"
-{
-#include "SlimList.h"
-}
-
-#include "CppUTest/TestHarness.h"
-#include "CppUTest/TestHarness_c.h"
-
-TEST_GROUP(SlimList)
-{
- SlimList* slimList;
- SlimList* deserializedList;
- char* serializedList;
-
- void setup()
- {
- slimList = SlimList_Create();
- serializedList = 0;
- deserializedList = 0;
- }
-
- void teardown()
- {
- SlimList_Destroy(slimList);
-
- if (deserializedList)
- SlimList_Destroy(deserializedList);
-
- if (serializedList != 0)
- cpputest_free(serializedList);
- }
-
- void check_lists_equal(SlimList* expected, SlimList* actual) {
- CHECK(SlimList_Equals(expected, actual));
- }
-
-};
-
-TEST(SlimList, twoEmptyListsAreEqual)
-{
- SlimList* list = SlimList_Create();
- check_lists_equal(slimList, list);
- SlimList_Destroy(list);
-}
-
-TEST(SlimList, twoDifferentLenghtListsAreNotEqual)
-{
- SlimList* list = SlimList_Create();
- SlimList_AddString(slimList, "hello");
- CHECK(!SlimList_Equals(slimList, list));
- SlimList_Destroy(list);
-}
-
-TEST(SlimList, twoSingleElementListsWithDifferentElmementsAreNotEqual)
-{
- SlimList* list = SlimList_Create();
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(list, "goodbye");
- CHECK(!SlimList_Equals(slimList, list));
- SlimList_Destroy(list);
-}
-
-
-TEST(SlimList, twoIdenticalMultipleElementListsElmementsAreEqual)
-{
- SlimList* list = SlimList_Create();
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(slimList, "goodbye");
- SlimList_AddString(list, "hello");
- SlimList_AddString(list, "goodbye");
- CHECK(SlimList_Equals(slimList, list));
- SlimList_Destroy(list);
-}
-
-
-TEST(SlimList, twoNonIdenticalMultipleElementListsElmementsAreNotEqual)
-{
- SlimList* list = SlimList_Create();
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(slimList, "hello");
- SlimList_AddString(list, "hello");
- SlimList_AddString(list, "goodbye");
- CHECK(!SlimList_Equals(slimList, list));
- SlimList_Destroy(list);
-}
-
-
-TEST(SlimList, canGetElements)
-{
- SlimList_AddString(slimList, "element1");
- SlimList_AddString(slimList, "element2");
- STRCMP_EQUAL("element1", SlimList_GetStringAt(slimList, 0));
- STRCMP_EQUAL("element2", SlimList_GetStringAt(slimList, 1));
-}
-
-TEST(SlimList, canGetHashWithOneElement)
-{
- SlimList_AddString(slimList, "");
-
- SlimList * hash = SlimList_GetHashAt(slimList, 0);
- SlimList * twoElementList = SlimList_GetListAt(hash, 0);
-
- STRCMP_EQUAL("name", SlimList_GetStringAt(twoElementList, 0));
- STRCMP_EQUAL("bob", SlimList_GetStringAt(twoElementList, 1));
- SlimList_Destroy(hash);
-}
-
-TEST(SlimList, canGetHashWithMultipleElements)
-{
- SlimList_AddString(slimList, "");
-
- SlimList * hash = SlimList_GetHashAt(slimList, 0);
- SlimList * twoElementList = SlimList_GetListAt(hash,1);
-
- STRCMP_EQUAL("addr", SlimList_GetStringAt(twoElementList, 0));
- STRCMP_EQUAL("here", SlimList_GetStringAt(twoElementList, 1));
- SlimList_Destroy(hash);
-}
-
-TEST(SlimList, cannotGetElementThatAreNotThere)
-{
- SlimList_AddString(slimList, "element1");
- SlimList_AddString(slimList, "element2");
- POINTERS_EQUAL(0, SlimList_GetStringAt(slimList, 3));
-}
-
-TEST(SlimList, canReplaceString)
-{
- SlimList_AddString(slimList, "replaceMe");
- SlimList_ReplaceAt(slimList, 0, "WithMe");
-
- STRCMP_EQUAL("WithMe", SlimList_GetStringAt(slimList, 0));
-}
-
-TEST(SlimList, canGetTail)
-{
- SlimList_AddString(slimList, "1");
- SlimList_AddString(slimList, "2");
- SlimList_AddString(slimList, "3");
- SlimList_AddString(slimList, "4");
-
- SlimList* expected = SlimList_Create();
- SlimList_AddString(expected, "3");
- SlimList_AddString(expected, "4");
-
- SlimList* tail = SlimList_GetTailAt(slimList, 2);
- CHECK(SlimList_Equals(expected, tail));
- SlimList_Destroy(tail);
- SlimList_Destroy(expected);
-}
-
-TEST(SlimList, recursiveToString)
-{
- SlimList_AddString(slimList, "a");
- SlimList_AddString(slimList, "b");
-
- SlimList* sublist = SlimList_Create();
- SlimList_AddString(sublist, "3");
- SlimList_AddString(sublist, "4");
-
- SlimList_AddList(slimList, sublist);
-
- STRCMP_EQUAL("[\"a\", \"b\", [\"3\", \"4\"]]", SlimList_ToString(slimList));
-
- SlimList_Destroy(sublist);
-}
-
-TEST(SlimList, getDouble)
-{
- SlimList_AddString(slimList, "2.3");
- DOUBLES_EQUAL(2.3, SlimList_GetDoubleAt(slimList, 0), 0.1);
-}
diff --git a/tests/CSlim/StatementExecutorTest.cpp b/tests/CSlim/StatementExecutorTest.cpp
deleted file mode 100644
index 61631da..0000000
--- a/tests/CSlim/StatementExecutorTest.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-#include "CppUTest/TestHarness.h"
-
-extern "C"
-{
-#include "StatementExecutor.h"
-#include "TestSlim.h"
-#include "SlimList.h"
-#include "SlimListDeserializer.h"
-#include
-#include
-}
-
-TEST_GROUP(StatementExecutor)
-{
- StatementExecutor* statementExecutor;
- SlimList* args;
- SlimList* empty;
-
- void setup()
- {
- args = SlimList_Create();
- empty = SlimList_Create();
- statementExecutor = StatementExecutor_Create();
- StatementExecutor_AddFixture(statementExecutor, TestSlim_Register);
- StatementExecutor_Make(statementExecutor, "test_slim", "TestSlim", empty);
- }
-
- void teardown()
- {
- StatementExecutor_Destroy(statementExecutor);
- SlimList_Destroy(args);
- SlimList_Destroy(empty);
- }
-};
-
-TEST(StatementExecutor, canCallFunctionWithNoArguments)
-{
- StatementExecutor_Call(statementExecutor, "test_slim", "noArgs", args);
- TestSlim* testSlim = (TestSlim*)StatementExecutor_Instance(statementExecutor, "test_slim");
- CHECK(TestSlim_noArgsCalled(testSlim));
-}
-
-TEST(StatementExecutor, cantCallFunctionThatDoesNotExist)
-{
- char* result = StatementExecutor_Call(statementExecutor, "test_slim", "noSuchMethod", args);
- STRCMP_EQUAL("__EXCEPTION__:message:<>", result);
-
- result = StatementExecutor_Call(statementExecutor, "test_slim", "noOtherSuchMethod", args);
- STRCMP_EQUAL("__EXCEPTION__:message:<>", result);
-}
-
-TEST(StatementExecutor, shouldTruncateReallyLongNamedFunctionThatDoesNotExistTo32)
-{
- char * result = StatementExecutor_Call(statementExecutor, "test_slim", "noOtherSuchMethod123456789022345678903234567890423456789052345678906234567890", args);
- CHECK(strlen(result) < 120);
- STRCMP_EQUAL("__EXCEPTION__:message:<>", result);
-}
-
-TEST(StatementExecutor, shouldKnowNumberofArgumentsforNonExistantFunction)
-{
- SlimList_AddString(args, "BlahBlah");
- char* result = StatementExecutor_Call(statementExecutor, "test_slim", "noSuchMethod", args);
- STRCMP_EQUAL("__EXCEPTION__:message:<