summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--test/ruby/encoding/config.ru8
-rw-r--r--test/test_ruby_application.py47
2 files changed, 55 insertions, 0 deletions
diff --git a/test/ruby/encoding/config.ru b/test/ruby/encoding/config.ru
new file mode 100644
index 00000000..60bf0efa
--- /dev/null
+++ b/test/ruby/encoding/config.ru
@@ -0,0 +1,8 @@
+app = Proc.new do |env|
+ ['200', {
+ 'Content-Length' => '0',
+ 'X-Enc' => Encoding.default_external.to_s,
+ }, ['']]
+end
+
+run app
diff --git a/test/test_ruby_application.py b/test/test_ruby_application.py
index b18a6cee..12a078b7 100644
--- a/test/test_ruby_application.py
+++ b/test/test_ruby_application.py
@@ -1,4 +1,5 @@
import re
+import subprocess
import pytest
from unit.applications.lang.ruby import TestApplicationRuby
@@ -223,6 +224,52 @@ class TestRubyApplication(TestApplicationRuby):
self.wait_for_record(r'\[error\].+At exit called\.') is not None
), 'at exit'
+ def test_ruby_application_encoding(self):
+ self.load('encoding')
+
+ try:
+ locales = subprocess.check_output(
+ ['locale', '-a'], stderr=subprocess.STDOUT,
+ ).decode().split('\n')
+
+ except (FileNotFoundError, subprocess.CalledProcessError):
+ pytest.skip('require locale')
+
+ def get_locale(pattern):
+ return next(
+ (
+ l
+ for l in locales
+ if re.match(pattern, l.upper()) is not None
+ ),
+ None,
+ )
+
+ utf8 = get_locale(r'.*UTF[-_]?8')
+ iso88591 = get_locale(r'.*ISO[-_]?8859[-_]?1')
+
+ def check_locale(enc):
+ assert 'success' in self.conf(
+ {"LC_CTYPE": enc}, '/config/applications/encoding/environment',
+ )
+
+ resp = self.get()
+ assert resp['status'] == 200, 'status'
+
+ enc_default = re.sub(r'[-_]', '', resp['headers']['X-Enc']).upper()
+ assert (
+ enc_default == re.sub(r'[-_]', '', enc.split('.')[-1]).upper()
+ )
+
+ if utf8:
+ check_locale(utf8)
+
+ if iso88591:
+ check_locale(iso88591)
+
+ if not utf8 and not iso88591:
+ pytest.skip('no available locales')
+
def test_ruby_application_header_custom(self):
self.load('header_custom')