public void Test_That_Returned_Object_Contains_Modifications()
        {
            var testClass    = new Immutable <TestClass>();
            var newTestClass = testClass.Modify(x => x.Test = 2);

            newTestClass.Get(x => x.Test).ShouldBe(2);
        }
        public void Test_That_Returned_Object_Contains_Modifications()
        {
            var testClass = new Immutable<TestClass>();
            var newTestClass = testClass.Modify(x => x.Test, 2);

            Assert.Equal(newTestClass.Get(x => x.Test), 2);
        }
        public void Test_That_Modify_Uses_Defined_Setter()
        {
            var testClass    = new Immutable <TestWithSetter>();
            var newTestClass = testClass.Modify(x => x.Test = 2);

            newTestClass.Get(x => x.Test).ShouldBe(4);
        }
        public void Test_That_Original_Object_Cannot_Be_Modified()
        {
            var testClass = new Immutable<TestClass>();
            var newTestClass = testClass.Modify(x => x.Test, 1);

            Assert.Equal(testClass.Get(x => x.Test), 0);
        }
        public void Test_That_Original_Object_Cannot_Be_Modified()
        {
            var testClass    = new Immutable <TestClass>();
            var newTestClass = testClass.Modify(x => x.Test = 1);

            testClass.Get(x => x.Test).ShouldBe(0);
        }
        public void Test_That_Modify_Can_Alter_Converted_Nullables()
        {
            var     testClass   = new Immutable <TestNullableClass>();
            decimal?testDecimal = null;

            testClass = testClass.Modify(x => x.Nullable = (int?)testDecimal);

            testClass.Get(x => x.Nullable).ShouldBeNull();
        }
        public void Test_That_Modifying_Nested_Returns_Modifications()
        {
            var testClass    = new Immutable <TestClass>();
            var newTestClass = testClass.Modify(x => x.Data =
                                                    testClass.Get(t => t.Data)
                                                    .Modify(t => t.Member = 2)
                                                );

            newTestClass.Get(x => x.Data.Get(y => y.Member)).ShouldBe(2);
        }
        public void Test_That_Modifying_Nested_Object_Keeps_Original_Unmodified()
        {
            var testClass    = new Immutable <TestClass>();
            var newTestClass = testClass.Modify(x => x.Data =
                                                    testClass.Get(t => t.Data)
                                                    .Modify(t => t.Member = 2)
                                                );

            testClass.Get(x => x.Data.Get(y => y.Member)).ShouldBe(0);
        }
        public void Test_That_Modifying_Nested_Object_Keeps_Original_Unmodified()
        {
            var testClass = new Immutable<TestClass>();
            var newTestClass = testClass.Modify(x => x.Data, 
                testClass.Get(x => x.Data)
                .Modify(x => x.Member, 2)
            );

            Assert.Equal(testClass.Get(x => x.Data.Get(y => y.Member)), 0);
        }
        public void Test_That_Getting_Self_Returns_Clone()
        {
            var testClass = new Immutable <TestClass>();

            testClass = testClass.Modify(x => x.Test = 5);

            var self = testClass.Get(x => x);

            self.Test = 6;

            testClass.Get(x => x.Test).ShouldNotBe(self.Test);
        }
        public void Test_That_System_Text_Json_Serialization_Is_Correct()
        {
            var testClass = new Immutable <TestClassMember>();

            testClass = testClass.Modify(x => x.Member = 1);

            var settings = new JsonSerializerOptions();

            settings.Converters.Add(new ImmutableDotNet.Serialization.Json.ImmutableJsonConverter());

            var json = System.Text.Json.JsonSerializer.Serialize(testClass, settings);

            json.ShouldBe(@"{""Member"":1,""Member2"":0}");
        }
        public void Test_That_JSON_NET_Serialization_Is_Correct()
        {
            var testClass = new Immutable <TestClassMember>();

            testClass = testClass.Modify(x => x.Member = 1);

            var settings = new JsonSerializerSettings();

            settings.Converters.Add(new ImmutableJsonConverter());

            var json = JsonConvert.SerializeObject(testClass, settings);

            json.ShouldBe(@"{""Member"":1,""Member2"":0}");
        }
        public void Test_Protobuf_Serialization_Round_Trip()
        {
            var testClass = new Immutable <TestClassMember>();

            testClass = testClass.Modify(x => x.Member = 1);

            var stream = new MemoryStream();

            Serializer.Serialize(stream, testClass);

            stream.Seek(0, SeekOrigin.Begin);
            var deserialized = Serializer.Deserialize <Immutable <TestClassMember> >(stream);

            deserialized.Get(x => x.Member).ShouldBe(1);
            deserialized.Get(x => x.Member2).ShouldBe(0);
        }
        async Task <Immutable <CfnResponse> > CreateSeed(CfnRequest cfnRequest, Immutable <CfnResponse> cfnResponse, ILambdaContext context)
        {
            try
            {
                var seedData = cfnRequest.ResourceProperties.SeedData;
                if (seedData == null ||
                    seedData.Count() == 0 ||
                    (seedData.Count() == 1 && string.IsNullOrEmpty(seedData.First())))
                {
                    return(cfnResponse);
                }

                var request = seedData.Select(seed =>
                {
                    return(new SaveItemRequest
                    {
                        Id = "U1",
                        Name = "This is a custom data inserted using a custom resource",
                        Key = seed
                    });
                });

                var result = await _itemService.BatchWrite(request);

                if (result != null)
                {
                    LogHandler.LogMessage(context, "Db seeding successful");
                    return(cfnResponse.Modify(r => r.Status = "SUCCESS"));
                }
                else
                {
                    LogHandler.LogMessage(context, "Db seeding failed");
                    return(cfnResponse.ToBuilder()
                           .Modify(r => r.Status = "FAILED")
                           .Modify(r => r.Reason = $"Resource: {_tableName} not found")
                           .ToImmutable());
                }
            }
            catch (Exception ex)
            {
                LogHandler.LogMessage(context, ex.StackTrace);
                return(cfnResponse.ToBuilder()
                       .Modify(r => r.Status = "FAILED")
                       .Modify(r => r.Reason = ex.Message)
                       .ToImmutable());
            }
        }
        async Task <Immutable <CfnResponse> > DeleteTable(CfnRequest cfnRequest, Immutable <CfnResponse> cfnResponse, ILambdaContext context)
        {
            try
            {
                await _itemService.DeleteTable();

                await _userService.DeleteTable();

                LogHandler.LogMessage(context, $"Request {cfnRequest.RequestType} executed Successfully");
                return(cfnResponse.Modify(r => r.Status = "SUCCESS"));
            }
            catch (Exception ex)
            {
                LogHandler.LogMessage(context, $"Message: {ex.Message} /Trace: {ex.StackTrace}");
                return(cfnResponse.ToBuilder()
                       .Modify(r => r.Status = "FAILED")
                       .Modify(r => r.Reason = ex.Message)
                       .ToImmutable());
            }
        }
Beispiel #16
0
 void DoSomething(Immutable <Entity> entity)
 {
     string             name    = entity.Get(e => e.Name);
     Immutable <Entity> renamed = entity
                                  .Modify(e => e.Name = "new name");
 }
        public void Test_Modify_Nested_With_Implicit_Conversion()
        {
            var testClass = new Immutable<TestClass>();
            var newTestClass = testClass.Modify(x => x.Data,
                testClass.Get(x => x.Data)
                .Modify(x => x.Member, 2.0M)
            );

            Assert.Equal(newTestClass.Get(x => x.Data.Get(y => y.Member)), 2);
        }
        public void Test_That_Modify_Can_Alter_Converted_Nullables()
        {
            var testClass = new Immutable<TestNullableClass>();
            decimal? testDecimal = null;

            testClass = testClass.Modify(x => x.Nullable, testDecimal);

            Assert.Null(testClass.Get(x => x.Nullable));
        }
        public void Immutable_Microbenchmark()
        {
            var stopwatch = new Stopwatch();
            var testClass = new TestClass();
            var testClassImmutable = new Immutable<TestClass>();

            stopwatch.Start();
            for(var i = 0; i < 100000; i++)
            {
                testClass.Test = i;
            }
            stopwatch.Stop();

            var setterTime = stopwatch.ElapsedMilliseconds;

            stopwatch.Reset();
            stopwatch.Start();
            for(var i = 0; i < 100000; i++)
            {
               testClassImmutable.Modify(x => x.Test, i);
            }
            stopwatch.Stop();

            var immutableTime = stopwatch.ElapsedMilliseconds;
        }
        public void Test_That_Modifying_Nested_Returns_Modifications()
        {
            var testClass = new Immutable<TestClass>();
            var newTestClass = testClass.Modify(x => x.Data, 
                testClass.Get(x => x.Data)
                .Modify(x => x.Member, 2)
            );

            Assert.Equal(newTestClass.Get(x => x.Data.Get(y => y.Member)), 2);
        }