TwitterNetworkLayerTests/TNLTemporaryFileTest.m (106 lines of code) (raw):
//
// TNLTemporaryFileTest.m
// TwitterNetworkLayer
//
// Created on 10/28/14.
// Copyright © 2020 Twitter. All rights reserved.
//
#import "TNLTemporaryFile_Project.h"
@import XCTest;
@interface TNLTemporaryFileTest : XCTestCase
@end
@implementation TNLTemporaryFileTest
- (void)testInnerMethods
{
NSString *destination = [NSTemporaryDirectory() stringByAppendingString:@"temp_file.tmp"];
TNLTemporaryFile *tmpFile = [[TNLTemporaryFile alloc] init];
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
[fm removeItemAtPath:destination error:NULL];
XCTAssertNotNil(tmpFile.path);
XCTAssertFalse([fm fileExistsAtPath:tmpFile.path]);
XCTAssertFalse([tmpFile appendData:[@"Data" dataUsingEncoding:NSUTF8StringEncoding] error:&error]);
XCTAssertNotNil(error);
error = nil;
XCTAssertTrue([tmpFile close:&error]); // closing a closed tmp file is a no-op, not an error
XCTAssertNil(error);
error = nil;
XCTAssertFalse([tmpFile moveToPath:destination error:&error]);
XCTAssertNotNil(error);
error = nil;
XCTAssertFalse(tmpFile.isOpen);
XCTAssertTrue([tmpFile open:&error]);
XCTAssertNil(error);
error = nil;
XCTAssertTrue(tmpFile.isOpen);
XCTAssertTrue([tmpFile open:&error]); // redundant open is a no-op, not an error
XCTAssertNil(error);
error = nil;
XCTAssertTrue(tmpFile.isOpen);
XCTAssertTrue([tmpFile appendData:[@"Append data\n" dataUsingEncoding:NSUTF8StringEncoding] error:&error]);
XCTAssertNil(error);
error = nil;
XCTAssertFalse([tmpFile moveToPath:destination error:&error]);
XCTAssertNotNil(error);
error = nil;
XCTAssertTrue([tmpFile close:&error]);
XCTAssertNil(error);
error = nil;
XCTAssertFalse(tmpFile.isOpen);
XCTAssertFalse([tmpFile appendData:[@"Data" dataUsingEncoding:NSUTF8StringEncoding] error:&error]);
XCTAssertNotNil(error);
error = nil;
XCTAssertTrue([tmpFile close:&error]);
XCTAssertNil(error);
error = nil;
XCTAssertTrue([tmpFile moveToPath:destination error:&error]);
XCTAssertNil(error);
error = nil;
XCTAssertTrue([fm fileExistsAtPath:destination]);
XCTAssertFalse([tmpFile moveToPath:destination error:&error]);
XCTAssertNotNil(error);
error = nil;
[fm removeItemAtPath:destination error:NULL];
}
- (void)testAutoDelete
{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *tmpFilePath = nil;
@autoreleasepool {
TNLTemporaryFile *tmpFile = [[TNLTemporaryFile alloc] init];
[tmpFile open:NULL];
[tmpFile appendData:[@"Data" dataUsingEncoding:NSUTF8StringEncoding] error:NULL];
[tmpFile close:NULL];
tmpFilePath = tmpFile.path;
XCTAssertTrue([fm fileExistsAtPath:tmpFilePath]);
}
XCTAssertFalse([fm fileExistsAtPath:tmpFilePath]);
@autoreleasepool {
TNLTemporaryFile *tmpFile = [[TNLTemporaryFile alloc] init];
[tmpFile open:NULL];
[tmpFile appendData:[@"Data" dataUsingEncoding:NSUTF8StringEncoding] error:NULL];
tmpFilePath = tmpFile.path;
XCTAssertTrue([fm fileExistsAtPath:tmpFilePath]);
}
XCTAssertFalse([fm fileExistsAtPath:tmpFilePath]);
@autoreleasepool {
TNLTemporaryFile *tmpFile = [[TNLTemporaryFile alloc] init];
[tmpFile open:NULL];
tmpFilePath = tmpFile.path;
XCTAssertTrue([fm fileExistsAtPath:tmpFilePath]);
}
XCTAssertFalse([fm fileExistsAtPath:tmpFilePath]);
}
- (void)testCreateWithExistingFile
{
TNLTemporaryFile *tmpFile;
NSString *destination = [NSTemporaryDirectory() stringByAppendingString:@"temp_file2.tmp"];
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
[fm removeItemAtPath:destination error:NULL];
tmpFile = [TNLTemporaryFile temporaryFileWithExistingFilePath:destination error:&error];
XCTAssertNil(tmpFile);
XCTAssertNotNil(error);
error = nil;
[@"Data" writeToFile:destination atomically:YES encoding:NSUTF8StringEncoding error:NULL];
XCTAssertTrue([fm fileExistsAtPath:destination]);
tmpFile = [TNLTemporaryFile temporaryFileWithExistingFilePath:destination error:&error];
XCTAssertNotNil(tmpFile);
XCTAssertNil(error);
error = nil;
XCTAssertFalse([fm fileExistsAtPath:destination]);
}
@end