Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

test_pcsc_cpp_tools.cpp 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <iostream>
  2. #include <string.h>
  3. #include <gtest/gtest.h>
  4. #include <ScHex.h>
  5. #include <ScReader.h>
  6. #include <ScBasicCommand.h>
  7. #define TEST_Hex(FUNCTION) do { \
  8. FUNCTION("", "", 0); \
  9. FUNCTION("42", "\x42", 1); \
  10. FUNCTION("42 00 FF AA 24", "\x42\x00\xff\xaa\x24", 5); \
  11. FUNCTION("00 01 02 03 04 05 06 FF", "\x00\x01\x02\x03\x04\x05\x06\xff", 8); \
  12. } while (0)
  13. #define TEST_byteArrayToString(STR, DATA, SIZE) \
  14. ASSERT_EQ(STR, ScHex::byteArrayToString(std::string((char*)memcpy(new BYTE[SIZE], DATA, SIZE), SIZE)))
  15. TEST(Hex, ByteArrayToString)
  16. {
  17. TEST_Hex(TEST_byteArrayToString);
  18. }
  19. #define TEST_stringToByteArray(STR, DATA, SIZE) do { \
  20. auto bytes = ScHex::stringToByteArray(STR); \
  21. ASSERT_EQ(SIZE, bytes.size()); \
  22. ASSERT_EQ(0, memcmp(bytes.data(), DATA, SIZE)); \
  23. } while (0)
  24. TEST(Hex, StringToByteArray)
  25. {
  26. TEST_Hex(TEST_stringToByteArray);
  27. }
  28. TEST(Reader, Test1)
  29. {
  30. std::cout << "Ensure that at lest 1 reader is connected";
  31. getchar();
  32. ASSERT_TRUE(ScReader::establishContext());
  33. auto readers = ScReader::getReaders();
  34. ASSERT_GE(readers.size(), 1);
  35. for (auto reader : readers)
  36. {
  37. std::cout << reader->getName() << std::endl;
  38. }
  39. auto reader = readers[0];
  40. ASSERT_TRUE(reader->connect());
  41. std::cout << "ATR: " << ScHex::byteArrayToString(reader->getAtr())
  42. << " Result: " << reader->getLastResultString() << std::endl;
  43. auto res = reader->transmit(ScBasicCommand("94 A4 00 00 02 20 00 00"));
  44. ASSERT_NE(nullptr, res->getData().data());
  45. auto resp = ScHex::byteArrayToString(res->getData());
  46. std::cout << "Response (" << res->getData().size() << "): " << resp << std::endl;
  47. ASSERT_TRUE(reader->disconnect());
  48. ASSERT_TRUE(ScReader::freeContext());
  49. }
  50. int main(int argc, char* argv[])
  51. {
  52. ::testing::InitGoogleTest(&argc, argv);
  53. return RUN_ALL_TESTS();
  54. /*std::cout << ScReader::establishContext() << std::endl;
  55. auto readers = ScReader::getReaders();
  56. for (auto reader : readers)
  57. {
  58. std::cout << reader->getName() << " ";
  59. std::cout << reader->connect() << " ";
  60. std::cout << reader->disconnect();
  61. std::cout << std::endl;
  62. }
  63. std::cout << ScReader::freeContext() << std::endl;
  64. return 0;*/
  65. }