diff --git a/eo-maven-plugin/src/main/resources/org/eolang/maven/add_rust/add_rust.xsl b/eo-maven-plugin/src/main/resources/org/eolang/maven/add_rust/add_rust.xsl index 1d9fb0e77d..5386392bfc 100644 --- a/eo-maven-plugin/src/main/resources/org/eolang/maven/add_rust/add_rust.xsl +++ b/eo-maven-plugin/src/main/resources/org/eolang/maven/add_rust/add_rust.xsl @@ -32,10 +32,10 @@ SOFTWARE. "Rust inserts" - + - + diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/BinarizeParseTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/BinarizeParseTest.java index cabac1dc77..061136df77 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/BinarizeParseTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/BinarizeParseTest.java @@ -151,7 +151,7 @@ void binarizesTwiceRustProgram(@TempDir final Path temp) throws Exception { @ClasspathSource(value = "org/eolang/maven/binarize/add_rust/", glob = "**.yaml") void createsDependenciesSection(final String yaml) { MatcherAssert.assertThat( - BinarizeParseTest.TO_ADD_MESSAGE, + "Yaml tests should pass", new XaxStory(yaml), Matchers.is(true) ); diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/binarize/add_rust/detects-rust-with-wide-string.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/binarize/add_rust/detects-rust-with-wide-string.yaml new file mode 100644 index 0000000000..83b3e02e67 --- /dev/null +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/binarize/add_rust/detects-rust-with-wide-string.yaml @@ -0,0 +1,166 @@ +# The MIT License (MIT) +# +# Copyright (c) 2016-2024 Objectionary.com +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +--- +sheets: + - /org/eolang/maven/add_rust/add_rust.xsl +document: + + + + + + + + + + + + + + + + + 75 73 65 20 65 6F 3A 3A 50 6F 72 74 61 6C 3B 0A 75 73 65 20 65 6F 3A 3A 65 6F 5F 65 6E 75 6D 3A 3A 45 4F 3B 0A 75 73 65 20 65 6F 3A 3A 65 6F 5F 65 6E 75 6D 3A 3A 45 4F 3A 3A 7B 45 4F 49 6E 74 7D 3B 0A 0A 70 75 62 20 66 6E 20 66 6F 6F 28 5F 70 6F 72 74 61 6C 3A 20 26 6D 75 74 20 50 6F 72 74 61 6C 29 20 2D 3E 20 4F 70 74 69 6F 6E 3C 45 4F 3E 20 7B 0A 20 20 70 72 69 6E 74 6C 6E 21 28 22 48 65 6C 6C 6F 20 77 6F 72 6C 64 20 66 72 6F 6D 20 72 75 73 74 22 29 3B 0A 20 20 53 6F 6D 65 28 45 4F 49 6E 74 28 32 29 29 0A 7D + + + + + + + + + + + + + + + + + + + + + + + 00 00 00 00 00 00 00 02 + + + + + + +asserts: + - /program/rusts/rust[@code_loc='Φ.org.eolang.rust-with-string-fqn.r.α0' and @code='75 73 65 20 65 6F 3A 3A 50 6F 72 74 61 6C 3B 0A 75 73 65 20 65 6F 3A 3A 65 6F 5F 65 6E 75 6D 3A 3A 45 4F 3B 0A 75 73 65 20 65 6F 3A 3A 65 6F 5F 65 6E 75 6D 3A 3A 45 4F 3A 3A 7B 45 4F 49 6E 74 7D 3B 0A 0A 70 75 62 20 66 6E 20 66 6F 6F 28 5F 70 6F 72 74 61 6C 3A 20 26 6D 75 74 20 50 6F 72 74 61 6C 29 20 2D 3E 20 4F 70 74 69 6F 6E 3C 45 4F 3E 20 7B 0A 20 20 70 72 69 6E 74 6C 6E 21 28 22 48 65 6C 6C 6F 20 77 6F 72 6C 64 20 66 72 6F 6D 20 72 75 73 74 22 29 3B 0A 20 20 53 6F 6D 65 28 45 4F 49 6E 74 28 32 29 29 0A 7D'] diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java index 0b0d0743d2..66bf649a64 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java @@ -41,6 +41,7 @@ import java.util.Base64; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; import org.eolang.AtVoid; @@ -139,9 +140,9 @@ public EOrust(final Phi sigma) { @Override public Phi lambda() throws Exception { - final String name = NAMES.get( - this.take("code").locator().split(":")[0] - ); + final String locator = this.take("code").locator().split(":")[0]; + final String name = Optional.ofNullable(NAMES.get(locator)) + .orElseThrow(() -> new ExNative("No native function for %s", locator)); final Method method = Class.forName( String.format( "EOrust.natives.%s", diff --git a/eo-runtime/src/test/eo/org/eolang/rust-tests.eo b/eo-runtime/src/test/eo/org/eolang/rust-tests.eo index 32b159f0f6..482bfccbe9 100644 --- a/eo-runtime/src/test/eo/org/eolang/rust-tests.eo +++ b/eo-runtime/src/test/eo/org/eolang/rust-tests.eo @@ -391,3 +391,71 @@ eq. > @ applied.content "qwerty" + +# This is the default 64+ symbols comment in front of named abstract object. +[] > rust-with-string-fqn + Q + .org + .eolang + .rust > r + Q + .org + .eolang + .string:0 + Q + .org + .eolang + .bytes:0 + 75-73-65-20-65-6F-3A-3A-50-6F-72-74-61-6C-3B-0A-75-73-65-20-65-6F-3A-3A-65-6F-5F-65-6E-75-6D-3A-3A-45-4F-3B-0A-75-73-65-20-65-6F-3A-3A-65-6F-5F-65-6E-75-6D-3A-3A-45-4F-3A-3A-7B-45-4F-49-6E-74-7D-3B-0A-0A-70-75-62-20-66-6E-20-66-6F-6F-28-5F-70-6F-72-74-61-6C-3A-20-26-6D-75-74-20-50-6F-72-74-61-6C-29-20-2D-3E-20-4F-70-74-69-6F-6E-3C-45-4F-3E-20-7B-0A-20-20-70-72-69-6E-74-6C-6E-21-28-22-48-65-6C-6C-6F-20-77-6F-72-6C-64-20-66-72-6F-6D-20-72-75-73-74-22-29-3B-0A-20-20-53-6F-6D-65-28-45-4F-49-6E-74-28-32-29-29-0A-7D + []:1 + Q + .org + .eolang + .tuple + .empty:2 + $ + .r + .eq > @ + Q + .org + .eolang + .int:0 + Q + .org + .eolang + .bytes:0 + 00-00-00-00-00-00-00-02 + +# This is the default 64+ symbols comment in front of named abstract object. +[] > rust-reversed-notation + rust. > r + eolang. + org. + Q + string.:0 + eolang. + org. + Q + bytes.:0 + eolang. + org. + Q + 75-73-65-20-65-6F-3A-3A-50-6F-72-74-61-6C-3B-0A-75-73-65-20-65-6F-3A-3A-65-6F-5F-65-6E-75-6D-3A-3A-45-4F-3B-0A-75-73-65-20-65-6F-3A-3A-65-6F-5F-65-6E-75-6D-3A-3A-45-4F-3A-3A-7B-45-4F-49-6E-74-7D-3B-0A-0A-70-75-62-20-66-6E-20-66-6F-6F-28-5F-70-6F-72-74-61-6C-3A-20-26-6D-75-74-20-50-6F-72-74-61-6C-29-20-2D-3E-20-4F-70-74-69-6F-6E-3C-45-4F-3E-20-7B-0A-20-20-70-72-69-6E-74-6C-6E-21-28-22-48-65-6C-6C-6F-20-77-6F-72-6C-64-20-66-72-6F-6D-20-72-75-73-74-22-29-3B-0A-20-20-53-6F-6D-65-28-45-4F-49-6E-74-28-32-29-29-0A-7D + []:1 + empty.:2 + tuple. + eolang. + org. + Q + eq. > @ + r. + $ + int.:0 + eolang. + org. + Q + bytes.:0 + eolang. + org. + Q + 00-00-00-00-00-00-00-02