Files
HTMLKit/HTMLKitTests/HTMLKitOrderedDictionaryTests.m
T
iska 1829af229a Add Ordered Dictionary tests
- Remove index checks, an exception will be thrown by the underlying array
- Fix indexed subscript method name
- Change behaviour of "setObject:forKey:atIndex:" so that an existing key is moved
2015-04-17 00:43:47 +02:00

185 lines
5.8 KiB
Objective-C

//
// HTMLKitOrderedDictionaryTests.m
// HTMLKit
//
// Created by Iska on 16/04/15.
// Copyright (c) 2015 BrainCookie. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "HTMLOrderedDictionary.h"
@interface HTMLKitOrderedDictionaryTests : XCTestCase
{
HTMLOrderedDictionary *_dictionary;
}
@end
@implementation HTMLKitOrderedDictionaryTests
- (void)setUp
{
[super setUp];
_dictionary = [HTMLOrderedDictionary new];
}
- (void)testSetObjectForKey
{
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, @[]);
[_dictionary setObject:@"1" forKey:@"A"];
NSArray *expected = @[@"A"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary setObject:@"2" forKey:@"B"];
expected = @[@"A", @"B"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary setObject:@"3" forKey:@"C"];
expected = @[@"A", @"B", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertThrows([_dictionary setObject:nil forKey:@"Key"]);
XCTAssertThrows([_dictionary setObject:@"Object" forKey:nil]);
}
- (void)testIndexOfKey
{
[_dictionary setObject:@"1" forKey:@"A"];
[_dictionary setObject:@"2" forKey:@"B"];
[_dictionary setObject:@"3" forKey:@"C"];
XCTAssertEqual([_dictionary indexOfKey:@"A"], 0);
XCTAssertEqual([_dictionary indexOfKey:@"B"], 1);
XCTAssertEqual([_dictionary indexOfKey:@"C"], 2);
XCTAssertEqual([_dictionary indexOfKey:nil], NSNotFound);
}
- (void)testObjectAtIndex
{
[_dictionary setObject:@"1" forKey:@"A"];
[_dictionary setObject:@"2" forKey:@"B"];
XCTAssertEqualObjects([_dictionary objectAtIndex:0], @"1");
XCTAssertEqualObjects([_dictionary objectAtIndex:1], @"2");
[_dictionary setObject:@"3" forKey:@"C" atIndex:1];
XCTAssertEqualObjects([_dictionary objectAtIndex:1], @"3");
XCTAssertThrows([_dictionary setObject:nil forKey:@"Key" atIndex:0]);
XCTAssertThrows([_dictionary setObject:@"Object" forKey:nil atIndex:0]);
XCTAssertThrows([_dictionary setObject:@"Object" forKey:@"Key" atIndex:100]);
}
- (void)testIndexedSubscript
{
[_dictionary setObject:@"1" forKey:@"A"];
[_dictionary setObject:@"2" forKey:@"B"];
[_dictionary setObject:@"3" forKey:@"C"];
XCTAssertEqualObjects(_dictionary[0], @"1");
XCTAssertEqualObjects(_dictionary[1], @"2");
XCTAssertEqualObjects(_dictionary[2], @"3");
_dictionary[1] = @"4";
_dictionary[2] = @"5";
XCTAssertEqualObjects(_dictionary[1], @"4");
XCTAssertEqualObjects(_dictionary[2], @"5");
XCTAssertThrows(_dictionary[100]);
}
- (void)testKeyedSubscript
{
_dictionary[@"A"] = @"1";
_dictionary[@"B"] = @"2";
_dictionary[@"C"] = @"3";
NSArray *expected = @[@"A", @"B", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertEqualObjects(_dictionary[@"Key"], nil);
}
- (void)testSetObjectForKeyAtIndex
{
_dictionary[@"A"] = @"1";
_dictionary[@"B"] = @"2";
NSArray *expected = @[@"A", @"B"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary setObject:@"3" forKey:@"C" atIndex:0];
expected = @[@"C", @"A", @"B"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary setObject:@"4" forKey:@"C" atIndex:0];
expected = @[@"C", @"A", @"B"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertEqualObjects(_dictionary[0], @"4");
XCTAssertEqualObjects(_dictionary[@"C"], @"4");
[_dictionary setObject:@"5" forKey:@"A" atIndex:2];
expected = @[@"C", @"B", @"A"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertEqualObjects(_dictionary[2], @"5");
XCTAssertEqualObjects(_dictionary[@"A"], @"5");
XCTAssertThrows([_dictionary setObject:nil forKey:@"Key" atIndex:0]);
XCTAssertThrows([_dictionary setObject:@"Object" forKey:nil atIndex:0]);
XCTAssertThrows([_dictionary setObject:@"Object" forKey:@"Key" atIndex:100]);
}
- (void)testRemoveObjectAtIndex
{
_dictionary[@"A"] = @"1";
_dictionary[@"B"] = @"2";
_dictionary[@"C"] = @"3";
[_dictionary removeObjectAtIndex:1];
NSArray *expected = @[@"A", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary removeObjectAtIndex:1];
expected = @[@"A"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertThrows([_dictionary removeObjectAtIndex:100]);
}
- (void)testReplaceKeyValuePairAtIndex
{
_dictionary[@"A"] = @"1";
_dictionary[@"B"] = @"2";
_dictionary[@"C"] = @"3";
[_dictionary replaceKeyValueAtIndex:1 withObject:@"4" andKey:@"D"];
NSArray *expected = @[@"A", @"D", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertEqualObjects(_dictionary[1], @"4");
XCTAssertEqualObjects(_dictionary[@"D"], @"4");
[_dictionary replaceKeyValueAtIndex:0 withObject:@"5" andKey:@"E"];
expected = @[@"E", @"D", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
XCTAssertEqualObjects(_dictionary[0], @"5");
XCTAssertEqualObjects(_dictionary[@"E"], @"5");
XCTAssertThrows([_dictionary replaceKeyValueAtIndex:1 withObject:nil andKey:@"Key"]);
XCTAssertThrows([_dictionary replaceKeyValueAtIndex:1 withObject:@"Object" andKey:nil]);
XCTAssertThrows([_dictionary replaceKeyValueAtIndex:100 withObject:@"Object" andKey:@"Key"]);
}
- (void)testReplaceKeyAtIndex
{
_dictionary[@"A"] = @"1";
_dictionary[@"B"] = @"2";
_dictionary[@"C"] = @"3";
[_dictionary replaceKey:@"A" withKey:@"D"];
NSArray *expected = @[@"D", @"B", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary replaceKey:@"B" withKey:@"E"];
expected = @[@"D", @"E", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
[_dictionary replaceKey:@"Key" withKey:@"F"];
expected = @[@"D", @"E", @"C"];
XCTAssertEqualObjects(_dictionary.keyEnumerator.allObjects, expected);
}
@end