summaryrefslogtreecommitdiff
path: root/cpp/demo/Freeze
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2007-08-24 14:41:39 +0800
committerMatthew Newhook <matthew@zeroc.com>2007-08-24 14:41:39 +0800
commit9ff48829c8669fbef8c7ca6a9b8bab99c77db2f9 (patch)
tree7fa0a0406be0386a8314b2e8c742f29bf127b70d /cpp/demo/Freeze
parentMerge branch 'bug1319' (diff)
downloadice-9ff48829c8669fbef8c7ca6a9b8bab99c77db2f9.tar.bz2
ice-9ff48829c8669fbef8c7ca6a9b8bab99c77db2f9.tar.xz
ice-9ff48829c8669fbef8c7ca6a9b8bab99c77db2f9.zip
Squashed commit of the following:
commit d74cec9e6c77e70b33883f517b1bb6f97b2ffa5e Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 14:33:06 2007 +0800 updates. commit 643b31f979a00ea5397206ca59f20bb58c62660e Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 14:32:35 2007 +0800 added some .gitignore rules. commit 1510d38798976753b435f32308e79acd9fcd2722 Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 14:05:10 2007 +0800 removed bogus use of 127.0.0.1 commit 3c91e89b01af20a0dacfdbc1fbeca1c67c796656 Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 14:01:43 2007 +0800 Verify that cygwin python is used under Windows. commit ff160725c051eedb28a42d9dd69f0d8aa297e522 Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 13:55:03 2007 +0800 bump timeout for the node to terminate. killing the node leaves the servers running under cygwin commit ec3bddb58e861f906bf39aee1fa818c3e9a50000 Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 13:48:55 2007 +0800 added back accidently removed files. commit f9ea2f552d7f576ebfa878669925f4184a89257b Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 13:47:47 2007 +0800 http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=2427, http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=2422 commit 8a309ca0036dba7ecbd577edb2d737fa41174a5a Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 10:06:53 2007 +0800 added ruby support to the expect scripts. commit 34597c1ee6d80d6754c9e925bd376125dd104a5f Author: Matthew Newhook <matthew@zeroc.com> Date: Fri Aug 24 09:26:10 2007 +0800 added pexpect to git repository. commit 4bd2e1f2b52bcb9906b03ac216db686b8229b545 Author: Matthew Newhook <matthew@zeroc.com> Date: Thu Aug 23 18:49:51 2007 +0800 numerous UNIX expect script fixes. commit 25ab4a812f45a6e908d5d2d7ab03e557d79afa9f Author: Matthew Newhook <matthew@zeroc.com> Date: Thu Aug 23 16:47:08 2007 +0800 generate configuration files for IceGrid icebox/iceboxd commit 6bb57bf7ed21d7256963c228aaf0b20657367a47 Author: Matthew Newhook <matthew@zeroc.com> Date: Thu Aug 23 15:16:55 2007 +0800 added python & C# support to the expect scripts. commit 08f1a59971ad3a52a4357069554dcc309b2d062b Author: Matthew Newhook <matthew@zeroc.com> Date: Wed Aug 22 14:23:53 2007 +0800 java expect scripts complete. commit 3918f4ff3beea3005001bc55c5502c0825d8b7ea Author: Matthew Newhook <matthew@zeroc.com> Date: Wed Aug 22 13:30:31 2007 +0800 first set of expect changes.
Diffstat (limited to 'cpp/demo/Freeze')
-rwxr-xr-xcpp/demo/Freeze/backup/expect.py27
-rwxr-xr-xcpp/demo/Freeze/bench/expect.py3
-rwxr-xr-xcpp/demo/Freeze/customEvictor/expect.py14
-rw-r--r--cpp/demo/Freeze/library/Parser.cpp197
-rw-r--r--cpp/demo/Freeze/library/Parser.h21
-rw-r--r--cpp/demo/Freeze/library/RunParser.cpp122
-rw-r--r--cpp/demo/Freeze/library/Scanner.l32
-rwxr-xr-xcpp/demo/Freeze/library/expect.py17
-rw-r--r--cpp/demo/Freeze/phonebook/Parser.cpp192
-rw-r--r--cpp/demo/Freeze/phonebook/Parser.h20
-rw-r--r--cpp/demo/Freeze/phonebook/RunParser.cpp122
-rw-r--r--cpp/demo/Freeze/phonebook/Scanner.l32
-rwxr-xr-xcpp/demo/Freeze/phonebook/expect.py12
13 files changed, 134 insertions, 677 deletions
diff --git a/cpp/demo/Freeze/backup/expect.py b/cpp/demo/Freeze/backup/expect.py
index 1b37cdc5718..98c530a84e8 100755
--- a/cpp/demo/Freeze/backup/expect.py
+++ b/cpp/demo/Freeze/backup/expect.py
@@ -8,7 +8,7 @@
#
# **********************************************************************
-import pexpect, sys, os
+import sys, os
try:
import demoscript
@@ -23,7 +23,9 @@ except ImportError:
import demoscript
import demoscript.Util
+demoscript.Util.defaultLanguage = "C++"
import signal, time
+import demoscript.pexpect as pexpect
print "cleaning databases...",
sys.stdout.flush()
@@ -49,8 +51,7 @@ print "performing full backup...",
sys.stdout.flush()
backup = demoscript.Util.spawn('./backup full')
backup.expect('hot backup started', timeout=30)
-backup.expect(pexpect.EOF, timeout=30)
-assert backup.wait() == 0
+backup.waitTestSuccess(timeout=30)
print "ok"
print "sleeping 5s...",
@@ -62,7 +63,7 @@ print "performing incremental backup...",
sys.stdout.flush()
backup = demoscript.Util.spawn('./backup incremental')
backup.expect('hot backup started', timeout=30)
-backup.expect(pexpect.EOF, timeout=30)
+backup.waitTestSuccess(timeout=30)
print "ok"
print "sleeping 30s...",
@@ -76,7 +77,8 @@ print "killing client with SIGTERM...",
sys.stdout.flush()
client.kill(signal.SIGTERM)
client.expect(pexpect.EOF, timeout=30)
-assert client.wait() != 0
+client.wait()
+assert client.signalstatus == signal.SIGTERM
print "ok"
print "Client output: ",
@@ -88,9 +90,9 @@ os.system('rm -fr db/data/* db/logs/* db/__*')
os.system('cp -Rp hotbackup/* db')
sys.stdout.flush()
-rclient = demoscript.Util.spawn('./client')
-rclient.expect('(.*)Updating map', timeout=60)
-assert rclient.match.group(1).find('Creating new map') == -1
+client = demoscript.Util.spawn('./client')
+client.expect('(.*)Updating map', timeout=60)
+assert client.match.group(1).find('Creating new map') == -1
print "ok"
print "sleeping 5s...",
@@ -99,10 +101,11 @@ time.sleep(5)
print "ok"
print "killing client with SIGTERM...",
-rclient.kill(signal.SIGTERM)
-rclient.expect(pexpect.EOF, timeout=30)
-assert rclient.wait() != 0
+client.kill(signal.SIGTERM)
+client.expect(pexpect.EOF, timeout=30)
+client.wait()
+assert client.signalstatus == signal.SIGTERM
print "ok"
print "Restarted client output:",
-print "%s " % (rclient.before)
+print "%s " % (client.before)
diff --git a/cpp/demo/Freeze/bench/expect.py b/cpp/demo/Freeze/bench/expect.py
index fa0e0ea8e41..aa61a4b3012 100755
--- a/cpp/demo/Freeze/bench/expect.py
+++ b/cpp/demo/Freeze/bench/expect.py
@@ -8,7 +8,7 @@
#
# **********************************************************************
-import pexpect, sys, os
+import sys, os
try:
import demoscript
@@ -23,6 +23,7 @@ except ImportError:
import demoscript
import demoscript.Util
+demoscript.Util.defaultLanguage = "C++"
import demoscript.Freeze.bench
print "cleaning databases...",
diff --git a/cpp/demo/Freeze/customEvictor/expect.py b/cpp/demo/Freeze/customEvictor/expect.py
index ff7ddf43115..005e9e93ee9 100755
--- a/cpp/demo/Freeze/customEvictor/expect.py
+++ b/cpp/demo/Freeze/customEvictor/expect.py
@@ -8,7 +8,7 @@
#
# **********************************************************************
-import pexpect, sys, os, signal
+import sys, os, signal
try:
import demoscript
@@ -23,6 +23,7 @@ except ImportError:
import demoscript
import demoscript.Util
+demoscript.Util.defaultLanguage = "C++"
if demoscript.Util.isDarwin():
print "This demo is not supported under MacOS."
@@ -38,22 +39,19 @@ server = demoscript.Util.spawn('./server --Ice.PrintAdapterReady')
server.expect(".* ready", timeout=120)
client = demoscript.Util.spawn('./client')
-client.expect(pexpect.EOF, timeout=200)
+client.waitTestSuccess(timeout=8 * 60)
print client.before
server.kill(signal.SIGINT)
-server.expect(pexpect.EOF, timeout=60)
-assert server.wait() == 0
+server.waitTestSuccess(timeout=60)
print "testing simple evictor"
server = demoscript.Util.spawn('./server simple --Ice.PrintAdapterReady')
server.expect(".* ready")
client = demoscript.Util.spawn('./client')
-client.expect(pexpect.EOF, timeout=200)
-assert client.wait() == 0
+client.waitTestSuccess(timeout=8*60)
print client.before
server.kill(signal.SIGINT)
-server.expect(pexpect.EOF, timeout=60)
-assert server.wait() == 0
+server.waitTestSuccess(timeout=60)
diff --git a/cpp/demo/Freeze/library/Parser.cpp b/cpp/demo/Freeze/library/Parser.cpp
index c884b42fd6e..257ac8ca43b 100644
--- a/cpp/demo/Freeze/library/Parser.cpp
+++ b/cpp/demo/Freeze/library/Parser.cpp
@@ -40,10 +40,9 @@ Parser::usage()
"shutdown Shut the library server down.\n";
}
-ParserPtr
-Parser::createParser(const LibraryPrx& library)
+Parser::Parser(const LibraryPrx& library) :
+ _library(library)
{
- return new Parser(library);
}
void
@@ -354,114 +353,73 @@ Parser::shutdown()
void
Parser::getInput(char* buf, int& result, int maxSize)
{
- if(!_commands.empty())
+#ifdef HAVE_READLINE
+
+ const char* prompt = parser->getPrompt();
+ char* line = readline(const_cast<char*>(prompt));
+ if(!line)
{
- if(_commands == ";")
- {
- result = 0;
- }
- else
- {
-#if defined(_MSC_VER) && !defined(_STLP_MSVC)
- // COMPILERBUG: Stupid Visual C++ defines min and max as macros
- result = _MIN(maxSize, static_cast<int>(_commands.length()));
-#else
- result = min(maxSize, static_cast<int>(_commands.length()));
-#endif
- strncpy(buf, _commands.c_str(), result);
- _commands.erase(0, result);
- if(_commands.empty())
- {
- _commands = ";";
- }
- }
+ result = 0;
}
- else if(isatty(fileno(yyin)))
+ else
{
-#ifdef HAVE_READLINE
-
- const char* prompt = parser->getPrompt();
- char* line = readline(const_cast<char*>(prompt));
- if(!line)
+ if(*line)
+ {
+ add_history(line);
+ }
+
+ result = strlen(line) + 1;
+ if(result > maxSize)
{
+ free(line);
+ error("input line too long");
result = 0;
}
else
{
- if(*line)
- {
- add_history(line);
- }
-
- result = strlen(line) + 1;
- if(result > maxSize)
- {
- free(line);
- error("input line too long");
- result = 0;
- }
- else
- {
- strcpy(buf, line);
- strcat(buf, "\n");
- free(line);
- }
+ strcpy(buf, line);
+ strcat(buf, "\n");
+ free(line);
}
-
+ }
+
#else
- cout << parser->getPrompt() << flush;
+ cout << parser->getPrompt() << flush;
- string line;
- while(true)
+ string line;
+ while(true)
+ {
+ char c = static_cast<char>(getc(yyin));
+ if(c == EOF)
{
- char c = static_cast<char>(getc(yyin));
- if(c == EOF)
+ if(line.size())
{
- if(line.size())
- {
- line += '\n';
- }
- break;
+ line += '\n';
}
+ break;
+ }
- line += c;
+ line += c;
- if(c == '\n')
- {
- break;
- }
- }
-
- result = static_cast<int>(line.length());
- if(result > maxSize)
- {
- error("input line too long");
- buf[0] = EOF;
- result = 1;
- }
- else
+ if(c == '\n')
{
- strcpy(buf, line.c_str());
+ break;
}
+ }
-#endif
+ result = static_cast<int>(line.length());
+ if(result > maxSize)
+ {
+ error("input line too long");
+ buf[0] = EOF;
+ result = 1;
}
else
{
- if(((result = static_cast<int>(fread(buf, 1, maxSize, yyin))) == 0) && ferror(yyin))
- {
- error("input in flex scanner failed");
- buf[0] = EOF;
- result = 1;
- }
+ strcpy(buf, line.c_str());
}
-}
-
-void
-Parser::nextLine()
-{
- _currentLine++;
+#endif
}
void
@@ -473,8 +431,6 @@ Parser::continueLine()
const char*
Parser::getPrompt()
{
- assert(_commands.empty() && isatty(fileno(yyin)));
-
if(_continue)
{
_continue = false;
@@ -489,14 +445,7 @@ Parser::getPrompt()
void
Parser::error(const char* s)
{
- if(_commands.empty() && !isatty(fileno(yyin)))
- {
- cerr << _currentFile << ':' << _currentLine << ": " << s << endl;
- }
- else
- {
- cerr << "error: " << s << endl;
- }
+ cerr << "error: " << s << endl;
_errors++;
}
@@ -509,14 +458,7 @@ Parser::error(const string& s)
void
Parser::warning(const char* s)
{
- if(_commands.empty() && !isatty(fileno(yyin)))
- {
- cerr << _currentFile << ':' << _currentLine << ": warning: " << s << endl;
- }
- else
- {
- cerr << "warning: " << s << endl;
- }
+ cerr << "warning: " << s << endl;
}
void
@@ -526,7 +468,7 @@ Parser::warning(const string& s)
}
int
-Parser::parse(FILE* file, bool debug)
+Parser::parse(bool debug)
{
extern int yydebug;
yydebug = debug ? 1 : 0;
@@ -535,46 +477,10 @@ Parser::parse(FILE* file, bool debug)
parser = this;
_errors = 0;
- _commands.empty();
- yyin = file;
+ yyin = stdin;
assert(yyin);
- _currentFile = "";
- _currentLine = 0;
- _continue = false;
- nextLine();
-
- _foundBooks.clear();
- _current = _foundBooks.end();
-
- int status = yyparse();
- if(_errors)
- {
- status = EXIT_FAILURE;
- }
-
- parser = 0;
- return status;
-}
-
-int
-Parser::parse(const string& commands, bool debug)
-{
- extern int yydebug;
- yydebug = debug ? 1 : 0;
-
- assert(!parser);
- parser = this;
-
- _errors = 0;
- _commands = commands;
- assert(!_commands.empty());
- yyin = 0;
-
- _currentFile = "<command line>";
- _currentLine = 0;
_continue = false;
- nextLine();
_foundBooks.clear();
_current = _foundBooks.end();
@@ -588,8 +494,3 @@ Parser::parse(const string& commands, bool debug)
parser = 0;
return status;
}
-
-Parser::Parser(const LibraryPrx& library) :
- _library(library)
-{
-}
diff --git a/cpp/demo/Freeze/library/Parser.h b/cpp/demo/Freeze/library/Parser.h
index 0cb997203f4..6acc6283938 100644
--- a/cpp/demo/Freeze/library/Parser.h
+++ b/cpp/demo/Freeze/library/Parser.h
@@ -15,16 +15,6 @@
#include <list>
#include <stdio.h>
-#ifdef _WIN32
-# include <io.h>
-# ifdef _MSC_VER
-# define isatty _isatty
-# define fileno _fileno
-// '_isatty' : inconsistent dll linkage. dllexport assumed.
-# pragma warning( disable : 4273 )
-# endif
-#endif
-
//
// Stuff for flex and bison
//
@@ -57,7 +47,7 @@ class Parser : public IceUtil::SimpleShared
{
public:
- static ParserPtr createParser(const Demo::LibraryPrx&);
+ Parser(const Demo::LibraryPrx&);
void usage();
@@ -73,7 +63,6 @@ public:
void shutdown();
void getInput(char*, int&, int);
- void nextLine();
void continueLine();
const char* getPrompt();
@@ -83,22 +72,16 @@ public:
void warning(const char*);
void warning(const std::string&);
- int parse(FILE*, bool);
- int parse(const std::string&, bool);
+ int parse(bool = false);
private:
- Parser(const Demo::LibraryPrx&);
-
Demo::BookPrxSeq _foundBooks;
Demo::BookPrxSeq::iterator _current;
- std::string _commands;
const Demo::LibraryPrx _library;
bool _continue;
int _errors;
- int _currentLine;
- std::string _currentFile;
};
extern Parser* parser; // The current parser for bison/flex
diff --git a/cpp/demo/Freeze/library/RunParser.cpp b/cpp/demo/Freeze/library/RunParser.cpp
index 034a708e745..4cb286f04cf 100644
--- a/cpp/demo/Freeze/library/RunParser.cpp
+++ b/cpp/demo/Freeze/library/RunParser.cpp
@@ -13,84 +13,9 @@
using namespace std;
using namespace Demo;
-void
-usage(const char* appName)
-{
- cerr << "Usage: " << appName << " [options] [file...]\n";
- cerr <<
- "Options:\n"
- "-h, --help Show this message.\n"
- "-v, --version Display the Ice version.\n"
- "-e COMMANDS Execute COMMANDS.\n"
- "-d, --debug Print debug messages.\n"
- ;
-}
-
int
runParser(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
{
- string commands;
- bool debug = false;
-
- int idx = 1;
- while(idx < argc)
- {
- if(strcmp(argv[idx], "-h") == 0 || strcmp(argv[idx], "--help") == 0)
- {
- usage(argv[0]);
- return EXIT_SUCCESS;
- }
- else if(strcmp(argv[idx], "-v") == 0 || strcmp(argv[idx], "--version") == 0)
- {
- cout << ICE_STRING_VERSION << endl;
- return EXIT_SUCCESS;
- }
- else if(strcmp(argv[idx], "-e") == 0)
- {
- if(idx + 1 >= argc)
- {
- cerr << argv[0] << ": argument expected for`" << argv[idx] << "'" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
- commands += argv[idx + 1];
- commands += ';';
-
- for(int i = idx ; i + 2 < argc ; ++i)
- {
- argv[i] = argv[i + 2];
- }
- argc -= 2;
- }
- else if(strcmp(argv[idx], "-d") == 0 || strcmp(argv[idx], "--debug") == 0)
- {
- debug = true;
- for(int i = idx ; i + 1 < argc ; ++i)
- {
- argv[i] = argv[i + 1];
- }
- --argc;
- }
- else if(argv[idx][0] == '-')
- {
- cerr << argv[0] << ": unknown option `" << argv[idx] << "'" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
- else
- {
- ++idx;
- }
- }
-
- if(argc >= 2 && !commands.empty())
- {
- cerr << argv[0] << ": `-e' option cannot be used if input files are given" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
LibraryPrx library = LibraryPrx::checkedCast(communicator->propertyToProxy("Library.Proxy"));
if(!library)
{
@@ -98,49 +23,6 @@ runParser(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
return EXIT_FAILURE;
}
- ParserPtr p = Parser::createParser(library);
- int status = EXIT_SUCCESS;
-
- if(argc < 2) // No files given
- {
- if(!commands.empty()) // Commands were given
- {
- int parseStatus = p->parse(commands, debug);
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- else // No commands, let's use standard input
- {
- int parseStatus = p->parse(stdin, debug);
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- }
- else // Process files given on the command line
- {
- for(idx = 1 ; idx < argc ; ++idx)
- {
- FILE* file = fopen(argv[idx], "r");
- if(file == NULL)
- {
- cerr << argv[0] << ": can't open file `" << argv[idx] << "': " << strerror(errno) << endl;
- return EXIT_FAILURE;
- }
-
- int parseStatus = p->parse(file, debug);
-
- fclose(file);
-
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- }
-
- return status;
+ ParserPtr p = new Parser(library);
+ return p->parse();
}
diff --git a/cpp/demo/Freeze/library/Scanner.l b/cpp/demo/Freeze/library/Scanner.l
index dc635df98f7..88645927ce1 100644
--- a/cpp/demo/Freeze/library/Scanner.l
+++ b/cpp/demo/Freeze/library/Scanner.l
@@ -40,10 +40,6 @@ NL [\n]
do
{
c = yyinput();
- if(c == '\n')
- {
- parser->nextLine();
- }
}
while(c != '\n' && c != EOF);
}
@@ -53,11 +49,7 @@ NL [\n]
while(true)
{
int c = yyinput();
- if(c == '\n')
- {
- parser->nextLine();
- }
- else if(c == '*')
+ if(c == '*')
{
int next = yyinput();
if(next == '/')
@@ -133,22 +125,10 @@ NL [\n]
{
parser->continueLine();
}
- else if(yytext[i] == '\n')
- {
- parser->nextLine();
- }
}
}
{NL}|; {
- size_t len = strlen(yytext);
- for(size_t i = 0; i < len; ++i)
- {
- if(yytext[i] == '\n')
- {
- parser->nextLine();
- }
- }
return ';';
}
@@ -167,11 +147,6 @@ NL [\n]
parser->warning("EOF in string");
break;
}
- else if(c == '\n')
- {
- s += c;
- parser->nextLine();
- }
else if(c == '\\')
{
char next = static_cast<char>(yyinput());
@@ -246,11 +221,6 @@ NL [\n]
parser->warning("EOF in string");
break;
}
- else if(c == '\n')
- {
- s += c;
- parser->nextLine();
- }
else
{
s += c;
diff --git a/cpp/demo/Freeze/library/expect.py b/cpp/demo/Freeze/library/expect.py
index 4e75062933c..4251370723e 100755
--- a/cpp/demo/Freeze/library/expect.py
+++ b/cpp/demo/Freeze/library/expect.py
@@ -8,7 +8,7 @@
#
# **********************************************************************
-import pexpect, sys, os
+import sys, os
try:
import demoscript
@@ -23,6 +23,7 @@ except ImportError:
import demoscript
import demoscript.Util
+demoscript.Util.defaultLanguage = "C++"
import demoscript.Freeze.library
print "cleaning databases...",
@@ -33,18 +34,10 @@ print "ok"
server = demoscript.Util.spawn('./server --Ice.PrintAdapterReady --Freeze.Trace.Evictor=0 --Freeze.Trace.DbEnv=0')
server.expect('.* ready')
client = demoscript.Util.spawn('./client')
-client.expect('>>> ')
+client.expect('>')
demoscript.Freeze.library.run(client, server)
-client.sendline('shutdown')
-server.expect(pexpect.EOF)
-assert server.wait() == 0
-
-client.sendline('exit')
-client.expect(pexpect.EOF)
-assert server.wait() == 0
-
print "running with collocated server"
print "cleaning databases...",
@@ -56,7 +49,3 @@ server = demoscript.Util.spawn('./collocated --Freeze.Trace.Evictor=0 --Freeze.T
server.expect('>>> ')
demoscript.Freeze.library.run(server, server)
-
-server.sendline('exit')
-server.expect(pexpect.EOF)
-assert server.wait() == 0
diff --git a/cpp/demo/Freeze/phonebook/Parser.cpp b/cpp/demo/Freeze/phonebook/Parser.cpp
index a93bab7648d..d041f001ffa 100644
--- a/cpp/demo/Freeze/phonebook/Parser.cpp
+++ b/cpp/demo/Freeze/phonebook/Parser.cpp
@@ -41,10 +41,9 @@ Parser::usage()
"shutdown Shut the phonebook server down.\n";
}
-ParserPtr
-Parser::createParser(const PhoneBookPrx& phoneBook)
+Parser::Parser(const PhoneBookPrx& phoneBook) :
+ _phoneBook(phoneBook)
{
- return new Parser(phoneBook);
}
void
@@ -333,114 +332,73 @@ Parser::shutdown()
void
Parser::getInput(char* buf, int& result, int maxSize)
{
- if(!_commands.empty())
+#ifdef HAVE_READLINE
+
+ const char* prompt = parser->getPrompt();
+ char* line = readline(const_cast<char*>(prompt));
+ if(!line)
{
- if(_commands == ";")
- {
- result = 0;
- }
- else
- {
-#if defined(_MSC_VER) && !defined(_STLP_MSVC)
- // COMPILERBUG: Stupid Visual C++ defines min and max as macros
- result = _MIN(maxSize, static_cast<int>(_commands.length()));
-#else
- result = min(maxSize, static_cast<int>(_commands.length()));
-#endif
- strncpy(buf, _commands.c_str(), result);
- _commands.erase(0, result);
- if(_commands.empty())
- {
- _commands = ";";
- }
- }
+ result = 0;
}
- else if(isatty(fileno(yyin)))
+ else
{
-#ifdef HAVE_READLINE
+ if(*line)
+ {
+ add_history(line);
+ }
- const char* prompt = parser->getPrompt();
- char* line = readline(const_cast<char*>(prompt));
- if(!line)
+ result = strlen(line) + 1;
+ if(result > maxSize)
{
+ free(line);
+ error("input line too long");
result = 0;
}
else
{
- if(*line)
- {
- add_history(line);
- }
-
- result = strlen(line) + 1;
- if(result > maxSize)
- {
- free(line);
- error("input line too long");
- result = 0;
- }
- else
- {
- strcpy(buf, line);
- strcat(buf, "\n");
- free(line);
- }
+ strcpy(buf, line);
+ strcat(buf, "\n");
+ free(line);
}
+ }
#else
- cout << parser->getPrompt() << flush;
+ cout << parser->getPrompt() << flush;
- string line;
- while(true)
+ string line;
+ while(true)
+ {
+ char c = static_cast<char>(getc(yyin));
+ if(c == EOF)
{
- char c = static_cast<char>(getc(yyin));
- if(c == EOF)
+ if(line.size())
{
- if(line.size())
- {
- line += '\n';
- }
- break;
+ line += '\n';
}
+ break;
+ }
- line += c;
+ line += c;
- if(c == '\n')
- {
- break;
- }
- }
-
- result = static_cast<int>(line.length());
- if(result > maxSize)
- {
- error("input line too long");
- buf[0] = EOF;
- result = 1;
- }
- else
+ if(c == '\n')
{
- strcpy(buf, line.c_str());
+ break;
}
+ }
-#endif
+ result = static_cast<int>(line.length());
+ if(result > maxSize)
+ {
+ error("input line too long");
+ buf[0] = EOF;
+ result = 1;
}
else
{
- if(((result = static_cast<int>(fread(buf, 1, maxSize, yyin))) == 0) && ferror(yyin))
- {
- error("input in flex scanner failed");
- buf[0] = EOF;
- result = 1;
- }
+ strcpy(buf, line.c_str());
}
-}
-
-void
-Parser::nextLine()
-{
- _currentLine++;
+#endif
}
void
@@ -452,8 +410,6 @@ Parser::continueLine()
const char*
Parser::getPrompt()
{
- assert(_commands.empty() && isatty(fileno(yyin)));
-
if(_continue)
{
_continue = false;
@@ -468,14 +424,7 @@ Parser::getPrompt()
void
Parser::error(const char* s)
{
- if(_commands.empty() && !isatty(fileno(yyin)))
- {
- cerr << _currentFile << ':' << _currentLine << ": " << s << endl;
- }
- else
- {
- cerr << "error: " << s << endl;
- }
+ cerr << "error: " << s << endl;
_errors++;
}
@@ -488,14 +437,7 @@ Parser::error(const string& s)
void
Parser::warning(const char* s)
{
- if(_commands.empty() && !isatty(fileno(yyin)))
- {
- cerr << _currentFile << ':' << _currentLine << ": warning: " << s << endl;
- }
- else
- {
- cerr << "warning: " << s << endl;
- }
+ cerr << "warning: " << s << endl;
}
void
@@ -505,7 +447,7 @@ Parser::warning(const string& s)
}
int
-Parser::parse(FILE* file, bool debug)
+Parser::parse(bool debug)
{
extern int yydebug;
yydebug = debug ? 1 : 0;
@@ -514,46 +456,10 @@ Parser::parse(FILE* file, bool debug)
parser = this;
_errors = 0;
- _commands.empty();
- yyin = file;
+ yyin = stdin;
assert(yyin);
- _currentFile = "";
- _currentLine = 0;
- _continue = false;
- nextLine();
-
- _foundContacts.clear();
- _current = _foundContacts.end();
-
- int status = yyparse();
- if(_errors)
- {
- status = EXIT_FAILURE;
- }
-
- parser = 0;
- return status;
-}
-
-int
-Parser::parse(const string& commands, bool debug)
-{
- extern int yydebug;
- yydebug = debug ? 1 : 0;
-
- assert(!parser);
- parser = this;
-
- _errors = 0;
- _commands = commands;
- assert(!_commands.empty());
- yyin = 0;
-
- _currentFile = "<command line>";
- _currentLine = 0;
_continue = false;
- nextLine();
_foundContacts.clear();
_current = _foundContacts.end();
@@ -568,7 +474,3 @@ Parser::parse(const string& commands, bool debug)
return status;
}
-Parser::Parser(const PhoneBookPrx& phoneBook) :
- _phoneBook(phoneBook)
-{
-}
diff --git a/cpp/demo/Freeze/phonebook/Parser.h b/cpp/demo/Freeze/phonebook/Parser.h
index 5f5dfe2ba7d..5e889a02a35 100644
--- a/cpp/demo/Freeze/phonebook/Parser.h
+++ b/cpp/demo/Freeze/phonebook/Parser.h
@@ -15,16 +15,6 @@
#include <list>
#include <stdio.h>
-#ifdef _WIN32
-# include <io.h>
-# ifdef _MSC_VER
-# define isatty _isatty
-# define fileno _fileno
-// '_isatty' : inconsistent dll linkage. dllexport assumed.
-# pragma warning( disable : 4273 )
-# endif
-#endif
-
//
// Stuff for flex and bison
//
@@ -57,7 +47,7 @@ class Parser : public ::IceUtil::SimpleShared
{
public:
- static ParserPtr createParser(const Demo::PhoneBookPrx&);
+ Parser(const Demo::PhoneBookPrx&);
void usage();
@@ -73,7 +63,6 @@ public:
void shutdown();
void getInput(char*, int&, int);
- void nextLine();
void continueLine();
const char* getPrompt();
@@ -83,22 +72,17 @@ public:
void warning(const char*);
void warning(const std::string&);
- int parse(FILE*, bool);
- int parse(const std::string&, bool);
+ int parse(bool = false);
private:
- Parser(const Demo::PhoneBookPrx&);
Demo::Contacts _foundContacts;
Demo::Contacts::iterator _current;
- std::string _commands;
const Demo::PhoneBookPrx _phoneBook;
bool _continue;
int _errors;
- int _currentLine;
- std::string _currentFile;
};
extern Parser* parser; // The current parser for bison/flex
diff --git a/cpp/demo/Freeze/phonebook/RunParser.cpp b/cpp/demo/Freeze/phonebook/RunParser.cpp
index 6fce1244c50..17a5f4a61e7 100644
--- a/cpp/demo/Freeze/phonebook/RunParser.cpp
+++ b/cpp/demo/Freeze/phonebook/RunParser.cpp
@@ -13,84 +13,9 @@
using namespace std;
using namespace Demo;
-void
-usage(const char* appName)
-{
- cerr << "Usage: " << appName << " [options] [file...]\n";
- cerr <<
- "Options:\n"
- "-h, --help Show this message.\n"
- "-v, --version Display the Ice version.\n"
- "-e COMMANDS Execute COMMANDS.\n"
- "-d, --debug Print debug messages.\n"
- ;
-}
-
int
runParser(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
{
- string commands;
- bool debug = false;
-
- int idx = 1;
- while(idx < argc)
- {
- if(strcmp(argv[idx], "-h") == 0 || strcmp(argv[idx], "--help") == 0)
- {
- usage(argv[0]);
- return EXIT_SUCCESS;
- }
- else if(strcmp(argv[idx], "-v") == 0 || strcmp(argv[idx], "--version") == 0)
- {
- cout << ICE_STRING_VERSION << endl;
- return EXIT_SUCCESS;
- }
- else if(strcmp(argv[idx], "-e") == 0)
- {
- if(idx + 1 >= argc)
- {
- cerr << argv[0] << ": argument expected for`" << argv[idx] << "'" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
- commands += argv[idx + 1];
- commands += ';';
-
- for(int i = idx ; i + 2 < argc ; ++i)
- {
- argv[i] = argv[i + 2];
- }
- argc -= 2;
- }
- else if(strcmp(argv[idx], "-d") == 0 || strcmp(argv[idx], "--debug") == 0)
- {
- debug = true;
- for(int i = idx ; i + 1 < argc ; ++i)
- {
- argv[i] = argv[i + 1];
- }
- --argc;
- }
- else if(argv[idx][0] == '-')
- {
- cerr << argv[0] << ": unknown option `" << argv[idx] << "'" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
- else
- {
- ++idx;
- }
- }
-
- if(argc >= 2 && !commands.empty())
- {
- cerr << argv[0] << ": `-e' option cannot be used if input files are given" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
PhoneBookPrx phoneBook = PhoneBookPrx::checkedCast(communicator->propertyToProxy("PhoneBook.Proxy"));
if(!phoneBook)
{
@@ -98,49 +23,6 @@ runParser(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
return EXIT_FAILURE;
}
- ParserPtr p = Parser::createParser(phoneBook);
- int status = EXIT_SUCCESS;
-
- if(argc < 2) // No files given
- {
- if(!commands.empty()) // Commands were given
- {
- int parseStatus = p->parse(commands, debug);
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- else // No commands, let's use standard input
- {
- int parseStatus = p->parse(stdin, debug);
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- }
- else // Process files given on the command line
- {
- for(idx = 1 ; idx < argc ; ++idx)
- {
- FILE* file = fopen(argv[idx], "r");
- if(file == NULL)
- {
- cerr << argv[0] << ": can't open file `" << argv[idx] << "': " << strerror(errno) << endl;
- return EXIT_FAILURE;
- }
-
- int parseStatus = p->parse(file, debug);
-
- fclose(file);
-
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- }
- }
-
- return status;
+ ParserPtr p = new Parser(phoneBook);
+ return p->parse();
}
diff --git a/cpp/demo/Freeze/phonebook/Scanner.l b/cpp/demo/Freeze/phonebook/Scanner.l
index 8fccc203d10..69b015c1c3e 100644
--- a/cpp/demo/Freeze/phonebook/Scanner.l
+++ b/cpp/demo/Freeze/phonebook/Scanner.l
@@ -40,10 +40,6 @@ NL [\n]
do
{
c = yyinput();
- if(c == '\n')
- {
- parser->nextLine();
- }
}
while(c != '\n' && c != EOF);
}
@@ -53,11 +49,7 @@ NL [\n]
while(true)
{
int c = yyinput();
- if(c == '\n')
- {
- parser->nextLine();
- }
- else if(c == '*')
+ if(c == '*')
{
int next = yyinput();
if(next == '/')
@@ -133,22 +125,10 @@ NL [\n]
{
parser->continueLine();
}
- else if(yytext[i] == '\n')
- {
- parser->nextLine();
- }
}
}
{NL}|; {
- size_t len = strlen(yytext);
- for(size_t i = 0; i < len; ++i)
- {
- if(yytext[i] == '\n')
- {
- parser->nextLine();
- }
- }
return ';';
}
@@ -167,11 +147,6 @@ NL [\n]
parser->warning("EOF in string");
break;
}
- else if(c == '\n')
- {
- s += c;
- parser->nextLine();
- }
else if(c == '\\')
{
char next = static_cast<char>(yyinput());
@@ -246,11 +221,6 @@ NL [\n]
parser->warning("EOF in string");
break;
}
- else if(c == '\n')
- {
- s += c;
- parser->nextLine();
- }
else
{
s += c;
diff --git a/cpp/demo/Freeze/phonebook/expect.py b/cpp/demo/Freeze/phonebook/expect.py
index 1bf5b900509..a5ace6318c0 100755
--- a/cpp/demo/Freeze/phonebook/expect.py
+++ b/cpp/demo/Freeze/phonebook/expect.py
@@ -8,7 +8,7 @@
#
# **********************************************************************
-import pexpect, sys, os
+import sys, os
try:
import demoscript
@@ -23,6 +23,7 @@ except ImportError:
import demoscript
import demoscript.Util
+demoscript.Util.defaultLanguage = "C++"
import demoscript.Freeze.phonebook
print "cleaning databases...",
@@ -37,12 +38,6 @@ client.expect('>>> ')
demoscript.Freeze.phonebook.run(client, server)
-client.sendline('shutdown')
-server.expect(pexpect.EOF)
-
-client.sendline('exit')
-client.expect(pexpect.EOF)
-
print "running with collocated server"
print "cleaning databases...",
@@ -54,6 +49,3 @@ server = demoscript.Util.spawn('./collocated --Freeze.Trace.Evictor=0 --Freeze.T
server.expect('>>> ')
demoscript.Freeze.phonebook.run(server, server)
-
-server.sendline('exit')
-server.expect(pexpect.EOF)