void tst_QSimToolkit::testDeliverRefresh() { QFETCH( QByteArray, data ); QFETCH( QByteArray, resp ); QFETCH( int, resptype ); QFETCH( int, refreshtype ); QFETCH( int, numfiles ); QFETCH( QString, fileids ); QFETCH( int, options ); // Output a dummy line to give some indication of which test we are currently running. qDebug() << ""; // Clear the client/server state. server->clear(); deliveredCommand = QSimCommand(); // Compose and send the command. QSimCommand cmd; cmd.setType( QSimCommand::Refresh ); cmd.setRefreshType( (QSimCommand::RefreshType)refreshtype ); if ( numfiles > 0 ) { QByteArray extData; extData += (char)numfiles; extData += QAtUtils::fromHex( fileids ); cmd.addExtensionField( 0x92, extData ); } server->emitCommand( cmd ); // Wait for the command to arrive in the client. QVERIFY( QFutureSignal::wait( this, SIGNAL(commandSeen()), 100 ) ); // Verify that the command was delivered exactly as we asked. QVERIFY( deliveredCommand.type() == cmd.type() ); QVERIFY( deliveredCommand.refreshType() == cmd.refreshType() ); QVERIFY( deliveredCommand.extensionData() == cmd.extensionData() ); QCOMPARE( deliveredCommand.toPdu( (QSimCommand::ToPduOptions)options ), data ); // The response should have been sent immediately. QCOMPARE( server->responseCount(), 1 ); QCOMPARE( server->envelopeCount(), 0 ); if ( resptype != 0x0003 ) { QCOMPARE( server->lastResponse(), resp ); } else { // We cannot test the "additional EF's read" case because the qtopiaphone // library will always respond with "command performed successfully". QByteArray resp2 = resp; resp2[resp2.size() - 1] = 0x00; QCOMPARE( server->lastResponse(), resp2 ); } }
void tst_QSimToolkit::testEncodeRefresh() { QFETCH( QByteArray, data ); QFETCH( QByteArray, resp ); QFETCH( int, resptype ); QFETCH( int, refreshtype ); QFETCH( int, numfiles ); QFETCH( QString, fileids ); QFETCH( int, options ); // Output a dummy line to give some indication of which test we are currently running. qDebug() << ""; // Check that the command PDU can be parsed correctly. QSimCommand decoded = QSimCommand::fromPdu(data); QVERIFY( decoded.type() == QSimCommand::Refresh ); QVERIFY( decoded.destinationDevice() == QSimCommand::ME ); QCOMPARE( (int)decoded.refreshType(), refreshtype ); if ( numfiles > 0 ) { QCOMPARE( decoded.extensionField(0x92)[0] & 0xFF, numfiles ); QCOMPARE( decoded.extensionField(0x92).mid(1), QAtUtils::fromHex(fileids) ); } else { QCOMPARE( decoded.extensionField(0x92), QByteArray() ); } // Check that the original command PDU can be reconstructed correctly. QByteArray encoded = decoded.toPdu( (QSimCommand::ToPduOptions)options ); QCOMPARE( encoded, data ); // Check that the terminal response PDU can be parsed correctly. QSimTerminalResponse decodedResp = QSimTerminalResponse::fromPdu(resp); QVERIFY( data.contains( decodedResp.commandPdu() ) ); if ( resptype < 0x0100 ) { QVERIFY( decodedResp.result() == (QSimTerminalResponse::Result)resptype ); QVERIFY( decodedResp.causeData().isEmpty() ); QVERIFY( decodedResp.cause() == QSimTerminalResponse::NoSpecificCause ); } else { QVERIFY( decodedResp.result() == (QSimTerminalResponse::Result)(resptype >> 8) ); QVERIFY( decodedResp.causeData().size() == 1 ); QVERIFY( decodedResp.cause() == (QSimTerminalResponse::Cause)(resptype & 0xFF) ); } // Check that the original terminal response PDU can be reconstructed correctly. QCOMPARE( decodedResp.toPdu(), resp ); }