Initial import.
This commit is contained in:
218
RSXMLTests/RSHTMLTests.m
Normal file
218
RSXMLTests/RSHTMLTests.m
Normal file
@@ -0,0 +1,218 @@
|
||||
//
|
||||
// RSHTMLTests.m
|
||||
// RSXML
|
||||
//
|
||||
// Created by Brent Simmons on 3/5/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
@import RSXML;
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
@interface RSHTMLTests : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation RSHTMLTests
|
||||
|
||||
|
||||
+ (RSXMLData *)xmlData:(NSString *)title urlString:(NSString *)urlString {
|
||||
|
||||
NSString *s = [[NSBundle bundleForClass:[self class]] pathForResource:title ofType:@"html"];
|
||||
NSData *d = [[NSData alloc] initWithContentsOfFile:s];
|
||||
return [[RSXMLData alloc] initWithData:d urlString:urlString];
|
||||
}
|
||||
|
||||
|
||||
+ (RSXMLData *)daringFireballData {
|
||||
|
||||
static RSXMLData *xmlData = nil;
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
xmlData = [self xmlData:@"DaringFireball" urlString:@"http://daringfireball.net/"];
|
||||
});
|
||||
|
||||
return xmlData;
|
||||
}
|
||||
|
||||
|
||||
+ (RSXMLData *)furboData {
|
||||
|
||||
static RSXMLData *xmlData = nil;
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
xmlData = [self xmlData:@"furbo" urlString:@"http://furbo.org/"];
|
||||
});
|
||||
|
||||
return xmlData;
|
||||
}
|
||||
|
||||
|
||||
+ (RSXMLData *)inessentialData {
|
||||
|
||||
static RSXMLData *xmlData = nil;
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
xmlData = [self xmlData:@"inessential" urlString:@"http://inessential.com/"];
|
||||
});
|
||||
|
||||
return xmlData;
|
||||
}
|
||||
|
||||
|
||||
+ (RSXMLData *)sixcolorsData {
|
||||
|
||||
static RSXMLData *xmlData = nil;
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
xmlData = [self xmlData:@"sixcolors" urlString:@"https://sixcolors.com/"];
|
||||
});
|
||||
|
||||
return xmlData;
|
||||
}
|
||||
|
||||
|
||||
- (void)testDaringFireball {
|
||||
|
||||
RSXMLData *xmlData = [[self class] daringFireballData];
|
||||
RSHTMLMetadata *metadata = [RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
|
||||
XCTAssertEqualObjects(metadata.faviconLink, @"http://daringfireball.net/graphics/favicon.ico?v=005");
|
||||
|
||||
XCTAssertTrue(metadata.feedLinks.count == 1);
|
||||
RSHTMLMetadataFeedLink *feedLink = metadata.feedLinks[0];
|
||||
XCTAssertNil(feedLink.title);
|
||||
XCTAssertEqualObjects(feedLink.type, @"application/atom+xml");
|
||||
XCTAssertEqualObjects(feedLink.urlString, @"http://daringfireball.net/feeds/main");
|
||||
}
|
||||
|
||||
|
||||
- (void)testDaringFireballPerformance {
|
||||
|
||||
RSXMLData *xmlData = [[self class] daringFireballData];
|
||||
|
||||
[self measureBlock:^{
|
||||
(void)[RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)testFurbo {
|
||||
|
||||
RSXMLData *xmlData = [[self class] furboData];
|
||||
RSHTMLMetadata *metadata = [RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
|
||||
XCTAssertEqualObjects(metadata.faviconLink, @"http://furbo.org/favicon.ico");
|
||||
|
||||
XCTAssertTrue(metadata.feedLinks.count == 1);
|
||||
RSHTMLMetadataFeedLink *feedLink = metadata.feedLinks[0];
|
||||
XCTAssertEqualObjects(feedLink.title, @"Iconfactory News Feed");
|
||||
XCTAssertEqualObjects(feedLink.type, @"application/rss+xml");
|
||||
}
|
||||
|
||||
|
||||
- (void)testFurboPerformance {
|
||||
|
||||
RSXMLData *xmlData = [[self class] furboData];
|
||||
|
||||
[self measureBlock:^{
|
||||
(void)[RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (void)testInessential {
|
||||
|
||||
RSXMLData *xmlData = [[self class] inessentialData];
|
||||
RSHTMLMetadata *metadata = [RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
|
||||
XCTAssertNil(metadata.faviconLink);
|
||||
|
||||
XCTAssertTrue(metadata.feedLinks.count == 1);
|
||||
RSHTMLMetadataFeedLink *feedLink = metadata.feedLinks[0];
|
||||
XCTAssertEqualObjects(feedLink.title, @"RSS");
|
||||
XCTAssertEqualObjects(feedLink.type, @"application/rss+xml");
|
||||
XCTAssertEqualObjects(feedLink.urlString, @"http://inessential.com/xml/rss.xml");
|
||||
|
||||
XCTAssertEqual(metadata.appleTouchIcons.count, 0);
|
||||
}
|
||||
|
||||
|
||||
- (void)testInessentialPerformance {
|
||||
|
||||
RSXMLData *xmlData = [[self class] inessentialData];
|
||||
|
||||
[self measureBlock:^{
|
||||
(void)[RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (void)testSixcolors {
|
||||
|
||||
RSXMLData *xmlData = [[self class] sixcolorsData];
|
||||
RSHTMLMetadata *metadata = [RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
|
||||
XCTAssertEqualObjects(metadata.faviconLink, @"https://sixcolors.com/images/favicon.ico");
|
||||
|
||||
XCTAssertTrue(metadata.feedLinks.count == 1);
|
||||
RSHTMLMetadataFeedLink *feedLink = metadata.feedLinks[0];
|
||||
XCTAssertEqualObjects(feedLink.title, @"RSS");
|
||||
XCTAssertEqualObjects(feedLink.type, @"application/rss+xml");
|
||||
XCTAssertEqualObjects(feedLink.urlString, @"http://feedpress.me/sixcolors");
|
||||
|
||||
XCTAssertEqual(metadata.appleTouchIcons.count, 6);
|
||||
RSHTMLMetadataAppleTouchIcon *icon = metadata.appleTouchIcons[3];
|
||||
XCTAssertEqualObjects(icon.rel, @"apple-touch-icon");
|
||||
XCTAssertEqualObjects(icon.sizes, @"120x120");
|
||||
XCTAssertEqualObjects(icon.urlString, @"https://sixcolors.com/apple-touch-icon-120.png");
|
||||
}
|
||||
|
||||
|
||||
- (void)testSixcolorsPerformance {
|
||||
|
||||
RSXMLData *xmlData = [[self class] sixcolorsData];
|
||||
|
||||
[self measureBlock:^{
|
||||
(void)[RSHTMLMetadataParser HTMLMetadataWithXMLData:xmlData];
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Links
|
||||
|
||||
- (void)testSixColorsLinks {
|
||||
|
||||
RSXMLData *xmlData = [[self class] sixcolorsData];
|
||||
NSArray *links = [RSHTMLLinkParser htmlLinksWithData:xmlData];
|
||||
|
||||
NSString *linkToFind = @"https://www.theincomparable.com/theincomparable/290/index.php";
|
||||
NSString *textToFind = @"this week’s episode of The Incomparable";
|
||||
|
||||
BOOL found = NO;
|
||||
for (RSHTMLLink *oneLink in links) {
|
||||
|
||||
if ([oneLink.urlString isEqualToString:linkToFind] && [oneLink.text isEqualToString:textToFind]) {
|
||||
found = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
XCTAssertTrue(found, @"Expected link should have been found.");
|
||||
XCTAssertEqual(links.count, 131, @"Expected 131 links.");
|
||||
}
|
||||
|
||||
|
||||
- (void)testSixColorsLinksPerformance {
|
||||
|
||||
RSXMLData *xmlData = [[self class] sixcolorsData];
|
||||
|
||||
[self measureBlock:^{
|
||||
(void)[RSHTMLLinkParser htmlLinksWithData:xmlData];
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user