1//  Copyright (c) 2021 650 Industries, Inc. All rights reserved.
2
3@import XCTest;
4
5#import <EXStructuredHeaders/EXStructuredHeadersParser.h>
6
7@interface EXStructuredHeadersParserIgnoringParametersTests : XCTestCase
8
9@end
10
11@implementation EXStructuredHeadersParserIgnoringParametersTests
12
13- (void)setUp
14{
15  [super setUp];
16}
17
18- (void)tearDown
19{
20  [super tearDown];
21}
22
23- (void)testParameterizedDict
24{
25  NSString *input = @"abc=123;a=1;b=2, def=456, ghi=789;q=9;r=\"+w\"";
26  NSDictionary *expected = @{
27    @"abc": @(123),
28    @"def": @(456),
29    @"ghi": @(789)
30  };
31  [self runTestWithInput:input expectedValue:expected fieldType:EXStructuredHeadersParserFieldTypeDictionary];
32}
33
34- (void)testParameterizedList
35{
36  NSString *input = @"abc_123;a=1;b=2; cdef_456, ghi;q=9;r=\"+w\"";
37  NSArray *expected = @[@"abc_123", @"ghi"];
38  [self runTestWithInput:input expectedValue:expected fieldType:EXStructuredHeadersParserFieldTypeList];
39}
40
41- (void)testParameterizedInnerList
42{
43  NSString *input = @"(abc_123;a=1;b=2);cdef_456";
44  NSArray *expected = @[@[@"abc_123"]];
45  [self runTestWithInput:input expectedValue:expected fieldType:EXStructuredHeadersParserFieldTypeList];
46}
47
48- (void)testItem
49{
50  NSString *input = @"?0";
51  NSNumber *expected = @(NO);
52  [self runTestWithInput:input expectedValue:expected fieldType:EXStructuredHeadersParserFieldTypeItem];
53}
54
55- (void)runTestWithInput:(NSString *)input expectedValue:(id)expected fieldType:(EXStructuredHeadersParserFieldType)fieldType
56{
57  EXStructuredHeadersParser *parser = [[EXStructuredHeadersParser alloc] initWithRawInput:input fieldType:fieldType ignoringParameters:YES];
58  NSError *error;
59  id actual = [parser parseStructuredFieldsWithError:&error];
60  XCTAssertNil(error);
61  XCTAssertEqualObjects(expected, actual);
62}
63
64@end
65