# This is not a real test, but more documentation of a strange feature of 
# the Cocoa runtime.
#
# A number of classes in Cocoa grow new methods if you instantiate them. We
# work around this feature by rescanning the method table after calling a
# class-method.
#
# We need to do this to reliably detect calls to the superclass implementation
# of a method. Without the workaround, calls to NSButtonCell.isEnabled_ (one
# of the magical classes) would be interpreted as calls to 
# NSActionCell.isEnabled_, which is wrong.
#

import unittest

import objc
import AppKit

class TestWeirdness(unittest.TestCase):
    def doWeirdness(self, className, methodToTest):
        c = objc.lookUpClass(className)
        before = getattr(c, methodToTest)
        b = c.alloc().init()
        after = getattr(c, methodToTest)

        self.assert_(before != after, "No weirdness present on %s.%s"%(
            className, methodToTest))
        

    def testWeirdness1(self):
        self.doWeirdness("NSButtonCell", "setEnabled_")

    def testWeirdness2(self):
        self.doWeirdness("NSTextView", "setEditable_")


if __name__ == '__main__':
    unittest.main()
