package ch.vorburger.databinding.tests;
import static org.junit.Assert.assertEquals;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.internal.databinding.property.value.SimplePropertyObservableValue;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.junit.Test;
import ch.vorburger.databinding.tests.utils.DatabindingTestRealm;
import ch.vorburger.xtext.databinding.tests.utils.ECoreHelper;
@SuppressWarnings("restriction")
public class TestValuePropertyTest {
// TODO LOW Look into Core DataBinding sources for stuff like this...
// TODO LOW Actually, make this independent of EMF Data Binding - just test binding two TestValueProperties
@Test
public void test1() {
// Create an ECore model
ECoreHelper helper = new ECoreHelper();
EDataType stringType = EcorePackage.eINSTANCE.getEString();
EPackage pkg = helper.createPackage("tests");
EClass clazz = helper.createClass(pkg, "Test");
EAttribute titleFeature = helper.addAttribute(clazz, stringType, "title");
// Create an EObject
EObject eObject = helper.createInstance(clazz);
eObject.eSet(titleFeature, "This is the Title");
// Create a Property
final TestValueProperty testValueProperty = new TestValueProperty();
String title = "Initial";
Realm realm = new DatabindingTestRealm();
DataBindingContext db = new EMFDataBindingContext(realm);
db.bindValue(
new SimplePropertyObservableValue(realm, title, testValueProperty),
EMFProperties.value(titleFeature).observe(eObject));
assertEquals(eObject.eGet(titleFeature), testValueProperty.getValue(title));
testValueProperty.setValue(title, "reset, reset");
assertEquals("reset, reset", testValueProperty.getValue(title));
assertEquals("reset, reset", eObject.eGet(titleFeature));
db.dispose();
}
}