Add GetSimple, update Simple Value documentation (#236)
Add the method QCBORDecode_GetSimple(). Update testing and documentation for simple values.
* Add GetSimple
* Finish off GetSimple and friends
* Fix tests when tags are disabled
---------
Co-authored-by: Laurence Lundblade <lgl@securitytheory.com>
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index aae1f80..0f48613 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -2334,79 +2334,156 @@
0xf8, 0x00, 0xf8, 0x13, 0xf8, 0x1f, 0xf8, 0x20,
0xf8, 0xff};
-int32_t ParseSimpleTest(void)
+/* A map of good simple values, plus one well-formed integer */
+static const uint8_t spGoodSimpleValues[] = {
+ 0xa9, 0x01, 0xf4, 0x02, 0xf5, 0x03, 0xf6, 0x04, 0xf7,
+ 0x05, 0xe0, 0x06, 0xf3, 0x07, 0xf8, 0x20, 0x61, 0x40,
+ 0xf8, 0xff, 0x0f, 0x0f};
+
+int32_t SimpleValueDecodeTests(void)
{
QCBORDecodeContext DCtx;
- QCBORItem Item;
- QCBORError nCBORError;
-
+ QCBORItem Item;
+ QCBORError uErr;
QCBORDecode_Init(&DCtx,
UsefulBuf_FROM_BYTE_ARRAY_LITERAL(spSimpleValues),
QCBOR_DECODE_MODE_NORMAL);
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_ARRAY ||
Item.val.uCount != 10)
- return -1;
+ return 1;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_FALSE)
- return -1;
+ return 2;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_TRUE)
- return -1;
+ return 3;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_NULL)
- return -1;
+ return 4;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_UNDEF)
- return -1;
+ return 5;
// A break
if(QCBORDecode_GetNext(&DCtx, &Item) != QCBOR_ERR_BAD_BREAK)
- return -1;
+ return 6;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_UKNOWN_SIMPLE || Item.val.uSimple != 0)
- return -1;
+ return 7;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_UKNOWN_SIMPLE || Item.val.uSimple != 19)
- return -1;
+ return 8;
if(QCBORDecode_GetNext(&DCtx, &Item) != QCBOR_ERR_BAD_TYPE_7)
- return -1;
+ return 9;
if(QCBORDecode_GetNext(&DCtx, &Item) != QCBOR_ERR_BAD_TYPE_7)
- return -1;
+ return 10;
if(QCBORDecode_GetNext(&DCtx, &Item) != QCBOR_ERR_BAD_TYPE_7)
- return -1;
+ return 11;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_UKNOWN_SIMPLE || Item.val.uSimple != 32)
- return -1;
+ return 12;
- if((nCBORError = QCBORDecode_GetNext(&DCtx, &Item)))
- return (int32_t)nCBORError;
+ if((uErr = QCBORDecode_GetNext(&DCtx, &Item)))
+ return (int32_t)uErr;
if(Item.uDataType != QCBOR_TYPE_UKNOWN_SIMPLE || Item.val.uSimple != 255)
- return -1;
+ return 13;
+
+
+ QCBORDecode_Init(&DCtx,
+ UsefulBuf_FROM_BYTE_ARRAY_LITERAL(spGoodSimpleValues),
+ QCBOR_DECODE_MODE_NORMAL);
+
+ uint8_t uSimple;
+
+ QCBORDecode_EnterMap(&DCtx, &Item);
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != CBOR_SIMPLEV_FALSE) {
+ return 20;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != CBOR_SIMPLEV_TRUE) {
+ return 21;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != CBOR_SIMPLEV_NULL) {
+ return 22;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != CBOR_SIMPLEV_UNDEF) {
+ return 23;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 0) {
+ return 24;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 19) {
+ return 25;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 32) {
+ return 26;
+ }
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 255) {
+ return 27;
+ }
+ QCBORDecode_VGetNext(&DCtx, &Item);
+ QCBORDecode_GetSimple(&DCtx, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_NO_MORE_ITEMS) {
+ return 28;
+ }
+
+ QCBORDecode_Rewind(&DCtx);
+
+ QCBORDecode_GetSimpleInMapN(&DCtx, 6, &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 19) {
+ return 30;
+ }
+
+ QCBORDecode_GetSimpleInMapSZ(&DCtx, "@", &uSimple);
+ if(QCBORDecode_GetError(&DCtx) || uSimple != 255) {
+ return 31;
+ }
+
+ QCBORDecode_GetSimpleInMapN(&DCtx, 99, &uSimple);
+ if(QCBORDecode_GetAndResetError(&DCtx) != QCBOR_ERR_LABEL_NOT_FOUND) {
+ return 32;
+ }
+
+ QCBORDecode_GetSimpleInMapSZ(&DCtx, "xx", &uSimple);
+ if(QCBORDecode_GetAndResetError(&DCtx) != QCBOR_ERR_LABEL_NOT_FOUND) {
+ return 33;
+ }
+
+ QCBORDecode_GetSimpleInMapN(&DCtx, 15, &uSimple);
+ if(QCBORDecode_GetAndResetError(&DCtx) != QCBOR_ERR_UNEXPECTED_TYPE) {
+ return 34;
+ }
return 0;
-
}
diff --git a/test/qcbor_decode_tests.h b/test/qcbor_decode_tests.h
index b23149a..a08a3af 100644
--- a/test/qcbor_decode_tests.h
+++ b/test/qcbor_decode_tests.h
@@ -126,7 +126,7 @@
/*
Test parsing of some simple values like true, false, null...
*/
-int32_t ParseSimpleTest(void);
+int32_t SimpleValueDecodeTests(void);
/*
diff --git a/test/run_tests.c b/test/run_tests.c
index a600731..d1d49ed 100644
--- a/test/run_tests.c
+++ b/test/run_tests.c
@@ -85,7 +85,7 @@
TEST_ENTRY(IndefiniteLengthArrayMapTest),
TEST_ENTRY(NestedMapTestIndefLen),
#endif /* QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS */
- TEST_ENTRY(ParseSimpleTest),
+ TEST_ENTRY(SimpleValueDecodeTests),
TEST_ENTRY(DecodeFailureTests),
TEST_ENTRY(EncodeRawTest),
TEST_ENTRY(RTICResultsTest),