mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-08 09:47:24 +08:00
170 lines
7.9 KiB
Objective-C
Executable File
170 lines
7.9 KiB
Objective-C
Executable File
//
|
|
// RKPathMatcherTest.m
|
|
// RestKit
|
|
//
|
|
// Created by Greg Combs on 9/2/11.
|
|
// Copyright (c) 2009-2012 RestKit. All rights reserved.
|
|
//
|
|
// 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 "RKTestEnvironment.h"
|
|
#import "RKPathMatcher.h"
|
|
|
|
@interface RKPathMatcherTest : RKTestCase
|
|
|
|
@end
|
|
|
|
@implementation RKPathMatcherTest
|
|
|
|
- (void)testShouldMatchPathsWithQueryArguments
|
|
{
|
|
NSDictionary *arguments = nil;
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPath:@"/this/is/my/backend?foo=bar&this=that"];
|
|
BOOL isMatchingPattern = [pathMatcher matchesPattern:@"/this/is/:controllerName/:entityName" tokenizeQueryStrings:YES parsedArguments:&arguments];
|
|
expect(isMatchingPattern).to.equal(YES);
|
|
expect(arguments).notTo.beEmpty();
|
|
NSDictionary *expectedArguments = @{ @"controllerName": @"my", @"entityName": @"backend", @"foo": @"bar", @"this": @"that" };
|
|
expect(arguments).to.equal(expectedArguments);
|
|
}
|
|
|
|
- (void)testShouldMatchPathsWithEscapedArguments
|
|
{
|
|
NSDictionary *arguments = nil;
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPath:@"/bills/tx/82/SB%2014?apikey=GC12d0c6af"];
|
|
BOOL isMatchingPattern = [pathMatcher matchesPattern:@"/bills/:stateID/:session/:billID" tokenizeQueryStrings:YES parsedArguments:&arguments];
|
|
expect(isMatchingPattern).to.equal(YES);
|
|
expect(arguments).notTo.beEmpty();
|
|
NSDictionary *expectedArguments = @{ @"stateID": @"tx", @"session": @"82", @"billID": @"SB 14", @"apikey": @"GC12d0c6af" };
|
|
expect(arguments).to.equal(expectedArguments);
|
|
|
|
}
|
|
|
|
- (void)testShouldMatchPathsWithoutQueryArguments
|
|
{
|
|
NSDictionary *arguments = nil;
|
|
RKPathMatcher *patternMatcher = [RKPathMatcher pathMatcherWithPattern:@"github.com/:username"];
|
|
BOOL isMatchingPattern = [patternMatcher matchesPath:@"github.com/jverkoey" tokenizeQueryStrings:NO parsedArguments:&arguments];
|
|
expect(isMatchingPattern).to.equal(YES);
|
|
expect(arguments).notTo.beEmpty();
|
|
NSDictionary *params = @{ @"username": @"jverkoey" };
|
|
expect(arguments).to.equal(params);
|
|
}
|
|
|
|
- (void)testShouldMatchPathsWithoutAnyArguments
|
|
{
|
|
NSDictionary *arguments = nil;
|
|
RKPathMatcher *patternMatcher = [RKPathMatcher pathMatcherWithPattern:@"/metadata"];
|
|
BOOL isMatchingPattern = [patternMatcher matchesPath:@"/metadata" tokenizeQueryStrings:NO parsedArguments:&arguments];
|
|
expect(isMatchingPattern).to.equal(YES);
|
|
expect(arguments).to.beEmpty();
|
|
}
|
|
|
|
- (void)testShouldPerformTwoMatchesInARow
|
|
{
|
|
NSDictionary *arguments = nil;
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPath:@"/metadata?apikey=GC12d0c6af"];
|
|
BOOL isMatchingPattern1 = [pathMatcher matchesPattern:@"/metadata/:stateID" tokenizeQueryStrings:YES parsedArguments:&arguments];
|
|
expect(isMatchingPattern1).to.equal(NO);
|
|
BOOL isMatchingPattern2 = [pathMatcher matchesPattern:@"/metadata" tokenizeQueryStrings:YES parsedArguments:&arguments];
|
|
expect(isMatchingPattern2).to.equal(YES);
|
|
expect(arguments).notTo.beNil();
|
|
expect(arguments).to.equal(@{ @"apikey": @"GC12d0c6af" });
|
|
}
|
|
|
|
- (void)testShouldCreatePathsFromInterpolatedObjects
|
|
{
|
|
NSDictionary *person = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
@"CuddleGuts", @"name", [NSNumber numberWithInt:6], @"age", nil];
|
|
RKPathMatcher *matcher = [RKPathMatcher pathMatcherWithPattern:@"/people/:name/:age"];
|
|
NSString *interpolatedPath = [matcher pathFromObject:person addingEscapes:YES];
|
|
expect(interpolatedPath).notTo.beNil();
|
|
NSString *expectedPath = @"/people/CuddleGuts/6";
|
|
expect(interpolatedPath).to.equal(expectedPath);
|
|
}
|
|
|
|
- (void)testShouldCreatePathsFromInterpolatedObjectsWithAddedEscapes
|
|
{
|
|
NSDictionary *person = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
@"JUICE|BOX&121", @"password", @"Joe Bob Briggs", @"name", [NSNumber numberWithInt:15], @"group", nil];
|
|
RKPathMatcher *matcher = [RKPathMatcher pathMatcherWithPattern:@"/people/:group/:name?password=:password"];
|
|
NSString *interpolatedPath = [matcher pathFromObject:person addingEscapes:YES];
|
|
expect(interpolatedPath).notTo.beNil();
|
|
NSString *expectedPath = @"/people/15/Joe%20Bob%20Briggs?password=JUICE%7CBOX%26121";
|
|
expect(interpolatedPath).to.equal(expectedPath);
|
|
}
|
|
|
|
- (void)testShouldCreatePathsFromInterpolatedObjectsWithoutAddedEscapes
|
|
{
|
|
NSDictionary *person = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
@"JUICE|BOX&121", @"password", @"Joe Bob Briggs", @"name", [NSNumber numberWithInt:15], @"group", nil];
|
|
RKPathMatcher *matcher = [RKPathMatcher pathMatcherWithPattern:@"/people/:group/:name?password=:password"];
|
|
NSString *interpolatedPath = [matcher pathFromObject:person addingEscapes:NO];
|
|
expect(interpolatedPath).notTo.beNil();
|
|
NSString *expectedPath = @"/people/15/Joe Bob Briggs?password=JUICE|BOX&121";
|
|
expect(interpolatedPath).to.equal(expectedPath);
|
|
}
|
|
|
|
- (void)testShouldCreatePathsThatIncludePatternArgumentsFollowedByEscapedNonPatternDots
|
|
{
|
|
NSDictionary *arguments = [NSDictionary dictionaryWithObjectsAndKeys:@"Resources", @"filename", nil];
|
|
RKPathMatcher *matcher = [RKPathMatcher pathMatcherWithPattern:@"/directory/:filename\\.json"];
|
|
NSString *interpolatedPath = [matcher pathFromObject:arguments addingEscapes:YES];
|
|
expect(interpolatedPath).notTo.beNil();
|
|
NSString *expectedPath = @"/directory/Resources.json";
|
|
expect(interpolatedPath).to.equal(expectedPath);
|
|
}
|
|
|
|
- (void)testMatchingPathWithTrailingSlashAndQuery
|
|
{
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/v1/organizations/"];
|
|
BOOL matches = [pathMatcher matchesPath:@"/api/v1/organizations/?client_search=t" tokenizeQueryStrings:NO parsedArguments:nil];
|
|
expect(matches).to.equal(YES);
|
|
}
|
|
|
|
- (void)testThatPatternsAreNotMatchedTooAggressively
|
|
{
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/v1/organizations"];
|
|
BOOL matches = [pathMatcher matchesPath:@"/api/v1/organizations/1234/another?client_search=t" tokenizeQueryStrings:NO parsedArguments:nil];
|
|
expect(matches).to.equal(NO);
|
|
|
|
pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/:version/organizations"];
|
|
matches = [pathMatcher matchesPath:@"/api/v1/organizations/1234/another?client_search=t" tokenizeQueryStrings:NO parsedArguments:nil];
|
|
expect(matches).to.equal(NO);
|
|
|
|
matches = [pathMatcher matchesPath:@"/api/v1/organizations/" tokenizeQueryStrings:NO parsedArguments:nil];
|
|
expect(matches).to.equal(NO);
|
|
|
|
pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/:version/organizations/:organizationID"];
|
|
matches = [pathMatcher matchesPath:@"/api/v1/organizations/1234/" tokenizeQueryStrings:NO parsedArguments:nil];
|
|
expect(matches).to.equal(YES);
|
|
}
|
|
|
|
- (void)testMatchingPathPatternWithTrailingSlash
|
|
{
|
|
NSDictionary *argsDictionary = nil;
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/v1/organizations/:identifier/"];
|
|
BOOL match = [pathMatcher matchesPath:@"/api/v1/organizations/1/" tokenizeQueryStrings:YES parsedArguments:&argsDictionary];
|
|
expect(match).to.beTruthy();
|
|
}
|
|
|
|
- (void)testMatchingPathPatternWithTrailingSlashAndQueryParameters
|
|
{
|
|
NSDictionary *argsDictionary = nil;
|
|
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/v1/organizations/"];
|
|
BOOL match = [pathMatcher matchesPath:@"/api/v1/organizations/?client_search=s" tokenizeQueryStrings:YES parsedArguments:&argsDictionary];
|
|
expect(match).to.beTruthy();
|
|
}
|
|
|
|
@end
|