Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
ebc902f
[launch-with-workflow] - Added FlowRepresentableMetadataTests, made F…
morganzellers Nov 2, 2021
21a62c8
[launch-with-workflow] - Added tests for new launcher initializer usi…
morganzellers Nov 2, 2021
41474c3
Adding support for .last computed property to AnyWorkflow
morganzellers Nov 3, 2021
e5b0e64
Adds support for workflows with more than one item.
morganzellers Nov 3, 2021
b3c2c6b
Refactor of ExtendedFlowRepresentableMetadata inits and function to f…
morganzellers Nov 3, 2021
402a9fe
Added test for fatalError scenario in which no items in a workflow
morganzellers Nov 4, 2021
e67d734
WIP - Working through the tests and adding thenProceeds as I figure i…
morganzellers Nov 4, 2021
3e70c53
WIP still - added more thenProceeds but still have a lot to drive out.
morganzellers Nov 5, 2021
686cf28
Adds support for launching a workflow using an AnyWorkflow with start…
morganzellers Nov 9, 2021
1d51a0a
Added generic constraint test file for AnyWorkflow launched Workflows.
morganzellers Nov 9, 2021
4000010
WIP - Using generic constraints tests to drive out more thenProceeds.
morganzellers Nov 9, 2021
3a2a9c4
[launch-with-workflow] - Adding missing init that was causing tests t…
Richard-Gist Nov 10, 2021
f87bbe7
[launch-with-workflow] - Fixing linting error - RAG
Richard-Gist Nov 10, 2021
d9e7845
[launch-with-workflow] - Fixed some linting and got some tests passin…
Richard-Gist Nov 10, 2021
9c786ca
Merge branch 'data-driven' into launch-with-workflow
morganzellers Nov 11, 2021
f585656
[launch-with-workflow] - Removed tests for thenProceed functions only…
morganzellers Nov 11, 2021
ff16c99
[launch-with-workflow] - Adding more descriptive docs - RAG MZ
morganzellers Nov 11, 2021
1f62b9b
[launch-with-workflow] - Added TODO to make public Workflow inits pri…
morganzellers Nov 11, 2021
9a283fd
Taking Richard's whitespace fix
morganzellers Nov 11, 2021
d5739d2
[launch-with-workflow] - Adds WorkflowLauncher initializer for starti…
morganzellers Nov 11, 2021
de9fe1c
Merge pull request #150 from wwt/launch-with-workflow
Richard-Gist Nov 11, 2021
1d430cb
Merge branch 'launch-with-workflow' into data-driven
morganzellers Nov 11, 2021
7d5acb3
[skip ci] data-spike4 - This spike takes the registry a bit farther t…
Richard-Gist Nov 12, 2021
540ebb5
Spiked out a script to parse output from SourceKitten's structure call.
morganzellers Nov 15, 2021
c3c7533
Added getSwiftFiles function to list all swift files in a passed dire…
morganzellers Nov 16, 2021
282d43e
Added multi-calls to sourcekitten.
morganzellers Nov 16, 2021
73ec1e1
WIP - Parsing json dictionary directly
morganzellers Nov 17, 2021
5b8e4e7
Cleaning up script and supporting input type
morganzellers Nov 17, 2021
0b1c595
Beginning switch to swift-syntax for parsing. Added script to Example…
morganzellers Nov 18, 2021
50f7ddf
Everything compiles now
morganzellers Nov 19, 2021
aa1c707
Added script to copy executable to ExampleApps folder, script running
morganzellers Nov 19, 2021
b62b6e5
Script working with swift-syntax example code.
morganzellers Nov 19, 2021
c006f4a
Finding some keywords.
morganzellers Nov 19, 2021
c1fbdde
Finding Test FR's - trying views
morganzellers Nov 30, 2021
b282b52
Finding non-test structs that conform to FlowRepresentable
morganzellers Dec 2, 2021
866ca10
Removing old sourcekitten code.
morganzellers Dec 6, 2021
0f429a0
Cleaning up more SourceKitten things
morganzellers Dec 6, 2021
32b3531
[metadata-describer] - Created protocol FlowRepresentableMetadataDesc…
Richard-Gist Dec 7, 2021
3e0713d
More flexibly checking for FR conformance.
morganzellers Dec 7, 2021
0f4edbe
[skip ci] metadata-describer - This has tests to showcase/test extend…
Richard-Gist Dec 7, 2021
0de4d7f
Added more flexible checking for FR conformance.
morganzellers Dec 7, 2021
182c2ee
[metadata-describer] - FR no longer explicitly conforms to FRMD. Test…
Richard-Gist Dec 10, 2021
13231df
[metadata-describer] - Renamed createMetadata to metadataFactory
Richard-Gist Dec 10, 2021
c616849
Handling class conformance better.
morganzellers Dec 13, 2021
37953f6
Restricting FR extension to where Self is FlowRepresentableMetadataDe…
Richard-Gist Dec 13, 2021
cab7328
Added rough support for finding conformance to FlowRepresentable via …
morganzellers Dec 13, 2021
2027ff1
[metadata-describer] - Adding tests to cover flowPersistence defaults…
Richard-Gist Dec 15, 2021
af03190
[metadata-describer] - Updating test to show what is possible - RAG
Richard-Gist Dec 15, 2021
37d9047
[metadata-describer] - minor refactor to Describer - RAG
Richard-Gist Dec 15, 2021
03a6ee9
[metadata-describer] - Added Default implementation for metadataFacto…
Richard-Gist Dec 29, 2021
1749114
[metadata-describer] - Minor refactor to default flowPersistence in E…
Richard-Gist Dec 29, 2021
0f3d4a3
Added more flexible checking for protocol and extensions.
morganzellers Jan 6, 2022
55d5055
[metadata-describer] - Fixed some documentation and fixed bug with Sw…
Richard-Gist Jan 7, 2022
908871a
[metadata-describer] - updating headers - RAG
Richard-Gist Jan 7, 2022
30a86ba
Using FileVisitor class to spike out approach with that style of addi…
morganzellers Jan 11, 2022
2f57d76
Cleaning things up from previous approach
morganzellers Jan 13, 2022
aa32a18
Gets things to parity with previous branch in a non-efficient way
morganzellers Jan 14, 2022
cca34ea
Merge pull request #155 from wwt/metadata-describer
morganzellers Jan 14, 2022
bd35d4e
[data-drive-json-consumption] - renamed FlowRepresentableMetadataDesc…
Tyler-Keith-Thompson Jan 14, 2022
02b4ce8
[data-drive-json-consumption] - There is now a failing test! We are a…
Tyler-Keith-Thompson Jan 14, 2022
2bfc907
[data-drive-json-consumption] - Hmm, funny how a little infinite recu…
Tyler-Keith-Thompson Jan 14, 2022
89d63b7
[data-drive-json-consumption] - We now reasonably decode AnyWorkflows…
Tyler-Keith-Thompson Jan 14, 2022
635fbce
[data-drive-json-consumption] - Minor refactors and added an addition…
Tyler-Keith-Thompson Jan 14, 2022
857b826
[data-drive-json-consumption] - Code that was temporarily added to su…
Tyler-Keith-Thompson Jan 15, 2022
272c3eb
[data-drive-json-consumption] - After reflection, extending JSON for …
Tyler-Keith-Thompson Jan 15, 2022
2f2d1ef
[data-drive-json-consumption] - Refactor to dedup decoding logic - TT
Tyler-Keith-Thompson Jan 15, 2022
4a234a5
[data-drive-json-consumption] - Removed todo for extending each FR si…
Tyler-Keith-Thompson Jan 18, 2022
7085f54
[data-drive-json-consumption] - Updated WorkflowJSONSpec access level…
Tyler-Keith-Thompson Jan 18, 2022
72a39e4
[data-drive-json-consumption] - Updated docs to satisfy Richard's ped…
Tyler-Keith-Thompson Jan 18, 2022
a8f668e
[data-driven-json-launch-persistence-styles] - Added a failing test f…
Tyler-Keith-Thompson Jan 18, 2022
849d880
[data-driven-json-launch-persistence-styles] - Updated tests to use t…
Tyler-Keith-Thompson Jan 18, 2022
1db2ce0
[data-driven-json-launch-persistence-styles] - SwiftUI now decodes la…
Tyler-Keith-Thompson Jan 18, 2022
a623c18
[data-driven-json-launch-persistence-styles] - Launch styles are now …
Tyler-Keith-Thompson Jan 18, 2022
48538a1
[data-driven-json-launch-persistence-styles] - All the tests pass! ..…
Tyler-Keith-Thompson Jan 18, 2022
1ba2e26
[data-driven-json-launch-persistence-styles] - Updated some missing d…
Tyler-Keith-Thompson Jan 18, 2022
b140c34
[data-driven-json-launch-persistence-styles] - Fixed deprecation warn…
Tyler-Keith-Thompson Jan 18, 2022
73c410a
[data-driven-json-launch-persistence-styles] - Added an additional te…
Tyler-Keith-Thompson Jan 18, 2022
d8427bc
[data-driven-json-launch-persistence-styles] - Fixed cocoapods lib li…
Tyler-Keith-Thompson Jan 18, 2022
16456e3
Merge pull request #161 from wwt/data-drive-json-consumption
morganzellers Jan 24, 2022
dfa5341
Merge pull request #163 from wwt/data-driven-json-launch-persistence-…
morganzellers Jan 24, 2022
1174be0
Resolving conflicts.
morganzellers Jan 24, 2022
98ce064
LoginView for testing FR approach. Updating to new types next.
morganzellers Jan 31, 2022
3d1682e
Updated for new types - next up is finding the flowRepresentableName …
morganzellers Feb 1, 2022
1bc09d8
WIP
morganzellers Feb 1, 2022
c4e54b0
[data-driven-extendable-json] - Starting the process of decoding more…
Feb 3, 2022
683d313
[data-driven-extendable-json] - Testing that code should throw if flo…
Feb 3, 2022
60a7d50
[data-driven-extendable-json] - Tested that decoder throws when Launc…
Feb 3, 2022
c37811a
[data-driven-extendable-json] - Reducing decoder duplication with Pla…
Feb 3, 2022
ccc12d1
[data-driven-extendable-json] - Remove whitespace to fix linting erro…
Feb 3, 2022
6b150e5
[data-driven-extendable-json] - Adds multiplatform tests for data dri…
Feb 3, 2022
1bf9018
[data-driven-extendable-json] - Working on adding Fastlane for platfo…
Feb 3, 2022
748ccd4
[data-driven-extendable-json] - Updated PR_CI to try and run the plat…
Tyler-Keith-Thompson Feb 3, 2022
67c5bd0
[data-driven-extendable-json] - Just comment out tests for now and ru…
Tyler-Keith-Thompson Feb 3, 2022
8e81cfc
[data-driven-extendable-json] - Added the scheme to the workspace - TT
Tyler-Keith-Thompson Feb 3, 2022
796e17b
[data-driven-extendable-json] - Added back all the schemes that someh…
Tyler-Keith-Thompson Feb 3, 2022
3cc805d
[data-driven-extendable-json] - Ahha, it was a copy pasta error. When…
Tyler-Keith-Thompson Feb 3, 2022
d8e255b
[data-driven-extendable-json] - Whoops, workspace was in a different …
Tyler-Keith-Thompson Feb 3, 2022
162e9ee
[data-driven-extendable-json] - Execute multiplatform tests in parall…
Tyler-Keith-Thompson Feb 3, 2022
bb5d59a
[data-driven-extendable-json] - Added multiplatform tests to the Swif…
Tyler-Keith-Thompson Feb 3, 2022
32b7151
[data-driven-extendable-json] - Minor refactor to make PlatformDecoda…
Tyler-Keith-Thompson Feb 3, 2022
1ea7d4b
[data-driven-extendable-json] - VERY necessary whitespace fix - TT
Tyler-Keith-Thompson Feb 4, 2022
4e8f628
[data-driven-extendable-json] - The availability check lied to me loc…
Tyler-Keith-Thompson Feb 4, 2022
c16c9bd
Merge branch 'main' into data-driven
Tyler-Keith-Thompson Feb 4, 2022
41c1f06
Merge branch 'data-driven' into data-driven-extendable-json
Tyler-Keith-Thompson Feb 4, 2022
f0566d8
Merge pull request #170 from wwt/data-driven-extendable-json
morganzellers Feb 4, 2022
eeb395c
Preparations to separate finding conformance from printing results.
morganzellers Feb 7, 2022
c1fea76
Making things more modular.
morganzellers Feb 7, 2022
7a1374a
Removed old print. Added check for protocols. Next finding parent.
morganzellers Feb 10, 2022
8cb1b97
Handles embedded types in a more thorough way although roughly.
morganzellers Feb 11, 2022
3693dd1
Refactored loops to be easier to read.
morganzellers Feb 11, 2022
e43ba37
Beginning of handling parents.
morganzellers Feb 11, 2022
98ee35b
Finding parents
morganzellers Feb 11, 2022
57a1a8b
Committing write to file function.
morganzellers Feb 23, 2022
9ed1ec4
Adds support for checking for subtypes.
morganzellers Mar 1, 2022
5219e37
Cleaning up to prep for writing to a file.
morganzellers Mar 2, 2022
ed50545
Trying to sort out the Codable conformance to make writing to file mo…
morganzellers Mar 3, 2022
d333189
Writing output to file as JSON encoded dictionaries.
morganzellers Mar 3, 2022
940b5c2
[skip ci] data-spike-sitrep - Moved files into a package - TT
Tyler-Keith-Thompson Mar 3, 2022
5af14ef
[data-spike-sitrep] - Refactored to use ArgumentParser and stdout - TT
Tyler-Keith-Thompson Mar 3, 2022
453dd70
[data-spike-sitrep] - Tests added! That was not easy - TT
Tyler-Keith-Thompson Mar 4, 2022
fecedca
[data-spike-sitrep] - Alright, tests were added, things seem reasonab…
Tyler-Keith-Thompson Mar 4, 2022
87611fa
[data-spike-sitrep] - Satisfied some tests, wrote some more that are …
Tyler-Keith-Thompson Mar 4, 2022
a97a213
[data-spike-sitrep] - Refactored a bit, things ended up both more rea…
Tyler-Keith-Thompson Mar 4, 2022
76d3f81
Cleaning up.
morganzellers Mar 4, 2022
360a5d1
Cleaning up some things in order to ready for contributions and a PR.
morganzellers Mar 4, 2022
fb8ca00
Removing things from data-spike4 branch that I missed. If we need the…
morganzellers Mar 4, 2022
aa2b1f5
Green CI Please.
morganzellers Mar 4, 2022
c12938e
[swiftcurrent-ir-generator] - Added linting to generator scheme - TT
Tyler-Keith-Thompson Mar 7, 2022
9a6f25e
Adds code to pass tests around single layer of nesting as well as mul…
morganzellers Mar 7, 2022
11897cc
Finds conformance nested 3 layers deep in a type. Fixes test testMult…
morganzellers Mar 7, 2022
713c33a
Paring down some things - bit more to go.
morganzellers Mar 8, 2022
6b082cc
Merge branch 'data-driven' into swiftcurrent-ir-generator
morganzellers Mar 21, 2022
dc0a149
[swiftcurrent-ir-generator] - Allowed for arbitrarily deep type nesti…
Tyler-Keith-Thompson Mar 24, 2022
111d48b
[swiftcurrent-ir-generator] - Refactored out that inout thing - TT
Tyler-Keith-Thompson Mar 24, 2022
d1c8e27
[swiftcurrent-ir-generator] - Arbitrarily deep protocol chains now wo…
Tyler-Keith-Thompson Mar 24, 2022
724c646
[swiftcurrent-ir-generator] - As long as you are not afraid of flatma…
Tyler-Keith-Thompson Mar 24, 2022
19fb247
[swiftcurrent-ir-generator] - Quick comment to help people understand…
Tyler-Keith-Thompson Mar 24, 2022
a7179f6
[swiftcurrent-ir-generator] - Some other minor refactors - TT
Tyler-Keith-Thompson Mar 24, 2022
f81f0d2
[swiftcurrent-ir-generator] - Reduced complexity a bit by getting rid…
Tyler-Keith-Thompson Mar 24, 2022
9294c9d
[swiftcurrent-ir-generator] - Some more minor refactors - TT
Tyler-Keith-Thompson Mar 24, 2022
9218be5
[swiftcurrent-ir-generator] - Lots of dead code cleanup and renaming …
Tyler-Keith-Thompson Mar 24, 2022
88f3bd2
[swiftcurrent-ir-generator] - A little more dead code removal - TT
Tyler-Keith-Thompson Mar 24, 2022
aa012e0
[swiftcurrent-ir-generator] - Alright, I think this finishes up the i…
Tyler-Keith-Thompson Mar 24, 2022
4622d55
[swiftcurrent-ir-generator] - Let's try to run all the tests using fa…
Tyler-Keith-Thompson Mar 24, 2022
8fd770e
[swiftcurrent-ir-generator] - Sundell wrote a thing to use the shell,…
Tyler-Keith-Thompson Mar 24, 2022
2249bd7
[swiftcurrent-ir-generator] - Minor update to testing strategy with f…
Tyler-Keith-Thompson Mar 24, 2022
cf257b7
[swiftcurrent-ir-generator] - Minor tweak to the help on the CLI util…
Tyler-Keith-Thompson Mar 24, 2022
34c7479
[swiftcurrent-ir-generator] - Lower deployment target for the pipelin…
Tyler-Keith-Thompson Mar 24, 2022
758043a
Merge branch 'data-driven' into swiftcurrent-ir-generator
Tyler-Keith-Thompson Mar 24, 2022
06e1f84
[swiftcurrent-ir-generator] - Tried adding match to help out, there's…
Tyler-Keith-Thompson Mar 24, 2022
c4f5c4b
[swiftcurrent-ir-generator] - Moved and updated matchfile - TT
Tyler-Keith-Thompson Mar 24, 2022
2d31664
Merge branch 'swiftcurrent-ir-generator' of github.com:wwt/SwiftCurre…
Tyler-Keith-Thompson Mar 24, 2022
81ac9f5
[swiftcurrent-ir-generator] - Add git url to match in fastlane - TT
Tyler-Keith-Thompson Mar 24, 2022
617418e
[swiftcurrent-ir-generator] - Weirdly need http and PAT for this - TT
Tyler-Keith-Thompson Mar 24, 2022
7555ff6
[swiftcurrent-ir-generator] - Think secrets are not environment vars …
Tyler-Keith-Thompson Mar 24, 2022
e4ab5dd
[swiftcurrent-ir-generator] - Following recommendation from somebody …
Tyler-Keith-Thompson Mar 25, 2022
e779650
[swiftcurrent-ir-generator] - More attempts to get match working - TT
Tyler-Keith-Thompson Mar 25, 2022
52b7bc7
[swiftcurrent-ir-generator] - Whoops, had an issue with my workflow f…
Tyler-Keith-Thompson Mar 25, 2022
43e6f77
[swiftcurrent-ir-generator] - Remove superfluous name - TT
Tyler-Keith-Thompson Mar 25, 2022
d5f6823
[swiftcurrent-ir-generator] - Had some cruft from a template - TT
Tyler-Keith-Thompson Mar 25, 2022
e70ad98
[swiftcurrent-ir-generator] - Perhaps setup_ci is not needed? - TT
Tyler-Keith-Thompson Mar 25, 2022
c31ab3b
[swiftcurrent-ir-generator] - Switch to ssh - TT
Tyler-Keith-Thompson Mar 25, 2022
6c31292
[swiftcurrent-ir-generator] - setup_ci does some nice keychain things…
Tyler-Keith-Thompson Mar 25, 2022
30eed3a
[swiftcurrent-ir-generator] - Needed to trigger CI again - TT
Tyler-Keith-Thompson Mar 25, 2022
04a3866
[swiftcurrent-ir-generator] - Sadly, lower ArgumentParser version for…
Tyler-Keith-Thompson Mar 25, 2022
ef4d36c
[swiftcurrent-ir-generator] - Silent failures are bad, therefore let'…
Tyler-Keith-Thompson Mar 25, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/Matchfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
git_url("git@github.com:wwt/swiftcurrent-ios-certs-and-profiles.git")

storage_mode("git")

type("development") # The default type, can be: appstore, adhoc, enterprise or development

app_identifier(["WWT.SwiftCurrent-IRGeneratorTests"])

# The docs are available on https://docs.fastlane.tools/actions/match
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
//
// SwiftCurrent_IRGeneratorTests.swift
// SwiftCurrent
//
// Created by Tyler Thompson on 3/3/22.
// Copyright © 2022 WWT and Tyler Thompson. All rights reserved.
//

import Foundation
import ShellOut
import XCTest

class SwiftCurrent_IRGeneratorTests: XCTestCase {
static var packageSwiftDirectory: URL = {
// ../../../ brings you to SwiftCurrent directory
URL(fileURLWithPath: #file).deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
}()

lazy var generatorCommand: String = {
"\(Self.packageSwiftDirectory.path)/.build/*/debug/SwiftCurrent_IRGenerator"
}()

override class func setUp() {
XCTAssertNoThrow(try shellOut(to: "rm -rf \(Self.packageSwiftDirectory.path)/.build/*/debug"))
XCTAssert(try shellOut(to: "cd \(Self.packageSwiftDirectory.path) && swift build --product=SwiftCurrent_IRGenerator").contains("Build complete!"))
}

func testSingleDecodableStruct() throws {
let source = """
struct Foo: WorkflowDecodable { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo")
}

func testSingleDecodableClass() throws {
let source = """
class Foo: WorkflowDecodable { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo")
}

func testMultipleMixedStructsAndClasses() throws {
let source = """
class Foo: WorkflowDecodable { }
struct Bar: WorkflowDecodable { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))
.sorted { $0.name < $1.name }

XCTAssertEqual(IR.count, 2)
XCTAssertEqual(IR.first?.name, "Bar")
XCTAssertEqual(IR.last?.name, "Foo")
}

func testOnlyDetectWorkflowDecodableTypes() throws {
let source = """
struct Foo: WorkflowDecodable { }
struct Bar { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo")
}

func testSingleLayerOfIndirection() throws {
let source = """
protocol Foo: WorkflowDecodable { }
struct Bar: Foo { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Bar")
}

func testMultipleLayersOfIndirection() throws {
let source = """
protocol Foo: WorkflowDecodable { }
protocol Bar: Foo { }
struct Baz: Bar { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Baz")
}

func testTonsOfLayersOfIndirection() throws {
let source = """
protocol Foo: WorkflowDecodable { }
protocol Bar: Foo { }
protocol Bat: Bar { }
struct Baz: Bat { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Baz")
}

func testSingleLayerOfNesting() throws {
let source = """
enum Foo {
struct Bar: WorkflowDecodable { }
}
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo.Bar")
}

func testMultipleLayersOfNesting() throws {
let source = """
enum Foo {
struct Bar {
class Baz: WorkflowDecodable { }
}
}
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo.Bar.Baz")
}

func testTonsOfLayersOfNesting() throws {
let source = """
enum Foo {
struct Bar {
class Baz {
struct Bat: WorkflowDecodable { }
}
}
}
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo.Bar.Baz.Bat")
}

func testConformanceViaExtension() throws {
let source = """
struct Foo { }

extension Foo: WorkflowDecodable { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo")
}

func testConformanceViaExtension_WithNesting() throws {
let source = """
enum Foo {
struct Bar { }
}

extension Foo.Bar: WorkflowDecodable { }
"""

let output = try shellOut(to: "\(generatorCommand) \"\(source)\"")
let IR = try JSONDecoder().decode([IRType].self, from: XCTUnwrap(output.data(using: .utf8)))

XCTAssertEqual(IR.count, 1)
XCTAssertEqual(IR.first?.name, "Foo.Bar")
}

func testPerformance_WithASingleType() throws {
let source = """
struct Foo: WorkflowDecodable { }
"""
measure {
_ = try? shellOut(to: "\(generatorCommand) \"\(source)\"")
}
}

func testPerformance_WithManyTypes() throws {
struct Structure {
let name: String
let type: String
}
func generateType() -> Structure {
let nominalType = ["struct", "enum", "class"].randomElement()!
let name: String = (Unicode.Scalar("A").value...Unicode.Scalar("Z").value)
.map(String.init(describing:))
.filter { _ in Bool.random() }
.joined()
return Structure(name: name, type: nominalType)
}
let typeDefs = (1...1000).map { _ -> String in
let type = generateType()
return "\(type.type) \(type.name): WorkflowDecodable { }"
}
let source = typeDefs.joined()
measure {
_ = try? shellOut(to: "\(generatorCommand) \"\(source)\"")
}
}
}

struct IRType: Decodable {
let name: String
}
Loading