diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..fdc203c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: objective-c +osx_image: xcode61 +before_install: +- brew update +- brew unlink xctool +- brew install xctool --HEAD +- xctool -v +- brew install automake +- brew unlink libtool +- brew install libtool +- brew install protobuf +- ./scripts/build.sh +- ./travis/travis.sh +script: xctool -project ./src/ProtocolBuffers/ProtocolBuffers.xcodeproj -sdk iphonesimulator -scheme ProtocolBuffers build test diff --git a/README.md b/README.md index 60e4c64..ef930c8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #Protocol Buffers for Swift - +[![Build Status](https://travis-ci.org/alexeyxo/protobuf-swift.svg?branch=master)](https://travis-ci.org/alexeyxo/protobuf-swift) [![Platform](http://img.shields.io/badge/platform-ios%20%7C%20osx-green.svg)](https://github.com/alexeyxo/protobuf-swift) [![Release](http://img.shields.io/github/tag/alexeyxo/protobuf-swift.svg)](https://github.com/alexeyxo/protobuf-swift/releases/tag/v1.0) @@ -24,7 +24,7 @@ This project is based on an implementation of Protocol Buffers from Google. See 5.`git clone git@github.com:alexeyxo/protobuf-swift.git` -6.`./build.sh` +6.`./scripts/build.sh` 7.Add `./src/ProtocolBuffers/ProtocolBuffers.xcodeproj` in your project. diff --git a/build.sh b/scripts/build.sh similarity index 81% rename from build.sh rename to scripts/build.sh index c2b90a7..d1714cd 100755 --- a/build.sh +++ b/scripts/build.sh @@ -1,5 +1,5 @@ #!/bin/sh make clean; -./autogen.sh; -./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib; +./autogen.sh && \ +./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib && \ make -j8 && make install; diff --git a/scripts/makeDescriptor.sh b/scripts/makeDescriptor.sh new file mode 100644 index 0000000..17544fd --- /dev/null +++ b/scripts/makeDescriptor.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd src/ && protoc compiler/swift-descriptor.proto --cpp_out="./" && cd ..; diff --git a/src/compiler/makeTests.sh b/scripts/makeTests.sh similarity index 94% rename from src/compiler/makeTests.sh rename to scripts/makeTests.sh index bfb3fb6..b61398d 100755 --- a/src/compiler/makeTests.sh +++ b/scripts/makeTests.sh @@ -1,3 +1,4 @@ +cd src/compiler protoc google/protobuf/unittest*.proto --swift_out="./Tests"; protoc google/protobuf/descriptor*.proto --swift_out="./Tests"; cp -f ./Tests/* ../ProtocolBuffers/ProtocolBuffersTests/pbTests/; diff --git a/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/project.pbxproj b/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/project.pbxproj index 23e0d9a..1fe266b 100644 --- a/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/project.pbxproj +++ b/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3F1422981A07FDBF0090CEE9 /* ProtocolBuffers.framework in Copy Framework */ = {isa = PBXBuildFile; fileRef = 3F85569919C71BCF003802F2 /* ProtocolBuffers.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 3F181E1319D1D83900F7FA0D /* AbstractMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F181E0619D1D83900F7FA0D /* AbstractMessage.swift */; }; 3F181E1419D1D83900F7FA0D /* CodedInputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F181E0719D1D83900F7FA0D /* CodedInputStream.swift */; }; 3F181E1519D1D83900F7FA0D /* CodedOutputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F181E0819D1D83900F7FA0D /* CodedOutputStream.swift */; }; @@ -54,6 +55,20 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 3F1422971A07FD990090CEE9 /* Copy Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 3F1422981A07FDBF0090CEE9 /* ProtocolBuffers.framework in Copy Framework */, + ); + name = "Copy Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 3F181E0619D1D83900F7FA0D /* AbstractMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AbstractMessage.swift; sourceTree = ""; }; 3F181E0719D1D83900F7FA0D /* CodedInputStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodedInputStream.swift; sourceTree = ""; }; @@ -250,6 +265,7 @@ isa = PBXNativeTarget; buildConfigurationList = 3F8556AF19C71BCF003802F2 /* Build configuration list for PBXNativeTarget "UnitTesting" */; buildPhases = ( + 3F1422971A07FD990090CEE9 /* Copy Framework */, 3F8556A019C71BCF003802F2 /* Sources */, 3F8556A119C71BCF003802F2 /* Frameworks */, 3F8556A219C71BCF003802F2 /* Resources */, diff --git a/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme b/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme index 2c87df8..0045861 100644 --- a/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme +++ b/src/ProtocolBuffers/ProtocolBuffers.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme @@ -20,6 +20,20 @@ ReferencedContainer = "container:ProtocolBuffers.xcodeproj"> + + + + ConcreateExtensionField + public func getExtension(extensions:ConcreateExtensionField) -> Any { ensureExtensionIsRegistered(extensions) return extensionRegistry[extensions.fieldNumber]! @@ -280,7 +280,7 @@ public class ExtendableMessageBuilder:GeneratedMessageBuilder } return super.parseUnknownField(input, unknownFields: unknownFields, extensionRegistry: extensionRegistry, tag: tag) } - public func getExtension(extensions:ConcreateExtensionField) -> ConcreateExtensionField + public func getExtension(extensions:ConcreateExtensionField) -> Any { return internalGetResult.getExtension(extensions) } diff --git a/src/ProtocolBuffers/ProtocolBuffersTests/TestUtilities.swift b/src/ProtocolBuffers/ProtocolBuffersTests/TestUtilities.swift index 2138228..42685a3 100644 --- a/src/ProtocolBuffers/ProtocolBuffersTests/TestUtilities.swift +++ b/src/ProtocolBuffers/ProtocolBuffersTests/TestUtilities.swift @@ -7,30 +7,311 @@ // import Foundation +import XCTest class TestUtilities { -// class func getData(str:String) -> [Byte] { -// var bytes = [Byte]() -// bytes += str.utf8 -// return bytes -// } -// class func goldenData() -> NSData { -// -// var str = NSBundle(forClass:TestUtilities.self).resourcePath!.stringByAppendingPathComponent("golden_message") -// var goldenData:NSData = NSData(contentsOfFile: str) -// return goldenData -// } -// -// class func modifyRepeatedExtensions(message:TestAllExtensionsBuilder) -// { -// message.setExtension(UnittestRoot.repeatedInt32Extension(), index:1, value:Int32(501)) -// message.setExtension(UnittestRoot.repeatedInt64Extension(), index:1, value:Int32(502)) -// message.setExtension(UnittestRoot.repeatedUint32Extension(), index:1, value:Int32(503)) -// message.setExtension(UnittestRoot.repeatedUint64Extension(), index:1, value:Int32(504)) -// message.setExtension(UnittestRoot.repeatedSint32Extension(), index:1, value:Int32(505)) -// message.setExtension(UnittestRoot.repeatedSint64Extension(), index:1, value:Int32(506)) -// -// -// } + class func getData(str:String) -> [Byte] { + var bytes = [Byte]() + bytes += str.utf8 + return bytes + } + class func goldenData() -> NSData { + + var str = NSBundle(forClass:TestUtilities.self).resourcePath!.stringByAppendingPathComponent("golden_message") + let goldenData = NSData(contentsOfFile:str) + return goldenData! + } + + class func modifyRepeatedExtensions(message:TestAllExtensionsBuilder) + { + message.setExtension(UnittestRoot.repeatedInt32Extension(), index:1, value:Int32(501)) + message.setExtension(UnittestRoot.repeatedInt64Extension(), index:1, value:Int32(502)) + message.setExtension(UnittestRoot.repeatedUint32Extension(), index:1, value:Int32(503)) + message.setExtension(UnittestRoot.repeatedUint64Extension(), index:1, value:Int32(504)) + message.setExtension(UnittestRoot.repeatedSint32Extension(), index:1, value:Int32(505)) + message.setExtension(UnittestRoot.repeatedSint64Extension(), index:1, value:Int32(506)) + message.setExtension(UnittestRoot.repeatedFixed32Extension(), index:1, value:Int32(507)) + message.setExtension(UnittestRoot.repeatedFixed64Extension(), index:1, value:Int64(508)) + message.setExtension(UnittestRoot.repeatedSfixed32Extension(), index:1, value:Int32(509)) + message.setExtension(UnittestRoot.repeatedSfixed64Extension(), index:1, value:Int64(510)) + message.setExtension(UnittestRoot.repeatedFloatExtension(), index:1, value:Float(511.0)) + message.setExtension(UnittestRoot.repeatedDoubleExtension(), index:1, value:Double(512.0)) + message.setExtension(UnittestRoot.repeatedBoolExtension(), index:1, value:true) + message.setExtension(UnittestRoot.repeatedStringExtension(),index:1, value:"515") + message.setExtension(UnittestRoot.repeatedBytesExtension(), index:1, value:TestUtilities.getData("516")) + + var a = RepeatedGroup_extension.builder() + a.a = 517 + message.setExtension(UnittestRoot.repeatedGroupExtension(), index:1, value:a.build()) + + var b = TestAllTypes.NestedMessage.builder() + b.bb = 518 + message.setExtension(UnittestRoot.repeatedNestedMessageExtension(), index:1, value:b.build()) + var foreign = ForeignMessage.builder() + foreign.c = 519 + message.setExtension(UnittestRoot.repeatedForeignMessageExtension(), index:1, value:foreign.build()) + + var importMessage = ImportMessage.builder() + importMessage.d = 520 + message.setExtension(UnittestRoot.repeatedImportMessageExtension(), index:1, value:importMessage.build()) + + message.setExtension(UnittestRoot.repeatedNestedEnumExtension(), index:1, value:TestAllTypes.NestedEnum.Foo.rawValue) + + message.setExtension(UnittestRoot.repeatedForeignEnumExtension(), index:1, value:ForeignEnum.ForeignFoo.rawValue) + message.setExtension(UnittestRoot.repeatedImportEnumExtension(), index:1, value:ImportEnum.ImportFoo.rawValue) + + message.setExtension(UnittestRoot.repeatedStringPieceExtension(),index:1, value:"524") + message.setExtension(UnittestRoot.repeatedCordExtension(), index:1, value:"525") + + } + + func assertAllExtensionsSet(message:TestAllExtensions) + { + + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalInt32Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalInt64Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalUint32Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalUint64Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalSint32Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalSint64Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalFixed32Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalFixed64Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalSfixed32Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalSfixed64Extension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalFloatExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalDoubleExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalBoolExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalStringExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalBytesExtension()), "") + + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalGroupExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalNestedMessageExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalForeignMessageExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalImportMessageExtension()), "") + + if let extensions = message.getExtension(UnittestRoot.optionalGroupExtension()) as? OptionalGroup_extension + { + XCTAssertTrue(extensions.hasA, "") + } + if let ext = message.getExtension(UnittestRoot.optionalNestedMessageExtension()) as? TestAllTypes.NestedMessage + { + XCTAssertTrue(ext.hasBb, "") + } + + if let ext = message.getExtension(UnittestRoot.optionalForeignMessageExtension()) as? ForeignMessage + { + XCTAssertTrue(ext.hasC, "") + } + + if let ext = message.getExtension(UnittestRoot.optionalImportMessageExtension()) as? ImportMessage + { + XCTAssertTrue(ext.hasD, "") + } + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalNestedEnumExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalForeignEnumExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalImportEnumExtension()), "") + + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalStringPieceExtension()), "") + XCTAssertTrue(message.hasExtension(UnittestRoot.optionalCordExtension()), "") + + if let val = message.getExtension(UnittestRoot.optionalInt32Extension()) as? Int32 + { + XCTAssertTrue(101 == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalInt64Extension()) as? Int64 + { + XCTAssertTrue(Int64(102) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalUint32Extension()) as? UInt32 + { + XCTAssertTrue(UInt32(103) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalUint64Extension()) as? UInt64 + { + XCTAssertTrue(UInt64(104) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalSint32Extension()) as? Int32 + { + XCTAssertTrue(105 == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalSint64Extension()) as? Int64 + { + XCTAssertTrue(Int64(106) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalFixed32Extension()) as? UInt32 + { + XCTAssertTrue(UInt32(107) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalFixed64Extension()) as? UInt64 + { + XCTAssertTrue(UInt64(108) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalSfixed32Extension()) as? Int32 + { + XCTAssertTrue(Int32(109) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalSfixed64Extension()) as? Int64 + { + XCTAssertTrue(Int64(110) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalFloatExtension()) as? Float + { + XCTAssertTrue(Float(111.0) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalDoubleExtension()) as? Double + { + XCTAssertTrue(Double(112.0) == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalBoolExtension()) as? Bool + { + XCTAssertTrue(true == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalStringExtension()) as? String + { + XCTAssertTrue("115" == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalBytesExtension()) as? [Byte] + { + XCTAssertTrue(TestUtilities.getData("116") == val, "") + } + + if let mes = message.getExtension(UnittestRoot.optionalGroupExtension()) as? OptionalGroup_extension + { + XCTAssertTrue(117 == mes.a, "") + } + + if let mes = message.getExtension(UnittestRoot.optionalNestedMessageExtension()) as? TestAllTypes.NestedMessage + { + XCTAssertTrue(118 == mes.bb, "") + } + if let mes = message.getExtension(UnittestRoot.optionalForeignMessageExtension()) as? ForeignMessage + { + XCTAssertTrue(119 == mes.c, "") + } + if let mes = message.getExtension(UnittestRoot.optionalImportMessageExtension()) as? ImportMessage + { + XCTAssertTrue(120 == mes.d, "") + } + if let val = message.getExtension(UnittestRoot.optionalNestedEnumExtension()) as? Int32 + { + XCTAssertTrue(TestAllTypes.NestedEnum.Baz.rawValue == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalForeignEnumExtension()) as? Int32 + { + XCTAssertTrue(ForeignEnum.ForeignBaz.rawValue == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalImportEnumExtension()) as? Int32 + { + XCTAssertTrue(ImportEnum.ImportBaz.rawValue == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalStringPieceExtension()) as? String + { + XCTAssertTrue("124" == val, "") + } + if let val = message.getExtension(UnittestRoot.optionalCordExtension()) as? String + { + XCTAssertTrue("125" == val, "") + } + + if let val = message.getExtension(UnittestRoot.repeatedInt32Extension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, ""); + } + + if let val = message.getExtension(UnittestRoot.repeatedInt64Extension()) as? [Int64] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedUint32Extension()) as? [UInt32] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedUint64Extension()) as? [UInt64] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedSint32Extension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedSint64Extension()) as? [Int64] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedFixed32Extension()) as? [UInt32] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedFixed64Extension()) as? [UInt64] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedSfixed32Extension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedSfixed64Extension()) as? [Int64] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedFloatExtension()) as? [Float] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedDoubleExtension()) as? [Double] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedBoolExtension()) as? [Bool] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedStringExtension()) as? [String] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedBytesExtension()) as? Array> + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedGroupExtension()) as? [RepeatedGroup_extension] + { + XCTAssertTrue(2 == val.count, ""); + } + if let val = message.getExtension(UnittestRoot.repeatedNestedMessageExtension()) as? [TestAllTypes.NestedMessage] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedForeignMessageExtension()) as? [ForeignMessage] + { + XCTAssertTrue(2 == val.count, "") + } + + if let val = message.getExtension(UnittestRoot.repeatedForeignMessageExtension()) as? [ImportMessage] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedNestedEnumExtension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedForeignEnumExtension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedImportEnumExtension()) as? [Int32] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedStringPieceExtension()) as? [String] + { + XCTAssertTrue(2 == val.count, "") + } + if let val = message.getExtension(UnittestRoot.repeatedCordExtension()) as? [String] + { + XCTAssertTrue(2 == val.count, "") + } + + } } \ No newline at end of file diff --git a/src/makeDescriptor.sh b/src/makeDescriptor.sh deleted file mode 100644 index 4197c97..0000000 --- a/src/makeDescriptor.sh +++ /dev/null @@ -1 +0,0 @@ -protoc compiler/swift-descriptor.proto --cpp_out="./" diff --git a/travis/travis.sh b/travis/travis.sh new file mode 100755 index 0000000..a015af4 --- /dev/null +++ b/travis/travis.sh @@ -0,0 +1,2 @@ +#!/bin/sh +scripts/makeTests.sh && cd .. && cd ..;