aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Storage/Tests/Unit/FIRStoragePathTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'Example/Storage/Tests/Unit/FIRStoragePathTests.m')
-rw-r--r--Example/Storage/Tests/Unit/FIRStoragePathTests.m234
1 files changed, 234 insertions, 0 deletions
diff --git a/Example/Storage/Tests/Unit/FIRStoragePathTests.m b/Example/Storage/Tests/Unit/FIRStoragePathTests.m
new file mode 100644
index 0000000..017f41d
--- /dev/null
+++ b/Example/Storage/Tests/Unit/FIRStoragePathTests.m
@@ -0,0 +1,234 @@
+// Copyright 2017 Google
+//
+// 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 <XCTest/XCTest.h>
+
+#import "FIRStoragePath.h"
+
+@interface FIRStoragePathTests : XCTestCase
+
+@end
+
+@implementation FIRStoragePathTests
+
+- (void)testGSURI {
+ FIRStoragePath *path = [FIRStoragePath pathFromString:@"gs://bucket/path/to/object"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertEqualObjects(path.object, @"path/to/object");
+}
+
+- (void)testHTTPURL {
+ NSString *httpURL =
+ @"http://firebasestorage.googleapis.com/v0/b/bucket/o/path/to/object?token=signed_url_params";
+ FIRStoragePath *path = [FIRStoragePath pathFromString:httpURL];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertEqualObjects(path.object, @"path/to/object");
+}
+
+- (void)testGSURINoPath {
+ FIRStoragePath *path = [FIRStoragePath pathFromString:@"gs://bucket/"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertNil(path.object);
+}
+
+- (void)testHTTPURLNoPath {
+ FIRStoragePath *path =
+ [FIRStoragePath pathFromString:@"http://firebasestorage.googleapis.com/v0/b/bucket/"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertNil(path.object);
+}
+
+- (void)testGSURINoTrailingSlash {
+ FIRStoragePath *path = [FIRStoragePath pathFromString:@"gs://bucket"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertNil(path.object);
+}
+
+- (void)testHTTPURLNoTrailingSlash {
+ FIRStoragePath *path =
+ [FIRStoragePath pathFromString:@"http://firebasestorage.googleapis.com/v0/b/bucket"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertNil(path.object);
+}
+
+- (void)testGSURIPercentEncoding {
+ FIRStoragePath *path = [FIRStoragePath pathFromString:@"gs://bucket/?/%/#"];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertEqualObjects(path.object, @"?/%/#");
+}
+
+- (void)testHTTPURLPercentEncoding {
+ NSString *httpURL =
+ @"http://firebasestorage.googleapis.com/v0/b/bucket/o/%3F/%25/%23?token=signed_url_params";
+ FIRStoragePath *path = [FIRStoragePath pathFromString:httpURL];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertEqualObjects(path.object, @"?/%/#");
+}
+
+- (void)testHTTPURLNoToken {
+ NSString *httpURL = @"http://firebasestorage.googleapis.com/v0/b/bucket/o/%23hashtag/no/token";
+ FIRStoragePath *path = [FIRStoragePath pathFromString:httpURL];
+ XCTAssertEqualObjects(path.bucket, @"bucket");
+ XCTAssertEqualObjects(path.object, @"#hashtag/no/token");
+}
+
+- (void)testGSURIThrowsOnNoBucket {
+ XCTAssertThrows([FIRStoragePath pathFromString:@"gs://"]);
+}
+
+- (void)testHTTPURLThrowsOnNoBucket {
+ XCTAssertThrows([FIRStoragePath pathFromString:@"http://firebasestorage.googleapis.com/"]);
+}
+
+- (void)testThrowsOnInvalidScheme {
+ NSString *ftpURL = @"ftp://firebasestorage.googleapis.com/v0/b/bucket/o/path/to/object";
+ XCTAssertThrows([FIRStoragePath pathFromString:ftpURL]);
+}
+
+- (void)testHTTPURLNilIncorrectHost {
+ NSString *httpURL = @"http://foo.google.com/v0/b/bucket/o/%3F/%25/%23?token=signed_url_params";
+ XCTAssertThrows([FIRStoragePath pathFromString:httpURL]);
+}
+
+- (void)testchildToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"object"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/object");
+}
+
+- (void)testChildByAppendingNilToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:nil];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/");
+}
+
+- (void)testChildByAppendingNoPathToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@""];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/");
+}
+
+- (void)testChildByAppendingLeadingSlashChildToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"/object"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/object");
+}
+
+- (void)testChildByAppendingTrailingSlashChildToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"object/"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/object");
+}
+
+- (void)testChildByAppendingLeadingAndTrailingSlashChildToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"/object/"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/object");
+}
+
+- (void)testChildByAppendingMultipleChildrenToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"path/to/object"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/path/to/object");
+}
+
+- (void)testChildByAppendingMultipleChildrenWithMultipleSlashesToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"/path//to///object////"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/path/to/object");
+}
+
+- (void)testChildByAppendingOnlySlashesToRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *childPath = [path child:@"//////////"];
+ XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/");
+}
+
+- (void)testParentAtRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *parent = [path parent];
+ XCTAssertNil(parent);
+}
+
+- (void)testParentChildPath {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"path/to/object"];
+ FIRStoragePath *parent = [path parent];
+ XCTAssertEqualObjects([parent stringValue], @"gs://bucket/path/to");
+}
+
+- (void)testParentChildPathSlashes {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"/path//to///"];
+ FIRStoragePath *parent = [path parent];
+ XCTAssertEqualObjects([parent stringValue], @"gs://bucket/path");
+}
+
+- (void)testParentChildPathOnlySlashs {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"/////"];
+ FIRStoragePath *parent = [path parent];
+ XCTAssertNil(parent);
+}
+
+- (void)testRootAtRoot {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *root = [path root];
+ XCTAssertEqualObjects([root stringValue], @"gs://bucket/");
+}
+
+- (void)testRootAtChildPath {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"path/to/object"];
+ FIRStoragePath *root = [path root];
+ XCTAssertEqualObjects([root stringValue], @"gs://bucket/");
+}
+
+- (void)testRootAtSlashPath {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"//////////"];
+ FIRStoragePath *root = [path root];
+ XCTAssertEqualObjects([root stringValue], @"gs://bucket/");
+}
+
+- (void)testCopy {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:@"object"];
+ FIRStoragePath *copiedPath = [path copy];
+ XCTAssertNotEqual(copiedPath, path);
+ XCTAssertEqualObjects(copiedPath, path);
+}
+
+- (void)testCopyNoBucket {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:nil object:@"object"];
+#pragma clang diagnostic pop
+ FIRStoragePath *copiedPath = [path copy];
+ XCTAssertNotEqual(copiedPath, path);
+ XCTAssertEqualObjects(copiedPath, path);
+}
+
+- (void)testCopyNoObject {
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
+ FIRStoragePath *copiedPath = [path copy];
+ XCTAssertNotEqual(copiedPath, path);
+ XCTAssertEqualObjects(copiedPath, path);
+}
+
+- (void)testCopyNothing {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+ FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:nil object:nil];
+#pragma clang diagnostic pop
+ FIRStoragePath *copiedPath = [path copy];
+ XCTAssertNotEqual(copiedPath, path);
+ XCTAssertEqualObjects(copiedPath, path);
+}
+
+@end