Example #1
0
        public void Redo()
        {
            var src     = Create();
            var invoker = new ContextInvoker(new SynchronizationContext(), false);
            var history = new History(invoker);

            Remove(src, 0, history);
            Remove(src, 3, history);
            Remove(src, 6, history);

            history.Undo();
            history.Undo();

            Assert.That(src.Count, Is.EqualTo(9));
            Assert.That(history.Undoable, Is.True);
            Assert.That(history.Redoable, Is.True);

            history.Redo();
            history.Redo();
            history.Redo(); // ignore

            Assert.That(src.Count, Is.EqualTo(7));
            Assert.That(history.Undoable, Is.True);
            Assert.That(history.Redoable, Is.False);

            Assert.That(src[0].Value, Is.EqualTo(1));
            Assert.That(src[1].Value, Is.EqualTo(2));
            Assert.That(src[2].Value, Is.EqualTo(3));
            Assert.That(src[3].Value, Is.EqualTo(5));
            Assert.That(src[4].Value, Is.EqualTo(6));
            Assert.That(src[5].Value, Is.EqualTo(7));
            Assert.That(src[6].Value, Is.EqualTo(9));
        }
        public Task invokeAsync(object obj, ContextInvoker context)
        {
            var actionToExecute = context.ActionDescriptor;

            actionToExecute.PropertyInfo.SetValue(obj, context);
            return(Task.CompletedTask);
        }
        public async Task <object> InvokeAsync(ContextInvoker context)
        {
            var actionToExecute = context.ActionDescriptor;

            var sessionId = context.SessionId;

            await _batchTraking.StartAsync(actionToExecute.BatchName, sessionId);

            var           cancellationToken = new CancellationToken();
            Task <object> task = Task.Run(async() =>
            {
                return(await _batchInvoker.InvokeAsync(context));
            }, cancellationToken);

            TimerCallback timerAction = new TimerCallback(async(a) =>
            {
                await _batchTraking.PingAsync(sessionId);
            });
            Timer timer = new Timer(timerAction, null, new TimeSpan(0, 0, 2), new TimeSpan(0, 0, 2));

            var result = await task;

            timer.Dispose();

            await _batchTraking.StopAsync(sessionId);

            return(result);
        }
        public async Task InvokeAsync(ContextInvoker context, BatchUrlManager urlManager, Guid?parentSessionId)
        {
            var    batchActionProvider = _batchActionFactory.getProvider(urlManager);
            string response            = await batchActionProvider.InvokeAsync(urlManager, context);

            response = $"{context.SessionId.ToString()} - {response}";
            await context.Response.Body.WriteAsync(Encoding.UTF8.GetBytes(response), 0, response.Length);
        }
Example #5
0
        public async void DefaultBatchInvokerTest_invokeAsync()
        {
            //Arrange
            var propertyInvoker = new Mock <IPropertyInvoker>(MockBehavior.Strict);
            //var methodActivator = new Mock<MethodActivator>(MockBehavior.Strict);
            //methodActivator.Setup((s) => s.CreateInstance<object>(It.IsAny<IServiceProvider>(), It.IsAny<Type>()))
            var methodActivator = new MethodActivator();

            var isharpBatchTrackingActivator = new Mock <ISharpBatchTrackingFactory>(MockBehavior.Strict);

            isharpBatchTrackingActivator.Setup((s) => s.getTrakingProvider()).Returns(new TrackingMemory()).Verifiable();

            var modelSerializer = new Mock <IModelSerializer>(MockBehavior.Strict);

            modelSerializer.Setup((s) => s.Serialize((object)"method1")).Returns("\"method1\"");

            DefaultBatchInvoker defaultBatchInvoker = new DefaultBatchInvoker(
                propertyInvoker.Object,
                methodActivator,
                isharpBatchTrackingActivator.Object,
                modelSerializer.Object);

            var requestService = new Mock <IServiceProvider>(MockBehavior.Strict);

            requestService.Setup((s) => s.GetService(It.IsAny <Type>())).Returns((object)"Any").Verifiable();

            var httpRequest = new Mock <HttpRequest>(MockBehavior.Strict);

            httpRequest.Setup((s) => s.Path).Returns(new PathString("/batch/exec/batch/action"));
            httpRequest.Setup((s) => s.QueryString).Returns(new QueryString()).Verifiable();

            Stream bodyStream   = new MemoryStream();
            var    httpResponse = new Mock <HttpResponse>(MockBehavior.Strict);

            httpResponse.Setup((s) => s.Body).Returns(bodyStream).Verifiable();

            var context = new Mock <HttpContext>(MockBehavior.Strict);

            context.Setup((s) => s.Request).Returns(httpRequest.Object).Verifiable();
            context.Setup((s) => s.Response).Returns(httpResponse.Object).Verifiable();
            context.Setup((s) => s.RequestServices).Returns(requestService.Object).Verifiable();

            ContextInvoker contextInvoker = ContextInvoker.Create(context.Object);

            List <TypeInfo> types = new List <TypeInfo>();

            types.Add(typeof(SimplePOCOBatch).GetTypeInfo());
            var descriptions = AssemblyDiscoveryActionDescription.actionDescription(types);

            contextInvoker.ActionDescriptor = descriptions.First();

            //Act
            var response = await defaultBatchInvoker.InvokeAsync(contextInvoker);

            //Assert
            Assert.NotNull(response);
            Assert.Equal("\"method1\"", response);
        }
Example #6
0
        public void Post()
        {
            var dest = 0;
            var src  = new ContextInvoker(new SynchronizationContext(), false);

            src.Invoke(() => dest++);
            Task.Delay(100).Wait();
            Assert.That(dest, Is.EqualTo(1));
        }
        public async Task InvokeAsync(HttpContext context, BatchUrlManager urlManager, Guid?parentSessionId)
        {
            var contextInvoker = ContextInvoker.Create(context);

            contextInvoker.BatchName        = urlManager.RequestBatchName;
            contextInvoker.ActionName       = urlManager.RequestBatchAction;
            contextInvoker.ActionDescriptor = null;
            contextInvoker.ParentSessionId  = parentSessionId;

            await InvokeAsync(contextInvoker, urlManager, parentSessionId);
        }
        public async Task InvokeAsync(ContextInvoker context, BatchUrlManager urlManager)
        {
            var contextInvoker = context;

            contextInvoker.BatchName        = urlManager.RequestBatchName;
            contextInvoker.ActionName       = urlManager.RequestBatchAction;
            contextInvoker.SessionId        = Guid.NewGuid();
            contextInvoker.ActionDescriptor = null;

            await InvokeAsync(contextInvoker, urlManager, context.SessionId);
        }
Example #9
0
        public async Task <string> InvokeAsync(IBatchUrlManager urlManager, ContextInvoker context)
        {
            switch (urlManager.RequestCommand)
            {
            case BatchUrlManagerCommand.Status:
                var batchStaus = await _trakingProvider.GetStatusAsync(new Guid(context.Parameters["sessionid"].ToString()));

                var result = _modelSerializer.Serialize(batchStaus);
                return(result);

            default:
                throw new InvalidCastException($"Command {urlManager.RequestCommand.ToString()} not found");
            }
        }
        public async void BatchActionProviderTest_SimplePOCOBatchMethod1Invoke()
        {
            //Arrange
            List <TypeInfo> types = new List <TypeInfo>();

            types.Add(typeof(SimplePOCOBatch).GetTypeInfo());

            //act
            var actionDescriptions        = AssemblyDiscoveryActionDescription.actionDescription(types.AsEnumerable());
            var filteredActionDescription = actionDescriptions.Where(p => p.ActionName == "method1");


            var batchUrlManager = new Mock <IBatchUrlManager>(MockBehavior.Strict);

            batchUrlManager.Setup((s) => s.RequestCommand)
            .Returns(BatchUrlManagerCommand.Exec)
            .Verifiable();
            batchUrlManager.Setup((s) => s.isBatch).Returns(true).Verifiable();
            batchUrlManager.Setup((s) => s.RequestBatchName).Returns("SimplePOCO").Verifiable();
            batchUrlManager.Setup((s) => s.RequestBatchAction).Returns("method1").Verifiable();

            var context = new ContextInvoker()
            {
                ActionDescriptor = null,
                ActionName       = "method1",
                BatchName        = "SimplePOCO",
                SessionId        = Guid.NewGuid()
            };

            var applicationBatchManager = new Mock <IApplicationBatchManager>(MockBehavior.Strict);

            applicationBatchManager.Setup((s) => s.SearcByNameAndAction("SimplePOCO", "method1")).Returns(filteredActionDescription).Verifiable();

            var batchInvokerProvider = new Mock <IBatchInvokerProvider>(MockBehavior.Strict);

            batchInvokerProvider.Setup((s) => s.InvokeAsync(context)).Returns(Task.FromResult((object)"method1")).Verifiable();

            BatchActionProvider batchActionProvider = new BatchActionProvider(applicationBatchManager.Object, batchInvokerProvider.Object);

            //Act
            var result = await batchActionProvider.InvokeAsync(batchUrlManager.Object, context);

            //Assert
            Assert.NotNull(result);
            Assert.Equal("method1", result);
            Assert.Same(filteredActionDescription.First(), context.ActionDescriptor);
            batchInvokerProvider.Verify();
            applicationBatchManager.Verify();
        }
Example #11
0
        public async void DefaultPropertyInvokerTest_invoke()
        {
            //Arrange
            DefaultPropertyInvoker  propertyInvoker = new DefaultPropertyInvoker();
            SimplePOCOPropertyBatch simplePOCO      = new SimplePOCOPropertyBatch();
            ContextInvoker          contextInvoker  = new ContextInvoker()
            {
                ActionDescriptor = new BatchActionDescriptor()
            };

            contextInvoker.ActionDescriptor.PropertyInfo = typeof(SimplePOCOPropertyBatch).GetTypeInfo().GetDeclaredProperty("context");

            //Act
            await propertyInvoker.invokeAsync(simplePOCO, contextInvoker);

            //Assert
            Assert.NotNull(simplePOCO.context);
        }
        public async void BatchActionProviderTest_SimplePOCOBatchMultipleMethodMatch()
        {
            List <TypeInfo> types = new List <TypeInfo>();

            types.Add(typeof(SimplePOCOBatch).GetTypeInfo());

            //act
            var actionDescriptions = AssemblyDiscoveryActionDescription.actionDescription(types.AsEnumerable());


            var batchUrlManager = new Mock <IBatchUrlManager>(MockBehavior.Strict);

            batchUrlManager.Setup((s) => s.RequestCommand)
            .Returns(BatchUrlManagerCommand.Exec)
            .Verifiable();
            batchUrlManager.Setup((s) => s.isBatch).Returns(true).Verifiable();
            batchUrlManager.Setup((s) => s.RequestBatchName).Returns("SimplePOCO").Verifiable();
            batchUrlManager.Setup((s) => s.RequestBatchAction).Returns("method1").Verifiable();

            var context = new ContextInvoker()
            {
                ActionDescriptor = null,
                ActionName       = "method1",
                BatchName        = "SimplePOCO",
                SessionId        = Guid.NewGuid()
            };

            var applicationBatchManager = new Mock <IApplicationBatchManager>(MockBehavior.Strict);

            applicationBatchManager.Setup((s) => s.SearcByNameAndAction("SimplePOCO", "method1")).Returns(actionDescriptions).Verifiable();

            var batchInvokerProvider = new Mock <IBatchInvokerProvider>(MockBehavior.Strict);

            batchInvokerProvider.Setup((s) => s.InvokeAsync(context)).Returns(Task.FromResult((object)"method1")).Verifiable();

            BatchActionProvider batchActionProvider = new BatchActionProvider(applicationBatchManager.Object, batchInvokerProvider.Object);

            var response = await Assert.ThrowsAsync <Exception>(() => batchActionProvider.InvokeAsync(batchUrlManager.Object, context));

            Assert.Equal("Too many batch satisfy the search", response.Message);
        }
Example #13
0
        public void Properties()
        {
            var name    = nameof(Properties);
            var text    = "GetText";
            var invoker = new ContextInvoker(new SynchronizationContext(), false);

            using (var dest = new RibbonElement(name, () => text, invoker))
            {
                Assert.That(dest.Name, Is.EqualTo(name));
                Assert.That(dest.Text, Is.EqualTo(text));
                Assert.That(dest.Tooltip, Is.EqualTo(text));
                Assert.That(dest.LargeIcon, Is.EqualTo($"pack://application:,,,/Assets/Large/{name}.png"));
                Assert.That(dest.SmallIcon, Is.EqualTo($"pack://application:,,,/Assets/Small/{name}.png"));

                Locale.Set(Language.French);
                Assert.That(dest.Text, Is.EqualTo(text));
                Assert.That(dest.Tooltip, Is.EqualTo(text));
            }

            Locale.Set(Language.Japanese);
        }
        public async Task <string> InvokeAsync(IBatchUrlManager urlManager, ContextInvoker context)
        {
            try
            {
                var batchActionDescriptor = Search(urlManager.RequestBatchName, urlManager.RequestBatchAction);
                context.ActionDescriptor = batchActionDescriptor;

                if (batchActionDescriptor.IsAsync)
                {
                    var response = _batchInvokerProvider.InvokeAsync(context);
                    return("Batch Started");
                }
                else
                {
                    var response = await _batchInvokerProvider.InvokeAsync(context) as string;

                    return(response?.ToString());
                }
            }catch (Exception ex)
            {
                throw ex;
            }
        }
Example #15
0
        public void Undo()
        {
            var src     = Create();
            var invoker = new ContextInvoker(new SynchronizationContext(), false);
            var history = new History(invoker);

            Assert.That(src.Count, Is.EqualTo(10));
            Assert.That(history.Undoable, Is.False);
            Assert.That(history.Redoable, Is.False);

            Remove(src, 3, history);
            Remove(src, 5, history);
            Remove(src, 7, history);

            Assert.That(src.Count, Is.EqualTo(7));
            Assert.That(history.Undoable, Is.True);
            Assert.That(history.Redoable, Is.False);

            history.Undo();

            Assert.That(src.Count, Is.EqualTo(8));
            Assert.That(history.Undoable, Is.True);
            Assert.That(history.Redoable, Is.True);

            history.Undo();
            history.Undo();
            history.Undo(); // ignore

            Assert.That(src.Count, Is.EqualTo(10));
            Assert.That(history.Undoable, Is.False);
            Assert.That(history.Redoable, Is.True);

            for (var i = 0; i < 10; ++i)
            {
                Assert.That(src[i].Value, Is.EqualTo(i));
            }
        }
        public async Task <object> InvokeAsync(ContextInvoker context)
        {
            var actionToExecute   = context.ActionDescriptor;
            var executor          = MethodExecutor.Create(actionToExecute.ActionInfo, actionToExecute.BatchTypeInfo);
            var activatorInstance = _activator.CreateInstance <object>(context.RequestServices, actionToExecute.BatchTypeInfo.AsType());

            //Check Propertyes to activate
            if (actionToExecute.PropertyInfo != null)
            {
                await _propertyInvoker.invokeAsync(activatorInstance, context);
            }

            var batchExecutionContext = BatchExecutionContext.Create(context);

            //Execute attribute onExecuting

            foreach (var executionAttribute in  actionToExecute.ExecutionAttribute)
            {
                executionAttribute.onExecuting(batchExecutionContext);
            }

            var parameterBinding = new DefaultBatchInvokerParameterBinding(context.Parameters, actionToExecute.ActionInfo, _modelSerializer);
            var parameters       = parameterBinding.Bind();

            object result   = null;
            object response = null;

            try
            {
                result = executor.Execute(activatorInstance, parameters);

                if (actionToExecute.IsAsync)
                {
                    var   task = result as Task;
                    await task;

                    var responseType   = result.GetType();
                    var taskTType      = responseType.GetGenericArguments()[0];
                    var resultProperty = typeof(Task <>).MakeGenericType(taskTType).GetProperty("Result");
                    response = resultProperty.GetValue(task);
                }
                else
                {
                    response = result;
                }

                //Save response in ShareMessage
                IResponseObject responseObject = new ResponseObject(response, context.SessionId);
                context.ShareMessage.Set <IResponseObject>(responseObject);
            }catch (Exception ex)
            {
                IResponseObject responseObject = new ResponseObject(ex, context.SessionId);
                context.ShareMessage.Set <IResponseObject>(responseObject);
                await _sharpBatchTraking.AddExAsync(context.SessionId, ex);

                foreach (var item in actionToExecute.ExceptionAttribute)
                {
                    item.onExecuted(batchExecutionContext, ex);
                }
            }

            foreach (var executionAttribute in actionToExecute.ExecutionAttribute)
            {
                executionAttribute.onExecuted(batchExecutionContext);
            }

            var serializedResult = "";

            //If result not null i serialize it
            if (result != null)
            {
                serializedResult = _modelSerializer.Serialize(response);
            }
            return(serializedResult);
        }
        public async void DefaultBatchInvokerProviderTest_InvokeAsync()
        {
            //Arrange
            var batchInvoker = new Mock <IBatchInvoker>(MockBehavior.Strict);
            var tracking     = new Mock <ISharpBatchTracking>(MockBehavior.Strict);

            tracking.Setup(s => s.StartAsync(It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.CompletedTask);
            tracking.Setup(s => s.PingAsync(It.IsAny <Guid>())).Returns(Task.CompletedTask);
            tracking.Setup(s => s.StopAsync(It.IsAny <Guid>())).Returns(Task.CompletedTask);

            var sharpBatchTrakingFactory = new Mock <ISharpBatchTrackingFactory>(MockBehavior.Strict);

            sharpBatchTrakingFactory.Setup((s) => s.getTrakingProvider())
            .Returns(tracking.Object)
            .Verifiable();

            var defaultBatchInvokerProvider = new DefaultBatchInvokerProvider(batchInvoker.Object, sharpBatchTrakingFactory.Object);

            batchInvoker.Setup((s) => s.InvokeAsync(It.IsAny <ContextInvoker>()))
            .Returns(Task.FromResult <object>("executed"))
            .Verifiable();

            var requestService = new Mock <IServiceProvider>(MockBehavior.Strict);

            requestService.Setup((s) => s.GetService(It.IsAny <Type>()))
            .Returns((object)"Any")
            .Verifiable();

            var httpRequest = new Mock <HttpRequest>(MockBehavior.Strict);

            httpRequest.Setup((s) => s.Path)
            .Returns(new PathString("/batch/exec/batch/action"));
            httpRequest.Setup((s) => s.QueryString)
            .Returns(new QueryString())
            .Verifiable();

            Stream bodyStream   = new MemoryStream();
            var    httpResponse = new Mock <HttpResponse>(MockBehavior.Strict);

            httpResponse.Setup((s) => s.Body).Returns(bodyStream).Verifiable();

            var context = new Mock <HttpContext>(MockBehavior.Strict);

            context.Setup((s) => s.Request).Returns(httpRequest.Object).Verifiable();
            context.Setup((s) => s.Response).Returns(httpResponse.Object).Verifiable();
            context.Setup((s) => s.RequestServices).Returns(requestService.Object).Verifiable();


            //var contextInvoker = ContextInvoker.Create(context.Object);
            var contextInvoker = ContextInvoker.Create(context.Object);

            contextInvoker.SessionId        = Guid.NewGuid();
            contextInvoker.ActionDescriptor = new BatchActionDescriptor()
            {
                BatchName = "Name"
            };

            //Act
            var response = await defaultBatchInvokerProvider.InvokeAsync(contextInvoker);

            //Assert
            Assert.NotNull(response);
            Assert.Equal("executed", response);
        }
Example #18
0
        private string createFullFileName(string fileName, string fileExtention, string path, bool timeStampToken, bool sessionIdInFileName, ContextInvoker context)
        {
            var fullFileName = $"{path ?? ""}{fileName}";

            if (sessionIdInFileName)
            {
                fullFileName += $"-{context.SessionId.ToString()}";
            }

            if (timeStampToken)
            {
                fullFileName += $"-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}";
            }

            if (!string.IsNullOrEmpty(fileExtention))
            {
                fullFileName += $".{fileExtention}";
            }
            return(fullFileName);
        }
Example #19
0
        public void BaseBatch_ToTrackingStringContent()
        {
            //Arrange
            var serializedContent = "";

            var modelSerializer = new Mock <IModelSerializer>(MockBehavior.Strict);

            modelSerializer.Setup((s) => s.Serialize(It.IsAny <object>())).Returns(serializedContent);

            var trackingProvider = new Mock <ISharpBatchTracking>(MockBehavior.Strict);

            trackingProvider.Setup((s) => s.AddMessageAsync(It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.CompletedTask).Verifiable();

            var trackingFactory = new Mock <ISharpBatchTrackingFactory>(MockBehavior.Strict);

            trackingFactory.Setup((s) => s.getTrakingProvider()).Returns(trackingProvider.Object).Verifiable();

            var requestService = new Mock <IServiceProvider>(MockBehavior.Strict);

            requestService.Setup((s) => s.GetService(It.Is <Type>(t => t.Name.Equals(nameof(ISharpBatchTrackingFactory)))))
            .Returns(trackingFactory.Object)
            .Verifiable();
            requestService.Setup((s) => s.GetService(It.Is <Type>(t => t.Name.Equals(nameof(IModelSerializer)))))
            .Returns(modelSerializer.Object)
            .Verifiable();

            Stream bodyStream   = new MemoryStream();
            var    httpResponse = new Mock <HttpResponse>(MockBehavior.Strict);

            httpResponse.Setup((s) => s.Body).Returns(bodyStream).Verifiable();

            var httpRequest = new Mock <HttpRequest>(MockBehavior.Strict);

            httpRequest.Setup((s) => s.QueryString)
            .Returns(new QueryString("?param=123"));

            var localBatch = new BaseBatch();

            var context = new Mock <HttpContext>(MockBehavior.Strict);

            context.Setup((s) => s.RequestServices).Returns(requestService.Object).Verifiable();
            context.Setup((s) => s.Request).Returns(httpRequest.Object).Verifiable();
            context.Setup((s) => s.Response).Returns(httpResponse.Object).Verifiable();


            localBatch.BatchContext           = ContextInvoker.Create(context.Object);
            localBatch.BatchContext.SessionId = Guid.NewGuid();

            var dataTotrack = new TestData()
            {
                Name    = "name",
                Surname = "surname"
            };

            //Act
            var ex = Record.Exception(() =>
            {
                localBatch.ToTracking(dataTotrack);
                requestService.Verify();
            });

            //Assert
            Assert.Null(ex);
        }