Mercurial > sdl-ios-xcode
annotate test/automated/rwops/TestSupportRWops_Cocoa.m @ 4451:033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
The refactored tests were written in recognition that Mac and iPhone current working directories are usually not going to work. Resource directories are in bundles and write directories are restricted to certain areas. In theory, other platforms may have this problem too, hence the refactoring.
Also updated the Xcode iPhone project to use 3.2 as the Base SDK, but 3.1 as the Deployment SDK (for iPhone/iPad compatibility.)
author | Eric Wing <ewing . public |-at-| gmail . com> |
---|---|
date | Sun, 09 May 2010 06:58:30 -0700 |
parents | test/automated/rwops/Test_rwopsbundlesupport.m@8f73f4a3c972 |
children |
rev | line source |
---|---|
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
1 #import "TestSupportRWops.h" |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
2 #import <Foundation/Foundation.h> |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
3 #include "SDL.h" |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
4 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
5 /* For proper OS X applications, the resources are contained inside the application bundle. |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
6 So the strategy is to first check the application bundle for the file, then fallback to the current working directory. |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
7 Note: One additional corner-case is if the resource is in a framework's resource bundle instead of the app. |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
8 We might want to use bundle identifiers, e.g. org.libsdl.sdl to get the bundle for the framework, |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
9 but we would somehow need to know what the bundle identifiers we need to search are. |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
10 Conversely, write directories are usually not in the bundles. This implementation uses NSTemporaryDirectory, |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
11 but consider Preferences, Application Support, Documents, etc. |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
12 Also, note the bundle layouts are different for iPhone and Mac. |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
13 */ |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
14 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
15 const char* RWOPS_READ = "rwops/read"; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
16 const char* RWOPS_WRITE = "write"; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
17 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
18 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
19 FILE* TestSupportRWops_OpenFPFromReadDir(const char *file, const char *mode) |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
20 { |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
21 FILE* fp = NULL; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
22 |
4449
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
23 // If the file mode is writable, skip all the bundle stuff because generally the bundle is read-only. |
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
24 if(strcmp("r", mode) && strcmp("rb", mode)) |
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
25 { |
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
26 return fopen(file, mode); |
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
27 } |
8f73f4a3c972
Exempted writable modes from bundle check on OS X since bundle areas are typically read-only.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4447
diff
changeset
|
28 |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
29 NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
30 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
31 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
32 NSFileManager* file_manager = [NSFileManager defaultManager]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
33 NSString* resource_path = [[NSBundle mainBundle] resourcePath]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
34 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
35 NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
36 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
37 NSString* full_path_with_file_to_try = [resource_path stringByAppendingPathComponent:ns_string_file_component]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
38 if([file_manager fileExistsAtPath:full_path_with_file_to_try]) |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
39 { |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
40 fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode); |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
41 } |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
42 else |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
43 { |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
44 fp = fopen(file, mode); |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
45 } |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
46 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
47 [autorelease_pool drain]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
48 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
49 return fp; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
50 } |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
51 |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
52 FILE* TestSupportRWops_OpenFPFromWriteDir(const char *file, const char *mode) |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
53 { |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
54 FILE* fp = NULL; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
55 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
56 NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
57 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
58 NSFileManager* file_manager = [NSFileManager defaultManager]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
59 NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
60 NSString* full_path_with_file_to_try = [NSTemporaryDirectory() stringByAppendingPathComponent:ns_string_file_component]; |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
61 |
4447
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
62 fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode); |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
63 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
64 [autorelease_pool drain]; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
65 |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
66 return fp; |
947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
67 } |
4451
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
68 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
69 SDL_RWops* TestSupportRWops_OpenRWopsFromReadDir(const char *file, const char *mode) |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
70 { |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
71 return SDL_RWFromFile(file, mode); |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
72 } |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
73 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
74 SDL_RWops* TestSupportRWops_OpenRWopsFromWriteDir(const char *file, const char *mode) |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
75 { |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
76 SDL_RWops* rw = NULL; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
77 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
78 NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init]; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
79 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
80 NSFileManager* file_manager = [NSFileManager defaultManager]; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
81 NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)]; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
82 NSString* full_path_with_file_to_try = [NSTemporaryDirectory() stringByAppendingPathComponent:ns_string_file_component]; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
83 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
84 rw = SDL_RWFromFile( [full_path_with_file_to_try fileSystemRepresentation], mode ); |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
85 |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
86 [autorelease_pool drain]; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
87 return rw; |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
88 } |
033c455bbe99
Refactored automated rwops tests so read and write directories can be more easily customized.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
4449
diff
changeset
|
89 |