blob: d777b47e408dee5050de099d746a75ad8e903d4c [file] [log] [blame]
operation returnsNullContextless() {
return null;
}
operation Any returnsNullAny() {
return returnsNullContextless();
}
operation Any assertSelfIsNull() {
assert(self == null);
assertEquals(null, self);
}
@test
operation testOperationCall() {
var str = "a string";
var result = str?.getClass();
assertTrue(result.isDefined());
str = null;
result = str?.getClass();
assertEquals(null, result);
}
@test
operation testChainedOperationCalls() {
var number = 3.14159d;
var result = number?.asString().substring(0, 1).asInteger();
assertEquals(3, result);
result = number?.asString()?.substring(0, 1)?.asInteger();
assertEquals(3, result);
result = null?.getClass()?.getSimpleName();
assertEquals(null, result);
assertEquals(3.14?.asString(), number.asString()?.substring(0, 4));
}
@test
operation testPropertyCallChain() {
System.context?.module?.getClass().println();
var expected = System.context.module.getClass();
var actual = System?.context.module?.getClass();
assertEquals(expected, actual);
}
@test
operation testWithTernary() {
var result = x?.isDefined() ? x?.getClass() : System?.class.getName().length() >= 5 ? 1 : 0;
assertEquals(1, result);
}
@test
operation testNullReturnFromOperation() {
var result = returnsNullContextless()?.getClass();
assertEquals(null, result);
var x = new Bag;
result = x?.getClass();
assertTrue(result <> null);
result = result.returnsNullAny()?.getClass();
assertEquals(null, result);
result = returnsNullContextless()?.returnsNullAny();
assertEquals(null, result);
}
@test
operation testPropertyToOperationCallConversion() {
var expected = System.context.module.parent;
var actual = System.context?.module.parent?.getClass()?.getName();
assertEquals(expected, actual);
actual = System.context?.module?.module?.parent?.shouldNeverBeCalled;
assertEquals(expected, actual);
}
@test
operation testNative() {
assertEquals("main", Native("java.lang.Thread")?.currentThread?.getName());
}
@test
operation testInComparisonOperator() {
assertTrue(8.getClass() <> 8.returnsNullAny()?.class);
}
@test
operation testFirstOrderOperationCall() {
var result = Sequence{0..10}->select(i|i?.mod(2) == 0)->size();
assertEquals(6, result);
var result = Sequence{0, null, 1, null, 2}->select(i|i?.mod(2) == 0)?.size();
assertEquals(2, result);
result = Bag{}?.collect(i|i?.returnsNullAny?.neverCalled.npe)?.size;
assertEquals(0, result);
result = null?.select(x|true or x.npe)?.getClass();
assertEquals(null, result);
}