[V3dot10] Font bugs

Ralph Johnson johnson at cs.uiuc.edu
Sat Jul 21 20:10:50 UTC 2007

Edgar has an image Squeak3.10beta.7122.image at http://ftp.squeak.org/3.10alpha/

When I run all the tests in this image, the image crashes.  It freezes
while it is running a test, and you can't break out of it.  Eventually
the image crashes.  It is behaving exactly the same as it did with the
recursive fonts, except that there is a fix to prevent recursive
fonts.  The recursive fonts made Squeak go into an infinite loop, and
it was hard to break out of that, too.

I am pretty sure that it dies in a method of FontTest, but I haven't
been able to figure out which one.  Perhaps any of them will do.  If I
 don't execute FontTest then it doesn't crash.  However, I can run
FontTest before running any other test, or after running all the
tests, and it doesn't crzsh.  I've tried deleting all but one method
of FontTest, running the entire set of tests, and it crashes all the
tests I've tried so far.

So, let's ignore FontTest for a little while.

If I run all the tests without FontTest, I get seven failures and two
errors.  One of the failures is probably unrelated to fonts -
I think that all the other failures and errors are related to fonts.

One of the errors is LocaleTest>>#testLocaleChanged.   It is an error
because it tries to create a recursive font.  Locale
class>>#localeChanged calls StrikeFont class>>#localeChanged, which
calls StrikeFont class>>#setupDefaultFallbackFont, which tries to make
BitstreamVeraSans 9 Roman be its own default.  I have no idea why, or
what the proper default should be, but I know that no font should be
its own default, so this is clearly a bug.

To make matters worse, if you run "Locale localeChanged" in a fresh
beta.7122 image, it does not create recursive fonts.  In fact, you can
run LocaleTest all you want, and it will not create recursive fonts.
Some other test is messing things up.

Four of the failures are in TestIndenting, and I can't understand the
tests but I can tell that they use fonts.  Moreover, these failures
didn't start appearing until we started preventing recursive fonts, so
I bet they are related to the problem with TTCFont.

Another failure is LocaleTest>>#testIsFontAvailable and the other
error is MorphTest>>#testOverlapAnyDeletedPlayer.  The first is
certainly related to fonts, and the second tries to create recursive
fonts, too.

When I run all the tests again (except FontTest), I get more or less
the same results, except that the MorphTest was gone, and even though
LocaleTest>>#testLocaleChanged is on the list of errors, when I click
on it I get an assertion failure, not the error of creating a
recursive font.   But if I evaluate "Locale switchToID: (LocaleID
isoLanguage: 'ja')." then I do get the recursive font error.  Wierd!

When you run all tests, one of the tests will complain that "a name is
already used" and will prompt you for this error 19 times.  This test
is ChangeHookTest.  As far as I can tell, this test has nothing to do
with what is going on, so you can leave it out of the test suite.
Someone ought to fix it so it doesn't prompt.

So, here are things people might be able to help me with.

1) How can "StrikeFont setupDefaultFallbackFont" create recursive
fonts?  To investigate, get a new image, select all tests except
FontTest and ChangeHookTest (it is a subclass of
SystemChangeTestRoot), and run them.  The resulting image should
generate a recursive font error if you evaluate  "StrikeFont

2)  Why does LocaleTest>>#testIsFontAvailable fail?

3) Why do the four TestIndenting tests fail?

i wouldn't be surprised if all these are related.  If so, probably the
first is the key.  However, I also wouldn't be surprised if there is
more than one bug in fonts.

-Ralph Johnson

More information about the V3dot10 mailing list