/**
  * Test that the base class can be detected under various circumstances
  */
 public function testBaseClassDetection()
 {
     // Explicit DataObject
     $field1 = new DBClassName('MyClass', 'DataObject');
     $this->assertEquals('DataObject', $field1->getBaseClass());
     $this->assertNotEquals('DataObject', $field1->getDefault());
     // Explicit base class
     $field2 = new DBClassName('MyClass', 'DBClassNameTest_Object');
     $this->assertEquals('DBClassNameTest_Object', $field2->getBaseClass());
     $this->assertEquals('DBClassNameTest_Object', $field2->getDefault());
     // Explicit subclass
     $field3 = new DBClassName('MyClass');
     $field3->setValue(null, new DBClassNameTest_ObjectSubClass());
     $this->assertEquals('DBClassNameTest_Object', $field3->getBaseClass());
     $this->assertEquals('DBClassNameTest_Object', $field3->getDefault());
     // Implicit table
     $field4 = new DBClassName('MyClass');
     $field4->setTable('DBClassNameTest_ObjectSubClass_versions');
     $this->assertEquals('DBClassNameTest_Object', $field4->getBaseClass());
     $this->assertEquals('DBClassNameTest_Object', $field4->getDefault());
     // Missing
     $field5 = new DBClassName('MyClass');
     $this->assertEquals('DataObject', $field5->getBaseClass());
     $this->assertNotEquals('DataObject', $field5->getDefault());
     // Invalid class
     $field6 = new DBClassName('MyClass');
     $field6->setTable('InvalidTable');
     $this->assertEquals('DataObject', $field6->getBaseClass());
     $this->assertNotEquals('DataObject', $field6->getDefault());
     // Custom default_classname
     $field7 = new DBClassName('MyClass');
     $field7->setTable('DBClassNameTest_CustomDefault');
     $this->assertEquals('DBClassNameTest_CustomDefault', $field7->getBaseClass());
     $this->assertEquals('DBClassNameTest_CustomDefaultSubclass', $field7->getDefault());
 }