aboutsummaryrefslogtreecommitdiff
path: root/AppKit/GTMGetURLHandlerTest.m
blob: a6391769ec3ad66a61ae64034e1925b1cb046ee2 (plain)
1
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
//  GTMGetURLHandlerTest.m
//
//  Copyright 2008 Google Inc.
//
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
//  use this file except in compliance with the License.  You may obtain a copy
//  of the License at
// 
//  http://www.apache.org/licenses/LICENSE-2.0
// 
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
//  License for the specific language governing permissions and limitations under
//  the License.
//

#import "GTMSenTestCase.h"
#import "GTMUnitTestDevLog.h"

static BOOL sURLHandlerWasHit;

@interface GTMGetURLHandlerBadClassWarning : NSObject
@end

@implementation GTMGetURLHandlerBadClassWarning : NSObject
@end

@interface GTMGetURLHandlerTest : GTMTestCase
@end

@implementation GTMGetURLHandlerTest
- (BOOL)openURLString:(NSString *)url {
  ProcessSerialNumber psn = { 0, kCurrentProcess };
  NSAppleEventDescriptor *currentProcess 
    = [NSAppleEventDescriptor descriptorWithDescriptorType:typeProcessSerialNumber
                                                     bytes:&psn
                                                    length:sizeof(ProcessSerialNumber)];
  NSAppleEventDescriptor *event 
    = [NSAppleEventDescriptor appleEventWithEventClass:kInternetEventClass
                                               eventID:kAEGetURL
                                      targetDescriptor:currentProcess
                                              returnID:kAutoGenerateReturnID
                                         transactionID:kAnyTransactionID];
  NSAppleEventDescriptor *keyDesc 
    = [NSAppleEventDescriptor descriptorWithString:url];
  [event setParamDescriptor:keyDesc forKeyword:keyDirectObject];
  OSStatus err = AESendMessage([event aeDesc], NULL, kAEWaitReply, 60);
  return err == noErr ? YES : NO;
}

+ (BOOL)gtm_openURL:(NSURL*)url {
  sURLHandlerWasHit = !sURLHandlerWasHit;
  return YES;
}

- (void)testURLCall {
  sURLHandlerWasHit = NO;
  
  [GTMUnitTestDevLogDebug expectPattern:@"Class GTMGetURLHandlerBadClassWarning "
   @"for URL handler GTMGetURLHandlerBadClassURL .*"];
  [GTMUnitTestDevLogDebug expectPattern:@"Unable to get class "
   @"GTMGetURLHandlerMissingClassWarning for URL handler "
   @"GTMGetURLHandlerMissingClassURL .*"];
  [GTMUnitTestDevLogDebug expectPattern:@"Missing GTMBundleURLClass for URL handler "
   @"GTMGetURLHandlerMissingHandlerURL .*"];
  STAssertTrue([self openURLString:@"gtmgeturlhandlertest://test.foo"], nil);
  STAssertTrue(sURLHandlerWasHit, @"URL handler not called");
  
  STAssertTrue([self openURLString:@"gtmgeturlhandlertest://test.foo"], nil);
  STAssertFalse(sURLHandlerWasHit, @"URL handler not called 2");
  
  // test the two URL schemes with bad entries
  STAssertTrue([self openURLString:@"gtmgeturlhandlerbadclasstest://test.foo"], 
               nil);
  
  STAssertTrue([self openURLString:@"gtmgeturlhandlermissingclasstest://test.foo"], 
               nil);

  STAssertTrue([self openURLString:@"gtmgeturlhandlermissinghandlerurl://test.foo"], 
               nil);
}
@end