public void ReadingAConfiguration_NestedArrayOfObjectsLiteral()
        {
            dynamic jsContext = new DynamicJavascriptContext(new Noesis.Javascript.JavascriptContext());

            string script = @"
                Configuration =  {
                    Server   :    'TOTO', 
                    Database :    'Rene', 
                    Debug    :    true, 
                    MaxUser  :    3, 
                    Users    :    [
                        { UserName:'******'    ,FirstName:'rene'      ,LastName:'descartes'     }, 
                        { UserName:'******'       ,FirstName:'blaise'    ,LastName:'pascal'        }, 
                        { UserName:'******'  ,FirstName:'charles'   ,LastName:'montesquieu'   } 
                    ]
                }
            ";

            jsContext.Run(script);

            Assert.AreEqual("TOTO", jsContext.Configuration.Server);
            Assert.AreEqual("Rene", jsContext.Configuration.Database);
            Assert.AreEqual(true, jsContext.Configuration.Debug);
            Assert.AreEqual(3, jsContext.Configuration.MaxUser);
            Assert.AreEqual(3, jsContext.Configuration.Users.Length);
            Assert.AreEqual("rdescartes", jsContext.Configuration.Users[0].UserName);

            Assert.AreEqual("TOTO", jsContext["Configuration"]["Server"]);
            Assert.AreEqual("Rene", jsContext["Configuration"]["Database"]);
            Assert.AreEqual(true, jsContext["Configuration"]["Debug"]);
            Assert.AreEqual(3, jsContext["Configuration"]["MaxUser"]);
            Assert.AreEqual(3, jsContext["Configuration"]["Users"].Length);
            Assert.AreEqual("rdescartes", jsContext["Configuration"]["Users"][0].UserName);
        }
        public void ReadingAConfiguration()
        {
            dynamic csContext = new DynamicJavascriptContext(new JavascriptContext());

            //csContext.Run(System.IO.File.ReadAllText("configuration.js"));
            csContext.Run(DS.Resources.GetTextResource("configuration.js", Assembly.GetExecutingAssembly()));

            var server  = csContext.Configuration.Server;
            var databse = csContext.Configuration.Database;
            var debug   = csContext.Configuration.Debug;

            for (var i = 0; i < csContext.Configuration.Users.Length; i++)
            {
                var userName = csContext.Configuration.Users[i].UserName;
            }
        }
        private static void FunctionCall()
        {
            dynamic jsContext = new DynamicJavascriptContext(new JavascriptContext());

            string script = @"                
                var F2 = function(pInt,pDouble,pString,pBool,pDate) { 

                    var s = ''+pInt+'-'+pDouble+'-'+pString+'-'+pBool+'-'+pDate;
                    console.log(s);
                    return 'F2'; 
                };
            ";

            jsContext.Run(script);

            var result = jsContext.Call("F2", 1, 123.456, "hello", true, DateTime.Now);
        }
        public void NoesisSampleFromCodeplexWebSite()
        {
            dynamic jsContext = new DynamicJavascriptContext(
                new JavascriptContext()
                );

            jsContext.message = "Hello World !";
            jsContext.number  = 1;

            string script = @"
                var i = 0;
                for (i = 0; i < 5; i++)
                    console.log(message + ' (' + i + ')');
                number += i;
            ";

            jsContext.Run(script);

            Console.WriteLine("number: " + jsContext.number);
        }
        public void ArraySample()
        {
            dynamic jsContext = new DynamicJavascriptContext(
                new JavascriptContext()
                );

            jsContext.a = new object [] { 1, 2, 3 };  // Regular Syntax
            jsContext.a = jsContext.Array(1, 2, 3);   // My Syntax

            string script = @"
                a.push(4);
            ";

            jsContext.Run(script);

            Assert.AreEqual(4, jsContext.a.Length);
            for (var i = 0; i < jsContext.a.Length; i++)
            {
                Assert.AreEqual(i + 1, jsContext.a[i]);
            }
        }
        public void NestedObjects_NestedInputObject_Output()
        {
            dynamic jsContext = new DynamicJavascriptContext(new Noesis.Javascript.JavascriptContext());

            jsContext.i = jsContext.Object(
                new {
                a = jsContext.Object(new { LastName = "Torres", Age = 46 }),
                b = jsContext.Object(new Person("Ferry", 47)),
            }
                );
            string script = @"
                var p1 = {
                    Name : i.a.LastName,
                    Age  : i.a.Age
                }
                var p2 = {
                    Name : i.b.LastName,
                    Age  : i.b.Age
                }
            ";

            jsContext.Run(script);
            Assert.AreEqual("Torres", jsContext.p1.Name);
            Assert.AreEqual("Torres", jsContext.p1["Name"]);
            Assert.AreEqual("Torres", jsContext["p1"]["Name"]);

            Assert.AreEqual(46, jsContext.p1.Age);
            Assert.AreEqual(46, jsContext.p1["Age"]);
            Assert.AreEqual(46, jsContext["p1"]["Age"]);

            Assert.AreEqual("Ferry", jsContext.p2.Name);
            Assert.AreEqual("Ferry", jsContext.p2["Name"]);
            Assert.AreEqual("Ferry", jsContext["p2"]["Name"]);

            Assert.AreEqual(47, jsContext.p2.Age);
            Assert.AreEqual(47, jsContext.p2["Age"]);
            Assert.AreEqual(47, jsContext["p2"]["Age"]);
        }
        static void Main(string[] args)
        {
            dynamic jsContext = new DynamicJavascriptContext(new JavascriptContext());

            jsContext.message   = "Hello World !";
            jsContext.number    = 1;
            jsContext.array     = jsContext.Array(1, 2, 3);
            jsContext.instance  = jsContext.Object(new { b = 2 });
            jsContext.instance2 = jsContext.Object(new { a = 1, b = 2 });

            string script = @"
                number           = 123;
                instance['a']    = 1;
                instance['Date'] = new Date();                
                instance2['a']   = 123;
                console.log('Hello log '+instance['Date']);
                console.log('array.length:'+array.length);
                
                array.push(4);
                for(var i=0; i<array.length; i++)
                    console.log(array[i]);
            ";

            jsContext.Run(script);

            Console.WriteLine("number: " + jsContext.number);
            Console.WriteLine("instance: " + jsContext.instance);
            Console.WriteLine("instance.a: " + jsContext.instance.a);
            Console.WriteLine("instance.b: " + jsContext.instance.b);
            Console.WriteLine("instance.Date: " + jsContext.instance.Date);
            Console.WriteLine("instance2.a: " + jsContext.instance2.a);
            Console.WriteLine("array:" + jsContext.array.Length);
            Console.WriteLine("array[3]:" + jsContext.array[3]);

            FunctionCall();
            Console.ReadLine();
        }
        public void CallingFunctions()
        {
            dynamic jsContext = new DynamicJavascriptContext(new JavascriptContext());

            DateTime refDate = new DateTime(1964, 12, 11, 01, 02, 03);

            string script = @"

                var O2 = { 
                            F2: function(pInt,pDouble,pString,pBool,pDate) { 
                                    return ''+this.Internal+'-'+pInt+'-'+pDouble+'-'+pString+'-'+pBool+'-'+formatDateUS(pDate);
                            },
                            Internal:1
                            }
            ";

            jsContext.Load("format", Assembly.GetExecutingAssembly());
            jsContext.Run(script);

            var expectedF2 = "1-1-123.456-hello-true-12/11/1964 1:2:3";
            var f2Result   = jsContext.Call("O2.F2", 1, 123.456, "hello", true, refDate);

            Assert.AreEqual(expectedF2, f2Result);
        }