2 // CHIPSetupPayloadParserTests.m
3 // CHIPQRCodeReaderTests
6 * Copyright (c) 2020 Project CHIP Authors
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #import "CHIPManualSetupPayloadParser.h"
22 #import "CHIPQRCodeSetupPayloadParser.h"
23 #import "CHIPSetupPayload.h"
25 // additional includes
28 // system dependencies
29 #import <XCTest/XCTest.h>
31 @interface CHIPSetupPayloadParserTests : XCTestCase
35 @implementation CHIPSetupPayloadParserTests
37 - (void)testManualParser
40 CHIPManualSetupPayloadParser * parser =
41 [[CHIPManualSetupPayloadParser alloc] initWithDecimalStringRepresentation:@"000003949100001000011"];
42 CHIPSetupPayload * payload = [parser populatePayload:&error];
44 XCTAssertNotNil(payload);
47 XCTAssertEqual(payload.discriminator.unsignedIntegerValue, 1);
48 XCTAssertEqual(payload.setUpPINCode.unsignedIntegerValue, 1234);
49 XCTAssertEqual(payload.vendorID.unsignedIntegerValue, 1);
50 XCTAssertEqual(payload.productID.unsignedIntegerValue, 1);
51 XCTAssertTrue(payload.requiresCustomFlow);
52 XCTAssertEqual(payload.version.unsignedIntegerValue, 0);
53 XCTAssertEqual(payload.rendezvousInformation, kRendezvousInformationNone);
56 - (void)testManualParser_Error
59 CHIPManualSetupPayloadParser * parser = [[CHIPManualSetupPayloadParser alloc] initWithDecimalStringRepresentation:@""];
60 CHIPSetupPayload * payload = [parser populatePayload:&error];
62 XCTAssertNil(payload);
63 XCTAssertEqual(error.code, CHIPErrorCodeInvalidStringLength);
66 - (void)testQRCodeParser_Error
69 CHIPQRCodeSetupPayloadParser * parser =
70 [[CHIPQRCodeSetupPayloadParser alloc] initWithBase41Representation:@"CH:B20800G.0G8G000"];
71 CHIPSetupPayload * payload = [parser populatePayload:&error];
73 XCTAssertNil(payload);
74 XCTAssertEqual(error.code, CHIPErrorCodeInvalidArgument);
77 - (void)testQRCodeParser
80 CHIPQRCodeSetupPayloadParser * parser =
81 [[CHIPQRCodeSetupPayloadParser alloc] initWithBase41Representation:@"CH:J20800G008008000"];
82 CHIPSetupPayload * payload = [parser populatePayload:&error];
84 XCTAssertNotNil(payload);
87 XCTAssertEqual(payload.discriminator.unsignedIntegerValue, 128);
88 XCTAssertEqual(payload.setUpPINCode.unsignedIntegerValue, 2048);
89 XCTAssertEqual(payload.vendorID.unsignedIntegerValue, 12);
90 XCTAssertEqual(payload.productID.unsignedIntegerValue, 1);
91 XCTAssertFalse(payload.requiresCustomFlow);
92 XCTAssertEqual(payload.version.unsignedIntegerValue, 5);
93 XCTAssertEqual(payload.rendezvousInformation, kRendezvousInformationWiFi);
96 - (void)testQRCodeParserWithOptionalData
99 CHIPQRCodeSetupPayloadParser * parser =
100 [[CHIPQRCodeSetupPayloadParser alloc] initWithBase41Representation:@"CH:J20800G008008006DL200UOGMHARTHOMJ300IDL530.I7"];
101 CHIPSetupPayload * payload = [parser populatePayload:&error];
103 XCTAssertNotNil(payload);
106 XCTAssertEqual(payload.version.unsignedIntegerValue, 5);
107 XCTAssertEqual(payload.discriminator.unsignedIntegerValue, 128);
108 XCTAssertEqual(payload.setUpPINCode.unsignedIntegerValue, 2048);
109 XCTAssertEqual(payload.vendorID.unsignedIntegerValue, 12);
110 XCTAssertEqual(payload.productID.unsignedIntegerValue, 1);
111 XCTAssertFalse(payload.requiresCustomFlow);
112 XCTAssertEqual(payload.rendezvousInformation, kRendezvousInformationWiFi);
113 XCTAssertTrue([payload.serialNumber isEqualToString:@"1"]);
115 NSArray<CHIPOptionalQRCodeInfo *> * vendorOptionalInfo = [payload getAllOptionalVendorData:&error];
117 XCTAssertEqual([vendorOptionalInfo count], 2);
118 for (CHIPOptionalQRCodeInfo * info in vendorOptionalInfo) {
119 if (info.tag.intValue == 2) {
120 XCTAssertEqual(info.infoType.intValue, kOptionalQRCodeInfoTypeString);
121 XCTAssertTrue([info.stringValue isEqualToString:@"myData"]);
122 } else if (info.tag.intValue == 3) {
123 XCTAssertEqual(info.infoType.intValue, kOptionalQRCodeInfoTypeInt32);
124 XCTAssertEqual(info.integerValue.intValue, 12);