Title: [1239] trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n: Added UTF-8 resource bundle to ensure compatibility with accent-based languages.

Diff

Modified: trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/i18n/I18nKeywordsBehaviour.java (1238 => 1239)

--- trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/i18n/I18nKeywordsBehaviour.java	2009-09-10 11:53:20 UTC (rev 1238)
+++ trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/i18n/I18nKeywordsBehaviour.java	2009-09-10 14:18:51 UTC (rev 1239)
@@ -1,61 +1,72 @@
 package org.jbehave.scenario.i18n;
 
+import static java.util.Arrays.asList;
 import static org.junit.Assert.assertEquals;
 
+import java.io.UnsupportedEncodingException;
+import java.util.List;
 import java.util.Locale;
 
 import org.jbehave.scenario.definition.KeyWords;
 import org.junit.Test;
 
-
 public class I18nKeywordsBehaviour {
 
 	@Test
-	public void keywordsInEnglishAsDefault(){
-		KeyWords keywords = new I18nKeyWords();
-		assertEquals("Scenario:", keywords.scenario());
-		assertEquals("GivenScenarios:", keywords.givenScenarios());
-		assertEquals("Examples:", keywords.examplesTable());		
-		assertEquals("Given", keywords.given());
-		assertEquals("When", keywords.when());
-		assertEquals("Then", keywords.then());
-		assertEquals("And", keywords.and());
+	public void keywordsInEnglishAsDefault() {
+		ensureKeywordsAre(null, asList("Scenario:", "GivenScenarios:",
+				"Examples:", "Example:", "Given", "When", "Then", "And",
+				"PENDING", "NOT PERFORMED", "FAILED"));
 	}
 
 	@Test
-	public void keywordsInItalian(){
-		KeyWords keywords = new I18nKeyWords(new Locale("it"));
-		assertEquals("Scenario:", keywords.scenario());
-		assertEquals("Dati gli scenari:", keywords.givenScenarios());
-		assertEquals("Esempi:", keywords.examplesTable());		
-		assertEquals("Dato che", keywords.given());
-		assertEquals("Quando", keywords.when());
-		assertEquals("Allora", keywords.then());
-		assertEquals("E", keywords.and());
+	public void keywordsInItalian() {
+		ensureKeywordsAre(new Locale("it"), asList("Scenario:",
+				"Dati gli scenari:", "Esempi:", "Esempio:", "Dato che",
+				"Quando", "Allora", "E", "PENDENTE", "NON ESEGUITO", "FALLITO"));
 	}
 
 	@Test
-	public void keywordsInSpanish(){
-		KeyWords keywords = new I18nKeyWords(new Locale("es"));
-		assertEquals("Escenario:", keywords.scenario());
-		assertEquals("Dados los escenarios:", keywords.givenScenarios());
-		assertEquals("Ejemplos:", keywords.examplesTable());		
-		assertEquals("Dado que", keywords.given());
-		assertEquals("Cuando", keywords.when());
-		assertEquals("Entonces", keywords.then());
-		assertEquals("Y", keywords.and());
-	}	
+	public void keywordsInSpanish() {
+		ensureKeywordsAre(new Locale("es"), asList("Escenario:",
+				"Dados los escenarios:", "Ejemplos:", "Ejemplo:", "Dado que",
+				"Cuando", "Entonces", "Y", "PENDIENTE", "NO REALIZADO",
+				"FRACASADO"));
+	}
 
 	@Test
-	public void keywordsInPortuguese(){
-		KeyWords keywords = new I18nKeyWords(new Locale("pt"));
-		assertEquals("Cen‡rio:", keywords.scenario());
-		assertEquals("Dados os cen‡rios:", keywords.givenScenarios());
-		assertEquals("Exemplos:", keywords.examplesTable());		
-		assertEquals("Dado que", keywords.given());
-		assertEquals("Quando", keywords.when());
-		assertEquals("Ent‹o", keywords.then());
-		assertEquals("E", keywords.and());
+	public void keywordsInPortuguese() {
+		ensureKeywordsAre(new Locale("pt"), asList("Cen‡rio:",
+				"Dados os cen‡rios:", "Exemplos:", "Exemplo:", "Dado que",
+				"Quando", "Ent‹o", "E", "PENDENTE", "NÌO EXECUTADO", "FALHADO"));
 	}
-	
+
+	private void ensureKeywordsAre(Locale locale, List<String> expected) {
+		KeyWords keywords = (locale == null ? new I18nKeyWords()
+				: new I18nKeyWords(locale));
+		assertUtf8Equals(expected.get(0), keywords.scenario());
+		assertUtf8Equals(expected.get(1), keywords.givenScenarios());
+		assertUtf8Equals(expected.get(2), keywords.examplesTable());
+		assertUtf8Equals(expected.get(3), keywords.examplesTableRow());
+		assertUtf8Equals(expected.get(4), keywords.given());
+		assertUtf8Equals(expected.get(5), keywords.when());
+		assertUtf8Equals(expected.get(6), keywords.then());
+		assertUtf8Equals(expected.get(7), keywords.and());
+		assertUtf8Equals(expected.get(8), keywords.pending());
+		assertUtf8Equals(expected.get(9), keywords.notPerformed());
+		assertUtf8Equals(expected.get(10), keywords.failed());
+	}
+
+	private void assertUtf8Equals(String expected, String actual) {
+		assertEquals(utf8(expected), actual);
+	}
+
+	private String utf8(String value) {
+		try {
+			return new String(value.getBytes("ISO-8859-1"), "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
 }

Modified: trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/I18nKeyWords.java (1238 => 1239)

--- trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/I18nKeyWords.java	2009-09-10 11:53:20 UTC (rev 1238)
+++ trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/I18nKeyWords.java	2009-09-10 14:18:51 UTC (rev 1239)
@@ -1,7 +1,5 @@
 package org.jbehave.scenario.i18n;
 
-import static java.util.ResourceBundle.getBundle;
-
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
@@ -43,7 +41,7 @@
 
     private static ResourceBundle lookupBunde(String bundleName, Locale locale) {
         try {
-            return getBundle(bundleName.trim(), locale);
+            return UTF8ResourceBundle.getBundle(bundleName.trim(), locale);
         } catch (MissingResourceException e) {
             return EMPTY_BUNDLE;
         }

Added: trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/UTF8ResourceBundle.java (0 => 1239)

--- trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/UTF8ResourceBundle.java	                        (rev 0)
+++ trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/UTF8ResourceBundle.java	2009-09-10 14:18:51 UTC (rev 1239)
@@ -0,0 +1,62 @@
+package org.jbehave.scenario.i18n;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+
+public class UTF8ResourceBundle {
+
+	public static ResourceBundle getBundle(String baseName) {
+		return utf8ResourceBundle(ResourceBundle.getBundle(baseName));
+	}
+
+	public static ResourceBundle getBundle(String baseName, Locale locale) {
+		return utf8ResourceBundle(ResourceBundle.getBundle(baseName,
+				locale));
+	}
+
+	private static ResourceBundle utf8ResourceBundle(
+			ResourceBundle bundle) {
+		if (!(bundle instanceof PropertyResourceBundle))
+			return bundle;
+
+		return new UTF8ResourceBundleDecorator((PropertyResourceBundle) bundle);
+	}
+
+	private static class UTF8ResourceBundleDecorator extends ResourceBundle {
+
+		private static final String ISO_8859_1 = "ISO-8859-1";
+		private static final String UTF_8 = "UTF-8";
+		
+		private final PropertyResourceBundle delegate;
+
+		private UTF8ResourceBundleDecorator(PropertyResourceBundle bundle) {
+			this.delegate = bundle;
+		}
+
+		public Enumeration<String> getKeys() {
+			return delegate.getKeys();
+		}
+
+		protected Object handleGetObject(String key) {
+			String value = (String) delegate.handleGetObject(key);
+			try {
+				return new String(value.getBytes(ISO_8859_1), UTF_8);
+			} catch (UnsupportedEncodingException e) {
+				throw new InvalidEncodingExcepion(value, e);
+			}
+		}
+	}
+
+	@SuppressWarnings("serial")
+	private static final class InvalidEncodingExcepion extends RuntimeException {
+
+		public InvalidEncodingExcepion(String value,
+				UnsupportedEncodingException cause) {
+			super(value, cause);
+		}
+
+	}
+}

Modified: trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_es.properties (1238 => 1239)

--- trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_es.properties	2009-09-10 11:53:20 UTC (rev 1238)
+++ trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_es.properties	2009-09-10 14:18:51 UTC (rev 1239)
@@ -6,6 +6,6 @@
 When=Cuando
 Then=Entonces
 And=Y
-Pending=PENDING
-NotPerformed=NOT PERFORMED
-Failed=FAILED
+Pending=PENDIENTE
+NotPerformed=NO REALIZADO
+Failed=FRACASADO

Modified: trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_pt.properties (1238 => 1239)

--- trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_pt.properties	2009-09-10 11:53:20 UTC (rev 1238)
+++ trunk/core/jbehave-core/src/java/org/jbehave/scenario/i18n/keywords_pt.properties	2009-09-10 14:18:51 UTC (rev 1239)
@@ -1,11 +1,11 @@
-Scenario=Cen\u00E1rio:
-GivenScenarios=Dados os cen\u00E1rios:
+Scenario=Cenário:
+GivenScenarios=Dados os cenários:
 ExamplesTable=Exemplos:
 ExamplesTableRow=Exemplo:
 Given=Dado que
 When=Quando
-Then=Ent\u00E3o
+Then=Então
 And=E
-Pending=PENDING
-NotPerformed=NON PERFORMED
-Failed=FAILED
+Pending=PENDENTE
+NotPerformed=NÃO EXECUTADO
+Failed=FALHADO


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to