package tests;

class Base
{
   public function new() {}

   @:nonVirtual public function getNvName() return "Base";
   public function getName() return "Base";
}


class Derived extends Base
{
   @:nonVirtual override public function getNvName() return "Derived";
   override public function getName() return "Derived";
}


class TestNonVirtual extends haxe.unit.TestCase
{
   public function testOverride()
   {
      var derived = new Derived();

      assertTrue( derived.getName() == "Derived" );
      assertTrue( derived.getNvName() == "Derived" );
      var closure:Dynamic = derived.getNvName;
      assertTrue( closure() == "Derived" );

      var base:Base = derived;

      assertTrue( base.getName() == "Derived" );
      assertTrue( base.getNvName() == "Base" );
      var closure:Dynamic = base.getNvName;
      assertTrue( closure() == "Base" );
   }
}