William Bowling is sharing code with you
Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.
Don't show this again1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | //
// TestAttributedStringAdditions.m
// Adium
//
// Created by Peter Hosey on 2009-03-07.
// Copyright 2009 Peter Hosey. All rights reserved.
//
#import "TestAttributedStringAdditions.h"
#import <AIUtilities/AIAttributedStringAdditions.h>
@implementation TestAttributedStringAdditions
- (void) testLinkedAttributedString
{
NSString *linkLabel = @"Adium";
NSString *linkURLString = @"http://adiumx.com/";
NSURL *linkURL = [NSURL URLWithString:linkURLString];
NSRange linkRange = { 0UL, 0UL };
id linkValue;
NSAttributedString *attributedString = nil;
NSRange attributedStringRange;
//First, try a string containing a URL.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithLinkLabel:linkLabel linkDestination:linkURLString], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:0UL effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Link range is not the entire range of the attributed string");
//Next, try an NSURL object.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithLinkLabel:linkLabel linkDestination:linkURL], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:0UL effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Link range is not the entire range of the attributed string");
}
- (void) testAttributedStringWithLinkedSubstring
{
NSString *linkLabel = @"Download Adium now!";
NSString *linkURLString = @"http://adiumx.com/";
NSURL *linkURL = [NSURL URLWithString:linkURLString];
NSRange intendedLinkRange = { 9UL, 5UL }; //@"Adium"
NSRange linkRange = { 0UL, 0UL };
id linkValue;
NSAttributedString *attributedString = nil;
//First, try a string containing a URL.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURLString], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:intendedLinkRange.location effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
STAssertEquals(linkRange, intendedLinkRange, @"Link range is not the range we wanted to link");
//Next, try an NSURL object.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURL], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:intendedLinkRange.location effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
STAssertEquals(linkRange, intendedLinkRange, @"Link range is not the range we wanted to link");
}
- (void) testAttributedStringWithLinkedEntireStringUsingSubstringMethod
{
NSString *linkLabel = @"Adium";
NSString *linkURLString = @"http://adiumx.com/";
NSURL *linkURL = [NSURL URLWithString:linkURLString];
NSRange intendedLinkRange = { 0UL, [linkLabel length] };
NSRange linkRange = { 0UL, 0UL };
id linkValue;
NSAttributedString *attributedString = nil;
NSRange attributedStringRange;
//First, try a string containing a URL.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURLString], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:0UL effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Link range is not the entire range of the attributed string");
//Next, try an NSURL object.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURL], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:0UL effectiveRange:&linkRange];
STAssertNotNil(linkValue, @"Attributed string does not have a link");
STAssertTrue([linkValue isKindOfClass:[NSURL class]], @"Link value is not an NSURL");
STAssertEqualObjects(linkValue, linkURL, @"Link value is not equal to the URL we provided");
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Link range is not the entire range of the attributed string");
}
- (void) testAttributedStringWithLinkedEmptySubstring
{
NSString *linkLabel = @"Download Adium now!";
NSString *linkURLString = @"http://adiumx.com/";
NSURL *linkURL = [NSURL URLWithString:linkURLString];
NSRange intendedLinkRange = { 9UL, 0UL }; //@""
NSRange linkRange = { 0UL, 0UL };
id linkValue;
NSAttributedString *attributedString = nil;
NSRange attributedStringRange;
//First, try a string containing a URL.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURLString], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:intendedLinkRange.location effectiveRange:&linkRange];
STAssertNil(linkValue, @"Attributed string has a link");
//linkRange, at this point, should be the range that does not have a link, which should be the entire string.
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Non-link range is not the entire string");
//Next, try an NSURL object.
STAssertNoThrow(attributedString = [NSAttributedString attributedStringWithString:linkLabel linkRange:intendedLinkRange linkDestination:linkURL], @"attributedStringWithLinkLabel:linkDestination: threw an exception");
STAssertNotNil(attributedString, @"attributedStringWithLinkLabel:linkDestination: returned nil");
STAssertEqualObjects([attributedString string], linkLabel, @"Attributed string's text is not equal to the original string");
STAssertEquals([attributedString length], [linkLabel length], @"Attributed string is not the same length (%lu) as the original string (%lu)", [attributedString length], [linkLabel length]);
linkValue = [attributedString attribute:NSLinkAttributeName atIndex:intendedLinkRange.location effectiveRange:&linkRange];
STAssertNil(linkValue, @"Attributed string has a link");
//linkRange, at this point, should be the range that does not have a link, which should be the entire string.
attributedStringRange = (NSRange){ 0UL, [attributedString length] };
STAssertEquals(linkRange, attributedStringRange, @"Non-link range is not the entire string");
}
- (void) testAttributedStringByConvertingLinksToStrings {
NSMutableAttributedString *input = [[[NSMutableAttributedString alloc] initWithString:@"Adium requires Growl."] autorelease];
[input addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://adiumx.com/"] range:[[input string] rangeOfString:@"Adium"]];
[input addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://growl.info/"] range:[[input string] rangeOfString:@"Growl"]];
NSAttributedString *result = nil;
STAssertNoThrow(result = [input attributedStringByConvertingLinksToStrings], @"-attributedStringByConvertingLinksToStrings threw an exception");
STAssertNotNil(result, @"-attributedStringByConvertingLinksToStrings returned nil");
STAssertEqualObjects([result string], @"Adium (http://adiumx.com/) requires Growl (http://growl.info/).", @"-attributedStringByConvertingLinksToStrings did not correctly expand the links");
}
- (void) testAttributedStringByConvertingLinksToURLStrings {
NSMutableAttributedString *input = [[[NSMutableAttributedString alloc] initWithString:@"Adium requires Growl."] autorelease];
[input addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://adiumx.com/"] range:[[input string] rangeOfString:@"Adium"]];
[input addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://growl.info/"] range:[[input string] rangeOfString:@"Growl"]];
NSAttributedString *result = nil;
STAssertNoThrow(result = [input attributedStringByConvertingLinksToURLStrings], @"-attributedStringByConvertingLinksToURLStrings threw an exception");
STAssertNotNil(result, @"-attributedStringByConvertingLinksToURLStrings returned nil");
STAssertEqualObjects([result string], @"http://adiumx.com/ requires http://growl.info/.", @"-attributedStringByConvertingLinksToURLStrings did not correctly expand the links");
}
@end
|