public void AssetManipulations() { Asset asset1 = new Asset("Bob", "Big"); var concreteAsset1 = asset1.Concrete(); TextAsset textAsset1 = new TextAsset("Bob", "Big"); Assert.AreEqual(asset1.Value, concreteAsset1.StringValue); Assert.AreEqual(asset1.Value, textAsset1.StringValue); Asset asset2 = new Asset("Bob", true); var concreteAsset2 = asset2.Concrete(); BoolAsset boolAsset1 = new BoolAsset("Bob", true); Assert.AreEqual(asset2.Value.ToString(), concreteAsset2.StringValue); Assert.AreEqual(asset2.Value, boolAsset1.Value); Asset asset3 = new Asset("Bob", 1993); var concreteAsset3 = asset3.Concrete(); IntegerAsset integerAsset = new IntegerAsset("Bob", 1993); Assert.AreEqual(asset3.Value.ToString(), concreteAsset3.StringValue); Assert.AreEqual(asset3.Value, integerAsset.Value); Asset asset4 = new Asset("Tom", "Tam"); Assert.AreEqual(asset4.ValueType, AssetValueType.Text); IntegerAsset integerAsset2 = new IntegerAsset("Tom", 1999); bool canChangeValue = true; try { asset4.Value = integerAsset2.Value; } catch (Exception) { canChangeValue = false; } Assert.IsFalse(canChangeValue); Assert.AreEqual(asset4.ValueType, AssetValueType.Text); Assert.AreNotEqual(asset4.ValueType, AssetValueType.Integer); canChangeValue = true; try { asset4.Value = "Test2"; } catch (Exception) { canChangeValue = false; } Assert.IsTrue(canChangeValue); Assert.AreEqual(asset4.StringValue, "Test2"); Assert.AreEqual(asset4.ValueType, AssetValueType.Text); }