adding unit test
This commit is contained in:
+44
-23
@@ -776,39 +776,60 @@ int decode_date(uint8_t * apdu, int *year, int *month, int *day, int *wday)
|
|||||||
void testBACDCodeTags(Test * pTest)
|
void testBACDCodeTags(Test * pTest)
|
||||||
{
|
{
|
||||||
uint8_t apdu[MAX_APDU] = { 0 };
|
uint8_t apdu[MAX_APDU] = { 0 };
|
||||||
uint8_t tag_number = 0;
|
uint8_t tag_number = 0, test_tag_number = 0;
|
||||||
uint8_t test_tag_number = 0;
|
int len = 0, test_len = 0;
|
||||||
int len = 0;
|
uint32_t value = 0,test_value = 0;
|
||||||
|
bool extended_tag = false;
|
||||||
|
|
||||||
|
|
||||||
for (tag_number = 0;; tag_number++) {
|
for (tag_number = 0;; tag_number++) {
|
||||||
len = encode_opening_tag(&apdu[0], tag_number);
|
len = encode_opening_tag(&apdu[0], tag_number);
|
||||||
if (tag_number < 15) {
|
if (tag_number < 15)
|
||||||
ct_test(pTest, len == 1);
|
extended_tag = false;
|
||||||
len = decode_tag_number(&apdu[0], &test_tag_number);
|
else
|
||||||
ct_test(pTest, len == 1);
|
extended_tag = true;
|
||||||
} else {
|
|
||||||
ct_test(pTest, len == 2);
|
if (extended_tag)
|
||||||
len = decode_tag_number(&apdu[0], &test_tag_number);
|
test_len = 2;
|
||||||
ct_test(pTest, len == 2);
|
else
|
||||||
}
|
test_len = 1;
|
||||||
|
|
||||||
|
ct_test(pTest, len == test_len);
|
||||||
|
len = decode_tag_number(&apdu[0], &test_tag_number);
|
||||||
|
ct_test(pTest, len == test_len);
|
||||||
ct_test(pTest, tag_number == test_tag_number);
|
ct_test(pTest, tag_number == test_tag_number);
|
||||||
ct_test(pTest, decode_is_opening_tag(&apdu[0]) == true);
|
ct_test(pTest, decode_is_opening_tag(&apdu[0]) == true);
|
||||||
ct_test(pTest, decode_is_closing_tag(&apdu[0]) == false);
|
ct_test(pTest, decode_is_closing_tag(&apdu[0]) == false);
|
||||||
|
|
||||||
len = encode_closing_tag(&apdu[0], tag_number);
|
len = encode_closing_tag(&apdu[0], tag_number);
|
||||||
if (tag_number < 15) {
|
ct_test(pTest, len == test_len);
|
||||||
ct_test(pTest, len == 1);
|
len = decode_tag_number(&apdu[0], &test_tag_number);
|
||||||
len = decode_tag_number(&apdu[0], &test_tag_number);
|
ct_test(pTest, len == test_len);
|
||||||
ct_test(pTest, len == 1);
|
|
||||||
} else {
|
|
||||||
ct_test(pTest, len == 2);
|
|
||||||
len = decode_tag_number(&apdu[0], &test_tag_number);
|
|
||||||
ct_test(pTest, len == 2);
|
|
||||||
}
|
|
||||||
ct_test(pTest, tag_number == test_tag_number);
|
ct_test(pTest, tag_number == test_tag_number);
|
||||||
ct_test(pTest, decode_is_opening_tag(&apdu[0]) == false);
|
ct_test(pTest, decode_is_opening_tag(&apdu[0]) == false);
|
||||||
ct_test(pTest, decode_is_closing_tag(&apdu[0]) == true);
|
ct_test(pTest, decode_is_closing_tag(&apdu[0]) == true);
|
||||||
// stop after the last one
|
// test the value-len-type portion
|
||||||
|
for (value = 1; ;value = value << 1)
|
||||||
|
{
|
||||||
|
len = encode_tag(&apdu[0], tag_number, false, value);
|
||||||
|
len = decode_tag_number_and_value(&apdu[0], &test_tag_number,
|
||||||
|
&test_value);
|
||||||
|
ct_test(pTest, tag_number == test_tag_number);
|
||||||
|
ct_test(pTest, value == test_value);
|
||||||
|
test_len = 1;
|
||||||
|
if (extended_tag)
|
||||||
|
test_len++;
|
||||||
|
if ((value > 4) && (value <= 253))
|
||||||
|
test_len++;
|
||||||
|
else if (value <= 65535)
|
||||||
|
test_len++;
|
||||||
|
else if (value > 4)
|
||||||
|
test_len++;
|
||||||
|
ct_test(pTest, len == test_len);
|
||||||
|
// stop at the the last value
|
||||||
|
if (value == 0xFFFFFFFF)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// stop after the last tag number
|
||||||
if (tag_number == 255)
|
if (tag_number == 255)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user