poolster-plugin-java 0.5.0-alpha.1

Native Java SDK generator for Poolster
Documentation
use super::*;
#[test]
#[ignore = "requires JDK17+Maven; native scoped request headers and timeout"]
fn native_call_scopes_preserve_headers_timeouts_and_original_client() {
    let api = Api {
        name: "Scope".into(),
        operations: vec![Operation {
            id: "getThing".into(),
            method: poolster_core::HttpMethod::Get,
            path: "/thing".into(),
            responses: vec![poolster_core::OperationResponse {
                status: "204".into(),
                description: None,
                media_types: vec![],
            }],
            ..Default::default()
        }],
        ..Default::default()
    };
    let tree = poolster_core::engine::Packages::new()
        .package(
            crate::package("sdk")
                .name("io.poolster.callscope")
                .with(crate::sdk())
                .with(crate::operation_tests()),
        )
        .generate(&api, None)
        .unwrap();
    let dir = tempfile::tempdir().unwrap();
    tree.write_to(dir.path()).unwrap();
    let mut source = include_str!("../tests/fixtures/operation_driver.java")
        .replace("__PACKAGE__", "io.poolster.callscope")
        .replace(
            "__CASES__",
            include_str!("../tests/fixtures/call_options_probe_main.java"),
        );
    let start = source.find("        void assertRequest(").unwrap();
    let end = start
        + source[start..]
            .find("        public <T> HttpResponse<T> send(")
            .unwrap();
    source.replace_range(
        start..end,
        include_str!("../tests/fixtures/call_options_probe_assert.java"),
    );
    std::fs::write(
        dir.path()
            .join("sdk/src/test/java/io/poolster/callscope/PoolsterOperationTests.java"),
        source,
    )
    .unwrap();
    let output = std::process::Command::new("mvn")
        .args([
            "-q",
            "test-compile",
            "org.codehaus.mojo:exec-maven-plugin:3.5.0:java",
            "-Dexec.mainClass=io.poolster.callscope.PoolsterOperationTests",
            "-Dexec.classpathScope=test",
        ])
        .current_dir(dir.path().join("sdk"))
        .output()
        .unwrap();
    assert!(
        output.status.success(),
        "{}{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );
}