2 // HelperFunctionTest.m
5 // Copyright (c) 2019 Apple Inc. All rights reserved.
8 #import <XCTest/XCTest.h>
9 #include "unittest_common.h"
11 @interface HelperFunctionTest : XCTestCase
15 @implementation HelperFunctionTest
18 // It is empty for now.
22 // It is empty for now.
25 - (void)testCFStringToDomainLabel {
26 // test_cstring[i][0] is the input
27 // test_cstring[i][1] is the expected correct output
28 static const char * const test_cstring[][2] = {
30 {"this-is-a-normal-computer-name", "this-is-a-normal-computer-name"},
32 {"This is an ascii string whose length is more than 63 bytes, where it takes one byte to store every character", "This is an ascii string whose length is more than 63 bytes, whe"},
33 {"यह एक एस्सी स्ट्रिंग है जिसकी लंबाई साठ तीन बाइट्स से अधिक है, जहां यह हर चरित्र को संग्रहीत करने के लिए एक बाइट लेता है", "यह एक एस्सी स्ट्रिंग है "}, // "यह एक एस्सी स्ट्रिंग है " is 62 byte, and "यह एक एस्सी स्ट्रिंग है जि" is more than 63, so the result is expected to truncated to 62 bytes instead of 63 bytes
34 {"वितीय टेस्ट ट्राई टी॰वी॰", "वितीय टेस्ट ट्राई टी॰वी"},
35 {"这是一个超过六十三比特的其中每个中文字符占三比特的中文字符串", "这是一个超过六十三比特的其中每个中文字符占"},
36 {"🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝", "🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝"} // "🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝" is 60 bytes, and "🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝🃝" is more than 63 bytes so the result is expected to be truncated to 60 bytes instead of 64 bytes
39 for (int i = 0, n = sizeof(test_cstring) / sizeof(test_cstring[0]); i < n; i++) {
40 // construct CFString from input
41 CFStringRef name_ref = CFStringCreateWithCString(kCFAllocatorDefault, test_cstring[i][0], kCFStringEncodingUTF8);
42 XCTAssertTrue(name_ref != NULL, @"unit test internal error. {descrption=\"name_ref should be non-NULL.\"}");
44 // call the function being tested
46 mDNSDomainLabelFromCFString_ut(name_ref, &label);
48 // Check if the result is correct
49 XCTAssertEqual(label.c[0], strlen(test_cstring[i][1]),
50 @"name length is not equal. {expect=%d,actual=%d}", strlen(test_cstring[i][1]), label.c[0]);
51 XCTAssertTrue(memcmp(label.c + 1, test_cstring[i][1], label.c[0]) == 0,
52 @"name is not correctly decoded. {expect='%s',actual='%s'}", test_cstring[i][1], label.c + 1);