本文整理汇总了C++中ice::StringSeq::size方法的典型用法代码示例。如果您正苦于以下问题:C++ StringSeq::size方法的具体用法?C++ StringSeq::size怎么用?C++ StringSeq::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ice::StringSeq
的用法示例。
在下文中一共展示了StringSeq::size方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assert
int
main(int argc, char* argv[])
#endif
{
Ice::StringSeq args = Ice::argsToStringSeq(argc, argv);
assert(args.size() > 0);
const string appName = args[0];
Ice::InitializationData initData;
FreezeScript::CompactIdResolverIPtr resolver = new FreezeScript::CompactIdResolverI;
initData.compactIdResolver = resolver;
Ice::CommunicatorPtr communicator;
int status = EXIT_SUCCESS;
try
{
communicator = Ice::initialize(args, initData);
status = run(args, communicator, resolver);
}
catch(const FreezeScript::FailureException& ex)
{
string reason = ex.reason();
cerr << appName << ": " << reason;
if(reason[reason.size() - 1] != '\n')
{
cerr << endl;
}
return EXIT_FAILURE;
}
catch(const std::exception& ex)
{
cerr << appName << ": " << ex.what() << endl;
status = EXIT_FAILURE;
}
catch(...)
{
cerr << appName << ": unknown error" << endl;
return EXIT_FAILURE;
}
if(communicator)
{
communicator->destroy();
}
return status;
}
示例2: test
GPrxPtr
allTests(const Ice::CommunicatorPtr& communicator)
{
#ifdef ICE_OS_UWP
bool uwp = true;
#else
bool uwp = false;
#endif
cout << "testing Ice.Admin.Facets property... " << flush;
test(communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets").empty());
communicator->getProperties()->setProperty("Ice.Admin.Facets", "foobar");
Ice::StringSeq facetFilter = communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets");
test(facetFilter.size() == 1 && facetFilter[0] == "foobar");
communicator->getProperties()->setProperty("Ice.Admin.Facets", "foo\\'bar");
facetFilter = communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets");
test(facetFilter.size() == 1 && facetFilter[0] == "foo'bar");
communicator->getProperties()->setProperty("Ice.Admin.Facets", "'foo bar' toto 'titi'");
facetFilter = communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets");
test(facetFilter.size() == 3 && facetFilter[0] == "foo bar" && facetFilter[1] == "toto" &&
facetFilter[2] == "titi");
communicator->getProperties()->setProperty("Ice.Admin.Facets", "'foo bar\\' toto' 'titi'");
facetFilter = communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets");
test(facetFilter.size() == 2 && facetFilter[0] == "foo bar' toto" && facetFilter[1] == "titi");
// communicator->getProperties()->setProperty("Ice.Admin.Facets", "'foo bar' 'toto titi");
// facetFilter = communicator->getProperties()->getPropertyAsList("Ice.Admin.Facets");
// test(facetFilter.size() == 0);
communicator->getProperties()->setProperty("Ice.Admin.Facets", "");
cout << "ok" << endl;
cout << "testing facet registration exceptions... " << flush;
string localOAEndpoint;
{
ostringstream ostr;
if(communicator->getProperties()->getProperty("Ice.Default.Protocol") == "bt")
{
ostr << "default -a *";
}
else
{
ostr << "default -h *";
}
localOAEndpoint = ostr.str();
}
communicator->getProperties()->setProperty("FacetExceptionTestAdapter.Endpoints", localOAEndpoint);
if(uwp || (communicator->getProperties()->getProperty("Ice.Default.Protocol") != "ssl" &&
communicator->getProperties()->getProperty("Ice.Default.Protocol") != "wss"))
{
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("FacetExceptionTestAdapter");
Ice::ObjectPtr obj = ICE_MAKE_SHARED(EmptyI);
adapter->add(obj, Ice::stringToIdentity("d"));
adapter->addFacet(obj, Ice::stringToIdentity("d"), "facetABCD");
try
{
adapter->addFacet(obj, Ice::stringToIdentity("d"), "facetABCD");
test(false);
}
catch(const Ice::AlreadyRegisteredException&)
{
}
adapter->removeFacet(Ice::stringToIdentity("d"), "facetABCD");
try
{
adapter->removeFacet(Ice::stringToIdentity("d"), "facetABCD");
test(false);
}
catch(const Ice::NotRegisteredException&)
{
}
cout << "ok" << endl;
cout << "testing removeAllFacets... " << flush;
Ice::ObjectPtr obj1 = ICE_MAKE_SHARED(EmptyI);
Ice::ObjectPtr obj2 = ICE_MAKE_SHARED(EmptyI);
adapter->addFacet(obj1, Ice::stringToIdentity("id1"), "f1");
adapter->addFacet(obj2, Ice::stringToIdentity("id1"), "f2");
Ice::ObjectPtr obj3 = ICE_MAKE_SHARED(EmptyI);
adapter->addFacet(obj1, Ice::stringToIdentity("id2"), "f1");
adapter->addFacet(obj2, Ice::stringToIdentity("id2"), "f2");
adapter->addFacet(obj3, Ice::stringToIdentity("id2"), "");
Ice::FacetMap fm = adapter->removeAllFacets(Ice::stringToIdentity("id1"));
test(fm.size() == 2);
test(fm["f1"] == obj1);
test(fm["f2"] == obj2);
try
{
adapter->removeAllFacets(Ice::stringToIdentity("id1"));
test(false);
}
catch(const Ice::NotRegisteredException&)
{
}
fm = adapter->removeAllFacets(Ice::stringToIdentity("id2"));
test(fm.size() == 3);
test(fm["f1"] == obj1);
test(fm["f2"] == obj2);
test(fm[""] == obj3);
cout << "ok" << endl;
adapter->deactivate();
//.........这里部分代码省略.........
示例3: if
//.........这里部分代码省略.........
}
}
//
// We always supply our own implementation of ValueFactoryManager.
//
data.valueFactoryManager = new ValueFactoryManager;
if(!data.properties)
{
data.properties = Ice::createProperties();
}
if(configFile)
{
data.properties->load(getString(configFile));
}
if(argList)
{
data.properties = Ice::createProperties(seq, data.properties);
}
}
catch(const Ice::Exception& ex)
{
setPythonException(ex);
return -1;
}
//
// Remaining command line options are passed to the communicator
// as an argument vector in case they contain plug-in properties.
//
int argc = static_cast<int>(seq.size());
char** argv = new char*[argc + 1];
int i = 0;
for(Ice::StringSeq::const_iterator s = seq.begin(); s != seq.end(); ++s, ++i)
{
argv[i] = strdup(s->c_str());
}
argv[argc] = 0;
data.compactIdResolver = new IdResolver;
Ice::CommunicatorPtr communicator;
try
{
AllowThreads allowThreads;
if(argList)
{
communicator = Ice::initialize(argc, argv, data);
}
else
{
communicator = Ice::initialize(data);
}
}
catch(const Ice::Exception& ex)
{
for(i = 0; i < argc; ++i)
{
free(argv[i]);
}
delete[] argv;
setPythonException(ex);
示例4: ds
void
twoways(const Ice::CommunicatorPtr& communicator, const Test::MyClassPrxPtr& p)
{
{
p->ice_ping();
}
{
#ifdef ICE_CPP11_MAPPING
test(Test::MyClassPrx::ice_staticId() == Test::MyClassDisp::ice_staticId());
#else
test(Test::MyClassPrx::ice_staticId() == Test::MyClass::ice_staticId());
#endif
test(Ice::ObjectPrx::ice_staticId() == Ice::Object::ice_staticId());
}
{
test(p->ice_isA(Test::MyClass::ice_staticId()));
}
{
test(p->ice_id() == Test::MyDerivedClass::ice_staticId());
}
{
Ice::StringSeq ids = p->ice_ids();
test(ids.size() == 3);
test(ids[0] == "::Ice::Object");
test(ids[1] == "::Test::MyClass");
test(ids[2] == "::Test::MyDerivedClass");
}
{
p->opVoid();
}
{
Ice::Byte b;
Ice::Byte r;
r = p->opByte(Ice::Byte(0xff), Ice::Byte(0x0f), b);
test(b == Ice::Byte(0xf0));
test(r == Ice::Byte(0xff));
}
{
bool b;
bool r;
r = p->opBool(true, false, b);
test(b);
test(!r);
}
{
Ice::Short s;
Ice::Int i;
Ice::Long l;
Ice::Long r;
r = p->opShortIntLong(10, 11, 12, s, i, l);
test(s == 10);
test(i == 11);
test(l == 12);
test(r == 12);
r = p->opShortIntLong(numeric_limits<Ice::Short>::min(), numeric_limits<Ice::Int>::min(),
numeric_limits<Ice::Long>::min(), s, i, l);
test(s == numeric_limits<Ice::Short>::min());
test(i == numeric_limits<Ice::Int>::min());
test(l == numeric_limits<Ice::Long>::min());
test(r == numeric_limits<Ice::Long>::min());
r = p->opShortIntLong(numeric_limits<Ice::Short>::max(), numeric_limits<Ice::Int>::max(),
numeric_limits<Ice::Long>::max(), s, i, l);
test(s == numeric_limits<Ice::Short>::max());
test(i == numeric_limits<Ice::Int>::max());
test(l == numeric_limits<Ice::Long>::max());
test(r == numeric_limits<Ice::Long>::max());
}
{
Ice::Float f;
Ice::Double d;
Ice::Double r;
r = p->opFloatDouble(Ice::Float(3.14), Ice::Double(1.1E10), f, d);
test(f == Ice::Float(3.14));
test(d == Ice::Double(1.1E10));
test(r == Ice::Double(1.1E10));
r = p->opFloatDouble(numeric_limits<Ice::Float>::min(), numeric_limits<Ice::Double>::min(), f, d);
test(f == numeric_limits<Ice::Float>::min());
test(d == numeric_limits<Ice::Double>::min());
test(r == numeric_limits<Ice::Double>::min());
r = p->opFloatDouble(numeric_limits<Ice::Float>::max(), numeric_limits<Ice::Double>::max(), f, d);
test(f == numeric_limits<Ice::Float>::max());
test(d == numeric_limits<Ice::Double>::max());
test(r == numeric_limits<Ice::Double>::max());
//.........这里部分代码省略.........
示例5: test
void
allTests(const Ice::CommunicatorPtr& communicator)
{
string ref = "DemoIceBox/admin:default -p 9996 -t 10000";
Ice::ObjectPrx admin = communicator->stringToProxy(ref);
TestFacetPrx facet;
cout << "testing custom facet... " << flush;
{
//
// Test: Verify that the custom facet is present.
//
facet = Test::TestFacetPrx::checkedCast(admin, "TestFacet");
facet->ice_ping();
}
cout << "ok" << endl;
cout << "testing properties facet... " << flush;
{
Ice::PropertiesAdminPrx pa =
Ice::PropertiesAdminPrx::checkedCast(admin, "IceBox.Service.TestService.Properties");
//
// Test: PropertiesAdmin::getProperty()
//
test(pa->getProperty("Prop1") == "1");
test(pa->getProperty("Bogus") == "");
//
// Test: PropertiesAdmin::getProperties()
//
Ice::PropertyDict pd = pa->getPropertiesForPrefix("");
test(pd.size() == 5);
test(pd["Prop1"] == "1");
test(pd["Prop2"] == "2");
test(pd["Prop3"] == "3");
test(pd["Ice.Config"] == "config.service");
test(pd["Ice.ProgramName"] == "IceBox-TestService");
Ice::PropertyDict changes;
//
// Test: PropertiesAdmin::setProperties()
//
Ice::PropertyDict setProps;
setProps["Prop1"] = "10"; // Changed
setProps["Prop2"] = "20"; // Changed
setProps["Prop3"] = ""; // Removed
setProps["Prop4"] = "4"; // Added
setProps["Prop5"] = "5"; // Added
pa->setProperties(setProps);
test(pa->getProperty("Prop1") == "10");
test(pa->getProperty("Prop2") == "20");
test(pa->getProperty("Prop3") == "");
test(pa->getProperty("Prop4") == "4");
test(pa->getProperty("Prop5") == "5");
changes = facet->getChanges();
test(changes.size() == 5);
test(changes["Prop1"] == "10");
test(changes["Prop2"] == "20");
test(changes["Prop3"] == "");
test(changes["Prop4"] == "4");
test(changes["Prop5"] == "5");
pa->setProperties(setProps);
changes = facet->getChanges();
test(changes.empty());
}
cout << "ok" << endl;
cout << "testing metrics admin facet... " << flush;
{
IceMX::MetricsAdminPrx ma = IceMX::MetricsAdminPrx::checkedCast(admin, "IceBox.Service.TestService.Metrics");
Ice::PropertiesAdminPrx pa =
Ice::PropertiesAdminPrx::checkedCast(admin, "IceBox.Service.TestService.Properties");
Ice::StringSeq views;
Ice::StringSeq disabledViews;
views = ma->getMetricsViewNames(disabledViews);
test(views.empty());
Ice::PropertyDict setProps;
setProps["IceMX.Metrics.Debug.GroupBy"] = "id";
setProps["IceMX.Metrics.All.GroupBy"] = "none";
setProps["IceMX.Metrics.Parent.GroupBy"] = "parent";
pa->setProperties(setProps);
pa->setProperties(Ice::PropertyDict());
views = ma->getMetricsViewNames(disabledViews);
test(views.size() == 3);
// Make sure that the IceBox communicator metrics admin is a separate instance.
test(IceMX::MetricsAdminPrx::checkedCast(admin, "Metrics")->getMetricsViewNames(disabledViews).empty());
}
cout << "ok" << endl;
}
示例6: c
MetricsPrx
allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPtr& obsv)
{
MetricsPrx metrics = MetricsPrx::checkedCast(communicator->stringToProxy("metrics:default -p 12010"));
cout << "testing metrics admin facet checkedCast... " << flush;
Ice::ObjectPrx admin = communicator->getAdmin()->ice_collocationOptimized(false);
Ice::PropertiesAdminPrx clientProps = Ice::PropertiesAdminPrx::checkedCast(admin, "Properties");
IceMX::MetricsAdminPrx clientMetrics = IceMX::MetricsAdminPrx::checkedCast(admin, "Metrics");
test(clientProps && clientMetrics);
admin = metrics->getAdmin();
Ice::PropertiesAdminPrx serverProps = Ice::PropertiesAdminPrx::checkedCast(admin, "Properties");
IceMX::MetricsAdminPrx serverMetrics = IceMX::MetricsAdminPrx::checkedCast(admin, "Metrics");
test(serverProps && serverMetrics);
UpdateCallbackI* update = new UpdateCallbackI(serverProps);
Ice::NativePropertiesAdminPtr::dynamicCast(communicator->findAdminFacet("Properties"))->addUpdateCallback(update);
cout << "ok" << endl;
Ice::PropertyDict props;
cout << "testing group by none..." << flush;
props["IceMX.Metrics.View.GroupBy"] = "none";
updateProps(clientProps, serverProps, update, props);
#ifndef ICE_OS_WINRT
int threadCount = 4;
#else
int threadCount = 3; // No endpoint host resolver thread with WinRT.
#endif
Ice::Long timestamp;
IceMX::MetricsView view = clientMetrics->getMetricsView("View", timestamp);
test(view["Connection"].size() == 1 && view["Connection"][0]->current == 1 && view["Connection"][0]->total == 1);
test(view["Thread"].size() == 1 && view["Thread"][0]->current == threadCount &&
view["Thread"][0]->total == threadCount);
cout << "ok" << endl;
cout << "testing group by id..." << flush;
props["IceMX.Metrics.View.GroupBy"] = "id";
updateProps(clientProps, serverProps, update, props);
metrics->ice_ping();
metrics->ice_ping();
metrics->ice_connectionId("Con1")->ice_ping();
metrics->ice_connectionId("Con1")->ice_ping();
metrics->ice_connectionId("Con1")->ice_ping();
view = clientMetrics->getMetricsView("View", timestamp);
test(static_cast<int>(view["Thread"].size()) == threadCount);
test(view["Connection"].size() == 2);
test(view["Invocation"].size() == 1);
IceMX::InvocationMetricsPtr invoke = IceMX::InvocationMetricsPtr::dynamicCast(view["Invocation"][0]);
test(invoke->id.find("[ice_ping]") > 0 && invoke->current == 0 && invoke->total == 5);
test(invoke->remotes.size() == 2);
test(invoke->remotes[0]->total = 2);
test(invoke->remotes[1]->total = 3);
view = serverMetrics->getMetricsView("View", timestamp);
test(view["Thread"].size() > 4);
test(view["Connection"].size() == 2);
test(view["Dispatch"].size() == 1);
test(view["Dispatch"][0]->current <= 1 && view["Dispatch"][0]->total == 5);
test(view["Dispatch"][0]->id.find("[ice_ping]") > 0);
metrics->ice_getConnection()->close(false);
metrics->ice_connectionId("Con1")->ice_getConnection()->close(false);
waitForCurrent(clientMetrics, "View", "Connection", 0);
waitForCurrent(serverMetrics, "View", "Connection", 0);
clearView(clientProps, serverProps, update);
cout << "ok" << endl;
cout << "testing connection metrics... " << flush;
props["IceMX.Metrics.View.Map.Connection.GroupBy"] = "none";
updateProps(clientProps, serverProps, update, props, "Connection");
test(clientMetrics->getMetricsView("View", timestamp)["Connection"].empty());
test(serverMetrics->getMetricsView("View", timestamp)["Connection"].empty());
metrics->ice_ping();
IceMX::ConnectionMetricsPtr cm1, sm1, cm2, sm2;
cm1 = IceMX::ConnectionMetricsPtr::dynamicCast(clientMetrics->getMetricsView("View", timestamp)["Connection"][0]);
sm1 = IceMX::ConnectionMetricsPtr::dynamicCast(serverMetrics->getMetricsView("View", timestamp)["Connection"][0]);
sm1 = getServerConnectionMetrics(serverMetrics, 25);
test(cm1->total == 1 && sm1->total == 1);
metrics->ice_ping();
cm2 = IceMX::ConnectionMetricsPtr::dynamicCast(clientMetrics->getMetricsView("View", timestamp)["Connection"][0]);
//.........这里部分代码省略.........
示例7: if
//.........这里部分代码省略.........
if(batchRequestInterceptor.get() && batchRequestInterceptor.get() != Py_None)
{
data.batchRequestInterceptor = new BatchRequestInterceptor(batchRequestInterceptor.get());
}
}
//
// We always supply our own implementation of ValueFactoryManager.
//
data.valueFactoryManager = new ValueFactoryManager;
try
{
if(argList)
{
data.properties = Ice::createProperties(seq, data.properties);
}
else if(!data.properties)
{
data.properties = Ice::createProperties();
}
}
catch(const Ice::Exception& ex)
{
setPythonException(ex);
return -1;
}
//
// Remaining command line options are passed to the communicator
// as an argument vector in case they contain plug-in properties.
//
int argc = static_cast<int>(seq.size());
char** argv = new char*[argc + 1];
int i = 0;
for(Ice::StringSeq::const_iterator s = seq.begin(); s != seq.end(); ++s, ++i)
{
argv[i] = strdup(s->c_str());
}
argv[argc] = 0;
data.compactIdResolver = new IdResolver;
Ice::CommunicatorPtr communicator;
try
{
AllowThreads allowThreads;
if(hasArgs)
{
communicator = Ice::initialize(argc, argv, data);
}
else
{
communicator = Ice::initialize(data);
}
}
catch(const Ice::Exception& ex)
{
for(i = 0; i < argc; ++i)
{
free(argv[i]);
}
delete[] argv;
setPythonException(ex);
示例8: if
int
main(int argc, char* argv[])
#endif
{
Ice::StringSeq originalArgs = Ice::argsToStringSeq(argc, argv);
assert(originalArgs.size() > 0);
const string appName = originalArgs[0];
string dataDir;
StringSeq fileSeq;
int compress = 1;
bool verbose;
bool caseInsensitive;
IceUtilInternal::Options opts;
opts.addOpt("h", "help");
opts.addOpt("v", "version");
opts.addOpt("z", "compress");
opts.addOpt("Z", "no-compress");
opts.addOpt("V", "verbose");
opts.addOpt("i", "case-insensitive");
vector<string> args;
try
{
args = opts.parse(originalArgs);
}
catch(const IceUtilInternal::BadOptException& e)
{
cerr << e.reason << endl;
usage(appName);
return EXIT_FAILURE;
}
if(opts.isSet("help"))
{
usage(appName);
return EXIT_SUCCESS;
}
if(opts.isSet("version"))
{
cout << ICE_STRING_VERSION << endl;
return EXIT_SUCCESS;
}
bool doCompress = opts.isSet("compress");
bool dontCompress = opts.isSet("no-compress");
if(doCompress && dontCompress)
{
cerr << appName << ": only one of -z and -Z are mutually exclusive" << endl;
usage(appName);
return EXIT_FAILURE;
}
if(doCompress)
{
compress = 2;
}
else if(dontCompress)
{
compress = 0;
}
verbose = opts.isSet("verbose");
caseInsensitive = opts.isSet("case-insensitive");
if(args.empty())
{
cerr << appName << ": no data directory specified" << endl;
usage(appName);
return EXIT_FAILURE;
}
dataDir = simplify(args[0]);
for(vector<string>::size_type i = 1; i < args.size(); ++i)
{
fileSeq.push_back(simplify(args[i]));
}
try
{
string absDataDir = dataDir;
string cwd;
if(IceUtilInternal::getcwd(cwd) != 0)
{
throw "cannot get the current directory:\n" + IceUtilInternal::lastErrorToString();
}
if(!IceUtilInternal::isAbsolutePath(absDataDir))
{
absDataDir = simplify(cwd + '/' + absDataDir);
}
for(StringSeq::iterator p = fileSeq.begin(); p != fileSeq.end(); ++p)
{
if(!IceUtilInternal::isAbsolutePath(*p))
{
*p = cwd + '/' + *p;
}
}
//
//.........这里部分代码省略.........
示例9: os
void
logTests(const Ice::CommunicatorPtr& comm, const AdminSessionPrx& session)
{
cout << "testing stderr/stdout/log files... " << flush;
string testDir = comm->getProperties()->getProperty("TestDir");
assert(!testDir.empty());
try
{
session->openServerStdErr("LogServer", -1);
test(false);
}
catch(const FileNotAvailableException&)
{
}
try
{
session->openServerStdOut("LogServer", -1);
test(false);
}
catch(const FileNotAvailableException&)
{
}
try
{
session->openServerLog("LogServer", "unknown.txt", -1);
test(false);
}
catch(const FileNotAvailableException&)
{
}
Ice::ObjectPrx obj = TestIntfPrx::checkedCast(comm->stringToProxy("LogServer"));
try
{
session->openServerStdErr("LogServer", -1)->destroy();
session->openServerStdOut("LogServer", -1)->destroy();
}
catch(const FileNotAvailableException& ex)
{
cerr << ex.reason << endl;
test(false);
}
FileIteratorPrx it;
Ice::StringSeq lines;
try
{
//
// Test with empty file.
//
string path = testDir + "/log1.txt";
ofstream os(path.c_str());
os.close();
it = session->openServerLog("LogServer", testDir + "/log1.txt", -1);
test(it->read(1024, lines) && lines.empty());
test(it->read(1024, lines) && lines.empty());
it->destroy();
it = session->openServerLog("LogServer", testDir + "/log1.txt", 0);
test(it->read(1024, lines) && lines.empty());
test(it->read(1024, lines) && lines.empty());
it->destroy();
it = session->openServerLog("LogServer", testDir + "/log1.txt", 100);
test(it->read(1024, lines) && lines.empty());
test(it->read(1024, lines) && lines.empty());
it->destroy();
}
catch(const FileNotAvailableException& ex)
{
cerr << ex.reason << endl;
test(false);
}
try
{
//
// Test with log file with one line with no EOL on last line.
//
string path = testDir + "/log2.txt";
ofstream os(path.c_str());
os << "one line file with no EOL on last line";
os.close();
it = session->openServerLog("LogServer", testDir + "/log2.txt", -1);
test(it->read(1024, lines) && lines.size() == 1);
test(lines[0] == "one line file with no EOL on last line");
test(it->read(1024, lines) && lines.empty());
it->destroy();
it = session->openServerLog("LogServer", testDir + "/log2.txt", 0);
test(it->read(1024, lines) && lines.empty());
test(it->read(1024, lines) && lines.empty());
it->destroy();
it = session->openServerLog("LogServer", testDir + "/log2.txt", 1);
test(it->read(1024, lines) && lines.size() == 1);
test(lines[0] == "one line file with no EOL on last line");
test(it->read(1024, lines) && lines.empty());
//.........这里部分代码省略.........