From 4cecc56d5d0feeaca5597b0a0ed236fb175135c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Zab=C5=82ocki?= Date: Mon, 30 Jan 2017 14:50:23 +0100 Subject: [PATCH] feat: add support for Swift Package Manager (#15) Add support for Swift Package Manager --- .gitignore | 2 +- CHANGELOG.md | 4 +++ Package.swift | 14 +++++++++++ Rakefile | 2 ++ Sources/Filters.swift | 1 + Sources/StencilSwiftTemplate.swift | 5 ++++ StencilSwiftKit.xcodeproj/project.pbxproj | 14 +++++------ .../CallNodeTests.swift | 0 .../Resources/Info.plist | 0 .../Resources/expected/call-basic.out | 0 .../expected/call-with-recursion.out | 0 .../Resources/expected/set-basic.out | 0 .../Resources/expected/set-with-context.out | 0 .../Resources/fixtures/call-basic.stencil | 0 .../fixtures/call-with-recursion.stencil | 0 .../Resources/fixtures/set-basic.stencil | 0 .../fixtures/set-with-context.stencil | 0 .../SetNodeTests.swift | 0 .../StringFiltersTests.swift | 0 .../SwiftIdentifierTests.swift | 0 .../TestsHelper.swift | 25 +++++++++++-------- 21 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 Package.swift rename Tests/{TestSuites => StencilSwiftKitTests}/CallNodeTests.swift (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/Info.plist (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/expected/call-basic.out (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/expected/call-with-recursion.out (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/expected/set-basic.out (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/expected/set-with-context.out (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/fixtures/call-basic.stencil (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/fixtures/call-with-recursion.stencil (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/fixtures/set-basic.stencil (100%) rename Tests/{ => StencilSwiftKitTests}/Resources/fixtures/set-with-context.stencil (100%) rename Tests/{TestSuites => StencilSwiftKitTests}/SetNodeTests.swift (100%) rename Tests/{TestSuites => StencilSwiftKitTests}/StringFiltersTests.swift (100%) rename Tests/{TestSuites => StencilSwiftKitTests}/SwiftIdentifierTests.swift (100%) rename Tests/{ => StencilSwiftKitTests}/TestsHelper.swift (85%) diff --git a/.gitignore b/.gitignore index 2c22487b..eee5c408 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,7 @@ playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ +Packages/ .build/ # CocoaPods diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d715a5..073cd31e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ ### New Features +* Added support for Swift Package Manager. + [Krzysztof Zabłocki](https://github.com/krzysztofzablocki) + [#15](https://github.com/SwiftGen/StencilSwiftKit/issues/15) + ### Internal Changes * Renamed `SwiftTemplate` to `StencilSwiftTemplate`. diff --git a/Package.swift b/Package.swift new file mode 100644 index 00000000..2efd447c --- /dev/null +++ b/Package.swift @@ -0,0 +1,14 @@ +import PackageDescription + +let package = Package( + name: "StencilSwiftKit", + targets: [ + Target(name: "StencilSwiftKit", dependencies: []) + ], + dependencies: [ + // https://github.com/kylef/Stencil/pull/84 + .Package(url: "https://github.com/vknabel/Stencil.git", majorVersion: 0, minor: 7), + // Requires new release including https://github.com/kylef/PathKit/commit/7b17207 + .Package(url: "https://github.com/vknabel/PathKit.git", majorVersion: 0, minor: 7), + ] +) diff --git a/Rakefile b/Rakefile index 52621b61..eedfdda4 100644 --- a/Rakefile +++ b/Rakefile @@ -7,11 +7,13 @@ def xcpretty(cmd) end task :build_for_testing do + sh "swift build" xcpretty "xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests build-for-testing" end desc 'Run Unit Tests' task :test => :build_for_testing do + sh "swift test" xcpretty "xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests test-without-building" end diff --git a/Sources/Filters.swift b/Sources/Filters.swift index 8fcf1c69..3a9f8d46 100644 --- a/Sources/Filters.swift +++ b/Sources/Filters.swift @@ -4,6 +4,7 @@ // MIT Licence // +import Foundation import Stencil enum FilterError: Error { diff --git a/Sources/StencilSwiftTemplate.swift b/Sources/StencilSwiftTemplate.swift index 738b8b1f..975fa5d9 100644 --- a/Sources/StencilSwiftTemplate.swift +++ b/Sources/StencilSwiftTemplate.swift @@ -4,8 +4,13 @@ // MIT Licence // +import Foundation import Stencil +#if os(Linux) && !swift(>=3.1) +typealias NSRegularExpression = RegularExpression +#endif + // Workaround until Stencil fixes https://github.com/kylef/Stencil/issues/22 open class StencilSwiftTemplate: Template { public required init(templateString: String, environment: Environment? = nil, name: String? = nil) { diff --git a/StencilSwiftKit.xcodeproj/project.pbxproj b/StencilSwiftKit.xcodeproj/project.pbxproj index ee3dd7e7..819cbe91 100644 --- a/StencilSwiftKit.xcodeproj/project.pbxproj +++ b/StencilSwiftKit.xcodeproj/project.pbxproj @@ -118,9 +118,7 @@ DD5F34111E21657700AEB5DA /* Tests */ = { isa = PBXGroup; children = ( - DD5F34291E21A3A200AEB5DA /* TestSuites */, - DD5F341C1E2199ED00AEB5DA /* Resources */, - DD5F341A1E21993A00AEB5DA /* TestsHelper.swift */, + DD5F34291E21A3A200AEB5DA /* StencilSwiftKitTests */, ); path = Tests; sourceTree = ""; @@ -135,15 +133,17 @@ path = Resources; sourceTree = ""; }; - DD5F34291E21A3A200AEB5DA /* TestSuites */ = { + DD5F34291E21A3A200AEB5DA /* StencilSwiftKitTests */ = { isa = PBXGroup; children = ( DD5F342A1E21A3A200AEB5DA /* CallNodeTests.swift */, DD5F342B1E21A3A200AEB5DA /* SetNodeTests.swift */, DD5F342C1E21A3A200AEB5DA /* StringFiltersTests.swift */, DD5F342D1E21A3A200AEB5DA /* SwiftIdentifierTests.swift */, + DD5F341A1E21993A00AEB5DA /* TestsHelper.swift */, + DD5F341C1E2199ED00AEB5DA /* Resources */, ); - path = TestSuites; + path = StencilSwiftKitTests; sourceTree = ""; }; /* End PBXGroup section */ @@ -372,7 +372,7 @@ baseConfigurationReference = 47888DD528DEC4C84FD8F15B /* Pods-Tests.debug.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Resources/Info.plist; + INFOPLIST_FILE = Tests/StencilSwiftKitTests/Resources/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.alisoftware.SwiftGenKitTests; @@ -386,7 +386,7 @@ baseConfigurationReference = 4B3D39DBCD15D8F6BB891D92 /* Pods-Tests.release.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Tests/Resources/Info.plist; + INFOPLIST_FILE = Tests/StencilSwiftKitTests/Resources/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.alisoftware.SwiftGenKitTests; diff --git a/Tests/TestSuites/CallNodeTests.swift b/Tests/StencilSwiftKitTests/CallNodeTests.swift similarity index 100% rename from Tests/TestSuites/CallNodeTests.swift rename to Tests/StencilSwiftKitTests/CallNodeTests.swift diff --git a/Tests/Resources/Info.plist b/Tests/StencilSwiftKitTests/Resources/Info.plist similarity index 100% rename from Tests/Resources/Info.plist rename to Tests/StencilSwiftKitTests/Resources/Info.plist diff --git a/Tests/Resources/expected/call-basic.out b/Tests/StencilSwiftKitTests/Resources/expected/call-basic.out similarity index 100% rename from Tests/Resources/expected/call-basic.out rename to Tests/StencilSwiftKitTests/Resources/expected/call-basic.out diff --git a/Tests/Resources/expected/call-with-recursion.out b/Tests/StencilSwiftKitTests/Resources/expected/call-with-recursion.out similarity index 100% rename from Tests/Resources/expected/call-with-recursion.out rename to Tests/StencilSwiftKitTests/Resources/expected/call-with-recursion.out diff --git a/Tests/Resources/expected/set-basic.out b/Tests/StencilSwiftKitTests/Resources/expected/set-basic.out similarity index 100% rename from Tests/Resources/expected/set-basic.out rename to Tests/StencilSwiftKitTests/Resources/expected/set-basic.out diff --git a/Tests/Resources/expected/set-with-context.out b/Tests/StencilSwiftKitTests/Resources/expected/set-with-context.out similarity index 100% rename from Tests/Resources/expected/set-with-context.out rename to Tests/StencilSwiftKitTests/Resources/expected/set-with-context.out diff --git a/Tests/Resources/fixtures/call-basic.stencil b/Tests/StencilSwiftKitTests/Resources/fixtures/call-basic.stencil similarity index 100% rename from Tests/Resources/fixtures/call-basic.stencil rename to Tests/StencilSwiftKitTests/Resources/fixtures/call-basic.stencil diff --git a/Tests/Resources/fixtures/call-with-recursion.stencil b/Tests/StencilSwiftKitTests/Resources/fixtures/call-with-recursion.stencil similarity index 100% rename from Tests/Resources/fixtures/call-with-recursion.stencil rename to Tests/StencilSwiftKitTests/Resources/fixtures/call-with-recursion.stencil diff --git a/Tests/Resources/fixtures/set-basic.stencil b/Tests/StencilSwiftKitTests/Resources/fixtures/set-basic.stencil similarity index 100% rename from Tests/Resources/fixtures/set-basic.stencil rename to Tests/StencilSwiftKitTests/Resources/fixtures/set-basic.stencil diff --git a/Tests/Resources/fixtures/set-with-context.stencil b/Tests/StencilSwiftKitTests/Resources/fixtures/set-with-context.stencil similarity index 100% rename from Tests/Resources/fixtures/set-with-context.stencil rename to Tests/StencilSwiftKitTests/Resources/fixtures/set-with-context.stencil diff --git a/Tests/TestSuites/SetNodeTests.swift b/Tests/StencilSwiftKitTests/SetNodeTests.swift similarity index 100% rename from Tests/TestSuites/SetNodeTests.swift rename to Tests/StencilSwiftKitTests/SetNodeTests.swift diff --git a/Tests/TestSuites/StringFiltersTests.swift b/Tests/StencilSwiftKitTests/StringFiltersTests.swift similarity index 100% rename from Tests/TestSuites/StringFiltersTests.swift rename to Tests/StencilSwiftKitTests/StringFiltersTests.swift diff --git a/Tests/TestSuites/SwiftIdentifierTests.swift b/Tests/StencilSwiftKitTests/SwiftIdentifierTests.swift similarity index 100% rename from Tests/TestSuites/SwiftIdentifierTests.swift rename to Tests/StencilSwiftKitTests/SwiftIdentifierTests.swift diff --git a/Tests/TestsHelper.swift b/Tests/StencilSwiftKitTests/TestsHelper.swift similarity index 85% rename from Tests/TestsHelper.swift rename to Tests/StencilSwiftKitTests/TestsHelper.swift index 8cfdb55c..5763e5ec 100644 --- a/Tests/TestsHelper.swift +++ b/Tests/StencilSwiftKitTests/TestsHelper.swift @@ -53,24 +53,27 @@ func XCTDiffStrings(_ result: String, _ expected: String, file: StaticString = # } class Fixtures { - private static let testBundle = Bundle(for: Fixtures.self) + private static let resources: Path = { + if let path = Bundle(for: Fixtures.self).resourceURL?.path, + Path(path).exists { + return Path(path) + } else { + return Path(#file).parent() + "Resources" + } + }() private init() {} static func directory(subDirectory subDir: String? = nil) -> Path { - guard let rsrcURL = testBundle.resourceURL else { - fatalError("Unable to find resource directory URL") - } - let rsrc = Path(rsrcURL.path) - - guard let dir = subDir else { return rsrc } - return rsrc + dir + guard let dir = subDir else { return resources } + return resources + dir } static func path(for name: String, subDirectory: String? = nil) -> Path { - guard let path = testBundle.path(forResource: name, ofType: "", inDirectory: subDirectory) else { - fatalError("Unable to find fixture \"\(name)\"") + if let subDirectory = subDirectory { + return resources + subDirectory + name + } else { + return resources + name } - return Path(path) } static func string(for name: String, encoding: String.Encoding = .utf8) -> String {