package org.dresdenocl.standardlibrary.java.test.tests;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.dresdenocl.essentialocl.EssentialOclPlugin;
import org.dresdenocl.essentialocl.standardlibrary.OclInteger;
import org.dresdenocl.essentialocl.standardlibrary.OclReal;
import org.dresdenocl.essentialocl.standardlibrary.OclSequence;
import org.dresdenocl.essentialocl.standardlibrary.OclString;
import org.dresdenocl.essentialocl.standardlibrary.factory.IStandardLibraryFactory;
/**
* Test for strings in OCL.
*
* @author Michael Thiele
*
*/
public class JavaOclStringTest {
private final IStandardLibraryFactory myStandardLibraryFactory = TestPerformer
.getInstance().getSLFactory();
private final OclString a = myStandardLibraryFactory.createOclString("a");
private final OclString b = myStandardLibraryFactory.createOclString("b");
private final OclString emptyString = myStandardLibraryFactory
.createOclString("");
private final OclString ws = myStandardLibraryFactory.createOclString(" ");
private final OclString OCL_rocks = myStandardLibraryFactory
.createOclString("OCL rocks");
private final OclString OCL = myStandardLibraryFactory
.createOclString("OCL");
private final OclString rocks = myStandardLibraryFactory
.createOclString("rocks");
private final OclString ocl = myStandardLibraryFactory
.createOclString("ocl");
private final OclString O = myStandardLibraryFactory.createOclString("O");
private final OclString o = myStandardLibraryFactory.createOclString("o");
private final OclString undefined = myStandardLibraryFactory
.createOclUndefined(EssentialOclPlugin.getOclLibraryProvider()
.getOclLibrary().getOclString(),
"Undefined for testing purpose.");
private final OclString invalid = myStandardLibraryFactory
.createOclInvalid(EssentialOclPlugin.getOclLibraryProvider()
.getOclLibrary().getOclString(), new RuntimeException(
"Undefined for testing purpose."));
private final OclString fourtyTwo = myStandardLibraryFactory
.createOclString("42");
private final OclString fourtyTwoAndSomething = myStandardLibraryFactory
.createOclString("42.23");
private final OclString _true = myStandardLibraryFactory
.createOclString("true");
private final OclString regexTest = myStandardLibraryFactory.createOclString("[a-zA-Z_ ]*");
private final OclString regexAlpha = myStandardLibraryFactory.createOclString("[:alpha:]+");
private final OclString regexWord = myStandardLibraryFactory.createOclString("\\w+");
private final OclInteger integer0 = myStandardLibraryFactory
.createOclInteger(0L);
private final OclInteger integer1 = myStandardLibraryFactory
.createOclInteger(1L);
private final OclInteger integer2 = myStandardLibraryFactory
.createOclInteger(2L);
private final OclInteger integer3 = myStandardLibraryFactory
.createOclInteger(3L);
private final OclInteger integer5 = myStandardLibraryFactory
.createOclInteger(5L);
private final OclInteger integer6 = myStandardLibraryFactory
.createOclInteger(6L);
private final OclInteger integer9 = myStandardLibraryFactory
.createOclInteger(9L);
private final OclInteger integer42 = myStandardLibraryFactory
.createOclInteger(42L);
private final OclReal real42_23 = myStandardLibraryFactory
.createOclReal(42.23);
@Test
public void testConcat() {
assertTrue(OCL.concat(ws).concat(rocks).isEqualTo(OCL_rocks).isTrue());
// immutable string
assertTrue(OCL.size().isEqualTo(integer3).isTrue());
assertTrue(OCL.concat(emptyString).isEqualTo(OCL).isTrue());
}
@Test
public void testSize() {
assertTrue(emptyString.size().isEqualTo(integer0).isTrue());
assertTrue(OCL.size().isEqualTo(integer3).isTrue());
}
@Test
public void testSubstring() {
assertTrue(emptyString.substring(integer1, integer1).oclIsInvalid()
.isTrue());
assertTrue(OCL.substring(integer1, integer3).isEqualTo(OCL).isTrue());
assertTrue(OCL_rocks.substring(integer1, integer3).isEqualTo(OCL)
.isTrue());
assertTrue(OCL_rocks.size().isEqualTo(integer9).isTrue());
assertTrue(OCL.substring(integer2, integer1).oclIsInvalid().isTrue());
}
@Test
public void testToInteger() {
assertTrue(fourtyTwo.toInteger().isEqualTo(integer42).isTrue());
assertTrue(OCL_rocks.toInteger().oclIsInvalid().isTrue());
assertTrue(fourtyTwoAndSomething.toInteger().oclIsInvalid().isTrue());
}
@Test
public void testToReal() {
assertTrue(fourtyTwo.toReal().isEqualTo(integer42).isTrue());
assertTrue(OCL_rocks.toReal().oclIsInvalid().isTrue());
assertTrue(fourtyTwoAndSomething.toReal().isEqualTo(real42_23).isTrue());
}
@Test
public void testToBoolean() {
assertFalse(emptyString.toBoolean().isTrue());
assertFalse(fourtyTwo.toBoolean().isTrue());
assertTrue(_true.toBoolean().isTrue());
assertFalse(_true.toUpperCase().toBoolean().isTrue());
}
@Test
public void testPlus() {
assertTrue(OCL.plus(ws).plus(rocks).isEqualTo(OCL_rocks).isTrue());
// immutable string
assertTrue(OCL.size().isEqualTo(integer3).isTrue());
assertTrue(OCL.plus(emptyString).isEqualTo(OCL).isTrue());
}
@Test
public void testToLowerCase() {
assertTrue(emptyString.toLowerCase().isEqualTo(emptyString).isTrue());
assertTrue(fourtyTwo.toLowerCase().isEqualTo(fourtyTwo).isTrue());
assertTrue(rocks.toLowerCase().isEqualTo(rocks).isTrue());
assertTrue(OCL.toLowerCase().isEqualTo(ocl).isTrue());
}
@Test
public void testToUpperCase() {
assertTrue(emptyString.toUpperCase().isEqualTo(emptyString).isTrue());
assertTrue(fourtyTwo.toUpperCase().isEqualTo(fourtyTwo).isTrue());
assertTrue(OCL.toUpperCase().isEqualTo(OCL).isTrue());
assertTrue(ocl.toUpperCase().isEqualTo(OCL).isTrue());
}
@Test
public void testIndexOf() {
assertTrue(emptyString.indexOf(emptyString).isEqualTo(integer0)
.isTrue());
assertTrue(emptyString.indexOf(OCL).isEqualTo(integer0).isTrue());
assertTrue(OCL.indexOf(emptyString).isEqualTo(integer1).isTrue());
assertTrue(OCL_rocks.indexOf(OCL).isEqualTo(integer1).isTrue());
assertTrue(OCL_rocks.indexOf(rocks).isEqualTo(integer5).isTrue());
}
@Test
public void matches() {
assertTrue(OCL.matches(OCL).isTrue());
assertTrue(OCL.matches(regexAlpha).isTrue());
assertTrue(OCL.matches(regexWord).isTrue());
assertTrue(OCL_rocks.matches(regexTest).isTrue());
}
@Test
public void testEqualsIgnoreCase() {
assertTrue(emptyString.equalsIgnoreCase(emptyString).isTrue());
assertTrue(fourtyTwo.equalsIgnoreCase(fourtyTwo).isTrue());
assertTrue(OCL.equalsIgnoreCase(OCL).isTrue());
assertTrue(OCL.equalsIgnoreCase(ocl).isTrue());
assertTrue(ocl.equalsIgnoreCase(OCL).isTrue());
}
@Test
public void testAt() {
assertTrue(emptyString.at(integer1).oclIsInvalid().isTrue());
assertTrue(OCL.at(integer0).oclIsInvalid().isTrue());
assertTrue(OCL_rocks.at(integer1).isEqualTo(O).isTrue());
assertTrue(OCL_rocks.at(integer6).isEqualTo(o).isTrue());
assertTrue(OCL_rocks.at(integer42).oclIsInvalid().isTrue());
}
@Test
public void testCharacters() {
assertTrue(emptyString.characters().isEmpty().isTrue());
OclSequence<OclString> chars = OCL_rocks.characters();
assertTrue(chars.at(integer1).isEqualTo(O).isTrue());
assertTrue(chars.at(integer6).isEqualTo(o).isTrue());
assertTrue(chars.size().isEqualTo(integer9).isTrue());
}
@Test
public void testIsLessThan() {
assertFalse(emptyString.isLessThan(emptyString).isTrue());
assertFalse(fourtyTwo.isLessThan(fourtyTwo).isTrue());
assertTrue(a.isLessThan(b).isTrue());
assertFalse(b.isLessThan(a).isTrue());
assertTrue(undefined.isLessThan(a).oclIsInvalid().isTrue());
assertTrue(a.isLessThan(undefined).oclIsInvalid().isTrue());
assertTrue(invalid.isLessThan(a).oclIsInvalid().isTrue());
assertTrue(a.isLessThan(invalid).oclIsInvalid().isTrue());
}
@Test
public void testIsLessEqual() {
assertTrue(emptyString.isLessEqual(emptyString).isTrue());
assertTrue(fourtyTwo.isLessEqual(fourtyTwo).isTrue());
assertTrue(a.isLessEqual(b).isTrue());
assertFalse(b.isLessEqual(a).isTrue());
assertTrue(undefined.isLessEqual(a).oclIsInvalid().isTrue());
assertTrue(a.isLessEqual(undefined).oclIsInvalid().isTrue());
assertTrue(invalid.isLessEqual(a).oclIsInvalid().isTrue());
assertTrue(a.isLessEqual(invalid).oclIsInvalid().isTrue());
}
@Test
public void testIsGreaterThan() {
assertFalse(emptyString.isGreaterThan(emptyString).isTrue());
assertFalse(fourtyTwo.isGreaterThan(fourtyTwo).isTrue());
assertFalse(a.isGreaterThan(b).isTrue());
assertTrue(b.isGreaterThan(a).isTrue());
assertTrue(undefined.isGreaterThan(a).oclIsInvalid().isTrue());
assertTrue(a.isGreaterThan(undefined).oclIsInvalid().isTrue());
assertTrue(invalid.isGreaterThan(a).oclIsInvalid().isTrue());
assertTrue(a.isGreaterThan(invalid).oclIsInvalid().isTrue());
}
@Test
public void testIsGreaterEqual() {
assertTrue(emptyString.isGreaterEqual(emptyString).isTrue());
assertTrue(fourtyTwo.isGreaterEqual(fourtyTwo).isTrue());
assertFalse(a.isGreaterEqual(b).isTrue());
assertTrue(b.isGreaterEqual(a).isTrue());
assertTrue(undefined.isGreaterEqual(a).oclIsInvalid().isTrue());
assertTrue(a.isGreaterEqual(undefined).oclIsInvalid().isTrue());
assertTrue(invalid.isGreaterEqual(a).oclIsInvalid().isTrue());
assertTrue(a.isGreaterEqual(invalid).oclIsInvalid().isTrue());
}
}