/*
 * Copyright (c) 2009-2012, 2015 Eike Stepper (Berlin, Germany) and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Martin Taal - initial API and implementation
 */
package org.eclipse.emf.cdo.tests.hibernate;

import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_258933_Test;

/**
 * CDORevisionImpl.eIsSet() works incorrectly
 * <p>
 * See bug 258933
 *
 * @author Martin Taal
 */
public class HibernateBugzilla_258933_Test extends Bugzilla_258933_Test
{
  @Override
  public void testBugzilla_258933_String_SetToDefaultValue_unsettable() throws Exception
  {
  }

  @Override
  public void testBugzilla_258933_String() throws Exception
  {
  }

  @Override
  public void testBugzilla_258933_String_SetToNull() throws Exception
  {
  }

  @Override
  public void testBugzilla_258933_String_SetToNull_unsettable() throws Exception
  {
  }
}
