[V3dot10] TTCFont in 7121

Ralph Johnson johnson at cs.uiuc.edu
Mon Jul 16 12:22:46 UTC 2007


The latest image is Squeak3.10alpha.7121 in http://ftp.squeak.org/3.10alpha/

I believe that almost all the problems in this image are due to
TTCFont.  There are two minor problems not related to TTCFont.

1) ChangeHookTests prompts for each of its tests, so it prompts about
20 times.  This is so annoying that I deleted the class.

2) WideStringTest>>testSubstrings fails.

All other problems are probably due to TTCFont.

First, TTCFont has an undeclared class variable, Registry.  That is easy to fix.

When I ran the tests, I got two failures the first time.  When I ran
the tests a second time, the image crashed.  The problem was that
TTCFont is creating recursive fonts.  The solution is one we discussed
some time ago,

fallbackFont: aFontSetOrNil

	aFontSetOrNil == self ifTrue: [self error: 'recursive font'].
	fallbackFont _ aFontSetOrNil.

With that change, there are two failures the first time I run the
tests, which are:
LocaleTest>>#testFontIsAvailable
WideStringTest>>testSubstrings

The second time I run the tests, there are a lot more test failing:
FontTest had three failures, and TestIndenting has four errors.  Plus,
there are the two failures from before.  And there is an error at
LocaleTest>>#testLocaleChanged

Except for the WideStringTest, all the other tests use TTCFont, so
probably TTCFont is causing all these failures.

The third time I run the tests, there is one more failure
(StringSocketTestCase>>#testBogusInput2) and one more error
(MorphTest>>#testOverlapAnyDeletedPlaer)

One of the funny things about the first error (LocaleTest>>#testLocaleChanged)
is that when I debug it, the test fails, it doesn't generate an error.
 But the nice thing about this MorphTest is that it DOES give an
error, and it is the recursive font error that I have been looking
for!  fallbackFont: is called from TTCFont>>#setupDefaultFallbackFont
...
	fonts _ TextStyle default fontArray.
	f _ fonts first.
	1 to: fonts size do: [:i |
		self height > (fonts at: i) height ifTrue: [f _ fonts at: i].
	].
	self fallbackFont: f.
...

This is called from StrikeFont class>>#setupDefaultFallbackFont

In fact, a good way to generate this error is with StrikeFont
setupDefaultFallbackFont

The fourth time I ran the tests, the extra failure and the extra error
went away; I got the same results at the second time.  The fifth time
I ran the tests, I got the MorphTest error again.  The sixth time I
ran the tests, the MophTest error dissappeared, and the
StringSocketTestCase returned.

Tests that give non-repeatable results are a pain in the neck!

One other thing about TTCFont: because TTCFont declares a bunch of
instance variables, it is suspicious that it does not copy any of them
in veryDeepCopyWith:

TTCFont is sick.  I don't know how to fix it.  However, I know how to
remove it from the image.  If someone doesn't fix it then we will
remove it.

-Ralph


More information about the V3dot10 mailing list