[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905: ColorModel subclasses are missing hashCode() or
From:       Jim Graham <james.graham () oracle ! com>
Date:       2017-01-31 22:34:03
Message-ID: 81fdf4d1-3d0e-a780-0e25-743d222ed5fc () oracle ! com
[Download RAW message or body]

For an application to run into this same issue they'd have to expect getCompSizes() \
to return data for components that  don't exist.  It's unlikely they would use that \
data if they really understand the objects.  While that would be odd, I  guess I can \
see someone might be constructing all of their CM's from an array of 4 components \
regardless of the number  of actual components and we'd be happily remembering the \
useless extra components and returning an array of 4 from  getCompSizes().  As I \
said, they shouldn't really be reading and interpreting those extra components for \
any image  processing, but I can imagine that they might do something like create a \
variant CM by calling the CompSizes() and  copying them into a new array to construct \
a new CM with modifications.  They might just robotically always copy 4  values \
without really checking how many are valid.  That's a stretch, and their code is \
weak.  I can conceive of how  this might happen, but I really have no idea how likely \
it is...

			...jim

On 1/30/17 3:56 PM, Phil Race wrote:
> Sounds like we should at least try to get the tests updated so they only test what \
> the spec. says. Although it does indicate that there is at least a chance that \
> application code might also fail due to similar assumptions. Does #1 not fail with \
> the previous iteration of this change too ? 
> -phil.
> 
> On 01/30/2017 01:40 PM, Jim Graham wrote:
> > Hmmm.  Sounds like the test cases were written based on bugs in the \
> > implementation.  I'm not sure what the best tactic is here for the short term for \
> > getting this in, but many of these changes should eventually be considered bugs \
> > in the tests.  Is it acceptable to break API tests like this at the last minute \
> > even if the tests are at fault?  Phil? 
> > Notes on specific instances below...
> > 
> > On 1/30/17 2:22 AM, Jayathirth D V wrote:
> > > Hi Phil,
> > > 
> > > 1)api/java_awt/Image/ColorModel/index.html#Constructor: Failed. test cases: 4; \
> > > passed: 3; failed: 1; first test case failure: ColorModel2001
> > > 
> > > This test fails because getComponentSize() returned an array with length 3 but \
> > > it expects the length to be 4. In the test case they have bits per component \
> > > array     of length 4 like {8, 8, 8, 8}. But in the test case wherever they are \
> > > passing "has Alpha" as "false" we omit the alpha component bit. This is because \
> > > of tighter check     that we have in ColorModel class as "nBits = \
> > > Arrays.copyOf(bits, numComponents);" . "numComponents" will be 3 if hasAlpha is \
> > > false.
> > 
> > This is a bug in the test then, especially if the size of our array matches the \
> > return value of getNumComponents. 
> > > 2)api/java_awt/Image/ColorModel/index.html#Equals: Failed. test cases: 3; \
> > >                 passed: 2; failed: 1; first test case
> > > failure: ColorModel0004
> > > 
> > > Here they check for equality between 2 ColorModel objects having same values, \
> > > but it fails because now we are using identity-as-equals check in ColorModel.
> > 
> > How do they accomplish this when the CM class is abstract?  Do they create a \
> > relatively empty subclass and instantiate that?
> > 
> > The documentation for the equals() method does not document the conditions under \
> > which it returns true, it uses a vague concept of "equals this ColorModel".  I \
> > don't see how they could test anything given that documentation. 
> > > 3)api/java_awt/Image/ColorModel/index.html#HashCode: Failed. test cases: 2; \
> > >                 passed: 1; failed: 1; first test case
> > > failure: ColorModel2006
> > > 
> > > Here they check for hashCode equality between 2 ColorModel objects having same \
> > > values, but it fails since we don't have hashCode check in ColorModel and it    \
> > > will be different between 2 Objects.
> > 
> > Same as above, there are no promises documented.
> > 
> > > 4)api/java_awt/Image/ComponentColorModel/index.html#ConstructorTesttestCase1: \
> > >                 Failed. test cases: 2; passed: 1;
> > > failed: 1; first test case failure: testCase1
> > > 
> > > Throws "java.lang.ArrayIndexOutOfBoundsException: 3". This is also happening \
> > > because of same reason as why the first JCK test is failing. We omit alpha bit \
> > > if     hasAlpha is false but JCK test tries to call getComponentSize() with \
> > > index 3 which throws ArrayIndexOutOfBoundsException.
> > 
> > Same assessment as #1 above...
> > 
> > Again, while these are my recommendations about the correctness of these tests, \
> > the question remains whether we want to introduce a change at this point in the \
> > release cycle that will essentially invalidate a number of tests that have been \
> > working for several releases already.  I'll leave that tactic issue to Phil... 
> > ...jim
> > 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic