This is test_suite.m in view mode; [Download] [Up]
// // test_suite.m // LGDCommunicationKit Examples, Release 1.0 (prerelease) // // Copyright (c) 1993, Looking Glass Design, Inc. // All rights reserved. // // Project Manager: Paul Girone // Original Author: Mike Gobbi // Creation Date: June 26, 1993 // $Revision: 1.3 $ // #import "test_suite.h" #import <assert.h> #import <errno.h> #import <libc.h> #import <stdio.h> #import <string.h> #import <sys/param.h> int test_locking(LGDSerialPort *port) { int count = 0; char path[MAXPATHLEN+1]; printf("\nTESTING LOCKING BEHAVIOUR\n"); // Fake a lock [[port class] getLockFile:path forDevice:[port device]]; errno = 0; fclose(fopen(path, "w")); if (errno) { printf("unable to write to lock directory (Test aborted)\n"); exit(-1); } printf("are locks detected?"); if ([port isDeviceAvailable:[port device]]) { printf(" NO (error)\n"); count++; } else { printf(" yes\n"); } assert(count || ![port isLocked]); printf("can a lock be forced over an existing lock?"); if ([port lock]) { printf(" YES (error)\n"); [port unlock]; count++; } else { printf(" no\n"); } // Remove lock errno = 0; unlink(path); if (errno) { printf("unable to remove lock (Test aborted)\n"); exit(-1); } printf("are locks imagined when they are really absent?"); if ([port isDeviceAvailable:[port device]]) { printf(" no\n"); } else { printf(" YES (error)\n"); count++; } printf("can the device be locked if it is unoccupied?"); assert(count || ![port isLocked]); if ([port lock]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } if ([port isLocked]) { assert(count || [port isLocked]); printf("can the current device be changed while locked?"); if ([port setDevice:NULL]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } assert(count || [port isLocked]); printf("can the device be locked twice?"); if ([port lock]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } assert(count || [port isLocked]); printf("can the device be unlocked?"); if ([port unlock]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } } assert(count || ![port isLocked]); printf("can the device be unlocked if it is not currently locked?"); if ([port unlock]) { printf(" YES (ERROR)\n"); count++; } else { printf(" no\n"); } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_connecting(LGDSerialPort *port) { int count = 0; printf("\nTESTING CONNECTION BEHAVIOUR (15 second timeout)\n"); assert(count || ![port isOpen]); printf("can the device be opened?"); if ([port openWithTimeout:15]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } if ([port isOpen]) { assert(count || [port isOpen]); printf("can the current device be changed while open?"); if ([port setDevice:NULL]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } assert(count || [port isOpen]); printf("can device be opened if already open?"); if ([port openWithTimeout:15]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } assert(count || [port isOpen]); printf("can device be closed?"); if ([port close]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } } assert(count || ![port isOpen]); printf("can the device be closed if not open?"); if ([port close]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_blocks(LGDSerialPort *port) { int count = 0; char buffer[80]; printf("\nTESTING BLOCK READ/WRITE\n"); [port flush]; printf("can we write an array of characters in blocking mode?"); if (3==[port sendBlock:"at\r" size:3 all:YES]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("can we read an array of characters in non-blocking mode?"); if (0<[port getBlock:buffer size:80 all:NO]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("(Blocking reads are not tested by this program)\n"); printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_strings(LGDSerialPort *port) { int count = 0; char buffer[80]; printf("\nTESTING STRING READ/WRITE\n"); [port flush]; printf("can we read a string if none is waiting?"); if (0<[port getString:NULL max:0 termChars:""]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } printf("can we write a string?"); if (0<[port sendString:"at"]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("can we read strings with default separators?"); if (0<[port getString:buffer max:80]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("and are they what we expect?"); if (!strncmp(buffer, "at", 2) || strlen(buffer)!=3) { printf(" yes\n"); } else { printf(" NO (sent '\\%d\\%d\\%d', got '\\%d\\%d\\%d%s')\n", 'a', 't', '\r', buffer[0], buffer[1], buffer[2], buffer[3]?"...":""); count++; } [port sendString:"at"]; printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("can we read strings with NULL separators?"); if (0<[port getString:NULL max:0]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_characters(LGDSerialPort *port) { int count = 0; int buffer; int a, b, c; printf("\nTESTING CHARACTER READ/WRITE\n"); [port flush]; printf("can we read characters when there are none present?"); if ([port getCharacter:&buffer]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } printf("can we write characters?"); if ([port sendCharacter:'a'] && [port sendCharacter:'t'] && [port sendCharacter:'\r']) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("can we read characters?"); if ([port getCharacter:&a] && [port getCharacter:&b] && [port getCharacter:&c]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("and are they what we expected?"); if (a=='a' && b=='t') { printf(" yes\n"); } else { printf(" NO (sent '\\%d\\%d\\%d', got '\\%d\\%d\\%d')\n", 'a', 't', '\r', a, b, c); count++; } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_flushing(LGDSerialPort *port) { int count = 0; printf("\nTESTING FLUSHING\n"); [port flush]; printf("writing data & flushing immediately..."); [port clearStatus]; [port sendBlock:"at\r" size:3 all:NO]; [port flushOutput]; if ([port status]) { printf("FAILED (error)\n"); count++; } else { printf("succeeded\n"); } printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("was the data echoed back (implying that it got out)?"); if ([port getString:NULL max:0 termChars:""]) { printf(" YES (possible error)\n"); printf( " (This means that either the flush failed, \n" " or the modem was fast enough to get the data \n" " before it was flushed)\n"); count++; } else { printf(" no\n"); } printf("writing..."); if ([port sendString:"at"]) { printf("succeeded\n"); } else { printf("FAILED (error)\n"); count++; } printf("(brief pause to ensure modem has time to respond...)\n"); sleep(1); printf("is there data available?"); if ([port dataAvailable]) { printf(" yes\n"); } else { printf(" NO (error)\n"); count++; } printf("flushing input before reading...\n"); if ([port flushInput]) { printf("succeeded\n"); } else { printf("FAILED (error)\n"); count++; } printf("is there data available?"); if ([port dataAvailable]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } printf("can the data be read?"); if ([port getString:NULL max:0 termChars:""]) { printf(" YES (error)\n"); count++; } else { printf(" no\n"); } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_settings(LGDSerialPort *port) { int count = 0; printf("\nTESTING SETTINGS\n"); [port flush]; printf("(This program does not test any settings)\n"); printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; } int test_signals(LGDSerialPort *port) { int count = 0; char buffer[80]; printf("\nTESTING SIGNALS\n"); [port flush]; printf("dropping DTR..."); if (![port lowerDTR]) { printf("failed\n"); count++; } else { printf("did it drop? (yn):"); scanf("%s", buffer); if (buffer[0]!='y' && buffer[0]=='Y') { count++; } } printf("raising DTR..."); if (![port raiseDTR]) { printf("failed\n"); count++; } else { printf("did it rise? (yn):"); scanf("%s", buffer); if (buffer[0]!='y' && buffer[0]=='Y') { count++; } } printf("raising BREAK..."); if (![port raiseBreak]) { printf("failed\n"); count++; } else { printf("did it rise? (yn):"); scanf("%s", buffer); if (buffer[0]!='y' && buffer[0]=='Y') { count++; } } printf("dropping BREAK..."); if (![port lowerBreak]) { printf("failed\n"); count++; } else { printf("did it drop? (yn):"); scanf("%s", buffer); if (buffer[0]!='y' && buffer[0]=='Y') { count++; } } printf("sending PAUSE..."); if (![port pause]) { printf("failed\n"); count++; } else { printf("succeeded\n"); printf("(brief pause to ensure modem has " "time to respond...)\n"); sleep(1); printf("sending data..."); [port sendString:"at"]; if ([port getString:NULL max:0 termChars:""]) { printf("RESPONSE (error)\n"); count++; } else { printf("no response\n"); } } printf("sending CONTINUE..."); if (![port continue]) { printf("failed\n"); count++; } else { printf("succeeded\n"); printf("(brief pause to ensure modem has " "time to respond...)\n"); sleep(1); printf("fetching data..."); [port sendString:"at"]; if ([port getString:NULL max:0 termChars:""]) { printf("response\n"); } else { printf("NO RESPONSE (error)\n"); count++; } } printf("%d error%s found\n", count, count==1 ? "" : "s"); return count; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.