Comments (5)
Hope for more Information about this technique. Maybe a detailed article?
from xgo.
I will add materials on this issue thread to supplement the design document.
from xgo.
A new gained technique: declare init bodies.
Description: the following code always panics no matter you have deleted __xgo_link_generate_init_regs_body 's body or replaced it with completely new contents.
The only difference with other linking names is that it is called from init.
So the best practice is to not include that panic.
However, in user written code there are also cases where a linked method is called from init, but they are all fine with a panic.
Still needs to dig into this.
func init() {
__xgo_link_generate_init_regs_body()
}
func __xgo_link_generate_init_regs_body() {
panic("failed to link __xgo_link_generate_init_regs_body")
}
See d6c2b3d#diff-61c14e77880a87918b0cf686da52025d4e0abdd7b94047196c7baf56eb59ce9fR35
from xgo.
the trap.Inspect(fn)
implements a way to retrieve func info.
It has different internal paths for these function types:
- package level function
- PC lookup
- struct method
-fm
suffix checkstruct.method
proto existence check- dynamic retrieval
- interface method
-fm
suffix check- interface proto existence check
- dynamic retrieval
- closure
- closure is registered using IR
- PC lookup
- generic function
- fullName parsing to de-generic
- generic template existence check
- no dynamic retrieval since no recv, but is legal to do so
- generic struct method
-fm
suffix check- fullName parsing to de-generic
- generic method template existence check
- dynamic retrieval just for receiver
- generic interface method
- to be supported
from xgo.
the
trap.Inspect(fn)
implements a way to retrieve func info.
It has different internal paths for these function types:
As a result, xgo
exposes a single powerful Mock
API to users, because it handle these cases smartly. Hiding most complexity from users. All mock can be done in single unified form:
// package level func
mock.Mock(SomeFunc, interceptor)
// per-instance method
// only the bound instance `v` will be mocked
// `v` can be either a struct or an interface
mock.Mock(v.Method, interceptor)
// per-TParam generic function
// only the specified `int` version will be mocked
mock.Mock(GenericFunc[int], interceptor)
// per TParam and instance generic method
v := GenericStruct[int]
mock.Mock(v.Method, interceptor)
// closure can also be mocked
// less used, but also supported
mock.Mock(closure, interceptor)
However, behind the scene, this topic deserves a good description.
from xgo.
Related Issues (20)
- Proposal: xgo tool test-explorer HOT 5
- rename the standalone tool name to `go-coverage-tool` later. HOT 1
- xgo failed to run tests on Windows HOT 14
- Bug: --strace with vendor mode, dep check always failed
- Allow more stdlib functions to be mocked HOT 4
- Trace: extend default shrink size from 4K(4096) to 16K(16384)
- Coverage: make incremental coverage work on windows
- Feature: extend external dependency auto importing
- Bug: common_string.go:66:6: __xgo_orig__ redeclared in this block
- Coverage: support coverage from URL
- CI: Run tests for kubernetes and pocketbase nightly
- Feature: add Debug button to test explorer HOT 1
- Enhancement: dynamically show subcases running status in test explorer
- Bug: linux: copy_file_range: is a directory HOT 1
- Doc: add individual doc for trace, coverage and test-explorer
- Bug: build pocketbase failed: github.com/pocketbase/pocketbase/models/schema internal compiler error: panic: interface conversion: interface {} is string, not syntax.writeError HOT 3
- Doc: add doc for xgo's github workflow and git hooks
- Mock: make --trap-stdlib the default when running `xgo test`
- Perf: Test-Explorer: Join all test files together to run all in once
- Proposal: use text files to patch runtime and compiler
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 xgo.