public void TestPolimorphismDynamic() { IDish tapa = new ConcreteDishTapa(); tapa.Name = "Croquetas"; tapa.Price = 8; IDish dish = new ConcreteDishFull(); dish.Name = "Croquetas"; dish.Price = 8; double normalDishPrice = dish.GetPrice(); double normalTapaPrice = tapa.GetPrice(); Assert.AreEqual(normalDishPrice, 8f); Assert.AreEqual(normalTapaPrice, 2f); //Call the same fucntion with same parameters //on diff derived classes with diff behaviour double moneyoffDishPrice = dish.GetPrice(1f); double moneyoffTapaPrice = tapa.GetPrice(1f); Assert.AreEqual(moneyoffDishPrice, 7f); Assert.AreEqual(moneyoffTapaPrice, 2f); //tapas should not apply moneyoff discounts Assert.AreEqual(moneyoffTapaPrice, normalTapaPrice); }
public void TestPolimorphismFuncOverloading() { ConcreteDishTapa tapa = new ConcreteDishTapa(); tapa.Name = "Croquetas"; tapa.Price = 8; //Call the same fucntion with diff behaviour double terracePrice = tapa.GetPrice(true); double halfPrice = tapa.GetPrice(50); double poundDiscount = tapa.GetPrice(1.25f); Console.WriteLine("Terrace price: " + terracePrice); Console.WriteLine("Half price: " + halfPrice); Console.WriteLine("Pound discound: " + poundDiscount); Assert.AreEqual(terracePrice, 2, 4f); Assert.AreEqual(halfPrice, 1f); Assert.AreEqual(poundDiscount, 0, 75f); }
public void TestInheritance() { /*** SINGLE INHERITANCE ***/ //Tapa inherits attributes and methods from AbstractDish ConcreteDishTapa si_tapa = new ConcreteDishTapa(); si_tapa.Name = "Croquetas"; si_tapa.Price = 8; //Tapa inherits methods from AbstractDish //percentage discount is implemented ONLY in Abstract dish //and getprice is overriden in derived classes Assert.AreEqual(si_tapa.GetPrice(50), 1f); //An object of the derived class can be casted to it base class Assert.IsTrue(si_tapa is AbstractDish); /*** HIERARCHICAL INHERITANCE ***/ //Tapa, halfdish and dish inherits from AbstractDish ConcreteDishTapa hi_tapa = new ConcreteDishTapa(); ConcreteDishHalf hi_halfdish = new ConcreteDishHalf(); ConcreteDishFull hi_dish = new ConcreteDishFull(); Assert.IsTrue(hi_tapa is AbstractDish); Assert.IsTrue(hi_halfdish is AbstractDish); Assert.IsTrue(hi_dish is AbstractDish); /*** MULTILEVEL INHERITANCE ***/ //Tapa inherits from AbstractDish //which inherits from AbstractIdentity ConcreteDishTapa mi_tapa = new ConcreteDishTapa(); mi_tapa.Id = 1; Assert.IsTrue(mi_tapa is AbstractDish); AbstractDish mi_dish = mi_tapa; Assert.IsTrue(mi_dish is AbstractedIdentity); Assert.IsTrue(mi_tapa is AbstractedIdentity); /*** MULTIPLE INHERITANCE ***/ //AbstractDish inherits from AbstractIdentity and IDish ConcreteDishTapa mmi_tapa = new ConcreteDishTapa(); Assert.IsTrue(mmi_tapa is IDish); Assert.IsTrue(mmi_tapa is AbstractedIdentity); }
public void TestDataAbstraction() { /*** NOTE: Code commented is to avoid Compilation Errors ***/ ConcreteDishTapa tapa = new ConcreteDishTapa(); IDish dish = tapa; //Property Name and Price are accessible for both dish.Name = "Croquetas"; dish.Price = 8; Assert.AreEqual(tapa.Name, "Croquetas"); Assert.AreEqual(tapa.Price, 8); //Method GetPrice is accessible for both Console.WriteLine("dish price without drink" + dish.GetPrice()); Console.WriteLine("tapa price without drink" + tapa.GetPrice()); Assert.AreEqual(dish.GetPrice(), tapa.GetPrice()); //Property WithDrink is NOT accessible as dish //dish.WithDrink = true; tapa.WithDrink = true; Console.WriteLine("dish price with drink" + dish.GetPrice()); Console.WriteLine("tapa price with drink" + tapa.GetPrice()); Assert.AreEqual(dish.GetPrice(), tapa.GetPrice()); }