mirror of https://github.com/icsharpcode/ILSpy.git
Branch:
fix/lambda-parameter-syntax
christophwille/closedhierarchies
christophwille/membench
compound-assignment-operators
fix/1982-params-attribute-args
fix/2040-invalid-xml-characters
fix/2093-navigateto-reference-assembly
fix/2362-xalz-references
fix/2372-address-taken-by
fix/3282-indexer-optional-arguments
fix/3568-record-member-order
fix/4059-deconstruct-out-slots
fix/lambda-parameter-syntax
fix/scroll-children-on-expand
gh-pages
ldmembertoken
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
substring-optimizations
tests/829-async-method-builder-override
tests/829-collection-expressions
tests/829-compound-assignment-operators
tests/829-coverage-audit
tests/829-expression-tree-named-optional-args
tests/829-expression-variables-in-initializers
tests/829-extended-property-patterns
tests/829-extension-members
tests/829-extension-operators
tests/829-file-local-types
tests/829-improved-definite-assignment
tests/829-improved-overload-candidates
tests/829-inline-arrays
tests/829-interpolated-string-improvements
tests/829-lambda-param-modifiers
tests/829-list-patterns
tests/829-lock-object
tests/829-mixed-deconstruction
tests/829-null-coalescing-assignment
tests/829-null-conditional-assignment
tests/829-object-initializer-indexer
tests/829-overload-resolution-priority
tests/829-params-collections
tests/829-pattern-matching-improvements
tests/829-primary-constructors
tests/829-ref-unsafe-in-iterators-async
tests/829-sealed-record-tostring
tests/829-target-typed-conditional
tests/829-tuple-comparison
win-a11y-textsize
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v10.1.1
v11.0
v11.0-preview1
v11.0-rc
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ item.name }
${ noResults }
8 Commits (fix/lambda-parameter-syntax)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
1b78c76215 |
Synchronize headless UI tests on idle and hit-tested clicks
The headless UI tests synchronized with the application by pumping a fixed number of frames (39 loops of RunJobs/Delay across 19 files) and by pressing at a point computed once from a control's bounds. Both encode how fast the machine that wrote the test was: on the loaded Windows Debug CI agent the frame count comes up short and the point goes stale, which is the recurring timeout in the tree context-menu tests and the reason each such failure was repaired one test at a time. Waiters.WaitForIdleAsync replaces the frame loops. It observes the actual precondition - no dispatcher job queued at Background priority or above, no assembly still loading in the background sweep, a frame rendered - and requires it on two consecutive polls so a thread-pool continuation about to post back is caught as well. Window.ClickAsync replaces element-targeted MouseDown/MouseUp pairs. It re-resolves the target on every poll and presses only once the window's hit test at the click point answers with that target, reporting the point and what was hit instead on timeout. That diagnostic exposed one vacuous test: User_Click_On_Visible_Row_Does_Not_Recentre_Viewport clicked the centre of a row wider than the tree viewport, which lies under the decompiler text view, so its assertion held without the row ever being clicked. It now clamps the point to the viewport like the other tree-row clicks. Clicks at text positions and press-only gutter clicks stay raw; they do not target an element. Assisted-by: Claude:claude-fable-5:Claude Code |
2 weeks ago |
|
|
dc5b70f4e4 |
Collapse UI tests that repeat setup already paid for
Five fixtures covered the "Use nested namespace structure" setting, four of them running the same toggle at a different layer: the model shape, the same toggle awaited live, and the same toggle again asserting it reached the SharpTreeView's rows. Each paid its own boot for a scenario that is one story end to end, and together they were the second-largest block of time in the suite after the process-list scroll loops. One test now walks the whole path once, carrying every assertion the four had, including the nesting depth only the first checked. The comparison view's model-is-bound test is dropped: the test after it renders rows out of that model, which cannot happen unless it is bound, and it opened two fixture assemblies to prove it. The expander hitbox test asserted the toggle measures 13x16 and its glyph 9x9, then clicked 14px down to prove the area below the glyph is live. The click proves the geometry; the measurements only restate it, and would fail on a font-metric change that broke nothing. Its layout-settling loop slept 200ms unconditionally, which is a race that usually wins - it now waits for the condition it needs. Assisted-by: Claude:claude-opus-5:Claude Code |
1 month ago |
|
|
f53ca6d080 |
Drop redundant global:: qualifiers on ICSharpCode references
The global:: prefixes existed because the test project's namespace ICSharpCode.ILSpy.Tests used to shadow the app's old top-level ILSpy namespace. With the UI code back under ICSharpCode.ILSpy there is nothing left to shadow, so plain fully qualified names resolve fine. Assisted-by: Claude:claude-fable-5:Claude Code |
3 months ago |
|
|
51aafa0fd9 |
Move ILSpy UI code back to the ICSharpCode.ILSpy root namespace
The Avalonia port had placed the UI app in an ILSpy.* namespace tree, while the csproj RootNamespace and every prior release (through 10.1) use ICSharpCode.ILSpy.*. Restoring the historical namespace reduces the public API diff against release/10.1 for plugin authors and removes the shadowing that forced global:: qualifiers in the test project. The Images class and AccessOverlayIcon enum move back into the root namespace (as in 10.1), since an ICSharpCode.ILSpy.Images namespace would shadow the Images class for all code inside ICSharpCode.ILSpy. Assisted-by: Claude:claude-fable-5:Claude Code |
3 months ago |
|
|
ab5fa461af |
Retarget assembly tree tests to SharpTreeView; close interaction gaps
The assembly/analyzer panes now host SharpTreeView, but ~20 headless tests still queried the old ProDataGrid surface (DataGrid/DataGridRow/Hierarchical Model/HierarchicalNode), so they could not exercise the live tree. Retarget them to SharpTreeView/SharpTreeViewItem and the flattener (ItemsSource) the control actually exposes, and centralise the row/selection lookups in TreeNodeAssertions so the scroll assertions ride the new container type. Driving the retargeted tests against the real control surfaced four genuine gaps, fixed here in SharpTreeView: - Ctrl+A selected nothing on the first press because the base ListBox only selects all once an item inside it is focused; handle it explicitly and make the control itself focusable so the gesture works the moment the pane gains focus. - Left/Right navigation focused the parent/first-child container but never moved the selection (selection must follow the caret); add SelectAndFocus. - The expander toggle had no stable name; name it PART_Expander so hit-target assertions can find it, and align the test to the shipped 13px column (kept at 13 so the +/- box centres on the connector lines). - Tree rows stretch to content width with horizontal scroll, so a row centre can sit past the viewport's right edge; the pointer tests now click within the visible grid width instead of the off-screen row centre. The UseNestedNamespaceNodes re-bind test asserted a ProDataGrid Hierarchical Model swap that no longer exists; rewrite it to assert the live flattener reshapes the visible rows in place when the setting toggles. |
3 months ago |
|
|
f466b2399b |
Add per-step visual breakpoints to the headless UI tests
To audit what each UI test actually exercises, every step now snapshots the live window to <TestFixtureName>/<TestName>_<NN>_<ShortDescription>.png: a booted frame (emitted automatically by TestHarness.BootAsync), one after each state-changing action, and one before each assertion. Flip ILSPY_TESTS_VISIBLE=1 to render the filmstrip; it lands under %TEMP%/ilspy-test-captures (overridable via ILSPY_TEST_CAPTURES). The step number and fixture/test name are derived automatically so inserting a breakpoint never renumbers the rest. The identity is recorded up front from the real ITest in an ITestAction hook rather than read live: NUnit's TestContext.CurrentContext does not flow onto async continuations, so a capture after an await would otherwise collide under the ad-hoc context. And when rendering is off the whole call is a true no-op -- not even a dispatcher pump -- so instrumenting a test can never perturb the navigation/tab timing it asserts on. Full headless suite stays green. |
3 months ago |
|
|
56afcf8abd |
Factor repeated headless-test setup into shared helpers
Nearly every headless UI test opened with the same four-line prologue (resolve the shared MainWindow, show it, cast its DataContext, wait for the assembly list), then repeated the corelib lookup, the EnsureLazyChildren + Children.OfType<T>().Single() drill, the registry single-by-header lookups, and the open-an-assembly-and-wait dance. The duplication made the intent of each test hard to see and every signature tweak a suite-wide edit. Collapse those into TestHarness (BootAsync, OpenAssemblyAsync, GetCommand, GetEntry) and TreeNavigation extensions (FindCoreLib, GetChild<T>, Expand<T>), then apply them across the suite. Net ~865 lines of boilerplate removed with no change in behaviour; the full headless suite stays green. |
3 months ago |
|
|
905f6fb1c7 |
Enlarge assembly-tree expander click target to 16x16
The +/- expander was a 13x13 toggle whose visible glyph (a 9x9 box) was also the only hit-testable surface, so the real tap target was barely 9px. Grow the toggle to 16x16 but keep its laid-out width at 13 via a negative right margin, because TreeLines hardcodes a 13px expander column with the glyph centred at +8.5 and would otherwise misalign. A transparent wrapper fills the 16x16 so the whole area receives input; the visible glyph is unchanged. Assisted-by: Claude:claude-opus-4-8:Claude Code |
3 months ago |