Comments (4)
Just found out that the minimal example doesn't even involve generics. The following example also produces a duplicate method in the generated code:
class Base {
func method(withArg: UInt) {
}
}
class Derived: Base {
override func method(withArg: UInt) {
}
}
from mockingbird.
Thanks for reporting, Paul! This regression in 0.12 should be fixed by #119. The original plan in the #118 issue was to wait until the upcoming release, but since this extends to declarations in class mocks we’ll push out a patch on Monday.
from mockingbird.
Thanks for the quick fix. I can confirm that the duplicate override method has been fixed when using the latest code in master.
However another issue has still remained with regards to overriding methods with generics.
Take for example this example code:
class Concrete {
}
class Base<T> {
func method(vertices: [T]) {
}
}
class Derived: Base<Concrete> {
}
It results in the following generated code:
public final class DerivedMock: Mocky.Derived, Mockingbird.Mock {
...
// MARK: Mocked `method`(`vertices`: [T])
public override func `method`(`vertices`: [T]) -> Void {
let invocation: Mockingbird.Invocation = Mockingbird.Invocation(selectorName: "`method`(`vertices`: [T]) -> Void", arguments: [Mockingbird.ArgumentMatcher(`vertices`)], returnType: Swift.ObjectIdentifier((Void).self))
mockingContext.didInvoke(invocation) { () -> Void in
let implementation = stubbingContext.implementation(for: invocation)
if let concreteImplementation = implementation as? ([T]) -> Void {
concreteImplementation(`vertices`)
} else if let concreteImplementation = implementation as? () -> Void {
concreteImplementation()
}
}
}
...
}
This results in the error Use of undeclared type 'T'
. The expected generated code would use the Concrete
type here.
Interestingly it does generate the correct code when the type parameter isn't an array
I've tested this on a246a83 (master)
from mockingbird.
Thanks for the update!
The latest issue is caused by the type specializer not working recursively on type declarations. There isn’t a great workaround for this right now, but I’ll look into it for 0.13.
from mockingbird.
Related Issues (20)
- Infinite loop is occurring in MockingBird shell script during unit test build phases HOT 7
- Generator don't generate mocks for Moya.PluginType protocol HOT 2
- Stubbing a throwing async function shows compile error HOT 2
- Errors when using on mockingbird with Test Plans?
- How to use mockingbird in the custom pod. HOT 2
- Compiling TestTarget with mockingbird on Linux
- Infinite loop when a function parameter has an unknown attribute HOT 2
- any keyword seems not supported
- How to run tests without host app? HOT 1
- warning: no calls to throwing functions occur within 'try'
- forwardCallsToSuper on class method
- Generator fails to create mock for the simplest PAT
- Missing or confusing documentation HOT 1
- Unable to stub closure in static function HOT 1
- Mocking URLSession with different URL parameters and responses
- Mock generator ignores class-only protocols HOT 3
- Exception on line with given on MacOS 13.2 and XCode 14.2 HOT 3
- Is mockingbird still being maintained?? HOT 2
- Unable to resolve inherited type 'AnyObject' HOT 3
- Mock doesn't work when created in setup method HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mockingbird.