mirror of https://github.com/grpc/grpc.git
commit
1795985322
156 changed files with 11061 additions and 1093 deletions
@ -0,0 +1,17 @@ |
||||
{ |
||||
"name": "grpc/grpc", |
||||
"type": "library", |
||||
"description": "gRPC library for PHP", |
||||
"keywords": ["rpc"], |
||||
"homepage": "http://grpc.io", |
||||
"license": "BSD-3-Clause", |
||||
"require": { |
||||
"php": ">=5.5.0", |
||||
"google/auth": "dev-master" |
||||
}, |
||||
"autoload": { |
||||
"psr-4": { |
||||
"Grpc\\": "src/php/lib/Grpc/" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,101 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/security/credentials.h" |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
|
||||
#include <string.h> |
||||
|
||||
static void store_ensure_capacity(grpc_credentials_md_store *store) { |
||||
if (store->num_entries == store->allocated) { |
||||
store->allocated = (store->allocated == 0) ? 1 : store->allocated * 2; |
||||
store->entries = gpr_realloc( |
||||
store->entries, store->allocated * sizeof(grpc_credentials_md)); |
||||
} |
||||
} |
||||
|
||||
grpc_credentials_md_store *grpc_credentials_md_store_create( |
||||
size_t initial_capacity) { |
||||
grpc_credentials_md_store *store = gpr_malloc(sizeof(grpc_credentials_md_store)); |
||||
memset(store, 0, sizeof(grpc_credentials_md_store)); |
||||
if (initial_capacity > 0) { |
||||
store->entries = gpr_malloc(initial_capacity * sizeof(grpc_credentials_md)); |
||||
store->allocated = initial_capacity; |
||||
} |
||||
gpr_ref_init(&store->refcount, 1); |
||||
return store; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_add(grpc_credentials_md_store *store, |
||||
gpr_slice key, gpr_slice value) { |
||||
if (store == NULL) return; |
||||
store_ensure_capacity(store); |
||||
store->entries[store->num_entries].key = gpr_slice_ref(key); |
||||
store->entries[store->num_entries].value = gpr_slice_ref(value); |
||||
store->num_entries++; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_add_cstrings(grpc_credentials_md_store *store, |
||||
const char *key, |
||||
const char *value) { |
||||
if (store == NULL) return; |
||||
store_ensure_capacity(store); |
||||
store->entries[store->num_entries].key = gpr_slice_from_copied_string(key); |
||||
store->entries[store->num_entries].value = |
||||
gpr_slice_from_copied_string(value); |
||||
store->num_entries++; |
||||
} |
||||
|
||||
grpc_credentials_md_store *grpc_credentials_md_store_ref( |
||||
grpc_credentials_md_store *store) { |
||||
if (store == NULL) return NULL; |
||||
gpr_ref(&store->refcount); |
||||
return store; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_unref(grpc_credentials_md_store *store) { |
||||
if (store == NULL) return; |
||||
if (gpr_unref(&store->refcount)) { |
||||
if (store->entries != NULL) { |
||||
size_t i; |
||||
for (i = 0; i < store->num_entries; i++) { |
||||
gpr_slice_unref(store->entries[i].key); |
||||
gpr_slice_unref(store->entries[i].value); |
||||
} |
||||
gpr_free(store->entries); |
||||
} |
||||
gpr_free(store); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,128 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/security/auth_filters.h" |
||||
#include "src/core/security/security_connector.h" |
||||
#include "src/core/security/security_context.h" |
||||
|
||||
#include <grpc/support/log.h> |
||||
|
||||
typedef struct call_data { |
||||
int unused; /* C89 requires at least one struct element */ |
||||
} call_data; |
||||
|
||||
typedef struct channel_data { |
||||
grpc_security_connector *security_connector; |
||||
} channel_data; |
||||
|
||||
/* Called either:
|
||||
- in response to an API call (or similar) from above, to send something |
||||
- a network event (or similar) from below, to receive something |
||||
op contains type and call direction information, in addition to the data |
||||
that is being sent or received. */ |
||||
static void auth_start_transport_op(grpc_call_element *elem, |
||||
grpc_transport_op *op) { |
||||
/* TODO(jboeuf): Get the metadata and get a new context from it. */ |
||||
|
||||
/* pass control down the stack */ |
||||
grpc_call_next_op(elem, op); |
||||
} |
||||
|
||||
/* Called on special channel events, such as disconnection or new incoming
|
||||
calls on the server */ |
||||
static void channel_op(grpc_channel_element *elem, |
||||
grpc_channel_element *from_elem, grpc_channel_op *op) { |
||||
grpc_channel_next_op(elem, op); |
||||
} |
||||
|
||||
/* Constructor for call_data */ |
||||
static void init_call_elem(grpc_call_element *elem, |
||||
const void *server_transport_data, |
||||
grpc_transport_op *initial_op) { |
||||
/* grab pointers to our data from the call element */ |
||||
call_data *calld = elem->call_data; |
||||
channel_data *chand = elem->channel_data; |
||||
grpc_server_security_context *server_ctx = NULL; |
||||
|
||||
/* initialize members */ |
||||
calld->unused = 0; |
||||
|
||||
GPR_ASSERT(initial_op && initial_op->context != NULL && |
||||
chand->security_connector->auth_context != NULL && |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].value == NULL); |
||||
|
||||
/* Create a security context for the call and reference the auth context from
|
||||
the channel. */ |
||||
server_ctx = grpc_server_security_context_create(); |
||||
server_ctx->auth_context = |
||||
grpc_auth_context_ref(chand->security_connector->auth_context); |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].value = server_ctx; |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].destroy = |
||||
grpc_server_security_context_destroy; |
||||
} |
||||
|
||||
/* Destructor for call_data */ |
||||
static void destroy_call_elem(grpc_call_element *elem) { |
||||
} |
||||
|
||||
/* Constructor for channel_data */ |
||||
static void init_channel_elem(grpc_channel_element *elem, |
||||
const grpc_channel_args *args, grpc_mdctx *mdctx, |
||||
int is_first, int is_last) { |
||||
grpc_security_connector *sc = grpc_find_security_connector_in_args(args); |
||||
/* grab pointers to our data from the channel element */ |
||||
channel_data *chand = elem->channel_data; |
||||
|
||||
/* The first and the last filters tend to be implemented differently to
|
||||
handle the case that there's no 'next' filter to call on the up or down |
||||
path */ |
||||
GPR_ASSERT(!is_first); |
||||
GPR_ASSERT(!is_last); |
||||
GPR_ASSERT(sc != NULL); |
||||
|
||||
/* initialize members */ |
||||
GPR_ASSERT(!sc->is_client_side); |
||||
chand->security_connector = grpc_security_connector_ref(sc); |
||||
} |
||||
|
||||
/* Destructor for channel data */ |
||||
static void destroy_channel_elem(grpc_channel_element *elem) { |
||||
/* grab pointers to our data from the channel element */ |
||||
channel_data *chand = elem->channel_data; |
||||
grpc_security_connector_unref(chand->security_connector); |
||||
} |
||||
|
||||
const grpc_channel_filter grpc_server_auth_filter = { |
||||
auth_start_transport_op, channel_op, sizeof(call_data), init_call_elem, |
||||
destroy_call_elem, sizeof(channel_data), init_channel_elem, |
||||
destroy_channel_elem, "server-auth"}; |
@ -0,0 +1,22 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<package> |
||||
<metadata> |
||||
<id>Grpc.Tools</id> |
||||
<title>gRPC C# Tools</title> |
||||
<summary>Tools for C# implementation of gRPC - an RPC library and framework</summary> |
||||
<description>Precompiled Windows binaries for generating protocol buffer messages and gRPC client/server code</description> |
||||
<version>0.5.0</version> |
||||
<authors>Google Inc.</authors> |
||||
<owners>grpc-packages</owners> |
||||
<licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl> |
||||
<projectUrl>https://github.com/grpc/grpc</projectUrl> |
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
||||
<releaseNotes>protoc.exe - protocol buffer compiler v3.0.0-alpha-3; grpc_csharp_plugin.exe - gRPC C# protoc plugin version 0.5.0</releaseNotes> |
||||
<copyright>Copyright 2015, Google Inc.</copyright> |
||||
<tags>gRPC RPC Protocol HTTP/2</tags> |
||||
</metadata> |
||||
<files> |
||||
<file src="protoc.exe" target="tools" /> |
||||
<file src="grpc_csharp_plugin.exe" target="tools" /> |
||||
</files> |
||||
</package> |
@ -1,41 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES"> |
||||
<dependencies> |
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207"/> |
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> |
||||
</dependencies> |
||||
<objects> |
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
||||
<view contentMode="scaleToFill" id="iN0-l3-epB"> |
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/> |
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
||||
<subviews> |
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 gRPC. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye"> |
||||
<rect key="frame" x="20" y="439" width="441" height="21"/> |
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> |
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> |
||||
<nil key="highlightedColor"/> |
||||
</label> |
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sample" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX"> |
||||
<rect key="frame" x="20" y="140" width="441" height="43"/> |
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> |
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> |
||||
<nil key="highlightedColor"/> |
||||
</label> |
||||
</subviews> |
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
||||
<constraints> |
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/> |
||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/> |
||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/> |
||||
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/> |
||||
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/> |
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/> |
||||
</constraints> |
||||
<nil key="simulatedStatusBarMetrics"/> |
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
||||
<point key="canvasLocation" x="548" y="455"/> |
||||
</view> |
||||
</objects> |
||||
</document> |
@ -0,0 +1,15 @@ |
||||
source 'https://github.com/CocoaPods/Specs.git' |
||||
platform :ios, '8.0' |
||||
|
||||
pod 'gRPC', :path => "../../.." |
||||
pod 'Protobuf', :git => 'https://github.com/google/protobuf.git' |
||||
pod 'RemoteTest', :path => "../generated_libraries/RemoteTestClient" |
||||
pod 'Route_guide', :path => "../generated_libraries/RouteGuideClient" |
||||
|
||||
link_with 'AllTests' |
||||
|
||||
target 'Tests' do |
||||
end |
||||
|
||||
target 'AllTests' do |
||||
end |
@ -0,0 +1,140 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#import <UIKit/UIKit.h> |
||||
#import <XCTest/XCTest.h> |
||||
|
||||
#import <gRPC/GRXBufferedPipe.h> |
||||
#import <gRPC/GRXWriter.h> |
||||
#import <gRPC/GRXWriteable.h> |
||||
|
||||
// A mock of a GRXSingleValueHandler block that can be queried for how many times it was called and |
||||
// what were the last values passed to it. |
||||
// |
||||
// TODO(jcanizales): Move this to a test util library, and add tests for it. |
||||
@interface CapturingSingleValueHandler : NSObject |
||||
@property (nonatomic, readonly) void (^block)(id value, NSError *errorOrNil); |
||||
@property (nonatomic, readonly) NSUInteger timesCalled; |
||||
@property (nonatomic, readonly) id value; |
||||
@property (nonatomic, readonly) NSError *errorOrNil; |
||||
+ (instancetype)handler; |
||||
@end |
||||
|
||||
@implementation CapturingSingleValueHandler |
||||
+ (instancetype)handler { |
||||
return [[self alloc] init]; |
||||
} |
||||
|
||||
- (GRXSingleValueHandler)block { |
||||
return ^(id value, NSError *errorOrNil) { |
||||
++_timesCalled; |
||||
_value = value; |
||||
_errorOrNil = errorOrNil; |
||||
}; |
||||
} |
||||
@end |
||||
|
||||
@interface RxLibraryUnitTests : XCTestCase |
||||
@end |
||||
|
||||
@implementation RxLibraryUnitTests |
||||
|
||||
#pragma mark Writeable |
||||
|
||||
- (void)testWriteableSingleValueHandlerIsCalledForValue { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id anyValue = @7; |
||||
|
||||
// If: |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
[writeable writeValue:anyValue]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, anyValue); |
||||
XCTAssertEqualObjects(handler.errorOrNil, nil); |
||||
} |
||||
|
||||
- (void)testWriteableSingleValueHandlerIsCalledForError { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
NSError *anyError = [NSError errorWithDomain:@"domain" code:7 userInfo:nil]; |
||||
|
||||
// If: |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
[writeable writesFinishedWithError:anyError]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, nil); |
||||
XCTAssertEqualObjects(handler.errorOrNil, anyError); |
||||
} |
||||
|
||||
#pragma mark BufferedPipe |
||||
|
||||
- (void)testBufferedPipePropagatesValue { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
id anyValue = @7; |
||||
|
||||
// If: |
||||
GRXBufferedPipe *pipe = [GRXBufferedPipe pipe]; |
||||
[pipe startWithWriteable:writeable]; |
||||
[pipe writeValue:anyValue]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, anyValue); |
||||
XCTAssertEqualObjects(handler.errorOrNil, nil); |
||||
} |
||||
|
||||
- (void)testBufferedPipePropagatesError { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
NSError *anyError = [NSError errorWithDomain:@"domain" code:7 userInfo:nil]; |
||||
|
||||
// If: |
||||
GRXBufferedPipe *pipe = [GRXBufferedPipe pipe]; |
||||
[pipe startWithWriteable:writeable]; |
||||
[pipe writesFinishedWithError:anyError]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, nil); |
||||
XCTAssertEqualObjects(handler.errorOrNil, anyError); |
||||
} |
||||
|
||||
@end |
@ -0,0 +1,40 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#import <Foundation/Foundation.h> |
||||
|
||||
@interface Tests : NSObject |
||||
@end |
||||
|
||||
@implementation Tests |
||||
@end |
@ -0,0 +1,442 @@ |
||||
// !$*UTF8*$! |
||||
{ |
||||
archiveVersion = 1; |
||||
classes = { |
||||
}; |
||||
objectVersion = 46; |
||||
objects = { |
||||
|
||||
/* Begin PBXBuildFile section */ |
||||
6312AE4E1B1BF49B00341DEE /* GRPCClientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6312AE4D1B1BF49B00341DEE /* GRPCClientTests.m */; }; |
||||
63175DFF1B1B9FAF00027841 /* LocalClearTextTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 63175DFE1B1B9FAF00027841 /* LocalClearTextTests.m */; }; |
||||
63423F4A1B150A5F006CF63C /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; }; |
||||
63423F511B151B77006CF63C /* RxLibraryUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 63423F501B151B77006CF63C /* RxLibraryUnitTests.m */; }; |
||||
635697CD1B14FC11007A7283 /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 635697CC1B14FC11007A7283 /* Tests.m */; }; |
||||
635ED2EC1B1A3BC400FDE5C3 /* InteropTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 635ED2EB1B1A3BC400FDE5C3 /* InteropTests.m */; }; |
||||
7D8A186224D39101F90230F6 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */; }; |
||||
/* End PBXBuildFile section */ |
||||
|
||||
/* Begin PBXContainerItemProxy section */ |
||||
63423F4B1B150A5F006CF63C /* PBXContainerItemProxy */ = { |
||||
isa = PBXContainerItemProxy; |
||||
containerPortal = 635697BF1B14FC11007A7283 /* Project object */; |
||||
proxyType = 1; |
||||
remoteGlobalIDString = 635697C61B14FC11007A7283; |
||||
remoteInfo = Tests; |
||||
}; |
||||
/* End PBXContainerItemProxy section */ |
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */ |
||||
635697C51B14FC11007A7283 /* CopyFiles */ = { |
||||
isa = PBXCopyFilesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
dstPath = "include/$(PRODUCT_NAME)"; |
||||
dstSubfolderSpec = 16; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXCopyFilesBuildPhase section */ |
||||
|
||||
/* Begin PBXFileReference section */ |
||||
0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; }; |
||||
35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
6312AE4D1B1BF49B00341DEE /* GRPCClientTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GRPCClientTests.m; sourceTree = "<group>"; }; |
||||
63175DFE1B1B9FAF00027841 /* LocalClearTextTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalClearTextTests.m; sourceTree = "<group>"; }; |
||||
63423F441B150A5F006CF63C /* AllTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AllTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
63423F501B151B77006CF63C /* RxLibraryUnitTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RxLibraryUnitTests.m; sourceTree = "<group>"; }; |
||||
635697C71B14FC11007A7283 /* libTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTests.a; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
635697CC1B14FC11007A7283 /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; }; |
||||
635697D81B14FC11007A7283 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
||||
635ED2EB1B1A3BC400FDE5C3 /* InteropTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InteropTests.m; sourceTree = "<group>"; }; |
||||
FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; }; |
||||
/* End PBXFileReference section */ |
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */ |
||||
63423F411B150A5F006CF63C /* Frameworks */ = { |
||||
isa = PBXFrameworksBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
63423F4A1B150A5F006CF63C /* libTests.a in Frameworks */, |
||||
7D8A186224D39101F90230F6 /* libPods.a in Frameworks */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
635697C41B14FC11007A7283 /* Frameworks */ = { |
||||
isa = PBXFrameworksBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXFrameworksBuildPhase section */ |
||||
|
||||
/* Begin PBXGroup section */ |
||||
136D535E19727099B941D7B1 /* Frameworks */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */, |
||||
); |
||||
name = Frameworks; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
51E4650F34F854F41FF053B3 /* Pods */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */, |
||||
0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */, |
||||
); |
||||
name = Pods; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697BE1B14FC11007A7283 = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697C91B14FC11007A7283 /* Tests */, |
||||
635697C81B14FC11007A7283 /* Products */, |
||||
51E4650F34F854F41FF053B3 /* Pods */, |
||||
136D535E19727099B941D7B1 /* Frameworks */, |
||||
); |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697C81B14FC11007A7283 /* Products */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697C71B14FC11007A7283 /* libTests.a */, |
||||
63423F441B150A5F006CF63C /* AllTests.xctest */, |
||||
); |
||||
name = Products; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697C91B14FC11007A7283 /* Tests */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
6312AE4D1B1BF49B00341DEE /* GRPCClientTests.m */, |
||||
63175DFE1B1B9FAF00027841 /* LocalClearTextTests.m */, |
||||
635ED2EB1B1A3BC400FDE5C3 /* InteropTests.m */, |
||||
63423F501B151B77006CF63C /* RxLibraryUnitTests.m */, |
||||
635697CC1B14FC11007A7283 /* Tests.m */, |
||||
635697D71B14FC11007A7283 /* Supporting Files */, |
||||
); |
||||
name = Tests; |
||||
sourceTree = SOURCE_ROOT; |
||||
}; |
||||
635697D71B14FC11007A7283 /* Supporting Files */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697D81B14FC11007A7283 /* Info.plist */, |
||||
); |
||||
name = "Supporting Files"; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
/* End PBXGroup section */ |
||||
|
||||
/* Begin PBXNativeTarget section */ |
||||
63423F431B150A5F006CF63C /* AllTests */ = { |
||||
isa = PBXNativeTarget; |
||||
buildConfigurationList = 63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */; |
||||
buildPhases = ( |
||||
914ADDD7106BA9BB8A7E569F /* Check Pods Manifest.lock */, |
||||
63423F401B150A5F006CF63C /* Sources */, |
||||
63423F411B150A5F006CF63C /* Frameworks */, |
||||
63423F421B150A5F006CF63C /* Resources */, |
||||
A441F71824DCB9D0CA297748 /* Copy Pods Resources */, |
||||
); |
||||
buildRules = ( |
||||
); |
||||
dependencies = ( |
||||
63423F4C1B150A5F006CF63C /* PBXTargetDependency */, |
||||
); |
||||
name = AllTests; |
||||
productName = AllTests; |
||||
productReference = 63423F441B150A5F006CF63C /* AllTests.xctest */; |
||||
productType = "com.apple.product-type.bundle.unit-test"; |
||||
}; |
||||
635697C61B14FC11007A7283 /* Tests */ = { |
||||
isa = PBXNativeTarget; |
||||
buildConfigurationList = 635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */; |
||||
buildPhases = ( |
||||
635697C31B14FC11007A7283 /* Sources */, |
||||
635697C41B14FC11007A7283 /* Frameworks */, |
||||
635697C51B14FC11007A7283 /* CopyFiles */, |
||||
); |
||||
buildRules = ( |
||||
); |
||||
dependencies = ( |
||||
); |
||||
name = Tests; |
||||
productName = Tests; |
||||
productReference = 635697C71B14FC11007A7283 /* libTests.a */; |
||||
productType = "com.apple.product-type.library.static"; |
||||
}; |
||||
/* End PBXNativeTarget section */ |
||||
|
||||
/* Begin PBXProject section */ |
||||
635697BF1B14FC11007A7283 /* Project object */ = { |
||||
isa = PBXProject; |
||||
attributes = { |
||||
LastUpgradeCheck = 0630; |
||||
ORGANIZATIONNAME = gRPC; |
||||
TargetAttributes = { |
||||
63423F431B150A5F006CF63C = { |
||||
CreatedOnToolsVersion = 6.3.1; |
||||
}; |
||||
635697C61B14FC11007A7283 = { |
||||
CreatedOnToolsVersion = 6.3.1; |
||||
}; |
||||
}; |
||||
}; |
||||
buildConfigurationList = 635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */; |
||||
compatibilityVersion = "Xcode 3.2"; |
||||
developmentRegion = English; |
||||
hasScannedForEncodings = 0; |
||||
knownRegions = ( |
||||
en, |
||||
); |
||||
mainGroup = 635697BE1B14FC11007A7283; |
||||
productRefGroup = 635697C81B14FC11007A7283 /* Products */; |
||||
projectDirPath = ""; |
||||
projectRoot = ""; |
||||
targets = ( |
||||
635697C61B14FC11007A7283 /* Tests */, |
||||
63423F431B150A5F006CF63C /* AllTests */, |
||||
); |
||||
}; |
||||
/* End PBXProject section */ |
||||
|
||||
/* Begin PBXResourcesBuildPhase section */ |
||||
63423F421B150A5F006CF63C /* Resources */ = { |
||||
isa = PBXResourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXResourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */ |
||||
914ADDD7106BA9BB8A7E569F /* Check Pods Manifest.lock */ = { |
||||
isa = PBXShellScriptBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
inputPaths = ( |
||||
); |
||||
name = "Check Pods Manifest.lock"; |
||||
outputPaths = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
shellPath = /bin/sh; |
||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; |
||||
showEnvVarsInLog = 0; |
||||
}; |
||||
A441F71824DCB9D0CA297748 /* Copy Pods Resources */ = { |
||||
isa = PBXShellScriptBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
inputPaths = ( |
||||
); |
||||
name = "Copy Pods Resources"; |
||||
outputPaths = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
shellPath = /bin/sh; |
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; |
||||
showEnvVarsInLog = 0; |
||||
}; |
||||
/* End PBXShellScriptBuildPhase section */ |
||||
|
||||
/* Begin PBXSourcesBuildPhase section */ |
||||
63423F401B150A5F006CF63C /* Sources */ = { |
||||
isa = PBXSourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
63175DFF1B1B9FAF00027841 /* LocalClearTextTests.m in Sources */, |
||||
63423F511B151B77006CF63C /* RxLibraryUnitTests.m in Sources */, |
||||
6312AE4E1B1BF49B00341DEE /* GRPCClientTests.m in Sources */, |
||||
635ED2EC1B1A3BC400FDE5C3 /* InteropTests.m in Sources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
635697C31B14FC11007A7283 /* Sources */ = { |
||||
isa = PBXSourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
635697CD1B14FC11007A7283 /* Tests.m in Sources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXSourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXTargetDependency section */ |
||||
63423F4C1B150A5F006CF63C /* PBXTargetDependency */ = { |
||||
isa = PBXTargetDependency; |
||||
target = 635697C61B14FC11007A7283 /* Tests */; |
||||
targetProxy = 63423F4B1B150A5F006CF63C /* PBXContainerItemProxy */; |
||||
}; |
||||
/* End PBXTargetDependency section */ |
||||
|
||||
/* Begin XCBuildConfiguration section */ |
||||
63423F4E1B150A5F006CF63C /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
baseConfigurationReference = FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */; |
||||
buildSettings = { |
||||
FRAMEWORK_SEARCH_PATHS = ( |
||||
"$(SDKROOT)/Developer/Library/Frameworks", |
||||
"$(inherited)", |
||||
); |
||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||
"DEBUG=1", |
||||
"$(inherited)", |
||||
); |
||||
INFOPLIST_FILE = Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
63423F4F1B150A5F006CF63C /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
baseConfigurationReference = 0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */; |
||||
buildSettings = { |
||||
FRAMEWORK_SEARCH_PATHS = ( |
||||
"$(SDKROOT)/Developer/Library/Frameworks", |
||||
"$(inherited)", |
||||
); |
||||
INFOPLIST_FILE = Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
635697D91B14FC11007A7283 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||
GCC_DYNAMIC_NO_PIC = NO; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_OPTIMIZATION_LEVEL = 0; |
||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||
"DEBUG=1", |
||||
"$(inherited)", |
||||
); |
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO; |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.3; |
||||
MTL_ENABLE_DEBUG_INFO = YES; |
||||
ONLY_ACTIVE_ARCH = YES; |
||||
SDKROOT = iphoneos; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
635697DA1B14FC11007A7283 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||
ENABLE_NS_ASSERTIONS = NO; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.3; |
||||
MTL_ENABLE_DEBUG_INFO = NO; |
||||
SDKROOT = iphoneos; |
||||
VALIDATE_PRODUCT = YES; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
635697DC1B14FC11007A7283 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
OTHER_LDFLAGS = "-ObjC"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SKIP_INSTALL = YES; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
635697DD1B14FC11007A7283 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
OTHER_LDFLAGS = "-ObjC"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SKIP_INSTALL = YES; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
/* End XCBuildConfiguration section */ |
||||
|
||||
/* Begin XCConfigurationList section */ |
||||
63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
63423F4E1B150A5F006CF63C /* Debug */, |
||||
63423F4F1B150A5F006CF63C /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
635697D91B14FC11007A7283 /* Debug */, |
||||
635697DA1B14FC11007A7283 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
635697DC1B14FC11007A7283 /* Debug */, |
||||
635697DD1B14FC11007A7283 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
/* End XCConfigurationList section */ |
||||
}; |
||||
rootObject = 635697BF1B14FC11007A7283 /* Project object */; |
||||
} |
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<Workspace |
||||
version = "1.0"> |
||||
<FileRef |
||||
location = "self:Tests.xcodeproj"> |
||||
</FileRef> |
||||
</Workspace> |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue