Add CtsIcu4cTestCases for ICU4C API coverage - Attempt 2
Attempt 2: The test is only for primary ABI, until the Soong limitation
is resolved.
- cintltest and intltest are the executable binaries
running the devices.
- cintltest and intltest are basically compiled against
libicuuc and libicui18n, except if the APIs are available
in the NDK surface in libicu, the test will link that in favour
of NDK. So the APIs provided in the NDK will have the API coverge,
while the test can keep using the hidden APIs in libicuuc, and
libicui18n.
cts_headers/ are the same as libicuuc and libicui18n headers, except
that unicode/urename.h is modified by the generate_ndk.py to select
the NDK API surface.
Bug: 160350521
Test: atest CtsIcu4cTestCases
Test: Inspect the symbol table manually by "objdump -TC cintltst"
Test: build/soong/build_test.bash
Test: Test: OUT_DIR=ndk_out build/soong/scripts/build-ndk-prebuilts.sh
Change-Id: Icf51b09c36eb3b4ef30a5032bdef7af1a76567d9
diff --git a/libicu/cts_headers/brktrans.h b/libicu/cts_headers/brktrans.h
new file mode 100644
index 0000000..cb3def9
--- /dev/null
+++ b/libicu/cts_headers/brktrans.h
@@ -0,0 +1,104 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (C) 2008-2015, International Business Machines
+* Corporation and others. All Rights Reserved.
+**********************************************************************
+* Date Name Description
+* 05/11/2008 Andy Heninger Ported from Java
+**********************************************************************
+*/
+#ifndef BRKTRANS_H
+#define BRKTRANS_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_TRANSLITERATION && !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/translit.h"
+
+#include "unicode/localpointer.h"
+
+
+U_NAMESPACE_BEGIN
+
+class UVector32;
+
+/**
+ * A transliterator that pInserts the specified characters at word breaks.
+ * To restrict it to particular characters, use a filter.
+ * TODO: this is an internal class, and only temporary.
+ * Remove it once we have \b notation in Transliterator.
+ */
+class BreakTransliterator : public Transliterator {
+public:
+
+ /**
+ * Constructs a transliterator.
+ * @param adoptedFilter the filter for this transliterator.
+ */
+ BreakTransliterator(UnicodeFilter* adoptedFilter = 0);
+
+ /**
+ * Destructor.
+ */
+ virtual ~BreakTransliterator();
+
+ /**
+ * Copy constructor.
+ */
+ BreakTransliterator(const BreakTransliterator&);
+
+ /**
+ * Transliterator API.
+ * @return A copy of the object.
+ */
+ virtual BreakTransliterator* clone() const;
+
+ virtual const UnicodeString &getInsertion() const;
+
+ virtual void setInsertion(const UnicodeString &insertion);
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ */
+ U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
+
+ protected:
+
+ /**
+ * Implements {@link Transliterator#handleTransliterate}.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param offset the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @param incremental if true, assume more text may be coming after
+ * pos.contextLimit. Otherwise, assume the text is complete.
+ */
+ virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
+ UBool isIncremental) const;
+
+ private:
+ LocalPointer<BreakIterator> cachedBI;
+ LocalPointer<UVector32> cachedBoundaries;
+ UnicodeString fInsertion;
+
+ static UnicodeString replaceableAsString(Replaceable &r);
+
+ /**
+ * Assignment operator.
+ */
+ BreakTransliterator& operator=(const BreakTransliterator&);
+};
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_TRANSLITERATION */
+
+#endif