Skip to content

Commit eeba5da

Browse files
authored
remove use of Maven in Java tests (#520)
Per #495, Maven has proven quite unreliable for the past few weeks, so now we download and execute the relevant TeaVM jars directly, which should be more reliable. This also fixes the lift-lower-foreign.wit codegen test for Java. Signed-off-by: Joel Dice <joel.dice@fermyon.com>
1 parent 40b24be commit eeba5da

File tree

6 files changed

+127
-185
lines changed

6 files changed

+127
-185
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ jobs:
4545
echo "WASI_SDK_PATH=`pwd`/wasi-sdk-16.0" >> $GITHUB_ENV
4646
if : matrix.os == 'windows-latest'
4747
48+
- run: ci/download-teavm.sh
49+
4850
- uses: actions/setup-node@v2
4951
with:
5052
node-version: '16'

ci/download-teavm.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
set -ex
4+
5+
mkdir -p target
6+
cd target
7+
curl -O https://repo.maven.apache.org/maven2/com/fermyon/teavm-cli/0.2.8/teavm-cli-0.2.8.jar
8+
curl -O https://repo.maven.apache.org/maven2/com/fermyon/teavm-interop/0.2.8/teavm-interop-0.2.8.jar

crates/gen-guest-teavm-java/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,19 +1346,19 @@ impl Bindgen for FunctionBindgen<'_, '_> {
13461346
}
13471347
},
13481348

1349-
Instruction::FlagsLift { name, flags, .. } => match flags_repr(flags) {
1349+
Instruction::FlagsLift { flags, ty, .. } => match flags_repr(flags) {
13501350
Int::U8 | Int::U16 | Int::U32 => {
13511351
results.push(format!(
13521352
"new {}(({}) {})",
1353-
name.to_upper_camel_case(),
1353+
self.gen.type_name(&Type::Id(*ty)),
13541354
int_type(flags_repr(flags)),
13551355
operands[0]
13561356
));
13571357
}
13581358
Int::U64 => {
13591359
results.push(format!(
13601360
"new {}(((long) ({})) | (((long) ({})) << 32))",
1361-
name.to_upper_camel_case(),
1361+
self.gen.type_name(&Type::Id(*ty)),
13621362
operands[0],
13631363
operands[1]
13641364
));
@@ -1589,9 +1589,9 @@ impl Bindgen for FunctionBindgen<'_, '_> {
15891589

15901590
Instruction::EnumLower { .. } => results.push(format!("{}.ordinal()", operands[0])),
15911591

1592-
Instruction::EnumLift { name, .. } => results.push(format!(
1592+
Instruction::EnumLift { ty, .. } => results.push(format!(
15931593
"{}.values()[{}]",
1594-
name.to_upper_camel_case(),
1594+
self.gen.type_name(&Type::Id(*ty)),
15951595
operands[0]
15961596
)),
15971597

crates/gen-guest-teavm-java/tests/codegen.rs

Lines changed: 31 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ use std::path::Path;
22
use std::process::Command;
33

44
macro_rules! codegen_test {
5-
// TODO: should fix this test
6-
(lift_lower_foreign $name:tt $test:tt) => {};
7-
85
($id:ident $name:tt $test:tt) => {
96
#[test]
107
fn $id() {
@@ -25,30 +22,33 @@ macro_rules! codegen_test {
2522
}
2623
test_helpers::codegen_tests!("*.wit");
2724

28-
// TODO: As of this writing, Maven has started failing to resolve dependencies on Windows in the GitHub action,
29-
// apparently unrelated to any code changes we've made. Until we've either resolved the problem or developed a
30-
// workaround, we're disabling the tests.
31-
//
32-
// See https://github.com/bytecodealliance/wit-bindgen/issues/495 for more information.
33-
#[cfg(windows)]
34-
fn verify(_dir: &Path, _name: &str) {
35-
_ = mvn;
36-
_ = pom_xml;
37-
}
38-
39-
#[cfg(unix)]
4025
fn verify(dir: &Path, name: &str) {
41-
use heck::{ToSnakeCase, ToUpperCamelCase};
26+
use heck::ToSnakeCase;
4227
use std::fs;
4328

29+
// Derived from `test_helpers::test_directory`
30+
const DEPTH_FROM_TARGET_DIR: u32 = 3;
31+
32+
let base_dir = {
33+
let mut dir = dir.to_owned();
34+
for _ in 0..DEPTH_FROM_TARGET_DIR {
35+
dir.pop();
36+
}
37+
dir
38+
};
39+
40+
let teavm_interop_jar = base_dir.join("teavm-interop-0.2.8.jar");
41+
42+
if !teavm_interop_jar.is_file() {
43+
panic!("please run ci/download-teavm.sh prior to running the Java tests")
44+
}
45+
4446
let java_dir = &dir.join("src/main/java");
4547
let snake = name.to_snake_case();
4648
let package_dir = &java_dir.join(format!("wit_{snake}"));
4749

4850
fs::create_dir_all(package_dir).unwrap();
4951

50-
let upper = name.to_upper_camel_case();
51-
5252
let src_files = fs::read_dir(&dir).unwrap().filter_map(|entry| {
5353
let path = entry.unwrap().path();
5454
if let Some("java") = path.extension().map(|ext| ext.to_str().unwrap()) {
@@ -58,52 +58,21 @@ fn verify(dir: &Path, name: &str) {
5858
}
5959
});
6060

61-
for src in src_files {
62-
let dst = &package_dir.join(src.file_name().unwrap());
63-
fs::rename(src, dst).unwrap();
64-
}
61+
let dst_files = src_files.map(|src| {
62+
let dst = package_dir.join(src.file_name().unwrap());
63+
fs::rename(src, &dst).unwrap();
64+
dst
65+
});
6566

66-
fs::write(
67-
dir.join("pom.xml"),
68-
pom_xml(&[&format!("wit_{snake}.{upper}")]),
69-
)
70-
.unwrap();
71-
fs::write(java_dir.join("Main.java"), include_bytes!("Main.java")).unwrap();
67+
let mut cmd = Command::new("javac");
68+
cmd.arg("-cp")
69+
.arg(&teavm_interop_jar)
70+
.arg("-d")
71+
.arg("target/classes");
7272

73-
let mut cmd = mvn();
74-
cmd.arg("prepare-package").current_dir(dir);
73+
for file in dst_files {
74+
cmd.arg(file);
75+
}
7576

7677
test_helpers::run_command(&mut cmd);
7778
}
78-
79-
#[cfg(unix)]
80-
fn mvn() -> Command {
81-
Command::new("mvn")
82-
}
83-
84-
#[cfg(windows)]
85-
fn mvn() -> Command {
86-
let mut cmd = Command::new("cmd");
87-
cmd.args(&["/c", "mvn"]);
88-
cmd
89-
}
90-
91-
fn pom_xml(classes_to_preserve: &[&str]) -> Vec<u8> {
92-
let xml = include_str!("pom.xml");
93-
let position = xml.find("<mainClass>").unwrap();
94-
let (before, after) = xml.split_at(position);
95-
let classes_to_preserve = classes_to_preserve
96-
.iter()
97-
.map(|&class| format!("<param>{class}</param>"))
98-
.collect::<Vec<_>>()
99-
.join("\n");
100-
101-
format!(
102-
"{before}
103-
<classesToPreserve>
104-
{classes_to_preserve}
105-
</classesToPreserve>
106-
{after}"
107-
)
108-
.into_bytes()
109-
}

crates/gen-guest-teavm-java/tests/pom.xml

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)