diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 51654fba..88c5803f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,6 +21,10 @@ jobs: env: PACKAGE_MANAGER_COMMAND: test -Xswiftc -warnings-as-errors run: ./run-tests.sh + - name: "Run tests (SPM integration test)" + env: + SPM: run + run: ./run-tests.sh - name: "Run tests (BUILD_SCHEME: SQLite iOS)" env: BUILD_SCHEME: SQLite iOS @@ -71,3 +75,7 @@ jobs: sudo apt-get install -y libsqlite3-dev - name: Test run: swift test + - name: "Run tests (SPM integration test)" + env: + SPM: run + run: ./run-tests.sh diff --git a/Package.swift b/Package.swift index c1373ad8..f4938678 100644 --- a/Package.swift +++ b/Package.swift @@ -44,7 +44,11 @@ let package = Package( #if os(Linux) package.dependencies = [.package(url: "https://github.com/stephencelis/CSQLite.git", from: "0.0.3")] package.targets = [ - .target(name: "SQLite", exclude: ["Extensions/FTS4.swift", "Extensions/FTS5.swift"]), + .target( + name: "SQLite", + dependencies: [.product(name: "CSQLite", package: "CSQLite")], + exclude: ["Extensions/FTS4.swift", "Extensions/FTS5.swift"] + ), .testTarget(name: "SQLiteTests", dependencies: ["SQLite"], path: "Tests/SQLiteTests", exclude: [ "FTSIntegrationTests.swift", "FTS4Tests.swift", diff --git a/Tests/SPM/.gitignore b/Tests/SPM/.gitignore new file mode 100644 index 00000000..bb460e7b --- /dev/null +++ b/Tests/SPM/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/Tests/SPM/Package.swift b/Tests/SPM/Package.swift new file mode 100644 index 00000000..810026ce --- /dev/null +++ b/Tests/SPM/Package.swift @@ -0,0 +1,19 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "test", + dependencies: [ + .package(path: "../..") + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "test", + dependencies: [.product(name: "SQLite", package: "SQLite.swift")] + ) + ] +) diff --git a/Tests/SPM/Sources/test/main.swift b/Tests/SPM/Sources/test/main.swift new file mode 100644 index 00000000..939b3391 --- /dev/null +++ b/Tests/SPM/Sources/test/main.swift @@ -0,0 +1,10 @@ +import SQLite + +let table = Table("test") +let name = Expression("name") + +let db = try Connection("db.sqlite", readonly: true) + +for row in try db.prepare(table) { + print(row[name]) +} diff --git a/Tests/SPM/db.sqlite b/Tests/SPM/db.sqlite new file mode 100644 index 00000000..f7b2e84c Binary files /dev/null and b/Tests/SPM/db.sqlite differ diff --git a/run-tests.sh b/run-tests.sh index 32465388..49330c12 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -14,6 +14,8 @@ elif [ -n "$VALIDATOR_SUBSPEC" ]; then fi elif [ -n "$CARTHAGE_PLATFORM" ]; then cd Tests/Carthage && make test CARTHAGE_PLATFORM="$CARTHAGE_PLATFORM" +elif [ -n "$SPM" ]; then + cd Tests/SPM && swift ${SPM} elif [ -n "${PACKAGE_MANAGER_COMMAND}" ]; then swift ${PACKAGE_MANAGER_COMMAND} fi