1 // Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. 2 3 using System.Web.WebPages.Resources; 4 using Xunit; 5 using Assert = Microsoft.TestCommon.AssertEx; 6 7 namespace System.Web.WebPages.Test 8 { 9 public class DynamicHttpApplicationStateTest 10 { CreateAppStateInstance()11 private static HttpApplicationStateBase CreateAppStateInstance() 12 { 13 return new HttpApplicationStateWrapper((HttpApplicationState)Activator.CreateInstance(typeof(HttpApplicationState), true)); 14 } 15 16 [Fact] DynamicTest()17 public void DynamicTest() 18 { 19 HttpApplicationStateBase appState = CreateAppStateInstance(); 20 dynamic d = new DynamicHttpApplicationState(appState); 21 d["x"] = "y"; 22 Assert.Equal("y", d.x); 23 Assert.Equal("y", d[0]); 24 d.a = "b"; 25 Assert.Equal("b", d["a"]); 26 d.Foo = "bar"; 27 Assert.Equal("bar", d.Foo); 28 Assert.Null(d.XYZ); 29 Assert.Null(d["xyz"]); 30 Assert.Throws<ArgumentOutOfRangeException>(() => { var x = d[5]; }); 31 var a = d.Baz = 42; 32 Assert.Equal(42, a); 33 var b = d["test"] = 666; 34 Assert.Equal(666, b); 35 } 36 37 [Fact] InvalidNumberOfIndexes()38 public void InvalidNumberOfIndexes() 39 { 40 Assert.Throws<ArgumentException>(() => 41 { 42 HttpApplicationStateBase appState = CreateAppStateInstance(); 43 dynamic d = new DynamicHttpApplicationState(appState); 44 d[1, 2] = 3; 45 }, WebPageResources.DynamicDictionary_InvalidNumberOfIndexes); 46 47 Assert.Throws<ArgumentException>(() => 48 { 49 HttpApplicationStateBase appState = CreateAppStateInstance(); 50 dynamic d = new DynamicHttpApplicationState(appState); 51 var x = d[1, 2]; 52 }, WebPageResources.DynamicDictionary_InvalidNumberOfIndexes); 53 } 54 55 [Fact] InvalidTypeWhenSetting()56 public void InvalidTypeWhenSetting() 57 { 58 Assert.Throws<ArgumentException>(() => 59 { 60 HttpApplicationStateBase appState = CreateAppStateInstance(); 61 dynamic d = new DynamicHttpApplicationState(appState); 62 d[new object()] = 3; 63 }, WebPageResources.DynamicHttpApplicationState_UseOnlyStringToSet); 64 } 65 66 [Fact] InvalidTypeWhenGetting()67 public void InvalidTypeWhenGetting() 68 { 69 Assert.Throws<ArgumentException>(() => 70 { 71 HttpApplicationStateBase appState = CreateAppStateInstance(); 72 dynamic d = new DynamicHttpApplicationState(appState); 73 var x = d[new object()]; 74 }, WebPageResources.DynamicHttpApplicationState_UseOnlyStringOrIntToGet); 75 } 76 } 77 } 78