Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/ScriptCs.Contracts/IObjectSerializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace ScriptCs.Contracts
{
public interface IObjectSerializer
{
string Serialize(object value);
}
}
2 changes: 2 additions & 0 deletions src/ScriptCs.Contracts/IServiceOverrides.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public interface IServiceOverrides<out TConfig> : IServiceOverrides where TConfi

TConfig AssemblyUtility<T>() where T : IAssemblyUtility;

TConfig ObjectSerializer<T>() where T : IObjectSerializer;

TConfig PackageContainer<T>() where T : IPackageContainer;

TConfig PackageInstaller<T>() where T : IPackageInstaller;
Expand Down
1 change: 1 addition & 0 deletions src/ScriptCs.Contracts/ScriptCs.Contracts.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<Compile Include="IModule.cs" />
<Compile Include="IModuleConfiguration.cs" />
<Compile Include="IModuleMetadata.cs" />
<Compile Include="IObjectSerializer.cs" />
<Compile Include="IPackageAssemblyResolver.cs" />
<Compile Include="IPackageContainer.cs" />
<Compile Include="IPackageInstaller.cs" />
Expand Down
10 changes: 8 additions & 2 deletions src/ScriptCs.Core/Repl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,26 @@
using System.Runtime.ExceptionServices;
using Common.Logging;
using ScriptCs.Contracts;
using ServiceStack.Text;

namespace ScriptCs
{
public class Repl : ScriptExecutor
{
private readonly string[] _scriptArgs;

private readonly IObjectSerializer _serializer;

public Repl(
string[] scriptArgs,
IFileSystem fileSystem,
IScriptEngine scriptEngine,
IObjectSerializer serializer,
ILog logger,
IConsole console,
IFilePreProcessor filePreProcessor) : base(fileSystem, filePreProcessor, scriptEngine, logger)
{
_scriptArgs = scriptArgs;
_serializer = serializer;
Console = console;
}

Expand Down Expand Up @@ -87,7 +90,10 @@ public override ScriptResult Execute(string script, params string[] scriptArgs)
if (result.ReturnValue != null)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(result.ReturnValue.ToJsv());

var serializedResult = _serializer.Serialize(result.ReturnValue);

Console.WriteLine(serializedResult);
}

Buffer = null;
Expand Down
3 changes: 0 additions & 3 deletions src/ScriptCs.Core/ScriptCs.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
<Reference Include="Common.Logging">
<HintPath>..\..\packages\Common.Logging.2.1.2\lib\net40\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Text">
<HintPath>..\..\packages\ServiceStack.Text.3.9.47\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
Expand Down
3 changes: 3 additions & 0 deletions src/ScriptCs.Core/ScriptServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public ScriptServices(
IFilePreProcessor filePreProcessor,
IScriptPackResolver scriptPackResolver,
IPackageInstaller packageInstaller,
IObjectSerializer objectSerializer,
ILog logger,
IAssemblyResolver assemblyResolver,
IConsole console = null,
Expand All @@ -26,6 +27,7 @@ public ScriptServices(
FilePreProcessor = filePreProcessor;
ScriptPackResolver = scriptPackResolver;
PackageInstaller = packageInstaller;
ObjectSerializer = objectSerializer;
Logger = logger;
Console = console;
AssemblyResolver = assemblyResolver;
Expand All @@ -37,6 +39,7 @@ public ScriptServices(
public IScriptExecutor Executor { get; private set; }
public IScriptPackResolver ScriptPackResolver { get; private set; }
public IPackageInstaller PackageInstaller { get; private set; }
public IObjectSerializer ObjectSerializer { get; private set; }
public ILog Logger { get; private set; }
public IScriptEngine Engine { get; private set; }
public IFilePreProcessor FilePreProcessor { get; private set; }
Expand Down
1 change: 0 additions & 1 deletion src/ScriptCs.Core/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@
<packages>
<package id="Common.Logging" version="2.1.2" targetFramework="net45" />
<package id="LiteGuard.Source" version="0.7.0" targetFramework="net45" developmentDependency="true" />
<package id="ServiceStack.Text" version="3.9.47" targetFramework="net45" />
</packages>
20 changes: 20 additions & 0 deletions src/ScriptCs.Hosting/ObjectSerializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Newtonsoft.Json;

using ScriptCs.Contracts;

namespace ScriptCs
{
public class ObjectSerializer : IObjectSerializer
{
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
MaxDepth = 4
};

public string Serialize(object value)
{
return JsonConvert.SerializeObject(value, Formatting.Indented, Settings);
}
}
}
5 changes: 2 additions & 3 deletions src/ScriptCs.Hosting/RuntimeServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@
using System.Collections.Generic;
using System.ComponentModel.Composition.Hosting;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autofac;
using Autofac.Integration.Mef;
using Common.Logging;
using ScriptCs.Contracts;
using ScriptCs.Hosting.Package;
using ScriptCs.Package;

namespace ScriptCs
{
Expand Down Expand Up @@ -58,6 +56,7 @@ protected override IContainer CreateContainer()
RegisterOverrideOrDefault<IInstallationProvider>(builder, b => b.RegisterType<NugetInstallationProvider>().As<IInstallationProvider>().SingleInstance());
RegisterOverrideOrDefault<IPackageInstaller>(builder, b => b.RegisterType<PackageInstaller>().As<IPackageInstaller>().SingleInstance());
RegisterOverrideOrDefault<ScriptServices>(builder, b => b.RegisterType<ScriptServices>().SingleInstance());
RegisterOverrideOrDefault<IObjectSerializer>(builder, b => b.RegisterType<ObjectSerializer>().As<IObjectSerializer>().SingleInstance());
RegisterOverrideOrDefault<IConsole>(builder, b => b.RegisterInstance(_console));

var assemblyResolver = _initializationServices.GetAssemblyResolver();
Expand Down
4 changes: 4 additions & 0 deletions src/ScriptCs.Hosting/ScriptCs.Hosting.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
<Reference Include="log4net">
<HintPath>..\..\packages\log4net.1.2.10\lib\2.0\log4net.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NuGet.Core, Version=2.7.40808.167, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\Nuget.Core.2.7.0\lib\net40-Client\NuGet.Core.dll</HintPath>
Expand Down Expand Up @@ -73,6 +76,7 @@
<Compile Include="ScriptServicesRegistration.cs" />
<Compile Include="ScriptServicesBuilder.cs" />
<Compile Include="ServiceOverrides.cs" />
<Compile Include="ObjectSerializer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
Expand Down
6 changes: 6 additions & 0 deletions src/ScriptCs.Hosting/ServiceOverrides.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@ public TConfig AssemblyUtility<T>() where T : IAssemblyUtility
return _this;
}

public TConfig ObjectSerializer<T>() where T : IObjectSerializer
{
Overrides[typeof(IObjectSerializer)] = typeof(T);
return _this;
}

public TConfig PackageContainer<T>() where T : IPackageContainer
{
Overrides[typeof(IPackageContainer)] = typeof(T);
Expand Down
1 change: 1 addition & 0 deletions src/ScriptCs.Hosting/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
<package id="Common.Logging.Log4Net" version="2.0.1" targetFramework="net45" />
<package id="log4net" version="1.2.10" targetFramework="net45" />
<package id="Microsoft.Web.Xdt" version="1.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
<package id="Nuget.Core" version="2.7.0" targetFramework="net45" />
</packages>
1 change: 1 addition & 0 deletions src/ScriptCs/Command/CommandFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
_scriptServices.ScriptPackResolver,
_scriptServices.Engine,
_scriptServices.FilePreProcessor,
_scriptServices.ObjectSerializer,
_scriptServices.Logger,
_scriptServices.Console,
_scriptServices.AssemblyResolver);
Expand Down
5 changes: 4 additions & 1 deletion src/ScriptCs/Command/ExecuteReplCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ internal class ExecuteReplCommand : IScriptCommand
private readonly IScriptPackResolver _scriptPackResolver;
private readonly IAssemblyResolver _assemblyResolver;
private readonly IFilePreProcessor _filePreProcessor;
private readonly IObjectSerializer _serializer;
private readonly IScriptEngine _scriptEngine;
private readonly string _scriptName;
private readonly string[] _scriptArgs;
Expand All @@ -23,6 +24,7 @@ public ExecuteReplCommand(
IScriptPackResolver scriptPackResolver,
IScriptEngine scriptEngine,
IFilePreProcessor filePreProcessor,
IObjectSerializer serializer,
ILog logger,
IConsole console,
IAssemblyResolver assemblyResolver)
Expand All @@ -33,6 +35,7 @@ public ExecuteReplCommand(
_scriptPackResolver = scriptPackResolver;
_scriptEngine = scriptEngine;
_filePreProcessor = filePreProcessor;
_serializer = serializer;
_logger = logger;
_console = console;
_assemblyResolver = assemblyResolver;
Expand All @@ -43,7 +46,7 @@ public ExecuteReplCommand(
public CommandResult Execute()
{
_console.WriteLine("scriptcs (ctrl-c to exit)\r\n");
var repl = new Repl(_scriptArgs, _fileSystem, _scriptEngine, _logger, _console, _filePreProcessor);
var repl = new Repl(_scriptArgs, _fileSystem, _scriptEngine, _serializer, _logger, _console, _filePreProcessor);

var workingDirectory = _fileSystem.CurrentDirectory;
var assemblies = _assemblyResolver.GetAssemblyPaths(workingDirectory);
Expand Down
5 changes: 4 additions & 1 deletion test/ScriptCs.Core.Tests/ReplTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ public Mocks()
Console = new Mock<IConsole>();
ScriptPack = new Mock<IScriptPack>();
FilePreProcessor = new Mock<IFilePreProcessor>();
ObjectSerializer = new Mock<IObjectSerializer>();
}

public Mock<IObjectSerializer> ObjectSerializer { get; private set; }

public Mock<IFileSystem> FileSystem { get; private set; }

public Mock<IScriptEngine> ScriptEngine { get; private set; }
Expand All @@ -41,7 +44,7 @@ public Mocks()

public static Repl GetRepl(Mocks mocks)
{
return new Repl(new string[0], mocks.FileSystem.Object, mocks.ScriptEngine.Object, mocks.Logger.Object, mocks.Console.Object, mocks.FilePreProcessor.Object);
return new Repl(new string[0], mocks.FileSystem.Object, mocks.ScriptEngine.Object, mocks.ObjectSerializer.Object, mocks.Logger.Object, mocks.Console.Object, mocks.FilePreProcessor.Object);
}

public class TheConstructor
Expand Down
52 changes: 52 additions & 0 deletions test/ScriptCs.Hosting.Tests/ObjectSerializerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using System;

using Xunit;

namespace ScriptCs.Hosting.Tests
{
public class ObjectSerializerTests
{
public class TheSerializeMethod
{
private readonly ObjectSerializer _serializer;

public TheSerializeMethod()
{
_serializer = new ObjectSerializer();
}

[Fact]
public void ShouldSerializeTypeMethods()
{
Assert.DoesNotThrow(() => _serializer.Serialize(typeof(Type).GetMethods()));
}

[Fact]
public void ShouldSerializeDelegates()
{
Assert.DoesNotThrow(() => _serializer.Serialize(new Action(() => { })));
Assert.DoesNotThrow(() => _serializer.Serialize(new Foo
{
Action = () => { },
Func = () => "Hello World"
}));
}

[Fact]
public void ShouldSerializeWithCircularReferences()
{
var foo = new Foo();
foo.Parent = foo;

Assert.DoesNotThrow(() => _serializer.Serialize(foo));
}

private class Foo
{
public Action Action { get; set; }
public Func<string> Func { get; set; }
public Foo Parent { get; set; }
}
}
}
}
1 change: 1 addition & 0 deletions test/ScriptCs.Hosting.Tests/ScriptCs.Hosting.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
<Link>ScriptCsAutoDataAttribute.cs</Link>
</Compile>
<Compile Include="ModuleLoaderTests.cs" />
<Compile Include="ObjectSerializerTests.cs" />
<Compile Include="PackageInstallerTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RuntimeServicesTests.cs" />
Expand Down