Skip to main content

module lang::flybytes::tests::ClassTests

rascal-0.42.0
org.rascalmpl.flybytes-0.2.11

Usage​

import lang::flybytes::tests::ClassTests;

Dependencies​

import lang::flybytes::Compiler;
import lang::flybytes::Mirror;
import lang::flybytes::api::JavaLang;
import lang::flybytes::api::System;

function testClass​

Class testClass()

function compiledTestClass​

Mirror compiledTestClass()

function extendClass​

Class extendClass()

function main​

void main()

Tests

test newInstanceGetUnitializedInteger​

test bool newInstanceGetUnitializedInteger() {
c = compiledTestClass();
i = c.newInstance(constructorDesc([]),[]);
return i.getField("field").toValue(#int) == 0;
}

test newInstanceCallGetter​

test bool newInstanceCallGetter() {
c = compiledTestClass();
i = c.newInstance(constructorDesc([]),[]);
return i.invoke(methodDesc(integer(), "getField", []), []).toValue(#int) == 0;
}

test newInstanceCallSetter​

test bool newInstanceCallSetter() {
c = compiledTestClass();
i = c.newInstance(constructorDesc([]),[]);

int tester = 32;

// call method with the side-effect
i.invoke(methodDesc(\void(), "setField", [integer()]), [integer(tester)]);

// test if it worked by retrieving the field
return i.getField("field").toValue(#int) == tester;
}

test staticMethod​

test bool staticMethod() {
c = compiledTestClass();
int tester = 666;
c.invokeStatic(methodDesc(\void(), "putStatic", [integer()]), [integer(tester)]);
r = c.getStatic("staticField").toValue(#int);
c.invokeStatic(methodDesc(\void(), "putStatic", [integer()]), [integer(42)]); // set it back
return r == tester;
}

test staticFieldInitializer​

test bool staticFieldInitializer() 
= compiledTestClass().getStatic("staticField").toValue(#int) == 42;

test extendTest​

test bool extendTest() {
// load the classes together
cs = loadClasses([extendClass(), testClass()], prefix=just(|project://flybytes/generated/|));

// get a mirror instance of the subclass
c = cs["ExtendedClass"];
i = c.newInstance(constructorDesc([]),[]);

// call super method with a side-effect
return i.invoke(methodDesc(\void(), "testMethod", []), []).toValue(#bool);
}