[libvirt] [PATCH] tests: skip some unicode tests if expected output won't match

Daniel P. Berrangé posted 1 patch 5 years, 6 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20180904103024.13851-1-berrange@redhat.com
Test syntax-check passed
tests/vshtabletest.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
[libvirt] [PATCH] tests: skip some unicode tests if expected output won't match
Posted by Daniel P. Berrangé 5 years, 6 months ago
The expected output strings from the vshtabletest.c are created on a
modern Linux host where unicode printing support is very good. On older
Linux platforms, or non-Linux platforms, some unicode characters will
not be considered printable. While the vsh table alignment code will
stil do the right thing with escaping & aligning in this case, the
result will not match the test's expected output.

Since we know the code is working correctly, do a check with iswprint()
to validate the platform's quality and skip the test if it fails. This
fixes the test on FreeBSD platforms.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---

Pushed as a build fix

 tests/vshtabletest.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/tests/vshtabletest.c b/tests/vshtabletest.c
index 9e9c045226..1138e34161 100644
--- a/tests/vshtabletest.c
+++ b/tests/vshtabletest.c
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <locale.h>
+#include <wctype.h>
 
 #include "internal.h"
 #include "testutils.h"
@@ -158,6 +159,15 @@ testUnicodeArabic(const void *opaque ATTRIBUTE_UNUSED)
 " 1              ﻉﺪﻴﻟ ﺎﻠﺜﻘﻴﻟ ﻕﺎﻣ ﻊﻧ, ٣٠ ﻎﻴﻨﻳﺍ ﻮﺘﻧﺎﻤﺗ ﺎﻠﺛﺎﻠﺛ، ﺄﺳﺭ, ﺩﻮﻟ   ﺩﻮﻟ. ﺄﻣﺎﻣ ﺍ ﺎﻧ ﻲﻜﻧ  \n"
 " ﺺﻔﺣﺓ           ﺖﻜﺘﻴﻛﺍً ﻊﻟ, ﺎﻠﺠﻧﻭﺩ ﻭﺎﻠﻌﺗﺍﺩ                              ﺵﺭ                  \n";
     vshTablePtr table;
+    wchar_t wc;
+
+    /* If this char is not classed as printable, the actual
+     * output won't match what this test expects. The code
+     * is still operating correctly, but we have different
+     * layout */
+    mbrtowc(&wc, "،", MB_CUR_MAX, NULL);
+    if (!iswprint(wc))
+        return EXIT_AM_SKIP;
 
     table = vshTableNew("ﻡﺍ ﻢﻣﺍ ﻕﺎﺌﻣﺓ", "ﺓ ﺎﻠﺼﻋ", "ﺍﻸﺜﻧﺎﻧ", NULL);
     if (!table)
@@ -192,6 +202,15 @@ testUnicodeZeroWidthChar(const void *opaque ATTRIBUTE_UNUSED)
 " 1\u200B    fedora28   run\u200Bning  \n"
 " 2    rhel7.5    running  \n";
     char *act = NULL;
+    wchar_t wc;
+
+    /* If this char is not classed as printable, the actual
+     * output won't match what this test expects. The code
+     * is still operating correctly, but we have different
+     * layout */
+    mbrtowc(&wc, "\u200B", MB_CUR_MAX, NULL);
+    if (!iswprint(wc))
+        return EXIT_AM_SKIP;
 
     table = vshTableNew("I\u200Bd", "Name", "\u200BStatus", NULL);
     if (!table)
-- 
2.17.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] tests: skip some unicode tests if expected output won't match
Posted by Simon Kobyda 5 years, 6 months ago
On Tue, 2018-09-04 at 11:30 +0100, Daniel P. Berrangé wrote:
> The expected output strings from the vshtabletest.c are created on a
> modern Linux host where unicode printing support is very good. On
> older
> Linux platforms, or non-Linux platforms, some unicode characters will
> not be considered printable. While the vsh table alignment code will
> stil do the right thing with escaping & aligning in this case, the
> result will not match the test's expected output.
> 
> Since we know the code is working correctly, do a check with
> iswprint()
> to validate the platform's quality and skip the test if it fails.
> This
> fixes the test on FreeBSD platforms.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> 
> Pushed as a build fix
> 
>  tests/vshtabletest.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tests/vshtabletest.c b/tests/vshtabletest.c
> index 9e9c045226..1138e34161 100644
> --- a/tests/vshtabletest.c
> +++ b/tests/vshtabletest.c
> @@ -21,6 +21,7 @@
>  #include <stdlib.h>
>  #include <stdio.h>
>  #include <locale.h>
> +#include <wctype.h>
>  
>  #include "internal.h"
>  #include "testutils.h"
> @@ -158,6 +159,15 @@ testUnicodeArabic(const void *opaque
> ATTRIBUTE_UNUSED)
>  " 1              ﻉﺪﻴﻟ ﺎﻠﺜﻘﻴﻟ ﻕﺎﻣ ﻊﻧ, ٣٠ ﻎﻴﻨﻳﺍ ﻮﺘﻧﺎﻤﺗ ﺎﻠﺛﺎﻠﺛ، ﺄﺳﺭ,
> ﺩﻮﻟ   ﺩﻮﻟ. ﺄﻣﺎﻣ ﺍ ﺎﻧ ﻲﻜﻧ  \n"
>  " ﺺﻔﺣﺓ           ﺖﻜﺘﻴﻛﺍً ﻊﻟ, ﺎﻠﺠﻧﻭﺩ
> ﻭﺎﻠﻌﺗﺍﺩ                              ﺵﺭ                  \n";
>      vshTablePtr table;
> +    wchar_t wc;
> +
> +    /* If this char is not classed as printable, the actual
> +     * output won't match what this test expects. The code
> +     * is still operating correctly, but we have different
> +     * layout */
> +    mbrtowc(&wc, "،", MB_CUR_MAX, NULL);
> +    if (!iswprint(wc))
> +        return EXIT_AM_SKIP;
>  
>      table = vshTableNew("ﻡﺍ ﻢﻣﺍ ﻕﺎﺌﻣﺓ", "ﺓ ﺎﻠﺼﻋ", "ﺍﻸﺜﻧﺎﻧ", NULL);
>      if (!table)
> @@ -192,6 +202,15 @@ testUnicodeZeroWidthChar(const void *opaque
> ATTRIBUTE_UNUSED)
>  " 1\u200B    fedora28   run\u200Bning  \n"
>  " 2    rhel7.5    running  \n";
>      char *act = NULL;
> +    wchar_t wc;
> +
> +    /* If this char is not classed as printable, the actual
> +     * output won't match what this test expects. The code
> +     * is still operating correctly, but we have different
> +     * layout */
> +    mbrtowc(&wc, "\u200B", MB_CUR_MAX, NULL);
> +    if (!iswprint(wc))
> +        return EXIT_AM_SKIP;

Sidenote: This test case with zero-width characters would pass without
any problems if we implement environment variable
"gl_cv_func_wcwidth_works=no" as suggested here: 
https://lists.gnu.org/archive/html/bug-gnulib/2018-08/msg00165.html.
But that's not something important.
I'm happy that tests on freebsd pass :).

Simon.

>  
>      table = vshTableNew("I\u200Bd", "Name", "\u200BStatus", NULL);
>      if (!table)

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] tests: skip some unicode tests if expected output won't match
Posted by Daniel P. Berrangé 5 years, 6 months ago
On Tue, Sep 04, 2018 at 04:57:42PM +0200, Simon Kobyda wrote:
> On Tue, 2018-09-04 at 11:30 +0100, Daniel P. Berrangé wrote:
> > The expected output strings from the vshtabletest.c are created on a
> > modern Linux host where unicode printing support is very good. On
> > older
> > Linux platforms, or non-Linux platforms, some unicode characters will
> > not be considered printable. While the vsh table alignment code will
> > stil do the right thing with escaping & aligning in this case, the
> > result will not match the test's expected output.
> > 
> > Since we know the code is working correctly, do a check with
> > iswprint()
> > to validate the platform's quality and skip the test if it fails.
> > This
> > fixes the test on FreeBSD platforms.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> > 
> > Pushed as a build fix
> > 
> >  tests/vshtabletest.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> > 
> > diff --git a/tests/vshtabletest.c b/tests/vshtabletest.c
> > index 9e9c045226..1138e34161 100644
> > --- a/tests/vshtabletest.c
> > +++ b/tests/vshtabletest.c
> > @@ -21,6 +21,7 @@
> >  #include <stdlib.h>
> >  #include <stdio.h>
> >  #include <locale.h>
> > +#include <wctype.h>
> >  
> >  #include "internal.h"
> >  #include "testutils.h"
> > @@ -158,6 +159,15 @@ testUnicodeArabic(const void *opaque
> > ATTRIBUTE_UNUSED)
> >  " 1              ﻉﺪﻴﻟ ﺎﻠﺜﻘﻴﻟ ﻕﺎﻣ ﻊﻧ, ٣٠ ﻎﻴﻨﻳﺍ ﻮﺘﻧﺎﻤﺗ ﺎﻠﺛﺎﻠﺛ، ﺄﺳﺭ,
> > ﺩﻮﻟ   ﺩﻮﻟ. ﺄﻣﺎﻣ ﺍ ﺎﻧ ﻲﻜﻧ  \n"
> >  " ﺺﻔﺣﺓ           ﺖﻜﺘﻴﻛﺍً ﻊﻟ, ﺎﻠﺠﻧﻭﺩ
> > ﻭﺎﻠﻌﺗﺍﺩ                              ﺵﺭ                  \n";
> >      vshTablePtr table;
> > +    wchar_t wc;
> > +
> > +    /* If this char is not classed as printable, the actual
> > +     * output won't match what this test expects. The code
> > +     * is still operating correctly, but we have different
> > +     * layout */
> > +    mbrtowc(&wc, "،", MB_CUR_MAX, NULL);
> > +    if (!iswprint(wc))
> > +        return EXIT_AM_SKIP;
> >  
> >      table = vshTableNew("ﻡﺍ ﻢﻣﺍ ﻕﺎﺌﻣﺓ", "ﺓ ﺎﻠﺼﻋ", "ﺍﻸﺜﻧﺎﻧ", NULL);
> >      if (!table)
> > @@ -192,6 +202,15 @@ testUnicodeZeroWidthChar(const void *opaque
> > ATTRIBUTE_UNUSED)
> >  " 1\u200B    fedora28   run\u200Bning  \n"
> >  " 2    rhel7.5    running  \n";
> >      char *act = NULL;
> > +    wchar_t wc;
> > +
> > +    /* If this char is not classed as printable, the actual
> > +     * output won't match what this test expects. The code
> > +     * is still operating correctly, but we have different
> > +     * layout */
> > +    mbrtowc(&wc, "\u200B", MB_CUR_MAX, NULL);
> > +    if (!iswprint(wc))
> > +        return EXIT_AM_SKIP;
> 
> Sidenote: This test case with zero-width characters would pass without
> any problems if we implement environment variable
> "gl_cv_func_wcwidth_works=no" as suggested here:

I don't really consider setting magic env vars before configure to
be a satisfactory solution, as it requires the person building
libvirt to somehow find out that they need this obscure env var.
We need to be success out of the box with a normal run of configure.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list