Code
Code
using System.Reflection;
using System.Collections.Generic;
public class Hero
{
private string name;
private int level;
private int experience;
private double vitalityPoints;
private double evasivenessPoints;
private double spellPoints;
private double attackDamage;
Hero someHero;
switch (heroClass)
{
case 1:
someHero = new Brute(vitality, evasiveness, spell);
break;
case 2:
someHero = new Champion(vitality, evasiveness, spell);
break;
case 3:
someHero = new Magus(vitality, evasiveness, spell);
break;
default:
return;
}
Tester.Test(someHero);
}
}
class Tester
{
private static List<FieldInfo> GetAllFields(List<FieldInfo> fields, Type type)
{
fields.AddRange(type.GetFields(BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Public));
if (type.BaseType != null)
{
GetAllFields(fields, type.BaseType);
}
return fields;
}
return null;
}
private static MethodInfo GetMethod(object obj, string methodName)
{
MethodInfo[] methods = obj.GetType().GetMethods();
foreach (MethodInfo m in methods)
{
if (m.Name.Equals(methodName))
{
return m;
}
}
return null;
}
if (code == 1)
{
FieldInfo name = Tester.GetField(someHero, "name");
FieldInfo level = Tester.GetField(someHero, "level");
FieldInfo experience = Tester.GetField(someHero, "experience");
FieldInfo vitalityPoints = Tester.GetField(someHero, "vitalityPoints");
FieldInfo evasivenessPoints = Tester.GetField(someHero,
"evasivenessPoints");
FieldInfo spellPoints = Tester.GetField(someHero, "spellPoints");
FieldInfo attackDamage = Tester.GetField(someHero, "attackDamage");
if (
(name != null && name.IsPrivate) &&
(level != null && level.IsPrivate) &&
(experience != null && experience.IsPrivate) &&
(vitalityPoints != null && vitalityPoints.IsPrivate) &&
(evasivenessPoints != null && evasivenessPoints.IsPrivate) &&
(spellPoints != null && spellPoints.IsPrivate) &&
(attackDamage != null && attackDamage.IsPrivate)
)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
else if (code == 2)
{
string testName = "Test";
int testLevel = 1;
int testExperience = 0;
double testVitalityPoints = 3;
double testEvasivenessPoints = 4;
double testSpellPoints = 5;
double testAttackDamage = 0;
try
{
string valueName = name.GetValue(newHero).ToString();
int valueLevel = int.Parse(level.GetValue(newHero).ToString());
int valueExperience =
int.Parse(experience.GetValue(newHero).ToString());
double valueVitalityPoints =
double.Parse(vitalityPoints.GetValue(newHero).ToString());
double valueEvasivenessPoints =
double.Parse(evasivenessPoints.GetValue(newHero).ToString());
double valueSpellPoints =
double.Parse(spellPoints.GetValue(newHero).ToString());
double valueAttackDamage =
double.Parse(attackDamage.GetValue(newHero).ToString());
if (
(valueName.Equals(testName)) &&
(valueLevel == testLevel) &&
(valueExperience == testExperience) &&
(valueVitalityPoints == testVitalityPoints) &&
(valueEvasivenessPoints == testEvasivenessPoints) &&
(valueSpellPoints == testSpellPoints) &&
(valueAttackDamage == testAttackDamage)
)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
else if (code == 3)
{
MethodInfo GetLevel = Tester.GetMethod(someHero, "GetLevel");
MethodInfo GetExperience = Tester.GetMethod(someHero, "GetExperience");
MethodInfo GetVitalityPoints = Tester.GetMethod(someHero,
"GetVitalityPoints");
MethodInfo GetEvasivenessPoints = Tester.GetMethod(someHero,
"GetEvasivenessPoints");
MethodInfo GetSpellPoints = Tester.GetMethod(someHero,
"GetSpellPoints");
MethodInfo GetAttackDamage = Tester.GetMethod(someHero,
"GetAttackDamage");
try
{
Console.WriteLine(GetLevel.Invoke(someHero, null));
Console.WriteLine(GetExperience.Invoke(someHero, null));
Console.WriteLine(GetVitalityPoints.Invoke(someHero, null));
Console.WriteLine(GetEvasivenessPoints.Invoke(someHero, null));
Console.WriteLine(GetSpellPoints.Invoke(someHero, null));
Console.WriteLine(GetAttackDamage.Invoke(someHero, null));
Console.WriteLine("SUCCESS");
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
else if (code == 4)
{
MethodInfo SetLevel = Tester.GetMethod(someHero, "SetLevel");
MethodInfo SetExperience = Tester.GetMethod(someHero, "SetExperience");
MethodInfo SetVitalityPoints = Tester.GetMethod(someHero,
"SetVitalityPoints");
MethodInfo SetEvasivenessPoints = Tester.GetMethod(someHero,
"SetEvasivenessPoints");
MethodInfo SetSpellPoints = Tester.GetMethod(someHero,
"SetSpellPoints");
MethodInfo SetAttackDamage = Tester.GetMethod(someHero,
"SetAttackDamage");
try
{
SetLevel.Invoke(someHero, new object[] { 1 });
SetExperience.Invoke(someHero, new object[] { 2 });
SetVitalityPoints.Invoke(someHero, new object[] { 3 });
SetEvasivenessPoints.Invoke(someHero, new object[] { 4 });
SetSpellPoints.Invoke(someHero, new object[] { 5 });
SetAttackDamage.Invoke(someHero, new object[] { 7 });
Console.WriteLine("SUCCESS");
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
else if (code == 5)
{
Hero newHero = new Hero("Test", 1, 3, 5);
LevelUp.Invoke(newHero, null);
if (
valueLevel == testLevel &&
valueVitalityPoints == testVitalityPoints &&
valueEvasivenessPoints == testEvasivenessPoints &&
valueSpellPoints == testSpellPoints
)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
else if (code == 6)
{
Hero newHero = new Hero("Test", 1, 3, 5);
try
{
SetAttackDamage.Invoke(newHero, new object[] { 200 });
int testHealthPoints = 1000;
int testAttacksNeeded = 5;
if (result == testAttacksNeeded)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
else if (code == 7)
{
Magus newMagus = new Magus(10, 10, 10);
if (newMagus is Hero)
{
if (name == null)
{
Console.WriteLine("FAILED");
return;
}
try
{
String valueName = name.GetValue(newMagus).ToString();
String testName = "Magus";
double valueAttackDamage =
double.Parse(attackDamage.GetValue(newMagus).ToString());
double testAttackDamage = 82;
}
else
{
Console.WriteLine("FAILED");
}
}
else if (code == 8)
{
Brute newBrute = new Brute(10, 10, 10);
if (newBrute is Hero)
{
if (name == null)
{
Console.WriteLine("FAILED");
return;
}
try
{
String valueName = name.GetValue(newBrute).ToString();
String testName = "Brute";
double valueAttackDamage =
double.Parse(attackDamage.GetValue(newBrute).ToString());
double testAttackDamage = 510;
}
else
{
Console.WriteLine("FAILED");
}
}
else if (code == 9)
{
Champion newChampion = new Champion(10, 10, 10);
if (newChampion is Hero)
{
if (name == null)
{
Console.WriteLine("FAILED");
return;
}
try
{
String valueName = name.GetValue(newChampion).ToString();
String testName = "Champion";
double valueAttackDamage =
double.Parse(attackDamage.GetValue(newChampion).ToString());
double testAttackDamage = 400;
}
else
{
Console.WriteLine("FAILED");
}
}
int testLevel = 2;
double testVitalityPoints = 15;
double testEvasivenessPoints = 10.5;
double testSpellPoints = 10.5;
double testAttackDamage = 530;
try
{
LevelUp.Invoke(newBrute, null);
if (
valueLevel == testLevel &&
valueVitalityPoints == testVitalityPoints &&
valueEvasivenessPoints == testEvasivenessPoints &&
valueSpellPoints == testSpellPoints &&
valueAttackDamage == testAttackDamage
)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
int testLevel = 2;
double testVitalityPoints = 11;
double testEvasivenessPoints = 13;
double testSpellPoints = 14;
double testAttackDamage = 321;
try
{
LevelUp.Invoke(newMagus, null);
if (
valueLevel == testLevel &&
valueVitalityPoints == testVitalityPoints &&
valueEvasivenessPoints == testEvasivenessPoints &&
valueSpellPoints == testSpellPoints &&
valueAttackDamage == testAttackDamage
)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILED");
}
}
catch (Exception)
{
Console.WriteLine("FAILED");
}
}
int testLevel = 2;
double testVitalityPoints = 12;
double testEvasivenessPoints = 13.5;
double testSpellPoints = 11;
double testAttackDamage = 1242;
try
{
LevelUp.Invoke(newChampion, null);
try
{
LevelUp.Invoke(someHero, null);