📄 testparser.cc
字号:
// *************************************************************************// * GSM TA/ME library// *// * File: testparser.cc// *// * Purpose: Test AT result code parser// *// * Author: Peter Hofmann (software@pxh.de)// *// * Created: 17.5.1999// *************************************************************************#include <gsmlib/gsm_parser.h>#include <assert.h>#include <algorithm>#include <iostream>using namespace std;using namespace gsmlib;void printIntList(vector<bool> &vb){ cout << "("; int j = 0; bool first = true; for (vector<bool>::iterator i = vb.begin(); i != vb.end(); ++i) { if (*i) { if (! first) cout << ","; cout << j; first = false; } ++j; } cout << ")";}void printIntRange(IntRange ir){ cout << "(" << ir._low << "-" << ir._high << ")";}void printStringList(vector<string> vs){ bool first = true; cout << "("; for (vector<string>::iterator i = vs.begin(); i != vs.end(); ++i) { if (! first) cout << ","; cout << "\"" << *i << "\""; first = false; } cout << ")";}int main(int argc, char *argv[]){ try { { cout << "Test 1" << endl; Parser p((string)",(\"ME\", \"SM\"," + "\"Which of the three items does not belong here?\")"); vector<string> vs1 = p.parseStringList(true); p.parseComma(); vector<string> vs2 = p.parseStringList(); bool comma = p.parseComma(true); printStringList(vs1); cout << ","; printStringList(vs2); if (comma) cout << ","; cout << endl << endl; } { cout << "Test 2" << endl; Parser p("(1-5),425,\"+abcd\"efgh\""); IntRange ir = p.parseRange(); p.parseComma(); int i = p.parseInt(); p.parseComma(); string s = p.parseString(false, true); printIntRange(ir); cout << "," << i << ",\"" << s << "\"" << endl << endl; } { cout << "Test 3" << endl; Parser p("(7,1-5,12-11,25),425,This is a test.\"+a\"ef\" and so forth"); vector<bool> vb = p.parseIntList(); p.parseComma(); int i = p.parseInt(); p.parseComma(); string s = p.parseEol(); printIntList(vb); cout << "," << i << "," << s << endl << endl; } { cout << "Test 4" << endl; Parser p("(1-125),20,16"); vector<bool> vb = p.parseIntList(); p.parseComma(); vector<bool> vb2 = p.parseIntList(); p.parseComma(); int j = p.parseInt(); printIntList(vb); cout << ","; printIntList(vb2); cout << "," << j << endl << endl; } { cout << "Test 5" << endl; Parser p("SM,7"); string s = p.parseString(); p.parseComma(); int i = p.parseInt(); cout << s << "," << i << endl << endl; } { cout << "Test 6" << endl; Parser p("(2,\"S TELIA MOBITEL\",\"S TELIA\",\"24001\")"); p.parseChar('('); int status = p.parseInt(); p.parseComma(); string longName = p.parseString(true); p.parseComma(); string shortName = p.parseString(true); p.parseComma(); int numericName; try { numericName = p.parseInt(true); } catch (GsmException &e) { if (e.getErrorClass() == ParserError) { // the Ericsson GM12 GSM modem returns the numeric ID as string string s = p.parseString(); numericName = checkNumber(s); } else throw e; } p.parseChar(')'); cout << "(" << status << ",\"" << longName << "\",\"" << shortName << "\"," << numericName << ")" << endl << endl; } } catch (GsmException &p) { // these tests shouldn't throw exceptions assert(0); } // Now some tests that should provoke an error try { Parser p("(4-5"); p.parseRange(); } catch (GsmException &p) { cout << "Error 1: " << p.what() << endl << endl; } try { Parser p("(4-5,3-4-5)"); p.parseIntList(); } catch (GsmException &p) { cout << "Error 2: " << p.what() << endl << endl; } try { Parser p("\"bla\"bla\""); p.parseString(); p.checkEol(); } catch (GsmException &p) { cout << "Error 3: " << p.what() << endl << endl; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -