示例#1
0
 public function testPropertyChangeNotifications()
 {
     $property = "";
     $oldForename1 = "";
     $newForename1 = "";
     $example = new ModelState();
     $example->Forename = "Ryan";
     $example->addPropertyChangedNotificationHandler("Forename", function ($newValue, $propertyName, $oldValue) use(&$property, &$oldForename1, &$newForename1) {
         $property = $propertyName;
         $oldForename1 = $oldValue;
         $newForename1 = $newValue;
     });
     $example->Forename = "Bert";
     $this->assertEquals("Forename", $property);
     $this->assertEquals("Ryan", $oldForename1);
     $this->assertEquals("Bert", $newForename1);
     $example->Surname = "Kilfedder";
     $this->assertNotEquals("Kilfedder", $newForename1);
     $oldForename2 = "";
     $newForename2 = "";
     $example->addPropertyChangedNotificationHandler("Forename", function ($new, $propertyName, $old) use(&$oldForename2, &$newForename2) {
         $oldForename2 = $old;
         $newForename2 = $new;
     });
     $example->Forename = "Alan";
     $this->assertEquals("Alan", $newForename1);
     $this->assertEquals("Alan", $newForename2);
     $oldSurname = "";
     $newSurname = "";
     $example->addPropertyChangedNotificationHandler("Surname", function ($new, $propertyName, $old) use(&$oldSurname, &$newSurname) {
         $oldSurname = $old;
         $newSurname = $new;
     });
     $example->Surname = "Smythe";
     $this->assertEquals("Kilfedder", $oldSurname);
     $this->assertEquals("Smythe", $newSurname);
     $example->addPropertyChangedNotificationHandler("Surname", function ($new, $propertyName, $old) use(&$oldSurname, &$newSurname) {
         $this->fail("This shouldn't have run because old is the same as new");
     });
     $example->Surname = "Smythe";
     $hit1 = false;
     $hit2 = false;
     $example = new ModelState();
     $example->Forename = "Forename";
     $example->Surname = "Surname";
     $example->addPropertyChangedNotificationHandler(["Forename", "Surname"], function ($new, $propertyName, $old) use(&$hit1, &$hit2) {
         if ($propertyName == "Forename") {
             $hit1 = $new;
         }
         if ($propertyName == "Surname") {
             $hit2 = $new;
         }
     });
     $example->Forename = "Bert";
     $example->Surname = "Smith";
     $this->assertEquals("Bert", $hit1);
     $this->assertEquals("Smith", $hit2);
 }