mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
Fixes class methods errors. Adds string tests
This commit is contained in:
parent
9722a6e863
commit
d3063e7811
|
@ -12,14 +12,14 @@ import org.teavm.model.MethodReference;
|
||||||
public class ClassNativeGenerator implements Generator {
|
public class ClassNativeGenerator implements Generator {
|
||||||
@Override
|
@Override
|
||||||
public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) {
|
public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) {
|
||||||
switch (methodRef.getClassName()) {
|
switch (methodRef.getName()) {
|
||||||
case "isInstance":
|
case "isInstance":
|
||||||
generateIsInstance(context, writer);
|
generateIsInstance(context, writer);
|
||||||
break;
|
break;
|
||||||
case "isAssignable":
|
case "isAssignable":
|
||||||
generateIsAssignableFrom(context, writer);
|
generateIsAssignableFrom(context, writer);
|
||||||
break;
|
break;
|
||||||
case "getComponentType":
|
case "getComponentType0":
|
||||||
generateGetComponentType(context, writer);
|
generateGetComponentType(context, writer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,11 @@ class TClassTests {
|
||||||
assertEquals(Object.class, Object[].class.getComponentType());
|
assertEquals(Object.class, Object[].class.getComponentType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void arrayOfArraysComponentTypeDetected() {
|
||||||
|
assertEquals(Object[].class, Object[][].class.getComponentType());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void nonArrayComponentTypeIsNull() {
|
public void nonArrayComponentTypeIsNull() {
|
||||||
assertNull(Object.class.getComponentType());
|
assertNull(Object.class.getComponentType());
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package org.teavm.classlib.java.lang;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
class TStringTests {
|
||||||
|
@Test
|
||||||
|
public void charsExtracted() {
|
||||||
|
String str = "123";
|
||||||
|
assertEquals('1', str.charAt(0));
|
||||||
|
assertEquals('2', str.charAt(1));
|
||||||
|
assertEquals('3', str.charAt(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void lengthComputed() {
|
||||||
|
String str = "123";
|
||||||
|
assertEquals(3, str.length());
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,4 +29,14 @@ class TSystemTests {
|
||||||
public void failsToCopyArraysWithIncompatibleElements() {
|
public void failsToCopyArraysWithIncompatibleElements() {
|
||||||
TSystem.arraycopy(TObject.wrap(new TObject[1]), 0, TObject.wrap(new int[1]), 0, 1);
|
TSystem.arraycopy(TObject.wrap(new TObject[1]), 0, TObject.wrap(new int[1]), 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = NullPointerException.class)
|
||||||
|
public void failsToCopyFromNullSource() {
|
||||||
|
TSystem.arraycopy(null, 0, TObject.wrap(new int[1]), 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = NullPointerException.class)
|
||||||
|
public void failsToCopyToNullTarget() {
|
||||||
|
TSystem.arraycopy(TObject.wrap(new TObject[1]), 0, null, 0, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,18 @@ public class Assert {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void assertEquals(long expected, long actual) {
|
||||||
|
if (expected != actual) {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void assertNotEquals(long expected, long actual) {
|
||||||
|
if (expected == actual) {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void assertNotNull(Object object) {
|
public static void assertNotNull(Object object) {
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
fail();
|
fail();
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class ClasslibTestGenerator {
|
||||||
private static List<MethodReference> testMethods = new ArrayList<>();
|
private static List<MethodReference> testMethods = new ArrayList<>();
|
||||||
private static Map<String, List<MethodReference>> groupedMethods = new HashMap<>();
|
private static Map<String, List<MethodReference>> groupedMethods = new HashMap<>();
|
||||||
private static String[] testClasses = { "java.lang.ObjectTests", "java.lang.SystemTests",
|
private static String[] testClasses = { "java.lang.ObjectTests", "java.lang.SystemTests",
|
||||||
"java.lang.StringBuilderTests", "java.lang.ClassTests" };
|
"java.lang.StringBuilderTests", "java.lang.ClassTests", "java.lang.StringTests" };
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
out = System.out;
|
out = System.out;
|
||||||
|
|
|
@ -170,7 +170,7 @@ public class DependencyChecker {
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
return methodCache.map(new MethodReference(cls.getName(), methodRef.getDescriptor()));
|
return methodCache.map(new MethodReference(cls.getName(), methodRef.getDescriptor()));
|
||||||
}
|
}
|
||||||
cls = classSource.getClassHolder(cls.getParent());
|
cls = cls.getParent() != null ? classSource.getClassHolder(cls.getParent()) : null;
|
||||||
}
|
}
|
||||||
throw new RuntimeException("Method not found: " + methodRef);
|
throw new RuntimeException("Method not found: " + methodRef);
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,17 +218,17 @@ Long = function(lo, hi) {
|
||||||
this.lo = lo | 0;
|
this.lo = lo | 0;
|
||||||
this.hi = hi | 0;
|
this.hi = hi | 0;
|
||||||
}
|
}
|
||||||
Long.ZERO = new Long(0, 0);
|
Long_ZERO = new Long(0, 0);
|
||||||
Long.fromInt = function(val) {
|
Long_fromInt = function(val) {
|
||||||
return new Long(val, 0);
|
return new Long(val, 0);
|
||||||
}
|
}
|
||||||
Long.fromNumber = function(val) {
|
Long_fromNumber = function(val) {
|
||||||
return new Long(val | 0, (val / 0x100000000) | 0);
|
return new Long(val | 0, (val / 0x100000000) | 0);
|
||||||
}
|
}
|
||||||
Long.toNumber = function(val) {
|
Long_toNumber = function(val) {
|
||||||
return val.lo + 0x100000000 * val.hi;
|
return val.lo + 0x100000000 * val.hi;
|
||||||
}
|
}
|
||||||
Long.add = function(a, b) {
|
Long_add = function(a, b) {
|
||||||
var a_lolo = a.lo & 0xFFFF;
|
var a_lolo = a.lo & 0xFFFF;
|
||||||
var a_lohi = a.lo >>> 16;
|
var a_lohi = a.lo >>> 16;
|
||||||
var a_hilo = a.hi & 0xFFFF;
|
var a_hilo = a.hi & 0xFFFF;
|
||||||
|
@ -245,7 +245,7 @@ Long.add = function(a, b) {
|
||||||
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
||||||
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
||||||
}
|
}
|
||||||
Long.inc = function(a) {
|
Long_inc = function(a) {
|
||||||
var lo = (a.lo + 1) | 0;
|
var lo = (a.lo + 1) | 0;
|
||||||
var hi = a.hi;
|
var hi = a.hi;
|
||||||
if (lo === 0) {
|
if (lo === 0) {
|
||||||
|
@ -253,7 +253,7 @@ Long.inc = function(a) {
|
||||||
}
|
}
|
||||||
return new Long(lo, hi);
|
return new Long(lo, hi);
|
||||||
}
|
}
|
||||||
Long.dec = function(a) {
|
Long_dec = function(a) {
|
||||||
var lo = (a.lo - 1) | 0;
|
var lo = (a.lo - 1) | 0;
|
||||||
var hi = a.hi;
|
var hi = a.hi;
|
||||||
if (lo === -1) {
|
if (lo === -1) {
|
||||||
|
@ -261,10 +261,10 @@ Long.dec = function(a) {
|
||||||
}
|
}
|
||||||
return new Long(lo, hi);
|
return new Long(lo, hi);
|
||||||
}
|
}
|
||||||
Long.neg = function(a) {
|
Long_neg = function(a) {
|
||||||
return Long.inc(new Long(a.lo ^ 0xFFFFFFFF, a.hi ^ 0xFFFFFFFF));
|
return Long.inc(new Long(a.lo ^ 0xFFFFFFFF, a.hi ^ 0xFFFFFFFF));
|
||||||
}
|
}
|
||||||
Long.sub = function(a, b) {
|
Long_sub = function(a, b) {
|
||||||
var a_lolo = a.lo & 0xFFFF;
|
var a_lolo = a.lo & 0xFFFF;
|
||||||
var a_lohi = a.lo >>> 16;
|
var a_lohi = a.lo >>> 16;
|
||||||
var a_hilo = a.hi & 0xFFFF;
|
var a_hilo = a.hi & 0xFFFF;
|
||||||
|
@ -281,17 +281,17 @@ Long.sub = function(a, b) {
|
||||||
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
||||||
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
||||||
}
|
}
|
||||||
Long.compare = function(a, b) {
|
Long_compare = function(a, b) {
|
||||||
var r = a.hi - a.hi;
|
var r = a.hi - a.hi;
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
return a.lo - b.lo;
|
return a.lo - b.lo;
|
||||||
}
|
}
|
||||||
Long.isNegative = function(a) {
|
Long_isNegative = function(a) {
|
||||||
return a.hi < 0;
|
return a.hi < 0;
|
||||||
}
|
}
|
||||||
Long.mul = function(a, b) {
|
Long_mul = function(a, b) {
|
||||||
var a_lolo = a.lo & 0xFFFF;
|
var a_lolo = a.lo & 0xFFFF;
|
||||||
var a_lohi = a.lo >>> 16;
|
var a_lohi = a.lo >>> 16;
|
||||||
var a_hilo = a.hi & 0xFFFF;
|
var a_hilo = a.hi & 0xFFFF;
|
||||||
|
@ -309,38 +309,38 @@ Long.mul = function(a, b) {
|
||||||
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
|
||||||
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
(hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
|
||||||
}
|
}
|
||||||
Long.div = function(a, b) {
|
Long_div = function(a, b) {
|
||||||
var result = (a.hi * 0x100000000 + a.lo) / (b.hi * 0x100000000 + b.lo);
|
var result = (a.hi * 0x100000000 + a.lo) / (b.hi * 0x100000000 + b.lo);
|
||||||
return new Long(result | 0, (result / 0x100000000) | 0);
|
return new Long(result | 0, (result / 0x100000000) | 0);
|
||||||
}
|
}
|
||||||
Long.rem = function(a, b) {
|
Long_rem = function(a, b) {
|
||||||
var result = (a.hi * 0x100000000 + a.lo) % (b.hi * 0x100000000 + b.lo);
|
var result = (a.hi * 0x100000000 + a.lo) % (b.hi * 0x100000000 + b.lo);
|
||||||
return new Long(result | 0, (result / 0x100000000) | 0);
|
return new Long(result | 0, (result / 0x100000000) | 0);
|
||||||
}
|
}
|
||||||
Long.and = function(a, b) {
|
Long_and = function(a, b) {
|
||||||
return new Long(a.lo & b.lo, a.hi & b.hi);
|
return new Long(a.lo & b.lo, a.hi & b.hi);
|
||||||
}
|
}
|
||||||
Long.or = function(a, b) {
|
Long_or = function(a, b) {
|
||||||
return new Long(a.lo | b.lo, a.hi | b.hi);
|
return new Long(a.lo | b.lo, a.hi | b.hi);
|
||||||
}
|
}
|
||||||
Long.xor = function(a, b) {
|
Long_xor = function(a, b) {
|
||||||
return new Long(a.lo ^ b.lo, a.hi ^ b.hi);
|
return new Long(a.lo ^ b.lo, a.hi ^ b.hi);
|
||||||
}
|
}
|
||||||
Long.shl = function(a, b) {
|
Long_shl = function(a, b) {
|
||||||
if (b < 32) {
|
if (b < 32) {
|
||||||
return new Long(a.lo << b, (a.lo >>> (32 - b)) | (a.hi << b));
|
return new Long(a.lo << b, (a.lo >>> (32 - b)) | (a.hi << b));
|
||||||
} else {
|
} else {
|
||||||
return new Long(0, a.lo << (b - 32));
|
return new Long(0, a.lo << (b - 32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Long.shr = function(a, b) {
|
Long_shr = function(a, b) {
|
||||||
if (b < 32) {
|
if (b < 32) {
|
||||||
return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >> b);
|
return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >> b);
|
||||||
} else {
|
} else {
|
||||||
return new Long((a.hi >> (b - 32)), -1);
|
return new Long((a.hi >> (b - 32)), -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Long.shru = function(a, b) {
|
Long_shru = function(a, b) {
|
||||||
if (b < 32) {
|
if (b < 32) {
|
||||||
return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >>> b);
|
return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >>> b);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user