public void testAddRemoveModelStateListener() throws IOException, CoreException {
    IStructuredModel model = getTestModel();
    try {
      IModelStateListener listener =
          new IModelStateListener() {

            public void modelAboutToBeChanged(IStructuredModel model) {
              //
            }

            public void modelChanged(IStructuredModel model) {
              //
            }

            public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) {
              //
            }

            public void modelResourceDeleted(IStructuredModel model) {
              //
            }

            public void modelResourceMoved(IStructuredModel oldModel, IStructuredModel newModel) {
              //
            }

            public void modelAboutToBeReinitialized(IStructuredModel structuredModel) {
              //
            }

            public void modelReinitialized(IStructuredModel structuredModel) {
              //
            }
          };

      model.aboutToChangeModel();

      model.removeModelStateListener(listener);
    } finally {
      if (model != null) {
        model.releaseFromEdit();
      }
    }
  }