1+ // AssemblyTests.swift
2+ // CoreTests
13//
2- // AssemblyTests.swift
3- // CoreTests
4- //
5- // Created by Porter McGary on 3/4/25.
4+ // Created by Porter McGary on 3/4/25.
65//
76
87import Testing
@@ -18,29 +17,118 @@ struct AssemblyTests {
1817 }
1918
2019 @Test ( " Apply One Assembly " )
21- func applySingleAssembly( ) {
20+ func applySingleAssembly( ) throws {
2221 let container = Container ( )
2322 let assembler = Assembler ( container: container)
2423 let assembly = MockAssembly ( )
2524
26- assembler. apply ( assembly: assembly)
27-
25+ try assembler. apply ( assembly: assembly)
2826 #expect( assembly. assembleCalled)
2927 #expect( assembly. loadedCalled)
3028 }
3129
3230 @Test ( " Apply Multiple Assemblies " )
33- func applyMultipleAssemblies( ) {
31+ func applyMultipleAssemblies( ) throws {
3432 let container = Container ( )
3533 let assembler = Assembler ( container: container)
3634 let assembly1 = MockAssembly ( )
3735 let assembly2 = MockAssembly ( )
3836
39- assembler. apply ( assemblies: [ assembly1, assembly2] )
37+ try assembler. apply ( assemblies: [ assembly1, assembly2] )
4038
4139 #expect( assembly1. assembleCalled)
4240 #expect( assembly1. loadedCalled)
4341 #expect( assembly2. assembleCalled)
4442 #expect( assembly2. loadedCalled)
4543 }
44+
45+ @Test ( " Assembly Initializers " )
46+ func assemblyInitializers( ) throws {
47+ let container1 = Container ( )
48+ let assembly1 = MockAssembly ( )
49+ let assembler1 = try Assembler ( assembly1, container: container1)
50+ #expect( assembler1. container === container1)
51+ #expect( assembly1. assembleCalled)
52+ #expect( assembly1. loadedCalled)
53+
54+ let container2 = Container ( )
55+ let assembly2 = MockAssembly ( )
56+ let assembly3 = MockAssembly ( )
57+ let assemblies = [ assembly2, assembly3]
58+ let assembler2 = try Assembler ( assemblies, container: container2)
59+ #expect( assembler2. container === container2)
60+ #expect( assembly2. assembleCalled)
61+ #expect( assembly2. loadedCalled)
62+ #expect( assembly3. assembleCalled)
63+ #expect( assembly3. loadedCalled)
64+ }
65+
66+ @Test ( " Assemblies are applied in order " )
67+ func assembliesAppliedInOrder( ) throws {
68+ let container = Container ( )
69+ let assembler = Assembler ( container: container)
70+ var order = 0
71+ var order1 = 0
72+ var order2 = 0
73+ var order3 = 0
74+ var order4 = 0
75+ let assembly1 = MockAssembly ( )
76+ let assembly2 = MockAssembly ( )
77+ assembly1. whenAssemble = {
78+ order += 1
79+ order1 = order
80+ }
81+ assembly2. whenAssemble = {
82+ order += 1
83+ order2 = order
84+ }
85+ assembly1. whenLoaded = {
86+ order += 1
87+ order3 = order
88+ }
89+ assembly2. whenLoaded = {
90+ order += 1
91+ order4 = order
92+ }
93+
94+ try assembler. apply ( assemblies: [ assembly1, assembly2] )
95+
96+ #expect( order1 < order2)
97+ #expect( order3 < order4)
98+ }
99+
100+ @Test ( " Empty Assemblies Array " )
101+ func emptyAssembliesArray( ) throws {
102+ let container = Container ( )
103+ let assembler = Assembler ( container: container)
104+ try assembler. apply ( assemblies: [ ] ) // Should not throw
105+ }
106+
107+ @Test ( " Assembly Throwing Errors " )
108+ func assemblyThrowingErrors( ) throws {
109+ let container = Container ( )
110+ let assembler = Assembler ( container: container)
111+ let assembly = MockAssembly ( )
112+ assembly. whenAssemble = {
113+ throw MockError ( )
114+ }
115+
116+ #expect( throws: MockError . self) {
117+ try assembler. apply ( assembly: assembly)
118+ }
119+ }
120+
121+ @Test ( " Assembly Throwing Errors After Assembled " )
122+ func assemblyThrowingErrorsAfter( ) throws {
123+ let container = Container ( )
124+ let assembler = Assembler ( container: container)
125+ let assembly = MockAssembly ( )
126+ assembly. whenLoaded = {
127+ throw MockError ( )
128+ }
129+
130+ #expect( throws: MockError . self) {
131+ try assembler. apply ( assembly: assembly)
132+ }
133+ }
46134}
0 commit comments