Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Empty component hierarchy sometimes

Abierto
#157 4 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
java

Línea de trabajo

Empieza con AdhocTradeEntryDlgTest.testAmendETFuture y su método auxiliar setupDialog(), y ejecútalo después bajo CacioTestRunner en Linux para reproducir la jerarquía vacía intermitente. Sigue el fallo a través de DialogFixture y BasicComponentFinder, y compara las ejecuciones con y sin pack(). Se considera terminado cuando se haya identificado la causa y el test ya no falle intermitentemente al encontrar amendmentReasonLabel.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

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

Lenguaje dominante
Java
Estrellas
121
Forks
52
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de assertj/assertj-swing

Todos los issues de assertj/assertj-swing

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.