summaryrefslogtreecommitdiffstats
path: root/tests/run-make/translation
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run-make/translation')
-rw-r--r--tests/run-make/translation/Makefile72
-rw-r--r--tests/run-make/translation/broken.ftl3
-rw-r--r--tests/run-make/translation/missing.ftl3
-rw-r--r--tests/run-make/translation/test.rs18
-rw-r--r--tests/run-make/translation/working.ftl2
5 files changed, 98 insertions, 0 deletions
diff --git a/tests/run-make/translation/Makefile b/tests/run-make/translation/Makefile
new file mode 100644
index 000000000..20e86c7f9
--- /dev/null
+++ b/tests/run-make/translation/Makefile
@@ -0,0 +1,72 @@
+include ../../run-make-fulldeps/tools.mk
+
+# This test uses `ln -s` rather than copying to save testing time, but its
+# usage doesn't work on Windows.
+# ignore-windows
+
+SYSROOT:=$(shell $(RUSTC) --print sysroot)
+FAKEROOT=$(TMPDIR)/fakeroot
+
+all: normal custom sysroot
+
+# Check that the test works normally, using the built-in fallback bundle.
+normal: test.rs
+ $(RUSTC) $< 2>&1 | grep "struct literal body without path"
+
+# Check that a primary bundle can be loaded and will be preferentially used
+# where possible.
+custom: test.rs working.ftl
+ $(RUSTC) $< -Ztranslate-additional-ftl=$(CURDIR)/working.ftl 2>&1 | grep "this is a test message"
+
+# Check that a primary bundle with a broken message (e.g. a interpolated
+# variable is missing) will use the fallback bundle.
+missing: test.rs missing.ftl
+ $(RUSTC) $< -Ztranslate-additional-ftl=$(CURDIR)/missing.ftl 2>&1 | grep "struct literal body without path"
+
+# Check that a primary bundle without the desired message will use the fallback
+# bundle.
+broken: test.rs broken.ftl
+ $(RUSTC) $< -Ztranslate-additional-ftl=$(CURDIR)/broken.ftl 2>&1 | grep "struct literal body without path"
+
+# Check that a locale can be loaded from the sysroot given a language
+# identifier by making a local copy of the sysroot and adding the custom locale
+# to it.
+sysroot: test.rs working.ftl
+ mkdir $(FAKEROOT)
+ ln -s $(SYSROOT)/* $(FAKEROOT)
+ rm -f $(FAKEROOT)/lib
+ mkdir $(FAKEROOT)/lib
+ ln -s $(SYSROOT)/lib/* $(FAKEROOT)/lib
+ rm -f $(FAKEROOT)/lib/rustlib
+ mkdir $(FAKEROOT)/lib/rustlib
+ ln -s $(SYSROOT)/lib/rustlib/* $(FAKEROOT)/lib/rustlib
+ rm -f $(FAKEROOT)/lib/rustlib/src
+ mkdir $(FAKEROOT)/lib/rustlib/src
+ ln -s $(SYSROOT)/lib/rustlib/src/* $(FAKEROOT)/lib/rustlib/src
+ mkdir -p $(FAKEROOT)/share/locale/zh-CN/
+ ln -s $(CURDIR)/working.ftl $(FAKEROOT)/share/locale/zh-CN/basic-translation.ftl
+ $(RUSTC) $< --sysroot $(FAKEROOT) -Ztranslate-lang=zh-CN 2>&1 | grep "this is a test message"
+
+# Check that the compiler errors out when the sysroot requested cannot be
+# found. This test might start failing if there actually exists a Klingon
+# translation of rustc's error messages.
+sysroot-missing:
+ $(RUSTC) $< -Ztranslate-lang=tlh 2>&1 || grep "missing locale directory"
+
+# Check that the compiler errors out when the sysroot requested cannot be
+# found. This test might start failing if there actually exists a Klingon
+# translation of rustc's error messages.
+sysroot-invalid: test.rs working.ftl
+ mkdir $(FAKEROOT)
+ ln -s $(SYSROOT)/* $(FAKEROOT)
+ rm -f $(FAKEROOT)/lib
+ mkdir $(FAKEROOT)/lib
+ ln -s $(SYSROOT)/lib/* $(FAKEROOT)/lib
+ rm -f $(FAKEROOT)/lib/rustlib
+ mkdir $(FAKEROOT)/lib/rustlib
+ ln -s $(SYSROOT)/lib/rustlib/* $(FAKEROOT)/lib/rustlib
+ rm -f $(FAKEROOT)/lib/rustlib/src
+ mkdir $(FAKEROOT)/lib/rustlib/src
+ ln -s $(SYSROOT)/lib/rustlib/src/* $(FAKEROOT)/lib/rustlib/src
+ touch $(FAKEROOT)/share/locale/zh-CN/
+ $(RUSTC) $< --sysroot $(FAKEROOT) -Ztranslate-lang=zh-CN 2>&1 || grep "`\$sysroot/share/locales/\$locale` is not a directory"
diff --git a/tests/run-make/translation/broken.ftl b/tests/run-make/translation/broken.ftl
new file mode 100644
index 000000000..f1dd6ff0b
--- /dev/null
+++ b/tests/run-make/translation/broken.ftl
@@ -0,0 +1,3 @@
+# `foo` isn't provided by this diagnostic so it is expected that the fallback message is used.
+parse_struct_literal_body_without_path = this is a {$foo} message
+ .suggestion = this is a test suggestion
diff --git a/tests/run-make/translation/missing.ftl b/tests/run-make/translation/missing.ftl
new file mode 100644
index 000000000..6be24dc7b
--- /dev/null
+++ b/tests/run-make/translation/missing.ftl
@@ -0,0 +1,3 @@
+# `parse_struct_literal_body_without_path` isn't provided by this resource at all, so the
+# fallback should be used.
+foo = bar
diff --git a/tests/run-make/translation/test.rs b/tests/run-make/translation/test.rs
new file mode 100644
index 000000000..b8f5bff31
--- /dev/null
+++ b/tests/run-make/translation/test.rs
@@ -0,0 +1,18 @@
+// Exact error being tested isn't relevant, it just needs to be known that it uses Fluent-backed
+// diagnostics.
+
+struct Foo {
+ val: (),
+}
+
+fn foo() -> Foo {
+ val: (),
+}
+
+fn main() {
+ let x = foo();
+ x.val == 42;
+ let x = {
+ val: (),
+ };
+}
diff --git a/tests/run-make/translation/working.ftl b/tests/run-make/translation/working.ftl
new file mode 100644
index 000000000..50d126e3f
--- /dev/null
+++ b/tests/run-make/translation/working.ftl
@@ -0,0 +1,2 @@
+parse_struct_literal_body_without_path = this is a test message
+ .suggestion = this is a test suggestion