ArnoldSmith86 / virtualtabletop

a virtual surface in the browser on which you can play board, dice and card games
https://virtualtabletop.io
GNU General Public License v3.0
164 stars 29 forks source link

TestCafé seems to fail on Chrome 109 #1553

Open ArnoldSmith86 opened 1 year ago

ArnoldSmith86 commented 1 year ago

These are the tests that differ:

var results.957 = toLocaleLowerCase '' 0.1 ${PROPERTY arr} 0 <empty string>
var results.958 = toLocaleLowerCase '' 0.1 {} 0 <empty string>
var results.959 = toLocaleLowerCase '' 0.1 ${PROPERTY obj} 0 <empty string>
var results.960 = toLocaleLowerCase '' '' 0 0 <empty string>
var results.961 = toLocaleLowerCase '' '' 1 0 <empty string>
var results.962 = toLocaleLowerCase '' '' ${obj.12} 0 <empty string>
var results.963 = toLocaleLowerCase '' '' 0.1 0 <empty string>
var results.964 = toLocaleLowerCase '' '' '' 0 <empty string>
var results.965 = toLocaleLowerCase '' '' '0' 0 <empty string>
var results.966 = toLocaleLowerCase '' '' ${str} 0 <empty string>
var results.967 = toLocaleLowerCase '' '' true 0 <empty string>
var results.968 = toLocaleLowerCase '' '' ${obj.$str} 0 <empty string>
var results.969 = toLocaleLowerCase '' '' null 0 <empty string>
var results.970 = toLocaleLowerCase '' '' // 0 <empty string>
var results.971 = toLocaleLowerCase '' '' [] 0 <empty string>
var results.987 = toLocaleLowerCase '' '0' ${PROPERTY arr} 0 <empty string>
var results.988 = toLocaleLowerCase '' '0' {} 0 <empty string>
var results.989 = toLocaleLowerCase '' '0' ${PROPERTY obj} 0 <empty string>
var results.990 = toLocaleLowerCase '' ${str} 0 0 <empty string>
var results.991 = toLocaleLowerCase '' ${str} 1 0 <empty string>
var results.992 = toLocaleLowerCase '' ${str} ${obj.12} 0 <empty string>
var results.993 = toLocaleLowerCase '' ${str} 0.1 0 <empty string>
var results.994 = toLocaleLowerCase '' ${str} '' 0 <empty string>
var results.995 = toLocaleLowerCase '' ${str} '0' 0 <empty string>
var results.996 = toLocaleLowerCase '' ${str} ${str} 0 <empty string>
var results.997 = toLocaleLowerCase '' ${str} true 0 <empty string>
var results.998 = toLocaleLowerCase '' ${str} ${obj.$str} 0 <empty string>
var results.999 = toLocaleLowerCase '' ${str} null 0 <empty string>
var results.1000 = toLocaleLowerCase '' ${str} // 0 <empty string>
var results.1001 = toLocaleLowerCase '' ${str} [] 0 <empty string>
var results.1032 = toLocaleLowerCase '' ${obj.$str} ${PROPERTY arr} 0 <empty string>
var results.1033 = toLocaleLowerCase '' ${obj.$str} {} 0 <empty string>
var results.1034 = toLocaleLowerCase '' ${obj.$str} ${PROPERTY obj} 0 <empty string>
var results.1035 = toLocaleLowerCase '' null 0 0 <empty string>
var results.1036 = toLocaleLowerCase '' null 1 0 <empty string>
var results.1037 = toLocaleLowerCase '' null ${obj.12} 0 <empty string>
var results.1038 = toLocaleLowerCase '' null 0.1 0 <empty string>
var results.1039 = toLocaleLowerCase '' null '' 0 <empty string>
var results.1040 = toLocaleLowerCase '' null '0' 0 <empty string>
var results.1041 = toLocaleLowerCase '' null ${str} 0 <empty string>
var results.1042 = toLocaleLowerCase '' null true 0 <empty string>
var results.1043 = toLocaleLowerCase '' null ${obj.$str} 0 <empty string>
var results.1044 = toLocaleLowerCase '' null null 0 <empty string>
var results.1045 = toLocaleLowerCase '' null // 0 <empty string>
var results.1046 = toLocaleLowerCase '' null [] 0 <empty string>
var results.1077 = toLocaleLowerCase '' [] ${PROPERTY arr} 0 <empty string>
var results.1078 = toLocaleLowerCase '' [] {} 0 <empty string>
var results.1079 = toLocaleLowerCase '' [] ${PROPERTY obj} 0 <empty string>
var results.1080 = toLocaleLowerCase '' ${PROPERTY arr} 0 0 <empty string>
var results.1081 = toLocaleLowerCase '' ${PROPERTY arr} 1 0 <empty string>
var results.1082 = toLocaleLowerCase '' ${PROPERTY arr} ${obj.12} 0 <empty string>
var results.1083 = toLocaleLowerCase '' ${PROPERTY arr} 0.1 0 <empty string>
var results.1084 = toLocaleLowerCase '' ${PROPERTY arr} '' 0 <empty string>
var results.1085 = toLocaleLowerCase '' ${PROPERTY arr} '0' 0 <empty string>
var results.1086 = toLocaleLowerCase '' ${PROPERTY arr} ${str} 0 <empty string>
var results.1087 = toLocaleLowerCase '' ${PROPERTY arr} true 0 <empty string>
var results.1088 = toLocaleLowerCase '' ${PROPERTY arr} ${obj.$str} 0 <empty string>
var results.1089 = toLocaleLowerCase '' ${PROPERTY arr} null 0 <empty string>
var results.1090 = toLocaleLowerCase '' ${PROPERTY arr} // 0 <empty string>
var results.1091 = toLocaleLowerCase '' ${PROPERTY arr} [] 0 <empty string>

The last one (<empty string>) is the result I get from Chromium 109 on Linux. The one before that (0) is the result of Firefox 103 on Linux (and has to be what Chromium 108 did). The rest is the command TestCafé uses in the clickRoutine.

ArnoldSmith86 commented 1 year ago

OK, the 0 is something we set in widget.js when catching an exception. So the difference is:

Chrome 109: image

Firefox (and Chrome 108): image

Apparently somebody added a shortcut for handling empty strings (it does throw an exception if the initial string isn't empty) before checking that the locale is valid.

ArnoldSmith86 commented 1 year ago

The fact that ''.toLocaleUpperCase('') behaves differently makes me pretty confident that this will be fixed in Chromium: image

flackr commented 1 year ago

I bisected this to the chromium commit which introduced the change and filed as crbug.com/1409058. Safari does not throw an error for ''.toLocaleLowerCase('') or ''.toLocaleUpperCase(''), filed https://bugs.webkit.org/show_bug.cgi?id=250903 for this.