Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <iostream>
  2. #include <string.h>
  3. #include <gtest/gtest.h>
  4. #include <libpcsc_cpptools/ScHex.h>
  5. #include <libpcsc_cpptools/ScReader.h>
  6. #include <libpcsc_cpptools/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. #define TEST_command(STR) do { \
  29. auto res = reader->transmit(ScBasicCommand(STR)); \
  30. ASSERT_NE(nullptr, res->getData().data()); \
  31. auto resp = ScHex::byteArrayToString(res->getData()); \
  32. std::cout << "Response (" << res->getData().size() \
  33. << "): " << resp << std::endl; \
  34. } while (0)
  35. TEST(Reader, Test1)
  36. {
  37. std::cout << "Ensure that at lest 1 reader is connected";
  38. getchar();
  39. ASSERT_TRUE(ScReader::establishContext());
  40. auto readers = ScReader::getReaders();
  41. ASSERT_GE(readers.size(), 1);
  42. for (auto reader : readers)
  43. {
  44. std::cout << reader->getName() << std::endl;
  45. }
  46. auto reader = readers[0];
  47. ASSERT_TRUE(reader->connect());
  48. std::cout << "ATR: " << ScHex::byteArrayToString(reader->getAtr())
  49. << " Result: " << reader->getLastResultString() << std::endl;
  50. TEST_command("94a4 0800 04 2000 2020");
  51. TEST_command("94b2 0104 1d");
  52. TEST_command("94d2 0000 1d 5A 00 E0 00 00 50 5C 7C 58 B2 2A DA 8C 20 01 EA D9 80 1E 04 40 20 0E 3F FF FF FF FF FF");
  53. ASSERT_TRUE(reader->disconnect());
  54. ASSERT_TRUE(ScReader::freeContext());
  55. }
  56. int main(int argc, char* argv[])
  57. {
  58. ::testing::InitGoogleTest(&argc, argv);
  59. return RUN_ALL_TESTS();
  60. /*std::cout << ScReader::establishContext() << std::endl;
  61. auto readers = ScReader::getReaders();
  62. for (auto reader : readers)
  63. {
  64. std::cout << reader->getName() << " ";
  65. std::cout << reader->connect() << " ";
  66. std::cout << reader->disconnect();
  67. std::cout << std::endl;
  68. }
  69. std::cout << ScReader::freeContext() << std::endl;
  70. return 0;*/
  71. }