Index: modules/swing/src/test/api/java/common/javax/swing/text/GlyphViewTest.java =================================================================== --- modules/swing/src/test/api/java/common/javax/swing/text/GlyphViewTest.java (revision 477100) +++ modules/swing/src/test/api/java/common/javax/swing/text/GlyphViewTest.java (working copy) @@ -128,6 +128,64 @@ assertEquals(0.524f, view.getPreferredSpan(View.Y_AXIS), ACCURACY); } + public void testGetPreferredSpanTabsX() throws Exception { + doc = new DefaultStyledDocument(); + doc.insertString(0, "\t1st\t2nd", null); + doc.setCharacterAttributes(4, 4, SimpleAttributeSet.EMPTY, false); + + final ViewFactory vf = new ViewFactory() { + public View create(Element element) { + return new GlyphView(element); + } + }; + + ParagraphView pv = new ParagraphView(doc.getDefaultRootElement() + .getElement(0)) { + @Override + public ViewFactory getViewFactory() { + return vf; + } + }; + pv.loadChildren(vf); + assertEquals(3, pv.layoutPool.getViewCount()); + + final float getSpanX[] = new float[1]; + final GlyphPainter gp = new EmptyPainter() { + @Override + public int getBoundedPosition(GlyphView v, int startOffset, + float x, float len) { + return v.getEndOffset(); + } + + @Override + public float getSpan(GlyphView v, + int startOffset, int endOffset, + TabExpander tabExpander, float x) { + getSpanX[0] = x; + return 4; + } + }; + + for (int i = 0; i < pv.getLayoutViewCount(); i++) { + ((GlyphView)pv.getLayoutView(i)).setGlyphPainter(gp); + } + + + for (int i = 0; i < pv.getLayoutViewCount(); i++) { + assertEquals("@" + i, + 4f, pv.getLayoutView(i).getPreferredSpan(View.X_AXIS)); + assertEquals("@" + i, 0f, getSpanX[0]); + } + + pv.setSize(300, 100); // Performs layout of the view + + for (int i = 0; i < pv.getLayoutViewCount(); i++) { + assertEquals("@" + i, + 4f, pv.getLayoutView(i).getPreferredSpan(View.X_AXIS)); + assertEquals("@" + i, 4f * i, getSpanX[0]); + } + } + public void testGetStartOffset() { assertEquals(leaf.getStartOffset(), view.getStartOffset()); }