public void ShouldSerializeAndSerializeFileChange()
            {
                // Given
                var expected = new FileChange
                {
                    Buffer   = "buffer",
                    FileName = "fileName",
                    FromDisk = true
                };

                expected.LineChanges.Add(new LineChange
                {
                    StartColumn = 1,
                    EndColumn   = 2,
                    StartLine   = 3,
                    EndLine     = 4,
                    NewText     = "5"
                });

                // When
                FileChangeSerializer.Serialize(_fixture.Writer, expected);
                _fixture.ResetStreamPosition();
                var actual = FileChangeSerializer.Deserialize(_fixture.Reader);

                // Then
                Assert.NotNull(actual);
                Assert.Equal(expected.Buffer, actual.Buffer);
                Assert.Equal(expected.FileName, actual.FileName);
                Assert.Equal(expected.FromDisk, actual.FromDisk);
                Assert.Equal(expected.LineChanges, actual.LineChanges);
            }
            public void ShouldThrowIfCakeScriptIsNull()
            {
                // Given, When
                var exception = Record.Exception(() => FileChangeSerializer.Serialize(_fixture.Writer, null)) as ArgumentNullException;

                // Then
                Assert.NotNull(exception);
                Assert.Equal("fileChange", exception.ParamName);
            }
            public void ShouldThrowIfWriterIsNull()
            {
                // Given, When
                var exception = Record.Exception(() => FileChangeSerializer.Serialize(null, FileChange.Empty)) as ArgumentNullException;

                // Then
                Assert.NotNull(exception);
                Assert.Equal("writer", exception.ParamName);
            }
Exemple #4
0
        private async Task RunAsync(CancellationToken cancellationToken)
        {
            using (var client = new TcpClient())
            {
                _logger.LogDebug("Connecting to tcp server on port {port}", _port);
                await client.ConnectAsync(IPAddress.Loopback, _port);

                _logger.LogDebug("Connected");

                using (var stream = client.GetStream())
                    using (var reader = new BinaryReader(stream))
                        using (var writer = new BinaryWriter(stream))
                        {
                            while (!cancellationToken.IsCancellationRequested)
                            {
                                while (!stream.DataAvailable)
                                {
                                    if (!client.Client.IsConnected())
                                    {
                                        OnDisconnected?.Invoke(this, EventArgs.Empty);
                                        return;
                                    }
                                    await Task.Delay(10, cancellationToken);
                                }

                                // Request
                                _logger.LogDebug("Received reqeust from client");
                                var fileChange = FileChangeSerializer.Deserialize(reader);
                                var cakeScript = CakeScript.Empty;

                                try
                                {
                                    cakeScript = _service.Generate(fileChange);
                                }
                                catch (Exception e)
                                {
                                    _logger.LogError(0, e, "Unhandled Exception while processing request.");
                                }

                                // Response
                                _logger.LogDebug("Sending response to client");
                                CakeScriptSerializer.Serialize(writer, cakeScript);
                                writer.Flush();
                            }
                        }
            }
        }
        public CakeScript Generate(FileChange fileChange)
        {
            _initializedEvent.WaitOne();

            lock (_sendReceiveLock)
            {
                // Send
                _logger.LogDebug("Sending request to server");
                FileChangeSerializer.Serialize(_writer, fileChange, Constants.Protocol.Latest);
                _writer.Flush();

                while (!_stream.DataAvailable)
                {
                    Task.Delay(10).Wait();
                }

                // Receive
                _logger.LogDebug("Received response from server");
                return(CakeScriptSerializer.Deserialize(_reader));
            }
        }
            public void ShouldSerializeNullLineChangeAsEmpty()
            {
                // Given
                var expected = new FileChange();

                expected.LineChanges.Add(new LineChange
                {
                    StartColumn = 1,
                    EndColumn   = 2,
                    StartLine   = 3,
                    EndLine     = 4,
                    NewText     = "5"
                });
                expected.LineChanges.Add(null);
                expected.LineChanges.Add(new LineChange
                {
                    StartColumn = 6,
                    EndColumn   = 7,
                    StartLine   = 8,
                    EndLine     = 9,
                    NewText     = "10"
                });

                // When
                FileChangeSerializer.Serialize(_fixture.Writer, expected, Constants.Protocol.Latest);
                _fixture.ResetStreamPosition();
                var actual = FileChangeSerializer.Deserialize(_fixture.Reader, out var version);

                // Then
                Assert.NotNull(actual);
                Assert.Equal(Constants.Protocol.V2, version);
                Assert.Equal(expected.LineChanges.ElementAt(0), actual.LineChanges.ElementAt(0));
                Assert.Equal(new LineChange {
                    NewText = string.Empty
                }, actual.LineChanges.ElementAt(1));
                Assert.Equal(expected.LineChanges.ElementAt(2), actual.LineChanges.ElementAt(2));
            }
            public void ShouldSerializeNewLine(string lineEnding)
            {
                // Given
                var expected = new FileChange();

                expected.LineChanges.Add(new LineChange
                {
                    StartColumn = 0,
                    EndColumn   = 0,
                    StartLine   = 0,
                    EndLine     = 0,
                    NewText     = lineEnding
                });

                // When
                FileChangeSerializer.Serialize(_fixture.Writer, expected, Constants.Protocol.Latest);
                _fixture.ResetStreamPosition();
                var actual = FileChangeSerializer.Deserialize(_fixture.Reader, out var version);

                // Then
                Assert.NotNull(actual);
                Assert.Equal(Constants.Protocol.V2, version);
                Assert.Equal(expected.LineChanges.ElementAt(0), actual.LineChanges.ElementAt(0));
            }