Empty component hierarchy sometimes
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 25/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Stale
- Tech stack
- java
- Domain
- desktop, testing-qa
Research direction
Start with AdhocTradeEntryDlgTest.testAmendETFuture and its setupDialog() helper, then run it under CacioTestRunner on Linux to reproduce the intermittent empty hierarchy. Trace the failure through DialogFixture and BasicComponentFinder, and compare runs with and without pack(). Done means the cause is identified and the test no longer intermittently fails to find amendmentReasonLabel.
Written by the indexing model from the issue text.
Description
This is probably more suited to a mailing list / forum, but the mail list comment appeared to point me here.
I have a unit test which tests a dialog. I am using cacio-tta to enable it to run headless. This seems to run reliably in Windows and much of the time in Linux ... but maybe half of the time in linux the component lookup fails. When it fails, the component hierarchy is empty.
The failure looks as follows (I am running under junit4 with the CacioTestRunner)
org.assertj.swing.exception.ComponentLookupException: Unable to find component using matcher org.assertj.swing.core.NameMatcher[name='amendmentReasonLabel', type=javax.swing.JLabel, requireShowing=true].
Component hierarchy:
com.ccm.backtest.fund.AdhocTradeEntryDlg[name='dialog1', title='Amend Trade', enabled=true, modal=true, visible=true, showing=true]
at org.assertj.swing.core.BasicComponentFinder.componentNotFound(BasicComponentFinder.java:290)
at org.assertj.swing.core.BasicComponentFinder.find(BasicComponentFinder.java:275)
at org.assertj.swing.core.BasicComponentFinder.find(BasicComponentFinder.java:268)
at org.assertj.swing.core.BasicComponentFinder.findByName(BasicComponentFinder.java:203)
at org.assertj.swing.fixture.AbstractContainerFixture.findByName(AbstractContainerFixture.java:622)
at org.assertj.swing.fixture.AbstractContainerFixture.label(AbstractContainerFixture.java:291)
at com.ccm.backtest.fund.AdhocTradeEntryDlgTest.testAmendETFuture(AdhocTradeEntryDlgTest.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
The relevant test code that is failing is...
@Test
public void testAmendETFuture()
{
MockAssetFactory assetFactory = new MockAssetFactory();
Date today = java.sql.Date.valueOf("2015-01-02");
ETFuture future = new ETFuture(today, assetFactory.get("FTH16"), 2, Side.SELL, 1.234, today);
future.setBrokerageFee(2.34, assetFactory.get("CAD"));
future.setClearingFee(5.67, assetFactory.get("EUR"));
setupDialog("book", future, assetFactory, AdhocTradeEntryDlg.Operation.AMEND);
dialogFixture.label("amendmentReasonLabel").requireVisible();
where the setupDialog() code looks like:
private void setupDialog(String book, Transaction trade, IAssetFactory assetFactory, AdhocTradeEntryDlg.Operation operation)
{
dialog = GuiActionRunner.execute(new GuiQuery<AdhocTradeEntryDlg>()
{
protected AdhocTradeEntryDlg executeInEDT()
{
AdhocTradeEntryDlg dlg = new AdhocTradeEntryDlg(book, trade, assetFactory, operation);
dlg.pack();
return dlg;
}
});
// IMPORTANT: note the call to 'robot()'
// we must use the Robot from AssertJSwingJUnitTestCase
dialogFixture = new DialogFixture(robot(), dialog);
dialogFixture.show(new Dimension(800, 800));
}
I added the pack() call which makes the issue appear less often ... and so I am guessing there is a synchronisation issue at play here. The other interesting thing is that there are 4 almost identical tests in this test case - they all call setupDialog (it's not in onSetUp because there is more than one flavor as I require different tests to call different constructors for the object).
What would be a good way to debug this?
Ian
- Dominant language
- Java
- Stars
- 121
- Forks
- 52
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from assertj/assertj-swing
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
assertj/assertj-swing#279 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 48/100
assertj/assertj-swing#278 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 30/100
assertj/assertj-swing#276 · 1 comment ·
-
Update unit test to avoid deprecated `ExpectedException.none()` by using `Assert.assertThrows()` Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
assertj/assertj-swing#275 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
assertj/assertj-swing#277 · 1 comment ·
All issues in assertj/assertj-swing
Similar issues
-
area/plugin
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
kestra-io/plugin-kestra#190 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
integra-team-red/meet-map#249 ·
-
[Studio][Bug] Cancelled create-user dialog keeps the password and admin switch for the next attempt Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
apache/rocketmq-dashboard#5064 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
wso2/dpdp-accelerator#287 ·