void tst_QSimToolkit::testEncodeSendDTMF() { QFETCH( QByteArray, data ); QFETCH( QByteArray, resp ); QFETCH( int, resptype ); QFETCH( QString, text ); QFETCH( QString, number ); QFETCH( int, iconId ); QFETCH( bool, iconSelfExplanatory ); QFETCH( QByteArray, textAttribute ); QFETCH( QString, html ); 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::SendDTMF ); QVERIFY( decoded.destinationDevice() == QSimCommand::Network ); QCOMPARE( decoded.text(), text ); QCOMPARE( decoded.number(), number ); QCOMPARE( (int)decoded.iconId(), iconId ); QCOMPARE( decoded.iconSelfExplanatory(), iconSelfExplanatory ); QCOMPARE( decoded.textAttribute(), textAttribute ); if ( !textAttribute.isEmpty() ) QCOMPARE( decoded.textHtml(), html ); // 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 ); }
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 ); }
void tst_QSimToolkit::testEncodePowerOnCard() { QFETCH( QByteArray, data ); QFETCH( QByteArray, resp ); QFETCH( QByteArray, atr ); QFETCH( int, resptype ); QFETCH( int, device ); 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::PowerOnCard ); QVERIFY( decoded.destinationDevice() == (QSimCommand::Device)( device + 0x10 ) ); // 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) ); } QCOMPARE( decodedResp.extensionField(0xA1), atr ); // Check that the original terminal response PDU can be reconstructed correctly. QCOMPARE( decodedResp.toPdu(), resp ); }
void tst_QSimToolkit::testEncodeSendSMS() { QFETCH( QByteArray, data ); QFETCH( QByteArray, resp ); QFETCH( QByteArray, tpdu ); QFETCH( int, resptype ); QFETCH( QString, text ); QFETCH( QString, number ); QFETCH( bool, smsPacking ); QFETCH( int, iconId ); QFETCH( bool, iconSelfExplanatory ); QFETCH( QByteArray, textAttribute ); QFETCH( QString, html ); 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::SendSMS ); QVERIFY( decoded.destinationDevice() == QSimCommand::Network ); QCOMPARE( decoded.text(), text ); if ( text.isEmpty() ) { if ( ( options & QSimCommand::EncodeEmptyStrings ) != 0 ) QVERIFY( decoded.suppressUserFeedback() ); else QVERIFY( !decoded.suppressUserFeedback() ); } else { QVERIFY( !decoded.suppressUserFeedback() ); } QCOMPARE( decoded.number(), number ); QCOMPARE( decoded.smsPacking(), smsPacking ); QCOMPARE( (int)decoded.iconId(), iconId ); QCOMPARE( decoded.iconSelfExplanatory(), iconSelfExplanatory ); QCOMPARE( decoded.textAttribute(), textAttribute ); if ( !textAttribute.isEmpty() ) QCOMPARE( decoded.textHtml(), html ); // Check the final TPDU. If packing is specified, we have to parse the SMS // and then re-encode it with the 7-bit alphabet. QByteArray newtpdu = decoded.extensionField(0x8B); if ( smsPacking ) { // Add dummy service center address that isn't in the TPDU before decoding. QSMSMessage msg = QSMSMessage::fromPdu( QByteArray( 1, 0 ) + newtpdu ); msg.setDataCodingScheme( msg.dataCodingScheme() & 0xF3 ); // Convert to 7-bit // Convert back into a pdu and strip off the dummy service center address. newtpdu = msg.toPdu().mid(1); } // The TPDU in the command will have a message reference of 0. // We need to change it to the transmission message reference of 1 // before we do the comparison. newtpdu[1] = (char)1; QCOMPARE( newtpdu, tpdu ); // 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 ); }