From d8d7d9618db86013ed0e4fb958fa5207d1afb8c4 Mon Sep 17 00:00:00 2001 From: Alexander Schieweck Date: Mon, 24 Feb 2020 09:14:03 +0000 Subject: [PATCH] Fix to enquote the output of mealy machines in the TFAWriter. (#38) * Fix to enquote the output of mealy machines in the TFAWriter. Closes #37. * small refactorings * add changelog notice Co-authored-by: mtf90 --- CHANGELOG.md | 5 +++++ .../serialization/taf/writer/TAFWriter.java | 2 +- .../taf/TAFSerializationTest.java | 19 +++++++++++-------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bcec48c5ce..2c08cd25d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * Removed `IOUtil#copy`, `IOUtil.skip`, `NullOutputStream`. Use the Guava equivalents from `ByteStreams` and `CharStreams`. +### Fixed + +* Correctly enquote outputs containing whitespaces in `TAFWriter` ([#37](https://github.com/LearnLib/automatalib/issues/37), thanks to [Alexander Schieweck](https://github.com/aschieweck)). + + ## [0.9.0](https://github.com/LearnLib/automatalib/releases/tag/automatalib-0.9.0) - 2020-02-05 [Full changelog](https://github.com/LearnLib/automatalib/compare/automatalib-0.8.0...automatalib-0.9.0) diff --git a/serialization/taf/src/main/java/net/automatalib/serialization/taf/writer/TAFWriter.java b/serialization/taf/src/main/java/net/automatalib/serialization/taf/writer/TAFWriter.java index 4328987987..333eeaa430 100644 --- a/serialization/taf/src/main/java/net/automatalib/serialization/taf/writer/TAFWriter.java +++ b/serialization/taf/src/main/java/net/automatalib/serialization/taf/writer/TAFWriter.java @@ -165,7 +165,7 @@ private void writeTransition(Collection symbols, String target, @Nullable Obj writeIndent(); writeStringCollection(symbols); if (output != null) { - out.append(" / ").append(output.toString()); + out.append(" / ").append(StringUtil.enquoteIfNecessary(output.toString())); } out.append(" -> ").append(target).append(System.lineSeparator()); } diff --git a/serialization/taf/src/test/java/net/automatalib/serialization/taf/TAFSerializationTest.java b/serialization/taf/src/test/java/net/automatalib/serialization/taf/TAFSerializationTest.java index 6bd1c67ce1..327b970fb7 100644 --- a/serialization/taf/src/test/java/net/automatalib/serialization/taf/TAFSerializationTest.java +++ b/serialization/taf/src/test/java/net/automatalib/serialization/taf/TAFSerializationTest.java @@ -41,36 +41,39 @@ */ public class TAFSerializationTest { - private static final Alphabet ALPHABET = Alphabets.closedCharStringRange('0', '3'); + private static final Alphabet INPUT_ALPHABET = Alphabets.closedCharStringRange('0', '3'); + + private static final Alphabet OUTPUT_ALPHABET = Alphabets.fromArray("Hello", "World", "Hello World"); private static final int AUTOMATON_SIZE = 20; @Test public void testDFASerialization() throws Exception { - final CompactDFA automaton = RandomAutomata.randomDFA(new Random(0), AUTOMATON_SIZE, ALPHABET); + final CompactDFA automaton = RandomAutomata.randomDFA(new Random(0), AUTOMATON_SIZE, INPUT_ALPHABET); weedOutTransitions(automaton); final TAFSerializationDFA serializer = TAFSerializationDFA.getInstance(); - final DFA deserializedModel = writeAndReadModel(automaton, ALPHABET, serializer, serializer); + final DFA deserializedModel = + writeAndReadModel(automaton, INPUT_ALPHABET, serializer, serializer); - Assert.assertTrue(Automata.testEquivalence(automaton, deserializedModel, ALPHABET)); + Assert.assertTrue(Automata.testEquivalence(automaton, deserializedModel, INPUT_ALPHABET)); } @Test public void testMealySerialization() throws Exception { final CompactMealy automaton = - RandomAutomata.randomMealy(new Random(0), AUTOMATON_SIZE, ALPHABET, ALPHABET); + RandomAutomata.randomMealy(new Random(0), AUTOMATON_SIZE, INPUT_ALPHABET, OUTPUT_ALPHABET); weedOutTransitions(automaton); final TAFSerializationMealy serializer = TAFSerializationMealy.getInstance(); final MealyMachine deserializedModel = - writeAndReadModel(automaton, ALPHABET, serializer, serializer); + writeAndReadModel(automaton, INPUT_ALPHABET, serializer, serializer); - Assert.assertTrue(Automata.testEquivalence(automaton, deserializedModel, ALPHABET)); + Assert.assertTrue(Automata.testEquivalence(automaton, deserializedModel, INPUT_ALPHABET)); } private > void weedOutTransitions(A automaton) { @@ -80,7 +83,7 @@ public void testMealySerialization() throws Exception { // remove some transitions for partiality for (int i = 0; i < AUTOMATON_SIZE; i++) { final int rState = random.nextInt(AUTOMATON_SIZE); - final String rInput = ALPHABET.getSymbol(random.nextInt(ALPHABET.size())); + final String rInput = INPUT_ALPHABET.getSymbol(random.nextInt(INPUT_ALPHABET.size())); automaton.removeTransition(rState, rInput, automaton.getTransition(rState, rInput)); }