@Override
  protected void setUp() throws Exception {
    super.setUp();
    doc =
        new DefaultStyledDocument(
            new StyleContext() {
              private static final long serialVersionUID = 1L;

              @Override
              public Color getBackground(AttributeSet as) {
                getBackground = true;
                return super.getBackground(as);
              }

              @Override
              public Font getFont(AttributeSet as) {
                getFont = true;
                return super.getFont(as);
              }

              @Override
              public Color getForeground(AttributeSet as) {
                getForeground = true;
                return super.getForeground(as);
              }
            });
    styles = (StyleContext) doc.getAttributeContext();
    attrSet = styles.getEmptySet();
  }
  public void testStyleChanged() {
    final Style[] changed = new Style[1];
    doc =
        new DefaultStyledDocument() {
          private static final long serialVersionUID = 1L;

          @Override
          protected void styleChanged(final Style style) {
            changed[0] = style;
            super.styleChanged(style);
          }
        };
    styles = (StyleContext) doc.getAttributeContext();
    final NamedStyle aStyle = (NamedStyle) doc.addStyle(STYLE_NAME, null);
    assertEquals(0, styles.getChangeListeners().length);
    assertEquals(0, aStyle.listenerList.getListenerCount());
    final DocumentListener listener =
        new DocumentListener() {
          public void insertUpdate(DocumentEvent e) {}

          public void removeUpdate(DocumentEvent e) {}

          public void changedUpdate(DocumentEvent e) {}
        };
    doc.addDocumentListener(listener);
    assertEquals(1, styles.getChangeListeners().length);
    assertEquals(1, aStyle.listenerList.getListenerCount());
    final NamedStyle anotherStyle = (NamedStyle) styles.addStyle("otherStyle", aStyle);
    assertEquals(1, anotherStyle.listenerList.getListenerCount());
    final NamedStyle nullStyle = (NamedStyle) styles.addStyle(null, null);
    assertEquals(0, nullStyle.listenerList.getListenerCount());
    assertNull(changed[0]);
    aStyle.addAttribute("key", "value");
    assertSame(aStyle, changed[0]);
    doc.removeDocumentListener(listener);
    assertEquals(0, styles.getChangeListeners().length);
    assertEquals(0, aStyle.listenerList.getListenerCount());
    assertEquals(0, anotherStyle.listenerList.getListenerCount());
  }