From a05f9f6ec9c5166a2f8f3915ba01375dc524710b Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Mon, 16 Dec 2019 15:25:27 +0100 Subject: [PATCH] Parsing fixes --- .../protect/card_locker/ExtrasHelper.java | 27 +- .../protect/card_locker/PkpassImporter.java | 23 +- .../protect/card_locker/DatabaseTest.java | 10 +- .../protect/card_locker/ImportExportTest.java | 4 +- .../java/protect/card_locker/PkpassTest.java | 300 ++++++++++++++---- 5 files changed, 284 insertions(+), 80 deletions(-) diff --git a/app/src/main/java/protect/card_locker/ExtrasHelper.java b/app/src/main/java/protect/card_locker/ExtrasHelper.java index dda6439e0..f2ba1bf3f 100644 --- a/app/src/main/java/protect/card_locker/ExtrasHelper.java +++ b/app/src/main/java/protect/card_locker/ExtrasHelper.java @@ -1,5 +1,7 @@ package protect.card_locker; +import android.support.annotation.NonNull; + import org.json.JSONException; import org.json.JSONObject; @@ -47,8 +49,29 @@ public class ExtrasHelper { extras.put(language, values); } - public HashMap getAllValues(String language) + @NonNull + public LinkedHashMap getAllValues(String language) { - return extras.get(language); + return getAllValues(new String[]{language}); + } + + @NonNull + public LinkedHashMap getAllValues(String[] languages) + { + LinkedHashMap values = new LinkedHashMap<>(); + + // Get least preferred language (last in list) first + // Then go further and further to the start of the list (preferred language) + for(int i = (languages.length - 1); i >= 0; i--) + { + LinkedHashMap languageValues = extras.get(languages[i]); + + if(languageValues != null) + { + values.putAll(languageValues); + } + } + + return values; } } diff --git a/app/src/main/java/protect/card_locker/PkpassImporter.java b/app/src/main/java/protect/card_locker/PkpassImporter.java index 419a9f2ec..e2f08a4f9 100644 --- a/app/src/main/java/protect/card_locker/PkpassImporter.java +++ b/app/src/main/java/protect/card_locker/PkpassImporter.java @@ -6,14 +6,17 @@ import android.net.Uri; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.primitives.Chars; import com.google.zxing.BarcodeFormat; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.Arrays; import java.util.HashMap; import java.util.regex.Matcher; @@ -33,13 +36,16 @@ public class PkpassImporter { private String readZipInputStream(ZipInputStream zipInputStream) throws IOException { - StringBuilder sb = new StringBuilder(); - for (int c = zipInputStream.read(); c != -1; c = zipInputStream.read()) + byte[] buffer = new byte[2048]; + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + int size; + + while((size = zipInputStream.read(buffer, 0, buffer.length)) != -1) { - sb.append((char) c); + byteArrayOutputStream.write(buffer, 0, size); } - return sb.toString(); + return byteArrayOutputStream.toString("UTF-8"); } // FIXME: Probably very fragile @@ -96,7 +102,12 @@ public class PkpassImporter { } // Add the completely untranslated stuff as fallback - extrasHelper.addLanguageValue("", key, label + ": " + value); + String formattedUntranslatedValue = value; + if(!label.isEmpty()) + { + formattedUntranslatedValue = label + ": " + value; + } + extrasHelper.addLanguageValue("", key, formattedUntranslatedValue); // Try to find translations for(String language : translations.keySet()) @@ -286,7 +297,7 @@ public class PkpassImporter { ExtrasHelper extras = new ExtrasHelper(); extras = appendData(extras, json, styleKey, "headerFields"); extras = appendData(extras, json, styleKey, "primaryFields"); - extras = appendData(extras, json, styleKey, "secondaryField"); + extras = appendData(extras, json, styleKey, "secondaryFields"); extras = appendData(extras, json, styleKey, "auxiliaryFields"); extras = appendData(extras, json, styleKey, "backFields"); diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java index a5f222cbf..54a231487 100644 --- a/app/src/test/java/protect/card_locker/DatabaseTest.java +++ b/app/src/test/java/protect/card_locker/DatabaseTest.java @@ -82,7 +82,7 @@ public class DatabaseTest assertEquals("note1", loyaltyCard.note); assertEquals("cardId1", loyaltyCard.cardId); assertEquals(BarcodeFormat.AZTEC.toString(), loyaltyCard.barcodeType); - assertEquals(DEFAULT_EXTRAS.toString(), loyaltyCard.extras.toString()); + assertEquals(DEFAULT_EXTRAS.toJSON().toString(), loyaltyCard.extras.toJSON().toString()); } @Test @@ -110,7 +110,7 @@ public class DatabaseTest assertEquals("", loyaltyCard.note); assertEquals("", loyaltyCard.cardId); assertEquals("", loyaltyCard.barcodeType); - assertEquals("{}", loyaltyCard.extras.toString()); + assertEquals("{}", loyaltyCard.extras.toJSON().toString()); } @Test @@ -146,7 +146,7 @@ public class DatabaseTest assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE))); assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR))); assertEquals(index*2, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR))); - assertEquals("{\"en\": {\"key\": \"value\"}}", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXTRAS))); + assertEquals("{\"en\":{\"key\":\"value\"}}", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXTRAS))); cursor.moveToNext(); } @@ -181,7 +181,7 @@ public class DatabaseTest } @Test - public void databaseUpgradeFromVersion1() + public void databaseUpgradeFromVersion1() throws JSONException { SQLiteDatabase database = db.getWritableDatabase(); @@ -202,7 +202,7 @@ public class DatabaseTest assertEquals("", card.note); assertEquals(null, card.headerColor); assertEquals(null, card.headerTextColor); - assertEquals("{}", card.extras.toString()); + assertEquals("{}", card.extras.toJSON().toString()); database.close(); } diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 4e695832f..14709c47c 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -87,7 +87,7 @@ public class ImportExportTest * specified in addLoyaltyCards(), and are in sequential order * where the smallest card's index is 1 */ - private void checkLoyaltyCards() + private void checkLoyaltyCards() throws JSONException { Cursor cursor = db.getLoyaltyCardCursor(); int index = 1; @@ -105,7 +105,7 @@ public class ImportExportTest assertEquals(BARCODE_TYPE, card.barcodeType); assertEquals(Integer.valueOf(index), card.headerColor); assertEquals(Integer.valueOf(index*2), card.headerTextColor); - assertEquals(EXTRAS, card.extras); + assertEquals(EXTRAS.toJSON().toString(), card.extras.toJSON().toString()); index++; } diff --git a/app/src/test/java/protect/card_locker/PkpassTest.java b/app/src/test/java/protect/card_locker/PkpassTest.java index 6f14ea7eb..a317778ca 100644 --- a/app/src/test/java/protect/card_locker/PkpassTest.java +++ b/app/src/test/java/protect/card_locker/PkpassTest.java @@ -55,45 +55,50 @@ public class PkpassTest { // Check if all the extras got parsed correctly ExtrasHelper extras = card.extras; - assertEquals(7, extras.getAllValues("en").keySet().size()); + // Expecting no English entries + assertEquals(0, extras.getAllValues("en").keySet().size()); + // Expecting 7 untranslated entries + assertEquals(7, extras.getAllValues("").keySet().size()); + // Untranslated and English + untranslated fallback should return the same + assertEquals(extras.getAllValues(""), extras.getAllValues(new String[]{"en", ""})); // Check all 7 values - Iterator> extrasKeys = extras.getAllValues("en").entrySet().iterator(); + Iterator> extrasKeys = extras.getAllValues("").entrySet().iterator(); // 1 Map.Entry entry = extrasKeys.next(); assertEquals("staffNumber", entry.getKey()); - assertEquals("001", entry.getValue()); + assertEquals("Staff Number: 001", entry.getValue()); // 2 entry = extrasKeys.next(); assertEquals("staffName", entry.getKey()); - assertEquals("Peter Brooke", entry.getValue()); + assertEquals("Name: Peter Brooke", entry.getValue()); // 3 entry = extrasKeys.next(); assertEquals("telephoneExt", entry.getKey()); - assertEquals("9779", entry.getValue()); + assertEquals("Extension: 9779", entry.getValue()); // 4 entry = extrasKeys.next(); assertEquals("jobTitle", entry.getKey()); - assertEquals("Chief Pass Creator", entry.getValue()); + assertEquals("Job Title: Chief Pass Creator", entry.getValue()); // 5 entry = extrasKeys.next(); assertEquals("expiryDate", entry.getKey()); - assertEquals("2013-12-31T00:00-23:59", entry.getValue()); + assertEquals("Expiry Date: 2013-12-31T00:00-23:59", entry.getValue()); // 6 entry = extrasKeys.next(); assertEquals("managersName", entry.getKey()); - assertEquals("Paul Bailey", entry.getValue()); + assertEquals("Manager's Name: Paul Bailey", entry.getValue()); // 7 entry = extrasKeys.next(); assertEquals("managersExt", entry.getKey()); - assertEquals("9673", entry.getValue()); + assertEquals("Manager's Extension: 9673", entry.getValue()); } @Test @@ -116,99 +121,264 @@ public class PkpassTest { // Check if all the extras got parsed correctly ExtrasHelper extras = card.extras; + + // Expect 18 English values assertEquals(18, extras.getAllValues("en").size()); - // Check all 18 values - Iterator> extrasKeys = extras.getAllValues("en").entrySet().iterator(); + // Expect 18 German values + assertEquals(18, extras.getAllValues("de").size()); + + // Expect 18 untranslated values + assertEquals(18, extras.getAllValues("").size()); + + // Expect no French values + assertEquals(0, extras.getAllValues("fr").size()); + + // Check all 18 English, German and untranslated values + Iterator> englishKeys = extras.getAllValues("en").entrySet().iterator(); + Iterator> germanKeys = extras.getAllValues("de").entrySet().iterator(); + Iterator> untranslatedKeys = extras.getAllValues("").entrySet().iterator(); // 1 - Map.Entry entry = extrasKeys.next(); - assertEquals("gate", entry.getKey()); - assertEquals("B61", entry.getValue()); + Map.Entry englishEntry = englishKeys.next(); + Map.Entry germanEntry = germanKeys.next(); + Map.Entry untranslatedEntry = untranslatedKeys.next(); + assertEquals("gate", englishEntry.getKey()); + assertEquals("gate", germanEntry.getKey()); + assertEquals("gate", untranslatedEntry.getKey()); + assertEquals("Gate: B61", englishEntry.getValue()); + assertEquals("Gate: B61", germanEntry.getValue()); + assertEquals("gate_str: B61", untranslatedEntry.getValue()); // 2 - entry = extrasKeys.next(); - assertEquals("seat", entry.getKey()); - assertEquals("16E", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("seat", englishEntry.getKey()); + assertEquals("seat", germanEntry.getKey()); + assertEquals("seat", untranslatedEntry.getKey()); + assertEquals("Seat: 16E", englishEntry.getValue()); + assertEquals("Sitz: 16E", germanEntry.getValue()); + assertEquals("seat_str: 16E", untranslatedEntry.getValue()); // 3 - entry = extrasKeys.next(); - assertEquals("origin", entry.getKey()); - assertEquals("CGN", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("origin", englishEntry.getKey()); + assertEquals("origin", germanEntry.getKey()); + assertEquals("origin", untranslatedEntry.getKey()); + assertEquals("Cologne-Bonn: CGN", englishEntry.getValue()); + assertEquals("Cologne-Bonn: CGN", germanEntry.getValue()); + assertEquals("Cologne-Bonn: CGN", untranslatedEntry.getValue()); // 4 - entry = extrasKeys.next(); - assertEquals("destination", entry.getKey()); - assertEquals("DBV", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("destination", englishEntry.getKey()); + assertEquals("destination", germanEntry.getKey()); + assertEquals("destination", untranslatedEntry.getKey()); + assertEquals("Dubrovnik: DBV", englishEntry.getValue()); + assertEquals("Dubrovnik: DBV", germanEntry.getValue()); + assertEquals("Dubrovnik: DBV", untranslatedEntry.getValue()); // 5 - entry = extrasKeys.next(); - assertEquals("name", entry.getKey()); - assertEquals("John Doe", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("name", englishEntry.getKey()); + assertEquals("name", germanEntry.getKey()); + assertEquals("name", untranslatedEntry.getKey()); + assertEquals("Name: John Doe", englishEntry.getValue()); + assertEquals("Name: John Doe", germanEntry.getValue()); + assertEquals("name_str: John Doe", untranslatedEntry.getValue()); // 6 - entry = extrasKeys.next(); - assertEquals("status", entry.getKey()); - assertEquals("-", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("status", englishEntry.getKey()); + assertEquals("status", germanEntry.getKey()); + assertEquals("status", untranslatedEntry.getKey()); + assertEquals("Status: -", englishEntry.getValue()); + assertEquals("Status: -", germanEntry.getValue()); + assertEquals("status_str: -", untranslatedEntry.getValue()); // 7 - entry = extrasKeys.next(); - assertEquals("boardinggroup", entry.getKey()); - assertEquals("GROUP 1", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("boardinggroup", englishEntry.getKey()); + assertEquals("boardinggroup", germanEntry.getKey()); + assertEquals("boardinggroup", untranslatedEntry.getKey()); + assertEquals("Group: GROUP 1", englishEntry.getValue()); + assertEquals("Gruppe: GROUP 1", germanEntry.getValue()); + assertEquals("boardinggroup_str: GROUP 1", untranslatedEntry.getValue()); // 8 - entry = extrasKeys.next(); - assertEquals("tarif", entry.getKey()); - assertEquals("SMART", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("tarif", englishEntry.getKey()); + assertEquals("tarif", germanEntry.getKey()); + assertEquals("tarif", untranslatedEntry.getKey()); + assertEquals("Fare: SMART", englishEntry.getValue()); + assertEquals("Tarif: SMART", germanEntry.getValue()); + assertEquals("fare_str: SMART", untranslatedEntry.getValue()); // 9 - entry = extrasKeys.next(); - assertEquals("flightNumber", entry.getKey()); - assertEquals("EW 954", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("flightNumber", englishEntry.getKey()); + assertEquals("flightNumber", germanEntry.getKey()); + assertEquals("flightNumber", untranslatedEntry.getKey()); + assertEquals("Flight: EW 954", englishEntry.getValue()); + assertEquals("Flug: EW 954", germanEntry.getValue()); + assertEquals("flight_str: EW 954", untranslatedEntry.getValue()); // 10 - entry = extrasKeys.next(); - assertEquals("departureDate", entry.getKey()); - assertEquals("08/09/2019", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("departureDate", englishEntry.getKey()); + assertEquals("departureDate", germanEntry.getKey()); + assertEquals("departureDate", untranslatedEntry.getKey()); + assertEquals("Date: 08/09/2019", englishEntry.getValue()); + assertEquals("Datum: 08/09/2019", germanEntry.getValue()); + assertEquals("date_str: 08/09/2019", untranslatedEntry.getValue()); // 11 - entry = extrasKeys.next(); - assertEquals("boarding", entry.getKey()); - assertEquals("05:00", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("boarding", englishEntry.getKey()); + assertEquals("boarding", germanEntry.getKey()); + assertEquals("boarding", untranslatedEntry.getKey()); + assertEquals("Boarding: 05:00", englishEntry.getValue()); + assertEquals("Boarding: 05:00", germanEntry.getValue()); + assertEquals("boarding_str: 05:00", untranslatedEntry.getValue()); // 12 - entry = extrasKeys.next(); - assertEquals("closure", entry.getKey()); - assertEquals("05:15", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("closure", englishEntry.getKey()); + assertEquals("closure", germanEntry.getKey()); + assertEquals("closure", untranslatedEntry.getKey()); + assertEquals("Gate closure: 05:15", englishEntry.getValue()); + assertEquals("Gate Schließt: 05:15", germanEntry.getValue()); + assertEquals("closure_str: 05:15", untranslatedEntry.getValue()); // 13 - entry = extrasKeys.next(); - assertEquals("info", entry.getKey()); - assertEquals("info_content_str", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("info", englishEntry.getKey()); + assertEquals("info", germanEntry.getKey()); + assertEquals("info", untranslatedEntry.getKey()); + assertEquals("Eurowings wishes you a pleasant flight .\r\n" + + "\r\n" + + "We kindly ask you to be present at your departure gate on time.", englishEntry.getValue()); + assertEquals("Eurowings wünscht Ihnen einen angenehmen Flug.\r\n" + + "\r\n" + + "Wir bitten Sie, sich zur angegeben Boarding Zeit am Gate einzufinden.", germanEntry.getValue()); + assertEquals("info_content_str", untranslatedEntry.getValue()); // 14 - entry = extrasKeys.next(); - assertEquals("recordlocator", entry.getKey()); - assertEquals("JBZPPP", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("recordlocator", englishEntry.getKey()); + assertEquals("recordlocator", germanEntry.getKey()); + assertEquals("recordlocator", untranslatedEntry.getKey()); + assertEquals("Booking code: JBZPPP", englishEntry.getValue()); + assertEquals("Buchungscode: JBZPPP", germanEntry.getValue()); + assertEquals("recordlocator_str: JBZPPP", untranslatedEntry.getValue()); // 15 - entry = extrasKeys.next(); - assertEquals("sequence", entry.getKey()); - assertEquals("73", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("sequence", englishEntry.getKey()); + assertEquals("sequence", germanEntry.getKey()); + assertEquals("sequence", untranslatedEntry.getKey()); + assertEquals("Sequence: 73", englishEntry.getValue()); + assertEquals("Sequenz: 73", germanEntry.getValue()); + assertEquals("sequence_str: 73", untranslatedEntry.getValue()); // 16 - entry = extrasKeys.next(); - assertEquals("notice", entry.getKey()); - assertEquals("notice_content_str", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("notice", englishEntry.getKey()); + assertEquals("notice", germanEntry.getKey()); + assertEquals("notice", untranslatedEntry.getKey()); + assertEquals("Notice: Please note that although your flight may be delayed, you will still need to check in and go to your departure gate on time as scheduled.\r\n" + + "\r\n" + + "Carry on one item of hand luggage (8 kg, 55 x 40 x 23 cm) for free.", englishEntry.getValue()); + assertEquals("Hinweis: Bitte beachten Sie, dass obwohl Ihr Flug verspätet sein mag, Sie dennoch wie geplant pünktlich am Check-in und am Abfluggate erscheinen müssen.\r\n" + + "\r\n" + + "Kostenlose Mitnahme eines Handgepäckstücks (8 Kg, 55 x 40 x 23cm).", germanEntry.getValue()); + assertEquals("notice_str: notice_content_str", untranslatedEntry.getValue()); // 17 - entry = extrasKeys.next(); - assertEquals("baggage", entry.getKey()); - assertEquals("baggage_content_str", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("baggage", englishEntry.getKey()); + assertEquals("baggage", germanEntry.getKey()); + assertEquals("baggage", untranslatedEntry.getKey()); + assertEquals("Carrying liquids in hand luggage: In addition to other restrictions on hand luggage, there are still restrictions on liquids and gels brought by the passenger or purchased before the security control on all departures within the European Union, as well as to many other countries (including Switzerland, Russia, Iceland, Croatia, Israel, Egypt, Morocco, Tunisia and Norway):\r\n" + + "\r\n" + + "- All liquids (such as toiletries and cosmetics, gels, pastes, creams, lotions, mixtures of liquids and solids, perfumes, pressurised containers, cans, water bottles etc) as well as wax and gel-like substances may only be carried on board in amounts less than 100ml or 100g.\r\n" + + "\r\n" + + "- These liquids or substances must be packed in closed containers in a transparent, re-sealable plastic bag (max. contents 1 kg).\r\n" + + "\r\n" + + "- It is the passenger’s responsibility to purchase this bag before departure. They are available in many supermarkets, e.g. as freezer bags. It is currently not possible for passengers to obtain or purchase the required bags from Eurowings check-in.\r\n" + + "\r\n" + + "- Prescription medicines and baby food may still be carried in hand baggage. The passenger must prove that such medicines and/or baby food are needed during the flight.\r\n" + + "\r\n" + + "- Products and bags which do not meet the requirements or are only sealed with a rubber band or similar will unfortunately have to be surrendered by passengers\r\n" + + "\r\n" + + "In order to pass through the airport as quickly as possible, you are strongly advised to pack any liquids or gels which are not essential for your journey on board the aircraft in your checked baggage if possible.\r\n" + + "\r\n" + + "As a matter of course, liquids from the Travel Value / Duty Free shops which have been purchased after you have passed through security are still allowed on board.\r\n" + + "\r\n" + + "Eurowings shall not be liable for any items which passengers are prohibited from carrying in their hand baggage for security reasons and are required to surrender at the security checkpoint.", englishEntry.getValue()); + assertEquals("Mitnahme von Flüssigkeiten im Handgepäck: Neben den sonstigen Beschränkungen für das Handgepäck ist für alle Abflüge innerhalb der Europäischen Union sowie vielen weiteren Ländern (u.a. Schweiz, Russland, Island, Kroatien, Israel, Ägypten, Marokko, Tunesien, Norwegen) die Mitnahme von vor der Fluggastkontrolle erworbenen bzw. mitgebrachten Flüssigkeiten und Gels nur noch eingeschränkt erlaubt:\r\n" + + "\r\n" + + "- Sämtliche Flüssigkeiten (wie Kosmetik- und Toilettenartikel, Gels, Pasten, Cremes, Lotionen, Gemische aus flüssigen und festen Stoffen, Parfums, Behälter unter Druck, Dosen, Wasserflaschen etc.) sowie wachs- oder gelartige Stoffe dürfen nur noch in Behältnissen bis zu 100 ml bzw. 100 g mit an Bord genommen werden.\r\n" + + "\r\n" + + "- Diese Flüssigkeiten bzw. Stoffe müssen in einem transparenten, wiederverschließbaren Plastikbeutel (max. 1 kg Inhalt) vollständig geschlossen, verpackt sein.\r\n" + + "\r\n" + + "- Diese Beutel müssen Fluggäste selbst vor dem Abflug erwerben. Sie sind in vielen Supermärkten z. B. als Gefrierbeutel erhältlich. Es besteht zurzeit keine Möglichkeit, entsprechende Plastikbeutel am Eurowings Check-In zu erwerben bzw. auszugeben.\r\n" + + "\r\n" + + "- Verschreibungspflichtige Medikamente sowie Babynahrung dürfen weiterhin im Handgepäck transportiert werden. Der Fluggast muss nachweisen, dass die Medikamente und Babynahrung während des Fluges benötigt werden.\r\n" + + "\r\n" + + "- Produkte und Beutel, die nicht den Maßgaben entsprechen oder die nur mit Gummiband oder ähnlichem verschlossen sind, müssen leider abgegeben werden.\r\n" + + "\r\n" + + "Flüssigkeiten und Gels, die Sie nicht zwingend während Ihres Aufenthalts an Bord benötigen, sollten zur raschen Fluggastabfertigung nach Möglichkeit im aufzugebenden Gepäck untergebracht werden.\r\n" + + "\r\n" + + "Selbstverständlich ist die Mitnahme von allen Flüssigkeiten/Gels/Getränken aus Travel-Value oder Duty Free-Shops, die nach der Fluggastkontrolle erworben werden, weiterhin erlaubt.\r\n" + + "\r\n" + + "Eurowings übernimmt keine Haftung für Gegenstände, die der Fluggast nicht im Handgepäck mitführen darf und deshalb aus Sicherheitsgründen an der Fluggastkontrolle abgeben muss.", germanEntry.getValue()); + assertEquals("baggage_str: baggage_content_str", untranslatedEntry.getValue()); // 18 - entry = extrasKeys.next(); - assertEquals("contact", entry.getKey()); - assertEquals("contact_content_str", entry.getValue()); + englishEntry = englishKeys.next(); + germanEntry = germanKeys.next(); + untranslatedEntry = untranslatedKeys.next(); + assertEquals("contact", englishEntry.getKey()); + assertEquals("contact", germanEntry.getKey()); + assertEquals("contact", untranslatedEntry.getKey()); + assertEquals("Contact: https://mobile.eurowings.com/booking/StaticContactInfo.aspx?culture=en-GB&back=home", englishEntry.getValue()); + assertEquals("Kontakt: Sie erreichen das deutsche Call Center unter der Telefonnummer\r\n" + + "\r\n" + + "0180 6 320 320 ( 0:00 Uhr - 24:00 Uhr )\r\n" + + "\r\n" + + "(0,20 € pro Anruf aus dem Festnetz der Deutschen Telekom - Mobilfunk maximal 0,60 € pro Anruf).", germanEntry.getValue()); + assertEquals("contact_str: contact_content_str", untranslatedEntry.getValue()); } }