--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# This file is free software, which comes along with NIT. This software is
+# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. You can modify it is you want, provided this header
+# is kept unaltered, and a notification of the changes is added.
+# You are allowed to redistribute it and sell it, alone or is a part of
+# another product.
+
+module test_abstract_text is test_suite
+
+import test_suite
+import text
+intrude import ropes
+
+class TestText
+ super TestSuite
+
+ private var factories: Collection[TextFactory] = [
+ new ConcatFactory,
+ new RopeBufferFactory,
+ new FlatBufferFactory
+ : TextFactory]
+
+ fun test_escape_to_c do
+ for f in factories do
+ assert f.create("abAB12<>&").escape_to_c == "abAB12<>&"
+ assert f.create("\n\"'\\").escape_to_c == "\\n\\\"\\'\\\\"
+ assert f.create("allo???!").escape_to_c == "allo??\\?!"
+ assert f.create("??=??/??'??(??)").escape_to_c == "?\\?=?\\?/??\\'?\\?(?\\?)"
+ assert f.create("??!??<??>??-").escape_to_c == "?\\?!?\\?<?\\?>?\\?-"
+ end
+ end
+end
+
+# A factory that creates instances of a particular implementation of `Text`
+interface TextFactory
+
+ # Create a `Text` instance from the specified string
+ fun create(s: String): Text is abstract
+end
+
+
+class ConcatFactory
+ super TextFactory
+
+ redef fun create(s) do return new Concat("", s)
+end
+
+class RopeBufferFactory
+ super TextFactory
+
+ redef fun create(s) do return new RopeBuffer.from(s)
+end
+
+class FlatBufferFactory
+ super TextFactory
+
+ redef fun create(s) do return new FlatBuffer.from(s)
+end