Bug 1069

Summary: Run LSB perl test, op/pat.t will failed
Product: [Build System, Metadata & Runtime] OE-Core Reporter: Kai Kang <kai.kang>
Component: devtools / tool chainAssignee: Kai Kang <kai.kang>
Status: RESOLVED INVALID QA Contact:
Severity: normal    
Priority: Medium CC: jingdong.lu, meta.mr.watcher, meta.watcher, sgw
Version: 1.0   
Target Milestone: 1.1 M2   
Hardware: x86   
OS: Multiple   
Whiteboard:
OS type for building Yocto: --- Type of Regression: ---
Verified: Documentation change: ---

Description Kai Kang 2011-05-12 19:47:33 UTC
when run lsb perl test on both x86 and ppc, it will fail at op/opt.t, and the information:

FAILED tests 940-4009 Failed 3070/4009 tests, 23.42% okay

when go to the test directory /opt/lsb/test/perl and then run:

# ./single_test op/pat.t

error messages are as follow:

ok 936 - postponed utf8 string in utf8 re doesn't match non-utf8
ok 937 - postponed utf8 string in non-utf8 re doesn't match non-utf8
# more user-defined character properties
ok 938 - \x{0712}, \p{IsSyriac1}        Line 2991
ok 939 - \x{072F}, \P{IsSyriac1}        Line 2992
dubious
        Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 940-4009
        Failed 3070/4009 tests, 23.42% okay
Failed Test Stat Wstat Total Fail  List of Failed
-------------------------------------------------------------------------------
op/pat.t     255 65280  4009 6140  940-4009
Failed 1/1 test scripts. 3070/4009 subtests failed.
Files=1, Tests=4009, 34 wallclock secs ( 9.16 cusr +  1.57 csys = 10.73 CPU)
Failed 1/1 test programs. 3070/4009 subtests failed.
Comment 1 Kai Kang 2011-05-19 02:46:15 UTC
Jingdong help to find the root cause
Comment 2 Jingdong Lu 2011-05-19 19:21:32 UTC
Run the following scripts which cause perl test failed.

#!./perl
require './test.pl';
sub Syriac1 {
    return <<'END';
0712    072C
0730    074A
END
}
ok("\x{0712}" =~ /\p{Syriac1}/, '\x{0712}, \p{Syriac1}');
ok("\x{072F}" =~ /\P{Syriac1}/, '\x{072F}, \p{Syriac1}');

Result on perl 5.12.3:
Can't find Unicode property definition "Syriac1" at pat.t line 13.

Result on perl 5.12.2:
ok 1 - \x{0712}, \p{Syriac1}
ok 2 - \x{072F}, \p{Syriac1}

According to the following update of perl from 5.12.2 to 5.12.3, we know that creating custom properties by defining subroutines became strict and it should begin with "In" or "Is". So the update of perl and lsb test are out of phase and it cause these failures.

commit d658a8a81c4f311bef688fd51df924a424429f14
Author: David Mitchell <davem@iabyn.com>
Date:   Sun Jan 16 14:16:20 2011 +0000

    restrict \p{IsUserDefined} to In\w+ and In\w+
    
    In L<perlunicode/"User-Defined Character Properties">, it says you can
    create custom properties by defining subroutines whose names begin with
    "In" or "Is". However, perl doesn't actually enforce that naming
    restriction, so \p{foo::bar} will call foo::Bar() if it exists.
    
    This commit finally enforces this convention. Note that this broke a
    number of existing tests for properties, since they didn't always use an
    Is/In prefix.