From 518fd5eacbdeb4b4ff2d9e2b562a2e98a0c60067 Mon Sep 17 00:00:00 2001 From: iska Date: Tue, 22 Dec 2015 02:37:28 +0100 Subject: [PATCH] Add tests for parsing extension selectors --- HTMLKit.xcodeproj/project.pbxproj | 6 + .../CSSExtensionSelectorsParsingTests.m | 125 ++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 HTMLKitTests/CSSExtensionSelectorsParsingTests.m diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj index a0b7b31..8b47eef 100644 --- a/HTMLKit.xcodeproj/project.pbxproj +++ b/HTMLKit.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 62132E5A1C01F83200084175 /* CSSSelectorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 62132E581C01F83200084175 /* CSSSelectorTest.m */; }; 62132E5D1C021FF200084175 /* css-tests in Resources */ = {isa = PBXBuildFile; fileRef = 62132E5B1C021FF200084175 /* css-tests */; }; + 6216ACFD1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6216ACFC1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m */; }; + 6216ACFE1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6216ACFC1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m */; }; 621FBE5B1BDAD68700BC9555 /* CSSSelectorParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 621FBE591BDAD68700BC9555 /* CSSSelectorParserTests.m */; }; 621FBE5E1BDAD90200BC9555 /* CSSCombinatorSelectorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 621FBE5C1BDAD90200BC9555 /* CSSCombinatorSelectorTests.m */; }; 6236738F1AC0CE2500FF89B3 /* HTMLKitTokenizerPerformance.m in Sources */ = {isa = PBXBuildFile; fileRef = 6236738D1AC0CE2500FF89B3 /* HTMLKitTokenizerPerformance.m */; }; @@ -295,6 +297,7 @@ 62132E571C01F83200084175 /* CSSSelectorTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSSelectorTest.h; sourceTree = ""; }; 62132E581C01F83200084175 /* CSSSelectorTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSSelectorTest.m; sourceTree = ""; }; 62132E5B1C021FF200084175 /* css-tests */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "css-tests"; sourceTree = ""; }; + 6216ACFC1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSExtensionSelectorsParsingTests.m; sourceTree = ""; }; 621FBE591BDAD68700BC9555 /* CSSSelectorParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSSelectorParserTests.m; sourceTree = ""; }; 621FBE5C1BDAD90200BC9555 /* CSSCombinatorSelectorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSCombinatorSelectorTests.m; sourceTree = ""; }; 6223211D1A969B9300BACED5 /* HTMLElementTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLElementTypes.h; sourceTree = ""; }; @@ -788,6 +791,7 @@ 62132E571C01F83200084175 /* CSSSelectorTest.h */, 62132E581C01F83200084175 /* CSSSelectorTest.m */, 621FBE591BDAD68700BC9555 /* CSSSelectorParserTests.m */, + 6216ACFC1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m */, 628AF62E1BC99A6C00496128 /* CSSNthExpressionsParserTests.m */, 624AB3161B0508AE00F3830D /* CSSTypeSelectorTests.m */, 624AB3191B050A4D00F3830D /* CSSAttributeSelectorTests.m */, @@ -1145,6 +1149,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6216ACFD1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m in Sources */, 62132E5A1C01F83200084175 /* CSSSelectorTest.m in Sources */, 6239755B1AC362CA007E26F1 /* HTMLKitTreeConstructionTests.m in Sources */, 62F658711BD83C8E0045F137 /* CSSNThExpressionSelectorTests.m in Sources */, @@ -1224,6 +1229,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6216ACFE1C28DCC80074CAB4 /* CSSExtensionSelectorsParsingTests.m in Sources */, 62ECBFCA1C0B6E2E00AF847B /* HTML5LibTokenizerTest.m in Sources */, 62ECBFCB1C0B6E2E00AF847B /* HTMLKitTokenizerTests.m in Sources */, 62ECBFCC1C0B6E2E00AF847B /* HTMLKitTokenizerPerformance.m in Sources */, diff --git a/HTMLKitTests/CSSExtensionSelectorsParsingTests.m b/HTMLKitTests/CSSExtensionSelectorsParsingTests.m new file mode 100644 index 0000000..c9cd155 --- /dev/null +++ b/HTMLKitTests/CSSExtensionSelectorsParsingTests.m @@ -0,0 +1,125 @@ +// +// CSSExtensionSelectorsParsingTests.m +// HTMLKit +// +// Created by Iska on 22/12/15. +// Copyright © 2015 BrainCookie. All rights reserved. +// + +#import +#import "CSSSelectors.h" +#import "CSSSelectorParser.h" + +@interface CSSExtensionSelectorsParsingTests : XCTestCase + +@end + +@implementation CSSExtensionSelectorsParsingTests + + +- (void)testParseExtensionSelectors +{ + NSError *error = nil; + + CSSSelector *selector = [CSSSelectorParser parseSelector:@":button" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, buttonSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":checkbox" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, checkboxSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":file" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, fileSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":header" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, headerSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":image" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, imageSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":link" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, linkSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":optional" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, optionalSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":parent" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, parentSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":password" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, passwordSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":radio" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, radioSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":submit" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, submitSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":text" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, textSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":required" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, requiredSelector().debugDescription); + + selector = [CSSSelectorParser parseSelector:@":reset" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, resetSelector().debugDescription); +} + +- (void)testParseIndexSelectors +{ + NSError *error = nil; + + // lt-selector + CSSSelector *selector = [CSSSelectorParser parseSelector:@":lt(1)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, ltSelector(1).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":lt(+2)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, ltSelector(2).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":lt(-3)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, ltSelector(-3).debugDescription); + + // gt-selector + selector = [CSSSelectorParser parseSelector:@":gt(1)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, gtSelector(1).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":gt(+2)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, gtSelector(2).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":gt(-3)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, gtSelector(-3).debugDescription); + + // eq-selector + selector = [CSSSelectorParser parseSelector:@":eq(1)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, eqSelector(1).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":eq(+2)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, eqSelector(2).debugDescription); + + selector = [CSSSelectorParser parseSelector:@":eq(-3)" error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(selector.debugDescription, eqSelector(-3).debugDescription); +} + +@end