mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
Add test for JSON encoding
This commit is contained in:
@@ -256,6 +256,248 @@ class ProjectSpecTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testJSONEncodable() {
|
||||
describe {
|
||||
$0.it("encodes to json") {
|
||||
let proj = Project(basePath: Path.current,
|
||||
name: "ToJson",
|
||||
configs: [Config(name: "DevelopmentConfig", type: .debug), Config(name: "ProductionConfig", type: .release)],
|
||||
targets: [Target(name: "App",
|
||||
type: .application,
|
||||
platform: .iOS,
|
||||
productName: "App",
|
||||
deploymentTarget: Version(major: 0, minor: 1, patch: 2),
|
||||
settings: Settings(buildSettings: ["foo": "bar"],
|
||||
configSettings: ["foo" : Settings(buildSettings: ["nested": "config"],
|
||||
configSettings: [:],
|
||||
groups: ["config-setting-group"])],
|
||||
groups: ["setting-group"]),
|
||||
configFiles: ["foo": "bar"],
|
||||
sources: [TargetSource(path: "Source",
|
||||
name: "Source",
|
||||
compilerFlags: ["-Werror"],
|
||||
excludes: ["foo", "bar"],
|
||||
type: .folder,
|
||||
optional: true,
|
||||
buildPhase: .resources,
|
||||
headerVisibility: .private,
|
||||
createIntermediateGroups: true)],
|
||||
dependencies: [Dependency(type: .carthage(findFrameworks: true),
|
||||
reference: "reference",
|
||||
embed: true,
|
||||
codeSign: true,
|
||||
link: true,
|
||||
implicit: true,
|
||||
weakLink: true)],
|
||||
info: Plist(path: "info.plist", attributes: ["foo": "bar"]),
|
||||
entitlements: Plist(path: "entitlements.plist", attributes: ["foo": "bar"]),
|
||||
transitivelyLinkDependencies: true,
|
||||
directlyEmbedCarthageDependencies: true,
|
||||
requiresObjCLinking: true,
|
||||
preBuildScripts: [BuildScript(script: .script("pwd"),
|
||||
name: "Foo script",
|
||||
inputFiles: ["foo"],
|
||||
outputFiles: ["bar"],
|
||||
inputFileLists: ["foo.xcfilelist"],
|
||||
outputFileLists: ["bar.xcfilelist"],
|
||||
shell: "/bin/bash",
|
||||
runOnlyWhenInstalling: true,
|
||||
showEnvVars: true)],
|
||||
postCompileScripts: [BuildScript(script: .path("cmd.sh"),
|
||||
name: "Bar script",
|
||||
inputFiles: ["foo"],
|
||||
outputFiles: ["bar"],
|
||||
inputFileLists: ["foo.xcfilelist"],
|
||||
outputFileLists: ["bar.xcfilelist"],
|
||||
shell: "/bin/bash",
|
||||
runOnlyWhenInstalling: true,
|
||||
showEnvVars: true)],
|
||||
postBuildScripts: [BuildScript(script: .path("cmd.sh"),
|
||||
name: "an another script",
|
||||
inputFiles: ["foo"],
|
||||
outputFiles: ["bar"],
|
||||
inputFileLists: ["foo.xcfilelist"],
|
||||
outputFileLists: ["bar.xcfilelist"],
|
||||
shell: "/bin/bash",
|
||||
runOnlyWhenInstalling: true,
|
||||
showEnvVars: true)],
|
||||
buildRules: [BuildRule(fileType: .pattern("*.xcassets"),
|
||||
action: .script("pre_process_swift.py"),
|
||||
name: "My Build Rule",
|
||||
outputFiles: ["$(SRCROOT)/Generated.swift"],
|
||||
outputFilesCompilerFlags: ["foo"]),
|
||||
BuildRule(fileType: .type("sourcecode.swift"),
|
||||
action: .compilerSpec("com.apple.xcode.tools.swift.compiler"),
|
||||
name: nil,
|
||||
outputFiles: ["bar"],
|
||||
outputFilesCompilerFlags: ["foo"]),],
|
||||
scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(name: "test target",
|
||||
randomExecutionOrder: false,
|
||||
parallelizable: false)],
|
||||
configVariants: ["foo"],
|
||||
gatherCoverageData: true,
|
||||
commandLineArguments: ["foo": true],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable(variable: "environmentVariable",
|
||||
value: "bar",
|
||||
enabled: true)],
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")]),
|
||||
legacy: LegacyTarget(toolPath: "foo",
|
||||
passSettings: true,
|
||||
arguments: "bar",
|
||||
workingDirectory: "foo"),
|
||||
attributes: ["foo": "bar"])],
|
||||
aggregateTargets: [AggregateTarget(name: "aggregate target",
|
||||
targets: ["App"],
|
||||
settings: Settings(buildSettings: ["buildSettings": "bar"],
|
||||
configSettings: ["configSettings": Settings(buildSettings: [:],
|
||||
configSettings: [:],
|
||||
groups: [])],
|
||||
groups: ["foo"]),
|
||||
configFiles: ["configFiles": "bar"],
|
||||
buildScripts: [BuildScript(script: .path("script"),
|
||||
name: "foo",
|
||||
inputFiles: ["foo"],
|
||||
outputFiles: ["bar"],
|
||||
inputFileLists: ["foo.xcfilelist"],
|
||||
outputFileLists: ["bar.xcfilelist"],
|
||||
shell: "/bin/bash",
|
||||
runOnlyWhenInstalling: true,
|
||||
showEnvVars: false)],
|
||||
scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(name: "test target",
|
||||
randomExecutionOrder: false,
|
||||
parallelizable: false)],
|
||||
configVariants: ["foo"],
|
||||
gatherCoverageData: true,
|
||||
commandLineArguments: ["foo": true],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable(variable: "environmentVariable",
|
||||
value: "bar",
|
||||
enabled: true)],
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")]),
|
||||
attributes: ["foo": "bar"])],
|
||||
settings: Settings(buildSettings: ["foo": "bar"],
|
||||
configSettings: ["foo" : Settings(buildSettings: ["nested": "config"],
|
||||
configSettings: [:],
|
||||
groups: ["config-setting-group"])],
|
||||
groups: ["setting-group"]),
|
||||
settingGroups: ["foo": Settings(buildSettings: ["foo": "bar"],
|
||||
configSettings: ["foo" : Settings(buildSettings: ["nested": "config"],
|
||||
configSettings: [:],
|
||||
groups: ["config-setting-group"])],
|
||||
groups: ["setting-group"])],
|
||||
schemes: [Scheme(name: "scheme",
|
||||
build: Scheme.Build(targets: [Scheme.BuildTarget(target: "foo",
|
||||
buildTypes: [.archiving, .analyzing])],
|
||||
parallelizeBuild: false,
|
||||
buildImplicitDependencies: false,
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")]),
|
||||
run: Scheme.Run(config: "run config",
|
||||
commandLineArguments: ["foo": true],
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable(variable: "foo",
|
||||
value: "bar",
|
||||
enabled: false)]),
|
||||
test: Scheme.Test(config: "Config",
|
||||
gatherCoverageData: true,
|
||||
randomExecutionOrder: false,
|
||||
parallelizable: false,
|
||||
commandLineArguments: ["foo": true],
|
||||
targets: [Scheme.Test.TestTarget(name: "foo",
|
||||
randomExecutionOrder: false,
|
||||
parallelizable: false)],
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable(variable: "foo",
|
||||
value: "bar",
|
||||
enabled: false)]),
|
||||
profile: Scheme.Profile(config: "profile config",
|
||||
commandLineArguments: ["foo": true],
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable(variable: "foo",
|
||||
value: "bar",
|
||||
enabled: false)]),
|
||||
analyze: Scheme.Analyze(config: "analyze config"),
|
||||
archive: Scheme.Archive(config: "archive config",
|
||||
customArchiveName: "customArchiveName",
|
||||
revealArchiveInOrganizer: true,
|
||||
preActions: [Scheme.ExecutionAction(name: "preAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")],
|
||||
postActions: [Scheme.ExecutionAction(name: "postAction",
|
||||
script: "bar",
|
||||
settingsTarget: "foo")]))],
|
||||
options: SpecOptions(minimumXcodeGenVersion: Version(major: 3, minor: 4, patch: 5),
|
||||
carthageBuildPath: "carthageBuildPath",
|
||||
carthageExecutablePath: "carthageExecutablePath",
|
||||
createIntermediateGroups: true,
|
||||
bundleIdPrefix: "bundleIdPrefix",
|
||||
settingPresets: .project,
|
||||
developmentLanguage: "developmentLanguage",
|
||||
indentWidth: 123,
|
||||
tabWidth: 456,
|
||||
usesTabs: true,
|
||||
xcodeVersion: "xcodeVersion",
|
||||
deploymentTarget: DeploymentTarget(iOS: Version(major: 1, minor: 2, patch: 3),
|
||||
tvOS: nil,
|
||||
watchOS: Version(major: 4, minor: 5, patch: 6),
|
||||
macOS: nil),
|
||||
disabledValidations: [.missingConfigFiles],
|
||||
defaultConfig: "defaultConfig",
|
||||
transitivelyLinkDependencies: true,
|
||||
groupSortPosition: .top,
|
||||
generateEmptyDirectories: true,
|
||||
findCarthageFrameworks: false),
|
||||
fileGroups: ["foo", "bar"],
|
||||
configFiles: ["configFiles": "bar"],
|
||||
attributes: ["attributes": "bar"])
|
||||
|
||||
let json = proj.toJSONDictionary()
|
||||
let restoredProj = try Project(basePath: Path.current, jsonDictionary: json)
|
||||
|
||||
// Examin some properties to make debugging easier
|
||||
try expect(proj.aggregateTargets) == restoredProj.aggregateTargets
|
||||
try expect(proj.configFiles) == restoredProj.configFiles
|
||||
try expect(proj.settings) == restoredProj.settings
|
||||
try expect(proj.basePath) == restoredProj.basePath
|
||||
try expect(proj.fileGroups) == restoredProj.fileGroups
|
||||
try expect(proj.schemes) == restoredProj.schemes
|
||||
try expect(proj.options) == restoredProj.options
|
||||
try expect(proj.settingGroups) == restoredProj.settingGroups
|
||||
try expect(proj.targets) == restoredProj.targets
|
||||
|
||||
try expect(proj) == restoredProj
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func expectValidationError(_ project: Project, _ expectedError: SpecValidationError.ValidationError, file: String = #file, line: Int = #line) throws {
|
||||
|
||||
Reference in New Issue
Block a user