homebeaver / SwingSet

try to complete SwingSet3 org.swinglabs.swingx jars 1.6.6 for java 8 and openjdk 17 (Temurin)
GNU Lesser General Public License v2.1
0 stars 0 forks source link

Test faild : ComponentAdapterClientTest.testTreeTableGetStringUsedInSearch() #53

Closed homebeaver closed 1 year ago

homebeaver commented 1 year ago
    @Test
    public void testTreeTableGetStringUsedInSearch() {
        JXTreeTableT table = new JXTreeTableT(AncientSwingTeam.createNamedColorTreeTableModel());
        table.setTreeCellRenderer(new DefaultTreeRenderer(sv));
        String text = sv.getString(table.getValueAt(2, 0));
        int matchRow = table.getSearchable().search(text);
        assertEquals(2, matchRow);
    }
...
    /**
     * A custom StringValue for Color. 
     * Maps to a string composed of the prefix "R/G/B: " and the Color's rgb value.
     */
    private StringValue sv;

    @Override
    protected void setUp() throws Exception {
        sv = createColorStringValue();
    }

    /**
     * Creates and returns a StringValue which maps a Color to it's R/G/B rep, 
     * prepending "R/G/B: "
     * 
     * @return the StringValue for color.
     */
    private StringValue createColorStringValue() {
        StringValue sv = (Object value) -> {
            if (value instanceof Color) {
                Color color = (Color) value;
                return "R/G/B: " + color.getRGB();
            }
            return StringValues.TO_STRING.getString(value);
        };
        return sv;
    }
homebeaver commented 1 year ago

Die Annahme, dass TreeTable table korrekt definiert wurde, ist falsch!! In der hierarchical-column wird nicht StringValue als "R/G/B: " + color.getRGB() geliefert, sondern das Ergenis der java.lang.Object.toString() - Methode, In Class org.jdesktop.test.AncientSwingTeam.NamedColor wir sie überschrieben:

    public static class NamedColor extends Color {
        String name;
        public NamedColor(Color color, String name) {
            super(color.getRGB());
            this.name = name;
        }
...
        @Override
        public String toString() {
            return name;
        }
    }    

Und die liefert damit einen Farbnamen, also "Green", usw.

Der BUG ist in der Definition des renderers. Die Methode ist nicht korrekt dokumentiert - sie funktioniert nicht korrekt für hierarchical Column, da sie den renderer für table und nicht für tree setzt. Das kann man zeigen, indem man den Test interactive macht:

    public void interactiveTreeTableGetStringUsedInSearch() {
        JXTreeTableT table = new JXTreeTableT(AncientSwingTeam.createNamedColorTreeTableModel());
        table.setTreeCellRenderer(new DefaultTreeRenderer(sv)); // <== renderer für table , BUG!!!
        JXFrame frame = wrapWithScrollingInFrame(table, "** interactiveTreeTableGetStringUsedInSearch");
        addSearchModeToggle(frame);
        addMessage(frame, "Press ctrl-F to open search widget");
        show(frame);
    }

Kein Wunder, dass "R/G/B: -16711936" nicht gefunden wird. Mit "Green" geht es

grafik