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