uritests.cpp raw

   1  // Copyright (c) 2009-2018 The Limenka developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #include <qt/test/uritests.h>
   6  
   7  #include <qt/guiutil.h>
   8  #include <qt/walletmodel.h>
   9  
  10  #include <QUrl>
  11  
  12  void URITests::uriTests()
  13  {
  14      SendCoinsRecipient rv;
  15      QUrl uri;
  16      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));
  17      QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
  18  
  19      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));
  20      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  21      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  22      QVERIFY(rv.label == QString());
  23      QVERIFY(rv.amount == 0);
  24  
  25      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address"));
  26      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  27      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  28      QVERIFY(rv.label == QString("Wikipedia Example Address"));
  29      QVERIFY(rv.amount == 0);
  30  
  31      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));
  32      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  33      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  34      QVERIFY(rv.label == QString());
  35      QVERIFY(rv.amount == 100000);
  36  
  37      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));
  38      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  39      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  40      QVERIFY(rv.label == QString());
  41      QVERIFY(rv.amount == 100100000);
  42  
  43      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example"));
  44      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  45      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  46      QVERIFY(rv.amount == 10000000000LL);
  47      QVERIFY(rv.label == QString("Wikipedia Example"));
  48  
  49      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=x100x4"));
  50      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  51      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  52      QVERIFY(rv.amount == 16777216LL);
  53  
  54      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100x2"));
  55      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  56      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  57      QVERIFY(rv.amount == 10000LL);
  58  
  59      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"));
  60      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  61      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  62      QVERIFY(rv.label == QString());
  63  
  64      QVERIFY(GUIUtil::parseLimenkaURI("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv));
  65      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  66      QVERIFY(rv.label == QString());
  67  
  68      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address"));
  69      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  70  
  71      // Commas in amounts are not allowed.
  72      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example"));
  73      QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
  74  
  75      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=x1,0000&label=Wikipedia Example"));
  76      QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
  77  
  78      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"));
  79      QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
  80  
  81      // There are two amount specifications. The last value wins.
  82      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=200&label=Wikipedia Example"));
  83      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  84      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  85      QVERIFY(rv.amount == 20000000000LL);
  86      QVERIFY(rv.label == QString("Wikipedia Example"));
  87  
  88      // The first amount value is correct. However, the second amount value is not valid. Hence, the URI is not valid.
  89      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=1,000&label=Wikipedia Example"));
  90      QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
  91  
  92      // Test label containing a question mark ('?').
  93      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=?"));
  94      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
  95      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
  96      QVERIFY(rv.amount == 10000000000LL);
  97      QVERIFY(rv.label == QString("?"));
  98  
  99      // Escape sequences are not supported.
 100      uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=%3F"));
 101      QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
 102      QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
 103      QVERIFY(rv.amount == 10000000000LL);
 104      QVERIFY(rv.label == QString("%3F"));
 105  }
 106