diff --git a/eo-parser/src/main/java/org/eolang/parser/StrictXmir.java b/eo-parser/src/main/java/org/eolang/parser/StrictXmir.java index 2061c82db8..b860cd4cd0 100644 --- a/eo-parser/src/main/java/org/eolang/parser/StrictXmir.java +++ b/eo-parser/src/main/java/org/eolang/parser/StrictXmir.java @@ -155,7 +155,7 @@ private static XML reset(final XML xml, final Path tmp) { tmp.resolve( uri.substring(uri.lastIndexOf('/') + 1) ) - ).toString().replace("\\", "/") + ).getAbsoluteFile().toString().replace("\\", "/") ); } new Xembler( diff --git a/eo-parser/src/test/java/org/eolang/parser/StrictXmirTest.java b/eo-parser/src/test/java/org/eolang/parser/StrictXmirTest.java index d893dcca79..d1535c73d2 100644 --- a/eo-parser/src/test/java/org/eolang/parser/StrictXmirTest.java +++ b/eo-parser/src/test/java/org/eolang/parser/StrictXmirTest.java @@ -30,6 +30,7 @@ import com.yegor256.MktmpResolver; import com.yegor256.WeAreOnline; import java.nio.file.Path; +import java.nio.file.Paths; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.jupiter.api.Assertions; @@ -64,6 +65,22 @@ void validatesXmir(@Mktmp final Path tmp) { ); } + @Test + @ExtendWith(MktmpResolver.class) + @ExtendWith(WeAreOnline.class) + void refersToAbsoluteFileName(@Mktmp final Path tmp) { + MatcherAssert.assertThat( + "XSD location must be absolute", + Paths.get( + new StrictXmir(StrictXmirTest.xmir("https://www.eolang.org/XMIR.xsd"), tmp) + .xpath("/program/@xsi:noNamespaceSchemaLocation") + .get(0) + .substring("file:///".length()) + ).isAbsolute(), + Matchers.is(true) + ); + } + @Test @ExtendWith(MktmpResolver.class) void validatesXmirWithLocalSchema(@Mktmp final Path tmp) {