Skip to content

Commit 395b134

Browse files
committed
unit tests and refinements
1 parent ea3b8cc commit 395b134

File tree

9 files changed

+243
-25
lines changed

9 files changed

+243
-25
lines changed

JSQMessages.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@
9999
88A2601919D8E18400924534 /* JSQMessagesTypingIndicatorFooterViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A2600019D8E18400924534 /* JSQMessagesTypingIndicatorFooterViewTests.m */; };
100100
88A2601B19D8E45600924534 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 88A2601A19D8E45600924534 /* Info.plist */; };
101101
88A901B619F618B100F99777 /* JSQMediaItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A901B519F618B100F99777 /* JSQMediaItem.m */; };
102+
88C00A4E1A44D4C600B004B3 /* JSQLocationMediaItemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C00A4D1A44D4C600B004B3 /* JSQLocationMediaItemTests.m */; };
103+
88C00A501A44D4D800B004B3 /* JSQPhotoMediaItemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C00A4F1A44D4D800B004B3 /* JSQPhotoMediaItemTests.m */; };
104+
88C00A521A44D4E500B004B3 /* JSQVideoMediaItemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C00A511A44D4E500B004B3 /* JSQVideoMediaItemTests.m */; };
102105
88C4583019F5F7A0008FD427 /* JSQMessagesMediaViewBubbleImageMasker.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C4582F19F5F7A0008FD427 /* JSQMessagesMediaViewBubbleImageMasker.m */; };
103106
88E4D7131A0DBD6B000CC061 /* JSQMessages.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8841B88719F4988800EA16B6 /* JSQMessages.strings */; };
104107
94A4FA20C2FBD0D62614D5A8 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E6750B77E8A7042BA0754B /* libPods.a */; };
@@ -268,6 +271,9 @@
268271
88A2601A19D8E45600924534 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
269272
88A901B419F618B100F99777 /* JSQMediaItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMediaItem.h; sourceTree = "<group>"; };
270273
88A901B519F618B100F99777 /* JSQMediaItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQMediaItem.m; sourceTree = "<group>"; };
274+
88C00A4D1A44D4C600B004B3 /* JSQLocationMediaItemTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQLocationMediaItemTests.m; sourceTree = "<group>"; };
275+
88C00A4F1A44D4D800B004B3 /* JSQPhotoMediaItemTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQPhotoMediaItemTests.m; sourceTree = "<group>"; };
276+
88C00A511A44D4E500B004B3 /* JSQVideoMediaItemTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQVideoMediaItemTests.m; sourceTree = "<group>"; };
271277
88C4582E19F5F7A0008FD427 /* JSQMessagesMediaViewBubbleImageMasker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessagesMediaViewBubbleImageMasker.h; sourceTree = "<group>"; };
272278
88C4582F19F5F7A0008FD427 /* JSQMessagesMediaViewBubbleImageMasker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQMessagesMediaViewBubbleImageMasker.m; sourceTree = "<group>"; };
273279
97E6750B77E8A7042BA0754B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -602,10 +608,13 @@
602608
88A25FF219D8E18400924534 /* ModelTests */ = {
603609
isa = PBXGroup;
604610
children = (
611+
88C00A4D1A44D4C600B004B3 /* JSQLocationMediaItemTests.m */,
605612
88A25FF319D8E18400924534 /* JSQMessageMediaTests.m */,
606613
88A25FF419D8E18400924534 /* JSQMessagesAvatarImageTests.m */,
607614
88A25FF519D8E18400924534 /* JSQMessagesBubbleImageTests.m */,
608615
88A25FF619D8E18400924534 /* JSQMessageTextTests.m */,
616+
88C00A4F1A44D4D800B004B3 /* JSQPhotoMediaItemTests.m */,
617+
88C00A511A44D4E500B004B3 /* JSQVideoMediaItemTests.m */,
609618
);
610619
path = ModelTests;
611620
sourceTree = "<group>";
@@ -865,6 +874,7 @@
865874
files = (
866875
88A2600219D8E18400924534 /* JSQMessagesUIColorTests.m in Sources */,
867876
88A2601819D8E18400924534 /* JSQMessagesToolbarContentViewTests.m in Sources */,
877+
88C00A521A44D4E500B004B3 /* JSQVideoMediaItemTests.m in Sources */,
868878
88A2601519D8E18400924534 /* JSQMessagesInputToolbarTests.m in Sources */,
869879
88A2601719D8E18400924534 /* JSQMessagesLoadEarlierHeaderViewTests.m in Sources */,
870880
88A2601219D8E18400924534 /* JSQMessagesCollectionViewCellTests.m in Sources */,
@@ -881,9 +891,11 @@
881891
88A2601319D8E18400924534 /* JSQMessagesCollectionViewTests.m in Sources */,
882892
88A2600119D8E18400924534 /* JSQMessagesNSStringTests.m in Sources */,
883893
88A2600A19D8E18400924534 /* JSQMessagesToolbarButtonFactoryTests.m in Sources */,
894+
88C00A501A44D4D800B004B3 /* JSQPhotoMediaItemTests.m in Sources */,
884895
88324C3419F6301C00BC732D /* JSQMessagesMediaViewBubbleImageMaskerTests.m in Sources */,
885896
88A2601919D8E18400924534 /* JSQMessagesTypingIndicatorFooterViewTests.m in Sources */,
886897
88A2600319D8E18400924534 /* JSQMessagesUIImageTests.m in Sources */,
898+
88C00A4E1A44D4C600B004B3 /* JSQLocationMediaItemTests.m in Sources */,
887899
88A2600C19D8E18400924534 /* JSQMessagesCollectionViewLayoutAttributesTests.m in Sources */,
888900
88A2600619D8E18400924534 /* JSQMessagesViewControllerTests.m in Sources */,
889901
88A2600519D8E18400924534 /* JSQMessagesKeyboardControllerTests.m in Sources */,
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// Created by Jesse Squires
3+
// http://www.jessesquires.com
4+
//
5+
//
6+
// MIT License
7+
// Copyright (c) 2014 Jesse Squires
8+
// http://opensource.org/licenses/MIT
9+
//
10+
11+
#import <XCTest/XCTest.h>
12+
13+
#import "JSQLocationMediaItem.h"
14+
15+
16+
@interface JSQLocationMediaItemTests : XCTestCase
17+
18+
@property (strong, nonatomic) CLLocation *location;
19+
20+
@end
21+
22+
23+
@implementation JSQLocationMediaItemTests
24+
25+
- (void)setUp
26+
{
27+
[super setUp];
28+
self.location = [[CLLocation alloc] initWithLatitude:37.795313 longitude:-122.393757];
29+
}
30+
31+
- (void)tearDown
32+
{
33+
self.location = nil;
34+
[super tearDown];
35+
}
36+
37+
- (void)testLocationItemInit
38+
{
39+
JSQLocationMediaItem *item = [[JSQLocationMediaItem alloc] initWithLocation:self.location];
40+
XCTAssertNotNil(item);
41+
}
42+
43+
- (void)testMediaDataProtocol
44+
{
45+
JSQLocationMediaItem *item = [[JSQLocationMediaItem alloc] init];
46+
47+
XCTAssertTrue(!CGSizeEqualToSize([item mediaViewDisplaySize], CGSizeZero));
48+
XCTAssertNotNil([item mediaPlaceholderView]);
49+
XCTAssertNil([item mediaView], @"Media view should be nil if location is nil");
50+
51+
XCTestExpectation *expectation = [self expectationWithDescription:[NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__]];
52+
53+
[item setLocation:self.location withCompletionHandler:^{
54+
[expectation fulfill];
55+
}];
56+
57+
[self waitForExpectationsWithTimeout:5 handler:^(NSError *error) {
58+
XCTAssertNil(error, @"Expectation should not error");
59+
}];
60+
61+
XCTAssertNotNil([item mediaView], @"Media view should NOT be nil once item has media data");
62+
}
63+
64+
@end

JSQMessagesTests/ModelTests/JSQMessageMediaTests.m

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ - (void)tearDown
6868
- (void)testMediaMessageInit
6969
{
7070
JSQMessage *msg = [[JSQMessage alloc] initWithSenderId:self.senderId
71-
senderDisplayName:self.senderDisplayName
72-
date:self.date
73-
media:self.mockMediaData];
71+
senderDisplayName:self.senderDisplayName
72+
date:self.date
73+
media:self.mockMediaData];
7474
XCTAssertNotNil(msg, @"Message should not be nil");
7575
}
7676

@@ -83,24 +83,24 @@ - (void)testMediaMessageInvalidInit
8383
- (void)testMediaMessageIsEqual
8484
{
8585
JSQMessage *msg = [[JSQMessage alloc] initWithSenderId:self.senderId
86-
senderDisplayName:self.senderDisplayName
87-
date:self.date
88-
media:self.mockMediaData];
86+
senderDisplayName:self.senderDisplayName
87+
date:self.date
88+
media:self.mockMediaData];
8989
JSQMessage *copy = [msg copy];
9090

9191
XCTAssertEqualObjects(msg, copy, @"Copied messages should be equal");
92+
9293
XCTAssertEqual([msg hash], [copy hash], @"Copied messages hashes should be equal");
9394

94-
XCTAssertEqualObjects(msg, copy, @"Copied messages should be equal");
9595
XCTAssertEqualObjects(msg, msg, @"Messages should be equal to itself");
9696
}
9797

9898
- (void)testMediaMessageArchiving
9999
{
100100
JSQMessage *msg = [[JSQMessage alloc] initWithSenderId:self.senderId
101-
senderDisplayName:self.senderDisplayName
102-
date:self.date
103-
media:[FakeMedia new]];
101+
senderDisplayName:self.senderDisplayName
102+
date:self.date
103+
media:[FakeMedia new]];
104104

105105
NSData *msgData = [NSKeyedArchiver archivedDataWithRootObject:msg];
106106

JSQMessagesTests/ModelTests/JSQMessageTextTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ - (void)testTextMessageIsEqual
7373
JSQMessage *copy = [msg copy];
7474

7575
XCTAssertEqualObjects(msg, copy, @"Copied messages should be equal");
76+
7677
XCTAssertEqual([msg hash], [copy hash], @"Copied messages hashes should be equal");
7778

78-
XCTAssertEqualObjects(msg, copy, @"Copied messages should be equal");
7979
XCTAssertEqualObjects(msg, msg, @"Messages should be equal to itself");
8080
}
8181

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
//
2+
// Created by Jesse Squires
3+
// http://www.jessesquires.com
4+
//
5+
//
6+
// MIT License
7+
// Copyright (c) 2014 Jesse Squires
8+
// http://opensource.org/licenses/MIT
9+
//
10+
11+
#import <XCTest/XCTest.h>
12+
13+
#import "JSQPhotoMediaItem.h"
14+
15+
16+
@interface JSQPhotoMediaItemTests : XCTestCase
17+
18+
@end
19+
20+
21+
@implementation JSQPhotoMediaItemTests
22+
23+
- (void)setUp
24+
{
25+
[super setUp];
26+
}
27+
28+
- (void)tearDown
29+
{
30+
[super tearDown];
31+
}
32+
33+
- (void)testPhotoItemInit
34+
{
35+
JSQPhotoMediaItem *item = [[JSQPhotoMediaItem alloc] initWithImage:[UIImage new]];
36+
XCTAssertNotNil(item);
37+
}
38+
39+
- (void)testPhotoItemIsEqual
40+
{
41+
JSQPhotoMediaItem *item = [[JSQPhotoMediaItem alloc] initWithImage:[UIImage imageNamed:@"demo_avatar_jobs"]];
42+
43+
JSQPhotoMediaItem *copy = [item copy];
44+
45+
XCTAssertEqualObjects(item, copy, @"Copied items should be equal");
46+
47+
XCTAssertEqual([item hash], [copy hash], @"Copied item hashes should be equal");
48+
49+
XCTAssertEqualObjects(item, item, @"Item should be equal to itself");
50+
}
51+
52+
- (void)testPhotoItemArchiving
53+
{
54+
JSQPhotoMediaItem *item = [[JSQPhotoMediaItem alloc] initWithImage:[UIImage new]];
55+
56+
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:item];
57+
58+
JSQPhotoMediaItem *unarchivedItem = [NSKeyedUnarchiver unarchiveObjectWithData:data];
59+
60+
XCTAssertEqualObjects(item, unarchivedItem);
61+
}
62+
63+
- (void)testMediaDataProtocol
64+
{
65+
JSQPhotoMediaItem *item = [[JSQPhotoMediaItem alloc] initWithImage:nil];
66+
67+
XCTAssertTrue(!CGSizeEqualToSize([item mediaViewDisplaySize], CGSizeZero));
68+
XCTAssertNotNil([item mediaPlaceholderView]);
69+
XCTAssertNil([item mediaView], @"Media view should be nil if image is nil");
70+
71+
item.image = [UIImage imageNamed:@"demo_avatar_jobs"];
72+
73+
XCTAssertNotNil([item mediaView], @"Media view should NOT be nil once item has media data");
74+
}
75+
76+
@end
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
//
2+
// Created by Jesse Squires
3+
// http://www.jessesquires.com
4+
//
5+
//
6+
// MIT License
7+
// Copyright (c) 2014 Jesse Squires
8+
// http://opensource.org/licenses/MIT
9+
//
10+
11+
#import <XCTest/XCTest.h>
12+
13+
#import "JSQVideoMediaItem.h"
14+
15+
16+
@interface JSQVideoMediaItemTests : XCTestCase
17+
18+
@end
19+
20+
21+
@implementation JSQVideoMediaItemTests
22+
23+
- (void)setUp
24+
{
25+
[super setUp];
26+
}
27+
28+
- (void)tearDown
29+
{
30+
[super tearDown];
31+
}
32+
33+
- (void)testVideoMediaItemInit
34+
{
35+
JSQVideoMediaItem *item = [[JSQVideoMediaItem alloc] initWithFileURL:[NSURL URLWithString:@"file://"] isReadyToPlay:NO];
36+
XCTAssertNotNil(item);
37+
}
38+
39+
- (void)testVideoItemIsEqual
40+
{
41+
JSQVideoMediaItem *item = [[JSQVideoMediaItem alloc] initWithFileURL:[NSURL URLWithString:@"file://"] isReadyToPlay:YES];
42+
43+
JSQVideoMediaItem *copy = [item copy];
44+
45+
XCTAssertEqualObjects(item, copy, @"Copied items should be equal");
46+
47+
XCTAssertEqual([item hash], [copy hash], @"Copied item hashes should be equal");
48+
49+
XCTAssertEqualObjects(item, item, @"Item should be equal to itself");
50+
}
51+
52+
- (void)testVideoItemArchiving
53+
{
54+
JSQVideoMediaItem *item = [[JSQVideoMediaItem alloc] initWithFileURL:[NSURL URLWithString:@"file://"] isReadyToPlay:YES];
55+
56+
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:item];
57+
58+
JSQVideoMediaItem *unarchivedItem = [NSKeyedUnarchiver unarchiveObjectWithData:data];
59+
60+
XCTAssertEqualObjects(item, unarchivedItem);
61+
}
62+
63+
- (void)testMediaDataProtocol
64+
{
65+
JSQVideoMediaItem *item = [[JSQVideoMediaItem alloc] init];
66+
67+
XCTAssertTrue(!CGSizeEqualToSize([item mediaViewDisplaySize], CGSizeZero));
68+
XCTAssertNotNil([item mediaPlaceholderView]);
69+
XCTAssertNil([item mediaView], @"Media view should be nil if fileURL is nil, and readyToPlay is NO");
70+
71+
item.fileURL = [NSURL URLWithString:@"file://"];
72+
item.isReadyToPlay = YES;
73+
74+
XCTAssertNotNil([item mediaView], @"Media view should NOT be nil once item has media data");
75+
}
76+
77+
@end

JSQMessagesViewController/Model/JSQLocationMediaItem.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ - (BOOL)isEqual:(id)object
170170

171171
- (NSUInteger)hash
172172
{
173-
return self.location.hash;
173+
return super.hash ^ self.location.hash;
174174
}
175175

176176
- (NSString *)description

JSQMessagesViewController/Model/JSQPhotoMediaItem.m

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,20 +86,9 @@ - (UIView *)mediaView
8686

8787
#pragma mark - NSObject
8888

89-
- (BOOL)isEqual:(id)object
90-
{
91-
if (![super isEqual:object]) {
92-
return NO;
93-
}
94-
95-
JSQPhotoMediaItem *photoItem = (JSQPhotoMediaItem *)object;
96-
97-
return [self.image isEqual:photoItem.image];
98-
}
99-
10089
- (NSUInteger)hash
10190
{
102-
return self.image.hash;
91+
return super.hash ^ self.image.hash;
10392
}
10493

10594
- (NSString *)description

JSQMessagesViewController/Model/JSQVideoMediaItem.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ - (BOOL)isEqual:(id)object
112112

113113
- (NSUInteger)hash
114114
{
115-
return self.fileURL.hash;
115+
return super.hash ^ self.fileURL.hash;
116116
}
117117

118118
- (NSString *)description

0 commit comments

Comments
 (0)