From 7d6690940faada29547c4adeb71c444acdbdcd7f Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Tue, 10 Oct 2017 19:06:42 +0300 Subject: [PATCH 001/286] =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=20nullref?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Machine/IndexedNameValueCollection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScriptEngine/Machine/IndexedNameValueCollection.cs b/src/ScriptEngine/Machine/IndexedNameValueCollection.cs index 3916c7f57..81b723160 100755 --- a/src/ScriptEngine/Machine/IndexedNameValueCollection.cs +++ b/src/ScriptEngine/Machine/IndexedNameValueCollection.cs @@ -21,7 +21,7 @@ namespace ScriptEngine.Machine public class IndexedNameValueCollection : IEnumerable { private readonly Dictionary _nameIndex = new Dictionary(StringComparer.InvariantCultureIgnoreCase); - private readonly List _values; + private readonly List _values = new List(); public void Add(T item, string name) { From 9ae4c912477142e4bf8868885a721812c142394f Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Tue, 10 Oct 2017 19:07:22 +0300 Subject: [PATCH 002/286] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B5=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/oscript/DebugServer/CommandsParser.cs | 68 ++++++++++++++++ .../DebugServer/DebugStatesImplement.cs | 79 +++++++++++++++++++ src/oscript/DebugServer/DebuggerCommands.cs | 30 +++++++ src/oscript/DebugServer/DebuggerFSM.cs | 68 ++++++++++++++++ src/oscript/DebugServer/DebuggerState.cs | 30 +++++++ .../DebugServer/OscriptDebugController.cs | 75 ++++++++++++++++-- src/oscript/oscript.csproj | 5 ++ 7 files changed, 349 insertions(+), 6 deletions(-) create mode 100644 src/oscript/DebugServer/CommandsParser.cs create mode 100644 src/oscript/DebugServer/DebugStatesImplement.cs create mode 100644 src/oscript/DebugServer/DebuggerCommands.cs create mode 100644 src/oscript/DebugServer/DebuggerFSM.cs create mode 100644 src/oscript/DebugServer/DebuggerState.cs diff --git a/src/oscript/DebugServer/CommandsParser.cs b/src/oscript/DebugServer/CommandsParser.cs new file mode 100644 index 000000000..2c0a60536 --- /dev/null +++ b/src/oscript/DebugServer/CommandsParser.cs @@ -0,0 +1,68 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + public class CommandsParser + { + /// + /// Splits the command line. When main(string[] args) is used escaped quotes (ie a path "c:\folder\") + /// Will consume all the following command line arguments as the one argument. + /// This function ignores escaped quotes making handling paths much easier. + /// + /// The command line. + /// + public static string[] SplitCommandLine(string commandLine) + { + var translatedArguments = new StringBuilder(commandLine); + var escaped = false; + for (var i = 0; i < translatedArguments.Length; i++) + { + if (translatedArguments[i] == '"') + { + escaped = !escaped; + } + if (translatedArguments[i] == ' ' && !escaped) + { + translatedArguments[i] = '\n'; + } + } + + var toReturn = translatedArguments.ToString().Split(new[] + { + '\n' + }, StringSplitOptions.RemoveEmptyEntries); + for (var i = 0; i < toReturn.Length; i++) + { + toReturn[i] = RemoveMatchingQuotes(toReturn[i]); + } + + return toReturn; + } + + public static string RemoveMatchingQuotes(string stringToTrim) + { + var firstQuoteIndex = stringToTrim.IndexOf('"'); + var lastQuoteIndex = stringToTrim.LastIndexOf('"'); + while (firstQuoteIndex != lastQuoteIndex) + { + stringToTrim = stringToTrim.Remove(firstQuoteIndex, 1); + stringToTrim = stringToTrim.Remove(lastQuoteIndex - 1, 1); //-1 because we've shifted the indicies left by one + firstQuoteIndex = stringToTrim.IndexOf('"'); + lastQuoteIndex = stringToTrim.LastIndexOf('"'); + } + + return stringToTrim; + } + } +} diff --git a/src/oscript/DebugServer/DebugStatesImplement.cs b/src/oscript/DebugServer/DebugStatesImplement.cs new file mode 100644 index 000000000..d6632e078 --- /dev/null +++ b/src/oscript/DebugServer/DebugStatesImplement.cs @@ -0,0 +1,79 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + internal class BeforeExecutionState : DebuggerState + { + private OscriptDebugController _controller; + + public BeforeExecutionState(OscriptDebugController controller) + { + this._controller = controller; + Prompt = "init"; + } + + public override void ExecuteCommand(DebuggerCommands command, string[] arguments) + { + switch (command) + { + case DebuggerCommands.Execute: + _controller.Execute(); + break; + case DebuggerCommands.Help: + PrintHelp(); + break; + case DebuggerCommands.SetBreakpoint: + // dummy + Output.WriteLine("bp dummy set"); + break; + default: + base.ExecuteCommand(command, arguments); + break; + } + } + + public override void Enter() + { + Output.WriteLine("Режим ожидания запуска. Для просмотра списка доступных команд введите help"); + _controller.InputCommand(); + } + + private void PrintHelp() + { + Output.WriteLine("Доступные команды:" + + "\nbp: <путь к файлу> <номер строки> - установка точки останова" + + "\nbprm <номер точки останова> - удаление точки останова"); + } + } + + internal class RunningState : DebuggerState + { + private OscriptDebugController oscriptDebugController; + + public RunningState(OscriptDebugController oscriptDebugController) + { + this.oscriptDebugController = oscriptDebugController; + } + } + + internal class StoppedState : DebuggerState + { + private OscriptDebugController oscriptDebugController; + + public StoppedState(OscriptDebugController oscriptDebugController) + { + this.oscriptDebugController = oscriptDebugController; + } + } +} diff --git a/src/oscript/DebugServer/DebuggerCommands.cs b/src/oscript/DebugServer/DebuggerCommands.cs new file mode 100644 index 000000000..3b921f2fd --- /dev/null +++ b/src/oscript/DebugServer/DebuggerCommands.cs @@ -0,0 +1,30 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + internal enum DebuggerCommands + { + Execute, + SetBreakpoint, + Next, + StepIn, + StepOut, + GetStackFrames, + GetVariables, + Evaluate, + OutgoingEvent, + Help, + Exit + } +} diff --git a/src/oscript/DebugServer/DebuggerFSM.cs b/src/oscript/DebugServer/DebuggerFSM.cs new file mode 100644 index 000000000..2039129d5 --- /dev/null +++ b/src/oscript/DebugServer/DebuggerFSM.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + internal class DebuggerFSM + { + private class StateRecord + { + public DebuggerState state; + public DebuggerCommands command; + public DebuggerState nextState; + } + + private List _statesTable = new List(); + public DebuggerState CurrentState { get; private set; } + + public void AddState(DebuggerState state, DebuggerCommands command, DebuggerState nextState) + { + var record = new StateRecord() + { + state = state, + command = command, + nextState = nextState + }; + + _statesTable.Add(record); + } + + public void Start() + { + CurrentState = _statesTable[0].state; + CurrentState.Enter(); + } + + public void DispatchCommand(DebuggerCommands command, string[] arguments) + { + var availableTransition = _statesTable.FirstOrDefault(x => x.command == command && x.state == CurrentState); + if (availableTransition == null) + { + throw new InvalidDebuggerCommandException(); + } + + try + { + availableTransition.state.ExecuteCommand(command, arguments); + } + catch (InvalidDebuggerCommandException e) + { + Output.WriteLine(e.Message); + } + + CurrentState = availableTransition.nextState; + CurrentState.Enter(); + } + } + + internal class InvalidDebuggerCommandException : ApplicationException + { + public InvalidDebuggerCommandException() : base("Команда не поддерживается в данном режиме") + { + + } + } +} diff --git a/src/oscript/DebugServer/DebuggerState.cs b/src/oscript/DebugServer/DebuggerState.cs new file mode 100644 index 000000000..a2626cba0 --- /dev/null +++ b/src/oscript/DebugServer/DebuggerState.cs @@ -0,0 +1,30 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + internal abstract class DebuggerState + { + public virtual void ExecuteCommand(DebuggerCommands command, string[] arguments) + { + throw new InvalidDebuggerCommandException(); + } + + public virtual void Enter() + { + + } + + public string Prompt { get; protected set; } + } +} diff --git a/src/oscript/DebugServer/OscriptDebugController.cs b/src/oscript/DebugServer/OscriptDebugController.cs index a08d38a64..a577854a8 100644 --- a/src/oscript/DebugServer/OscriptDebugController.cs +++ b/src/oscript/DebugServer/OscriptDebugController.cs @@ -31,9 +31,22 @@ class OscriptDebugController : IDebugController, IDebuggerService private ServiceHost _serviceHost; + private readonly DebuggerFSM _debugFSM; + public OscriptDebugController(int listenerPort) { _port = listenerPort; + + _debugFSM = new DebuggerFSM(); + + var initialState = new BeforeExecutionState(this); + var runningState = new RunningState(this); + var stoppedState = new StoppedState(this); + + _debugFSM.AddState(initialState, DebuggerCommands.Execute, runningState); + _debugFSM.AddState(initialState, DebuggerCommands.Help, initialState); + _debugFSM.AddState(initialState, DebuggerCommands.SetBreakpoint, initialState); + _debugFSM.AddState(runningState, DebuggerCommands.OutgoingEvent, stoppedState); } public void WaitForDebugEvent(DebugEventType theEvent) @@ -42,13 +55,16 @@ public void WaitForDebugEvent(DebugEventType theEvent) { case DebugEventType.BeginExecution: - var host = new ServiceHost(this); - var binding = Binder.GetBinding(); - host.AddServiceEndpoint(typeof(IDebuggerService), binding, Binder.GetDebuggerUri(_port)); - _serviceHost = host; - host.Open(); - + //var host = new ServiceHost(this); + //var binding = Binder.GetBinding(); + //host.AddServiceEndpoint(typeof(IDebuggerService), binding, Binder.GetDebuggerUri(_port)); + //_serviceHost = host; + //host.Open(); + + + _debugFSM.Start(); _debugCommandEvent.Wait(); // процесс 1скрипт не стартует, пока не получено разрешение от дебагера + break; default: throw new InvalidOperationException($"event {theEvent} cant't be waited"); @@ -245,5 +261,52 @@ private static bool HasProperties(IValue variable) } #endregion + + public void InputCommand() + { + var thread = new Thread(InteractiveInput); + thread.Start(); + } + + private void InteractiveInput() + { + bool selected = false; + while (!selected) + { + Output.Write($"{_debugFSM.CurrentState.Prompt}>"); + var line = Console.ReadLine(); + var parser = new CmdLineHelper(SplitArguments(line)); + var commandName = parser.Next(); + DebuggerCommands command = DebuggerCommands.Exit; + + switch (commandName) + { + case "run": + command = DebuggerCommands.Execute; + selected = true; + break; + case "exit": + command = DebuggerCommands.Exit; + selected = true; + break; + case "bp": + command = DebuggerCommands.SetBreakpoint; + selected = true; + break; + default: + Output.WriteLine($"Неизвестная команда {commandName}"); + break; + } + + if(selected) + _debugFSM.DispatchCommand(command, parser.Tail()); + } + + } + + private string[] SplitArguments(string line) + { + return CommandsParser.SplitCommandLine(line); + } } } diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index dceb01ecc..7988db3b6 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -108,6 +108,11 @@ + + + + + From a23dc0be0a8f6b30f2915e2179cbbe8e45a0c489 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Tue, 10 Oct 2017 19:46:58 +0300 Subject: [PATCH 003/286] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D1=87=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DebugServer/DebugStatesImplement.cs | 67 +++++++++++++------ .../DebugServer/DebuggerCommandDescription.cs | 23 +++++++ src/oscript/DebugServer/DebuggerCommands.cs | 1 + src/oscript/DebugServer/DebuggerFSM.cs | 13 ++++ src/oscript/DebugServer/DebuggerState.cs | 24 ++++++- .../DebugServer/OscriptDebugController.cs | 30 +++------ src/oscript/oscript.csproj | 1 + 7 files changed, 114 insertions(+), 45 deletions(-) create mode 100644 src/oscript/DebugServer/DebuggerCommandDescription.cs diff --git a/src/oscript/DebugServer/DebugStatesImplement.cs b/src/oscript/DebugServer/DebugStatesImplement.cs index d6632e078..8d69d6bb9 100644 --- a/src/oscript/DebugServer/DebugStatesImplement.cs +++ b/src/oscript/DebugServer/DebugStatesImplement.cs @@ -17,43 +17,66 @@ internal class BeforeExecutionState : DebuggerState { private OscriptDebugController _controller; + private bool _initialPromptPrinted; + public BeforeExecutionState(OscriptDebugController controller) { this._controller = controller; Prompt = "init"; + + FillCommands(); } - public override void ExecuteCommand(DebuggerCommands command, string[] arguments) + private void FillCommands() { - switch (command) + AddCommand(new DebuggerCommandDescription() { - case DebuggerCommands.Execute: - _controller.Execute(); - break; - case DebuggerCommands.Help: - PrintHelp(); - break; - case DebuggerCommands.SetBreakpoint: - // dummy - Output.WriteLine("bp dummy set"); - break; - default: - base.ExecuteCommand(command, arguments); - break; - } + Token = "bp", + Command = DebuggerCommands.SetBreakpoint, + HelpString = "Создание точки останова. Аргументы:" + + "\n <путь к файлу>" + + "\n <номер строки в файле>" + + "\n\nВозвращаемое значение:" + + "\n Число - идентификатор установленной точки. -1 если не удалось установить точку", + Action = SetBpAction + + }); + + AddCommand(new DebuggerCommandDescription() + { + Token = "help", + Command = DebuggerCommands.Help, + HelpString = "Показывает эту справку", + Action = PrintHelp + }); + } + + private void SetBpAction(string[] args) + { + Output.WriteLine("SetBP - dummy execution"); } public override void Enter() { - Output.WriteLine("Режим ожидания запуска. Для просмотра списка доступных команд введите help"); - _controller.InputCommand(); + if (!_initialPromptPrinted) + { + Output.WriteLine("Режим ожидания запуска. Ни одна строка кода еще не выполнена.\n" + + "Для просмотра списка доступных команд введите help\n" + + "Для запуска программы введите run\n"); + + _initialPromptPrinted = true; + } + + _controller.InputCommand(); } - private void PrintHelp() + private void PrintHelp(string[] args) { - Output.WriteLine("Доступные команды:" + - "\nbp: <путь к файлу> <номер строки> - установка точки останова" + - "\nbprm <номер точки останова> - удаление точки останова"); + Output.WriteLine("Доступные команды:"); + foreach (var cmdDescr in Commands) + { + Output.WriteLine(cmdDescr.Token); + } } } diff --git a/src/oscript/DebugServer/DebuggerCommandDescription.cs b/src/oscript/DebugServer/DebuggerCommandDescription.cs new file mode 100644 index 000000000..a754931e3 --- /dev/null +++ b/src/oscript/DebugServer/DebuggerCommandDescription.cs @@ -0,0 +1,23 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace oscript.DebugServer +{ + internal class DebuggerCommandDescription + { + public string Token { get; set; } + public DebuggerCommands Command { get; set; } + public string HelpString { get; set; } + public Action Action { get; set; } + } +} diff --git a/src/oscript/DebugServer/DebuggerCommands.cs b/src/oscript/DebugServer/DebuggerCommands.cs index 3b921f2fd..67811106a 100644 --- a/src/oscript/DebugServer/DebuggerCommands.cs +++ b/src/oscript/DebugServer/DebuggerCommands.cs @@ -15,6 +15,7 @@ namespace oscript.DebugServer { internal enum DebuggerCommands { + IllegalCommand, Execute, SetBreakpoint, Next, diff --git a/src/oscript/DebugServer/DebuggerFSM.cs b/src/oscript/DebugServer/DebuggerFSM.cs index 2039129d5..70c18f9d3 100644 --- a/src/oscript/DebugServer/DebuggerFSM.cs +++ b/src/oscript/DebugServer/DebuggerFSM.cs @@ -56,6 +56,19 @@ public void DispatchCommand(DebuggerCommands command, string[] arguments) CurrentState = availableTransition.nextState; CurrentState.Enter(); } + + public bool SelectCommand(string token, out DebuggerCommands command) + { + var cmd = CurrentState.Commands.FirstOrDefault(x => x.Token == token); + if (cmd != null) + { + command = cmd.Command; + return true; + } + + command = default(DebuggerCommands); + return false; + } } internal class InvalidDebuggerCommandException : ApplicationException diff --git a/src/oscript/DebugServer/DebuggerState.cs b/src/oscript/DebugServer/DebuggerState.cs index a2626cba0..f2cc72c08 100644 --- a/src/oscript/DebugServer/DebuggerState.cs +++ b/src/oscript/DebugServer/DebuggerState.cs @@ -15,16 +15,36 @@ namespace oscript.DebugServer { internal abstract class DebuggerState { - public virtual void ExecuteCommand(DebuggerCommands command, string[] arguments) + private readonly List _commands; + public DebuggerState() { - throw new InvalidDebuggerCommandException(); + _commands = new List(); } + public virtual void ExecuteCommand(DebuggerCommands command, string[] arguments) + { + RunCommand(command, arguments); + } + public virtual void Enter() { } public string Prompt { get; protected set; } + + public IEnumerable Commands => _commands; + + protected void AddCommand(DebuggerCommandDescription cmd) + { + _commands.Add(cmd); + } + + protected void RunCommand(DebuggerCommands cmd, string[] args) + { + var cmdDescr = Commands.First(x => x.Command == cmd); + cmdDescr.Action(args); + } + } } diff --git a/src/oscript/DebugServer/OscriptDebugController.cs b/src/oscript/DebugServer/OscriptDebugController.cs index a577854a8..db42ecabd 100644 --- a/src/oscript/DebugServer/OscriptDebugController.cs +++ b/src/oscript/DebugServer/OscriptDebugController.cs @@ -277,29 +277,17 @@ private void InteractiveInput() var line = Console.ReadLine(); var parser = new CmdLineHelper(SplitArguments(line)); var commandName = parser.Next(); - DebuggerCommands command = DebuggerCommands.Exit; - - switch (commandName) - { - case "run": - command = DebuggerCommands.Execute; - selected = true; - break; - case "exit": - command = DebuggerCommands.Exit; - selected = true; - break; - case "bp": - command = DebuggerCommands.SetBreakpoint; - selected = true; - break; - default: - Output.WriteLine($"Неизвестная команда {commandName}"); - break; - } + DebuggerCommands command; - if(selected) + if (_debugFSM.SelectCommand(commandName, out command)) + { + selected = true; _debugFSM.DispatchCommand(command, parser.Tail()); + } + else + { + Output.WriteLine($"Неизвестная команда {commandName}"); + } } } diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index 7988db3b6..95411d349 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -109,6 +109,7 @@ + From 3db6f3166d033b78ade9c45eb936d99f0153e289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Sun, 12 Nov 2017 21:51:30 +0300 Subject: [PATCH 004/286] =?UTF-8?q?=D0=90=D0=BD=D0=BD=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BA=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Reflector.cs | 55 +++++++++++- src/ScriptEngine/Compiler/Compiler.cs | 85 +++++++++++++++++++ src/ScriptEngine/Compiler/Parser.cs | 21 ++++- src/ScriptEngine/Machine/Core.cs | 24 ++++++ tests/annotations.os | 56 ++++++++++++ 5 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 tests/annotations.os diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index 28f430c12..29d50b258 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -118,15 +118,27 @@ public bool MethodExists(IRuntimeContextInstance target, string methodName) /// Получает таблицу методов для переданного объекта.. /// /// Объект, из которого получаем таблицу методов. - /// Таблица значений с 3 колонками - Имя, КоличествоПараметров, ЭтоФункция. + /// Таблица значений колонками: + /// + /// Имя - Строка + /// КоличествоПараметров - Число + /// ЭтоФункция - Булево + /// Аннотации - Неопределено, ТаблицаЗначений: + /// + /// Имя + /// Параметры + /// + /// + /// [ContextMethod("ПолучитьТаблицуМетодов", "GetMethodsTable")] public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) { ValueTable.ValueTable Result = new ValueTable.ValueTable(); - + var NameColumn = Result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var CountColumn = Result.Columns.Add("КоличествоПараметров", TypeDescription.IntegerType(), "Количество параметров"); var IsFunctionColumn = Result.Columns.Add("ЭтоФункция", TypeDescription.BooleanType(), "Это функция"); + var AnnotationsColumn = Result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); foreach(var methInfo in target.GetMethods()) { @@ -134,6 +146,45 @@ public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) new_row.Set(NameColumn, ValueFactory.Create(methInfo.Name)); new_row.Set(CountColumn, ValueFactory.Create(methInfo.ArgCount)); new_row.Set(IsFunctionColumn, ValueFactory.Create(methInfo.IsFunction)); + + if (methInfo.AnnotationsCount != 0) + { + var annotationsTable = new ValueTable.ValueTable(); + var annotationNameColumn = annotationsTable.Columns.Add("Имя"); + var annotationParamsColumn = annotationsTable.Columns.Add("Параметры"); + + new_row.Set(AnnotationsColumn, annotationsTable); + + foreach (var annotation in methInfo.Annotations) + { + var annotationRow = annotationsTable.Add(); + if (annotation.Name != null) + { + annotationRow.Set(annotationNameColumn, ValueFactory.Create(annotation.Name)); + } + if (annotation.ParamCount != 0) + { + var parametersTable = new ValueTable.ValueTable(); + var parameterNameColumn = parametersTable.Columns.Add("Имя"); + var parameterValueColumn = parametersTable.Columns.Add("Значение"); + + new_row.Set(annotationParamsColumn, parametersTable); + + foreach (var annotationParameter in annotation.Parameters) + { + var parameterRow = parametersTable.Add(); + if (annotationParameter.Name != null) + { + parameterRow.Set(parameterNameColumn, ValueFactory.Create(annotationParameter.Name)); + } + if (annotationParameter.ValueIndex != AnnotationParameter.UNDEFINED_VALUE_INDEX) + { + // TODO: выцепить константу + } + } + } + } + } } return Result; diff --git a/src/ScriptEngine/Compiler/Compiler.cs b/src/ScriptEngine/Compiler/Compiler.cs index e89fb7976..bbf500b31 100644 --- a/src/ScriptEngine/Compiler/Compiler.cs +++ b/src/ScriptEngine/Compiler/Compiler.cs @@ -36,6 +36,7 @@ class Compiler { private readonly Stack _tokenStack = new Stack(); private readonly Stack _nestedLoops = new Stack(); private readonly List _forwardedMethods = new List(); + private readonly List _annotations = new List(); private struct ForwardedMethodDecl { @@ -103,6 +104,79 @@ public ModuleImage CompileExecBatch(Parser parser, ICompilerContext context) return _module; } + private AnnotationParameter BuildAnnotationParameter() + { + // id | id = value | value + var result = new AnnotationParameter(); + if (_lastExtractedLexem.Type == LexemType.Identifier) + { + result.Name = _lastExtractedLexem.Content; + NextToken(); + if (_lastExtractedLexem.Token != Token.Equal) + { + result.ValueIndex = AnnotationParameter.UNDEFINED_VALUE_INDEX; + return result; + } + NextToken(); + } + + var cDef = CreateConstDefinition(ref _lastExtractedLexem); + result.ValueIndex = GetConstNumber(ref cDef); + + NextToken(); + + return result; + } + + private void BuildAnnotationParameters(AnnotationDefinition annotation) + { + var parameters = new List(); + while (_lastExtractedLexem.Token != Token.EndOfText) + { + parameters.Add(BuildAnnotationParameter()); + if (_lastExtractedLexem.Token == Token.Comma) + { + NextToken(); + continue; + } + if (_lastExtractedLexem.Token == Token.ClosePar) + { + NextToken(); + return; + } + throw CompilerException.UnexpectedOperation(); + } + } + + private void BuildAnnotations() + { + while (_lastExtractedLexem.Type == LexemType.Annotation) + { + var annotation = new AnnotationDefinition() {Name = _lastExtractedLexem.Content}; + + NextToken(); + if (_lastExtractedLexem.Token == Token.OpenPar) + { + NextToken(); + BuildAnnotationParameters(annotation); + } + + _annotations.Add(annotation); + } + } + + private AnnotationDefinition[] ExtractAnnotations() + { + var result = _annotations.ToArray(); + _annotations.Clear(); + return result; + } + + private void ClearAnnotations() + { + _annotations.Clear(); + } + private void BuildModule() { NextToken(); @@ -209,6 +283,10 @@ private void DispatchModuleBuild() HandleDirective(isCodeEntered); UpdateCompositeContext(); // костыль для #330 } + else if (_lastExtractedLexem.Type == LexemType.Annotation) + { + BuildAnnotations(); + } else { throw CompilerException.UnexpectedOperation(); @@ -389,6 +467,7 @@ private void BuildSingleMethod() MethodInfo method = new MethodInfo(); method.Name = _lastExtractedLexem.Content; method.IsFunction = _isFunctionProcessed; + method.Annotations = ExtractAnnotations(); NextToken(); if (_lastExtractedLexem.Token != Token.OpenPar) @@ -408,6 +487,12 @@ private void BuildSingleMethod() var param = new ParameterDefinition(); string name; + if (_lastExtractedLexem.Type == LexemType.Annotation) + { + BuildAnnotations(); + param.Annotations = ExtractAnnotations(); + } + if (_lastExtractedLexem.Token == Token.ByValParam) { param.IsByValue = true; diff --git a/src/ScriptEngine/Compiler/Parser.cs b/src/ScriptEngine/Compiler/Parser.cs index 336394e8e..ab444d91c 100644 --- a/src/ScriptEngine/Compiler/Parser.cs +++ b/src/ScriptEngine/Compiler/Parser.cs @@ -21,6 +21,7 @@ class Parser private readonly ParserState _operatorState = new OperatorParserState(); private readonly ParserState _dateState = new DateParserState(); private readonly ParserState _directiveState = new DirectiveParserState(); + private readonly ParserState _annotationState = new AnnotationParserState(); public string Code { get; set; } @@ -85,6 +86,12 @@ public Lexem NextLexem() { state = _directiveState; } + else if (cs == '&') + { + _iterator.GetContents(); + _iterator.MoveNext(); + state = _annotationState; + } else { var cp = _iterator.GetPositionInfo(_iterator.CurrentLine); @@ -166,7 +173,8 @@ enum LexemType NullLiteral, EndOperator, EndOfText, - Directive + Directive, + Annotation } abstract class ParserState @@ -595,4 +603,15 @@ public override Lexem ReadNextLexem(ParseIterator iterator) } + class AnnotationParserState : ParserState + { + public override Lexem ReadNextLexem(ParseIterator iterator) + { + var word = new WordParserState(); + var lexem = word.ReadNextLexem(iterator); + lexem.Type = LexemType.Annotation; + return lexem; + } + } + } diff --git a/src/ScriptEngine/Machine/Core.cs b/src/ScriptEngine/Machine/Core.cs index 43f204b40..13c319ee5 100644 --- a/src/ScriptEngine/Machine/Core.cs +++ b/src/ScriptEngine/Machine/Core.cs @@ -181,6 +181,7 @@ public struct MethodInfo public string Alias; public bool IsFunction; public ParameterDefinition[] Params; + public AnnotationDefinition[] Annotations; public int ArgCount { @@ -190,6 +191,8 @@ public int ArgCount } } + public int AnnotationsCount => Annotations?.Length ?? 0; + } [Serializable] @@ -198,7 +201,28 @@ public struct ParameterDefinition public bool IsByValue; public bool HasDefaultValue; public int DefaultValueIndex; + public AnnotationDefinition[] Annotations; + + public int AnnotationsCount => Annotations?.Length ?? 0; + + public const int UNDEFINED_VALUE_INDEX = -1; + } + [Serializable] + public struct AnnotationDefinition + { + public string Name; + public AnnotationParameter[] Parameters; + + public int ParamCount => Parameters?.Length ?? 0; + } + + [Serializable] + public struct AnnotationParameter + { + public string Name; + public int ValueIndex; + public const int UNDEFINED_VALUE_INDEX = -1; } diff --git a/tests/annotations.os b/tests/annotations.os new file mode 100644 index 000000000..afbffad17 --- /dev/null +++ b/tests/annotations.os @@ -0,0 +1,56 @@ +Перем юТест; + +//////////////////////////////////////////////////////////////////// +// Программный интерфейс + +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + юТест = ЮнитТестирование; + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотаций"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура САннотированнымиПараметрами( + + &АннотацияДляПараметра + Знач Парам1, + + &АннотацияДляПараметра + &АннотацияДляПараметра1 + &АннотацияДляПараметра2(СПараметрами = 3, 4, 5) + Знач Парам2, + + Парам3, + Парам4 = Неопределено +) Экспорт + +КонецПроцедуры + +&НаСервере +&НаКлиентеНаСервереБезКонтекста +&НаЧемУгодно(ДажеСПараметром = "Да") +&НаЧемУгодно(ДажеДважды = Истина) +Процедура ТестДолжен_ПроверитьПолучениеАннотаций() Экспорт + + Рефлектор = Новый Рефлектор; + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект); + + юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Аннотации"), Неопределено, "Есть колонка Аннотации"); + + СтрокаМетода = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьПолучениеАннотаций", "Имя"); + юТест.ПроверитьНеРавенство(СтрокаМетода, Неопределено, "Метод с аннотациями есть в таблице рефлектора"); + + юТест.ПроверитьНеРавенство(СтрокаМетода.Аннотации, Неопределено, "Рефлектор знает про аннотации метода"); + юТест.ПроверитьРавенство(СтрокаМетода.Аннотации.Количество(), 4, "Рефлектор вернул верное количество аннотаций"); + + юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[0].Имя, "НаСервере", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[1].Имя, "НаКлиентеНаСервереБезКонтекста", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[2].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[3].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); + +КонецПроцедуры From 0dece967efb940df40c7b183be8c0c243cb6e94e Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Mon, 13 Nov 2017 15:18:54 +0300 Subject: [PATCH 005/286] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B2=20=D1=80=D0=B5=D1=84=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Reflector.cs | 7 ++---- src/ScriptEngine/Compiler/Compiler.cs | 7 +++--- src/ScriptEngine/Machine/Core.cs | 3 +++ src/ScriptEngine/Machine/LoadedModule.cs | 23 +++++++++++++++++++ tests/annotations.os | 11 ++++++++- 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index 29d50b258..0f8987f7a 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -168,7 +168,7 @@ public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) var parameterNameColumn = parametersTable.Columns.Add("Имя"); var parameterValueColumn = parametersTable.Columns.Add("Значение"); - new_row.Set(annotationParamsColumn, parametersTable); + annotationRow.Set(annotationParamsColumn, parametersTable); foreach (var annotationParameter in annotation.Parameters) { @@ -177,10 +177,7 @@ public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) { parameterRow.Set(parameterNameColumn, ValueFactory.Create(annotationParameter.Name)); } - if (annotationParameter.ValueIndex != AnnotationParameter.UNDEFINED_VALUE_INDEX) - { - // TODO: выцепить константу - } + parameterRow.Set(parameterValueColumn, annotationParameter.RuntimeValue); } } } diff --git a/src/ScriptEngine/Compiler/Compiler.cs b/src/ScriptEngine/Compiler/Compiler.cs index bbf500b31..3f3e3ec59 100644 --- a/src/ScriptEngine/Compiler/Compiler.cs +++ b/src/ScriptEngine/Compiler/Compiler.cs @@ -128,7 +128,7 @@ private AnnotationParameter BuildAnnotationParameter() return result; } - private void BuildAnnotationParameters(AnnotationDefinition annotation) + private IList BuildAnnotationParameters() { var parameters = new List(); while (_lastExtractedLexem.Token != Token.EndOfText) @@ -142,10 +142,11 @@ private void BuildAnnotationParameters(AnnotationDefinition annotation) if (_lastExtractedLexem.Token == Token.ClosePar) { NextToken(); - return; + break; } throw CompilerException.UnexpectedOperation(); } + return parameters; } private void BuildAnnotations() @@ -158,7 +159,7 @@ private void BuildAnnotations() if (_lastExtractedLexem.Token == Token.OpenPar) { NextToken(); - BuildAnnotationParameters(annotation); + annotation.Parameters = BuildAnnotationParameters().ToArray(); } _annotations.Add(annotation); diff --git a/src/ScriptEngine/Machine/Core.cs b/src/ScriptEngine/Machine/Core.cs index 13c319ee5..155559842 100644 --- a/src/ScriptEngine/Machine/Core.cs +++ b/src/ScriptEngine/Machine/Core.cs @@ -222,6 +222,9 @@ public struct AnnotationParameter { public string Name; public int ValueIndex; + + [NonSerialized] + public IValue RuntimeValue; public const int UNDEFINED_VALUE_INDEX = -1; } diff --git a/src/ScriptEngine/Machine/LoadedModule.cs b/src/ScriptEngine/Machine/LoadedModule.cs index d39078386..58ab7f388 100644 --- a/src/ScriptEngine/Machine/LoadedModule.cs +++ b/src/ScriptEngine/Machine/LoadedModule.cs @@ -32,6 +32,29 @@ internal LoadedModule(ModuleImage image) var def = image.Constants[i]; this.Constants[i] = ValueFactory.Parse(def.Presentation, def.Type); } + + // Resolve annotation constants + for (int i = 0; i < Methods.Length; i++) + { + var ms = Methods[i].Signature; + if (ms.AnnotationsCount != 0) + { + for (int j = 0; j < ms.Annotations.Length; j++) + { + var ma = ms.Annotations[j]; + if (ma.ParamCount != 0) + { + for (int k = 0; k < ma.Parameters.Length; k++) + { + if (ma.Parameters[k].ValueIndex != AnnotationParameter.UNDEFINED_VALUE_INDEX) + { + ma.Parameters[k].RuntimeValue = this.Constants[ma.Parameters[k].ValueIndex]; + } + } + } + } + } + } } public VariablesFrame Variables { get; private set; } diff --git a/tests/annotations.os b/tests/annotations.os index afbffad17..1df450b90 100644 --- a/tests/annotations.os +++ b/tests/annotations.os @@ -33,7 +33,7 @@ &НаСервере &НаКлиентеНаСервереБезКонтекста -&НаЧемУгодно(ДажеСПараметром = "Да") +&НаЧемУгодно(ДажеСПараметром = "Да", СПараметромБезЗначения, "Значение без параметра") &НаЧемУгодно(ДажеДважды = Истина) Процедура ТестДолжен_ПроверитьПолучениеАннотаций() Экспорт @@ -53,4 +53,13 @@ юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[2].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); юТест.ПроверитьРавенство(СтрокаМетода.Аннотации[3].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); + Аннотация2 = СтрокаМетода.Аннотации[2]; + юТест.ПроверитьНеРавенство(Аннотация2.Параметры, Неопределено, "Есть таблица параметров аннотации"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Имя, "ДажеСПараметром", "Знаем имя именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Значение, "Да", "Знаем значение именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Имя, "СПараметромБезЗначения", "Знаем имя именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Значение, Неопределено, "Знаем, что значение не определено"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Имя, Неопределено, "Знаем, что имя не определно"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Значение, "Значение без параметра", "Знаем значение параметра без имени"); + КонецПроцедуры From 7898efd6a547266bddd31f651196373168dcdd06 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Mon, 13 Nov 2017 15:20:04 +0300 Subject: [PATCH 006/286] =?UTF-8?q?=D0=92=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=BC=D0=BF=D0=B8=D0=BB=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BD=D0=BE=D0=BC=20=D1=82=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D1=82=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Compiler/ModuleWriter.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/ScriptEngine/Compiler/ModuleWriter.cs b/src/ScriptEngine/Compiler/ModuleWriter.cs index 5c9656e9d..5c4de57aa 100644 --- a/src/ScriptEngine/Compiler/ModuleWriter.cs +++ b/src/ScriptEngine/Compiler/ModuleWriter.cs @@ -91,6 +91,26 @@ private void WriteMethodDefinition(TextWriter output, MethodDescriptor item) item.Signature.Name, item.EntryPoint, item.Variables.Count)); + if (item.Signature.AnnotationsCount != 0) + { + output.WriteLine(".annotations ["); + foreach (var annotation in item.Signature.Annotations) + { + output.Write(string.Format(" {0}", annotation.Name)); + if (annotation.ParamCount != 0) + { + var delimiter = ": "; + foreach (var parameter in annotation.Parameters) + { + output.Write(string.Format("{3}{0}{2}{1}", parameter.Name, parameter.ValueIndex, + parameter.Name != null ? "=" : "", delimiter)); + delimiter = ", "; + } + } + output.WriteLine(""); + } + output.WriteLine("]"); + } output.Write(string.Format(".args {0}\n", item.Signature.ArgCount)); if (item.Signature.Params != null) { From 900c78210043933ebb872ec3c5d4994c0adec22f Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Wed, 15 Nov 2017 12:59:31 +0300 Subject: [PATCH 007/286] =?UTF-8?q?=D0=90=D0=BD=D0=BD=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=B2=20=D1=80=D0=B5=D1=84=D0=BB=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Reflector.cs | 86 +++++++++++++------ src/ScriptEngine/Machine/LoadedModule.cs | 31 ++++--- tests/annotations.os | 35 +++++++- 3 files changed, 107 insertions(+), 45 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index 0f8987f7a..5a7d1520f 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -113,6 +113,41 @@ public bool MethodExists(IRuntimeContextInstance target, string methodName) } } + private ValueTable.ValueTable CreateAnnotationTable(AnnotationDefinition[] annotations) + { + var annotationsTable = new ValueTable.ValueTable(); + var annotationNameColumn = annotationsTable.Columns.Add("Имя"); + var annotationParamsColumn = annotationsTable.Columns.Add("Параметры"); + + foreach (var annotation in annotations) + { + var annotationRow = annotationsTable.Add(); + if (annotation.Name != null) + { + annotationRow.Set(annotationNameColumn, ValueFactory.Create(annotation.Name)); + } + if (annotation.ParamCount != 0) + { + var parametersTable = new ValueTable.ValueTable(); + var parameterNameColumn = parametersTable.Columns.Add("Имя"); + var parameterValueColumn = parametersTable.Columns.Add("Значение"); + + annotationRow.Set(annotationParamsColumn, parametersTable); + + foreach (var annotationParameter in annotation.Parameters) + { + var parameterRow = parametersTable.Add(); + if (annotationParameter.Name != null) + { + parameterRow.Set(parameterNameColumn, ValueFactory.Create(annotationParameter.Name)); + } + parameterRow.Set(parameterValueColumn, annotationParameter.RuntimeValue); + } + } + } + + return annotationsTable; + } /// /// Получает таблицу методов для переданного объекта.. @@ -139,6 +174,7 @@ public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) var CountColumn = Result.Columns.Add("КоличествоПараметров", TypeDescription.IntegerType(), "Количество параметров"); var IsFunctionColumn = Result.Columns.Add("ЭтоФункция", TypeDescription.BooleanType(), "Это функция"); var AnnotationsColumn = Result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); + var ParamsColumn = Result.Columns.Add("Параметры", new TypeDescription(), "Параметры"); foreach(var methInfo in target.GetMethods()) { @@ -149,36 +185,30 @@ public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) if (methInfo.AnnotationsCount != 0) { - var annotationsTable = new ValueTable.ValueTable(); - var annotationNameColumn = annotationsTable.Columns.Add("Имя"); - var annotationParamsColumn = annotationsTable.Columns.Add("Параметры"); - - new_row.Set(AnnotationsColumn, annotationsTable); - - foreach (var annotation in methInfo.Annotations) + new_row.Set(AnnotationsColumn, CreateAnnotationTable(methInfo.Annotations)); + } + + var paramTable = new ValueTable.ValueTable(); + var paramNameColumn = paramTable.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); + var paramByValue = paramTable.Columns.Add("ПоЗначению", TypeDescription.BooleanType(), "По значению"); + var paramHasDefaultValue = paramTable.Columns.Add("ЕстьЗначениеПоУмолчанию", TypeDescription.BooleanType(), "Есть значение по-умолчанию"); + var paramAnnotationsColumn = paramTable.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); + + new_row.Set(ParamsColumn, paramTable); + + if (methInfo.ArgCount != 0) + { + var index = 0; + foreach (var param in methInfo.Params) { - var annotationRow = annotationsTable.Add(); - if (annotation.Name != null) - { - annotationRow.Set(annotationNameColumn, ValueFactory.Create(annotation.Name)); - } - if (annotation.ParamCount != 0) + var name = string.Format("param{0}", ++index); + var paramRow = paramTable.Add(); + paramRow.Set(paramNameColumn, ValueFactory.Create(name)); + paramRow.Set(paramByValue, ValueFactory.Create(param.IsByValue)); + paramRow.Set(paramHasDefaultValue, ValueFactory.Create(param.HasDefaultValue)); + if (param.AnnotationsCount != 0) { - var parametersTable = new ValueTable.ValueTable(); - var parameterNameColumn = parametersTable.Columns.Add("Имя"); - var parameterValueColumn = parametersTable.Columns.Add("Значение"); - - annotationRow.Set(annotationParamsColumn, parametersTable); - - foreach (var annotationParameter in annotation.Parameters) - { - var parameterRow = parametersTable.Add(); - if (annotationParameter.Name != null) - { - parameterRow.Set(parameterNameColumn, ValueFactory.Create(annotationParameter.Name)); - } - parameterRow.Set(parameterValueColumn, annotationParameter.RuntimeValue); - } + paramRow.Set(paramAnnotationsColumn, CreateAnnotationTable(param.Annotations)); } } } diff --git a/src/ScriptEngine/Machine/LoadedModule.cs b/src/ScriptEngine/Machine/LoadedModule.cs index 58ab7f388..41891c104 100644 --- a/src/ScriptEngine/Machine/LoadedModule.cs +++ b/src/ScriptEngine/Machine/LoadedModule.cs @@ -36,22 +36,25 @@ internal LoadedModule(ModuleImage image) // Resolve annotation constants for (int i = 0; i < Methods.Length; i++) { - var ms = Methods[i].Signature; - if (ms.AnnotationsCount != 0) + EvaluateAnnotationParametersValues(Methods[i].Signature.Annotations); + for (int j = 0; j < Methods[i].Signature.ArgCount; j++) { - for (int j = 0; j < ms.Annotations.Length; j++) + EvaluateAnnotationParametersValues(Methods[i].Signature.Params[j].Annotations); + } + } + } + + private void EvaluateAnnotationParametersValues(AnnotationDefinition[] annotations) + { + for (int i = 0; i < annotations?.Length; i++) + { + var parameters = annotations[i].Parameters; + for (int j = 0; j < parameters?.Length; j++) + { + var pa = parameters[j]; + if (pa.ValueIndex != AnnotationParameter.UNDEFINED_VALUE_INDEX) { - var ma = ms.Annotations[j]; - if (ma.ParamCount != 0) - { - for (int k = 0; k < ma.Parameters.Length; k++) - { - if (ma.Parameters[k].ValueIndex != AnnotationParameter.UNDEFINED_VALUE_INDEX) - { - ma.Parameters[k].RuntimeValue = this.Constants[ma.Parameters[k].ValueIndex]; - } - } - } + annotations[i].Parameters[j].RuntimeValue = Constants[pa.ValueIndex]; } } } diff --git a/tests/annotations.os b/tests/annotations.os index 1df450b90..2f887df7e 100644 --- a/tests/annotations.os +++ b/tests/annotations.os @@ -9,7 +9,8 @@ ВсеТесты = Новый Массив; - ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотаций"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийМетода"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийПараметров"); Возврат ВсеТесты; @@ -35,14 +36,14 @@ &НаКлиентеНаСервереБезКонтекста &НаЧемУгодно(ДажеСПараметром = "Да", СПараметромБезЗначения, "Значение без параметра") &НаЧемУгодно(ДажеДважды = Истина) -Процедура ТестДолжен_ПроверитьПолучениеАннотаций() Экспорт +Процедура ТестДолжен_ПроверитьПолучениеАннотацийМетода() Экспорт Рефлектор = Новый Рефлектор; ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект); юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Аннотации"), Неопределено, "Есть колонка Аннотации"); - СтрокаМетода = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьПолучениеАннотаций", "Имя"); + СтрокаМетода = ТаблицаМетодов.Найти("ТестДолжен_ПроверитьПолучениеАннотацийМетода", "Имя"); юТест.ПроверитьНеРавенство(СтрокаМетода, Неопределено, "Метод с аннотациями есть в таблице рефлектора"); юТест.ПроверитьНеРавенство(СтрокаМетода.Аннотации, Неопределено, "Рефлектор знает про аннотации метода"); @@ -63,3 +64,31 @@ юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Значение, "Значение без параметра", "Знаем значение параметра без имени"); КонецПроцедуры + +Процедура ТестДолжен_ПроверитьПолучениеАннотацийПараметров() Экспорт + + Рефлектор = Новый Рефлектор; + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ЭтотОбъект); + + юТест.ПроверитьНеРавенство(ТаблицаМетодов.Колонки.Найти("Параметры"), Неопределено, "Рефлектор знает о параметрах"); + + СтрокаМетода = ТаблицаМетодов.Найти("САннотированнымиПараметрами", "Имя"); + юТест.ПроверитьРавенство(СтрокаМетода.Параметры.Количество(), 4, "Правильное количество параметров"); + + Парам1 = СтрокаМетода.Параметры.Получить(0); + Парам2 = СтрокаМетода.Параметры.Получить(1); + Парам3 = СтрокаМетода.Параметры.Получить(2); + Парам4 = СтрокаМетода.Параметры.Получить(3); + + юТест.ПроверитьРавенство(Парам1.Аннотации.Получить(0).Имя, "АннотацияДляПараметра", "Аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(0).Имя, "АннотацияДляПараметра", "Аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(1).Имя, "АннотацияДляПараметра1", "Аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Имя, "АннотацияДляПараметра2", "Аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры.Количество(), 3, "Параметры аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[0].Значение, 3, "Значения параметров аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[1].Значение, 4, "Значения параметров аннотации параметров"); + юТест.ПроверитьРавенство(Парам2.Аннотации.Получить(2).Параметры[2].Значение, 5, "Значения параметров аннотации параметров"); + юТест.ПроверитьРавенство(Парам3.Аннотации, Неопределено); + юТест.ПроверитьРавенство(Парам4.Аннотации, Неопределено); + +КонецПроцедуры From 61e610f7ef96c5eb028bf6e97f6d62180bf45051 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 13:58:19 +0300 Subject: [PATCH 008/286] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?ScriptEngine=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/ScriptEngine.csproj | 220 +-------------------------- 1 file changed, 6 insertions(+), 214 deletions(-) diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index ed8a2d7b8..e91951c56 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -1,228 +1,20 @@  - - + - Debug - AnyCPU - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - Library - Properties - ScriptEngine - ScriptEngine - 512 - SAK - SAK - SAK - SAK - v4.5.2 - - - - True - full - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - bin\Release\ScriptEngine.XML - CS1591 - false - - - True - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - False - false - - - bin\x86\Release\ - TRACE - True - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - 1591 - bin\x86\Release\ScriptEngine.XML - false - - - bin\ReleaseNoSnegopat\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false + net452;netstandard2.0 + false - - bin\x86\ReleaseNoSnegopat\ - TRACE - bin\x86\Release\ScriptEngine.XML - true - 1591 - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false - - - - - - - - GlobalAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xcopy "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D cp -f "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner/" + ScriptEngine + ScriptEngine - \ No newline at end of file From 3f68d7c4d60b11cbdb1b75067d1997ee2184b19a Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 13:58:40 +0300 Subject: [PATCH 009/286] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?HostedScript=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Net/TCPClient.cs | 1 - .../Library/SystemGlobalContext.cs | 16 +- .../ScriptEngine.HostedScript.csproj | 257 +----------------- src/ScriptEngine.HostedScript/packages.config | 5 - 4 files changed, 22 insertions(+), 257 deletions(-) delete mode 100644 src/ScriptEngine.HostedScript/packages.config diff --git a/src/ScriptEngine.HostedScript/Library/Net/TCPClient.cs b/src/ScriptEngine.HostedScript/Library/Net/TCPClient.cs index 11d03a03e..cc9c2981f 100644 --- a/src/ScriptEngine.HostedScript/Library/Net/TCPClient.cs +++ b/src/ScriptEngine.HostedScript/Library/Net/TCPClient.cs @@ -8,7 +8,6 @@ This Source Code Form is subject to the terms of the using System.Collections.Generic; using System.Linq; using System.Net.Sockets; -using System.Runtime.Remoting.Contexts; using System.Text; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; diff --git a/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs b/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs index bc9fff5a3..99babd956 100755 --- a/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs +++ b/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs @@ -567,7 +567,11 @@ private object GetCOMObjectInternal(string pathName = null, string className = n } else if (pathName == null) { +#if NETSTANDARD2_0 + throw new NotSupportedException("Getting object by classname not supported on netstandard2"); +#else return Marshal.GetActiveObject(className); +#endif } else if (pathName.Length == 0) { @@ -575,14 +579,18 @@ private object GetCOMObjectInternal(string pathName = null, string className = n } else { +#if NETSTANDARD2_0 + throw new NotSupportedException("Getting object by classname not supported on netstandard2"); +#else var persistFile = (IPersistFile)Marshal.GetActiveObject(className); persistFile.Load(pathName, 0); return (object)persistFile; +#endif } } - #region IAttachableContext Members +#region IAttachableContext Members public void OnAttach(MachineInstance machine, out IVariable[] variables, @@ -603,9 +611,9 @@ public IEnumerable GetMethods() return array; } - #endregion +#endregion - #region IRuntimeContextInstance Members +#region IRuntimeContextInstance Members public bool IsIndexed { @@ -693,7 +701,7 @@ public void CallAsFunction(int methodNumber, IValue[] arguments, out IValue retV retValue = _methods.GetMethod(methodNumber)(this, arguments); } - #endregion +#endregion private static readonly ContextMethodsMapper _methods; diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index e476d8b1c..4ab0a3fdc 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -1,255 +1,25 @@  - - + - Debug - AnyCPU - {F09A46BD-5737-45E7-BA60-A47C9F7821A9} - Library - Properties - ScriptEngine.HostedScript - ScriptEngine.HostedScript - v4.5.2 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\ScriptEngine.HostedScript.XML - CS1591 - false - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - false - false - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - bin\x86\Release\ScriptEngine.HostedScript.XML - 1591 - 4 - false - - - bin\ReleaseNoSnegopat\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x86\ReleaseNoSnegopat\ - TRACE - bin\x86\Release\ScriptEngine.HostedScript.XML - true - 1591 - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false + net452;netstandard2.0 + false - - ..\packages\DotNetZip.1.9.3\lib\net20\Ionic.Zip.dll - - - ..\packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll - True - - - - - - - - + + GlobalAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {727a498f-bf50-42f8-8523-40c0b5b1b233} - OneScript.DebugProtocol - - - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - ScriptEngine - - - - + PreserveNewest - - - - - - - - - - xcopy "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D - cp -f "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner/" - + + + + xcopy "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D xcopy "$(TargetDir)Ionic.Zip.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D @@ -258,11 +28,4 @@ xcopy "$(TargetDir)Newtonsoft.Json.dll" "$(SolutionDir)StandaloneRunner\" /Y /E cp -f "$(TargetDir)Ionic.Zip.dll" "$(SolutionDir)StandaloneRunner" cp -f "$(TargetDir)Newtonsoft.Json.dll" "$(SolutionDir)StandaloneRunner" - \ No newline at end of file diff --git a/src/ScriptEngine.HostedScript/packages.config b/src/ScriptEngine.HostedScript/packages.config deleted file mode 100644 index a5a9ba625..000000000 --- a/src/ScriptEngine.HostedScript/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file From ec901607434d9991763c47e961f823a2acf60e78 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 13:58:51 +0300 Subject: [PATCH 010/286] =?UTF-8?q?=D0=9E=D1=82=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20sln?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index 0d7ede280..10bcc52f3 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -8,7 +8,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp. {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} = {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptEngine", "ScriptEngine\ScriptEngine.csproj", "{F062D1D9-D307-492A-A56B-FF3C55F8F6C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptEngine", "ScriptEngine\ScriptEngine.csproj", "{F062D1D9-D307-492A-A56B-FF3C55F8F6C0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptEngine.HostedScript", "ScriptEngine.HostedScript\ScriptEngine.HostedScript.csproj", "{F09A46BD-5737-45E7-BA60-A47C9F7821A9}" EndProject @@ -108,7 +108,6 @@ Global {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU From dca874c1963607dbe32a16d2f6f8d235d19148a1 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 15:30:58 +0300 Subject: [PATCH 011/286] =?UTF-8?q?StandaloneRunner=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 12 +- .../ScriptEngine.HostedScript.csproj | 3 +- src/StandaloneRunner/StandaloneRunner.csproj | 123 +----------------- 3 files changed, 15 insertions(+), 123 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index 10bcc52f3..ca4aa30df 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -10,14 +10,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptEngine", "ScriptEngine\ScriptEngine.csproj", "{F062D1D9-D307-492A-A56B-FF3C55F8F6C0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptEngine.HostedScript", "ScriptEngine.HostedScript\ScriptEngine.HostedScript.csproj", "{F09A46BD-5737-45E7-BA60-A47C9F7821A9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptEngine.HostedScript", "ScriptEngine.HostedScript\ScriptEngine.HostedScript.csproj", "{F09A46BD-5737-45E7-BA60-A47C9F7821A9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "oscript", "oscript\oscript.csproj", "{2590E2BB-CC1F-4775-80ED-451F45C9A4F1}" ProjectSection(ProjectDependencies) = postProject {795AA2F5-3074-4BC5-A30F-1B6354044D9B} = {795AA2F5-3074-4BC5-A30F-1B6354044D9B} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandaloneRunner", "StandaloneRunner\StandaloneRunner.csproj", "{795AA2F5-3074-4BC5-A30F-1B6354044D9B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StandaloneRunner", "StandaloneRunner\StandaloneRunner.csproj", "{795AA2F5-3074-4BC5-A30F-1B6354044D9B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D14BF321-348C-46B8-B96A-43A22BA7AC10}" ProjectSection(SolutionItems) = preProject @@ -87,12 +87,12 @@ Global {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|x86 - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.Build.0 = Debug|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.Build.0 = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.ActiveCfg = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.Build.0 = Release|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|x86 - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|Any CPU {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|Any CPU.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|x86.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|Any CPU.ActiveCfg = Release|x86 diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 4ab0a3fdc..72aeaa096 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -21,7 +21,8 @@ - xcopy "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D + net452 + xcopy "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D xcopy "$(TargetDir)Ionic.Zip.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D xcopy "$(TargetDir)Newtonsoft.Json.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D cp -f "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner" diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index 9320c00b5..56950f361 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -1,91 +1,9 @@  - - + - Debug - AnyCPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B} - Exe - Properties - StandaloneRunner - StandaloneRunner - v4.5.2 - 512 - + net452 + false - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - false - false - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - false - - - bin\ReleaseNoSnegopat\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x86\ReleaseNoSnegopat\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false - - - - - - - - - - GlobalAssemblyInfo.cs @@ -96,46 +14,19 @@ Output.cs - - - - - {F09A46BD-5737-45E7-BA60-A47C9F7821A9} - ScriptEngine.HostedScript - False - - - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - ScriptEngine - False - + + + + - - - - - - - - - - - xcopy "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript\" /Y /E /D cp -f "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript/" - \ No newline at end of file From cfd3efe8800d08a73ee11dcbb2a147b4b57b0342 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 16:05:25 +0300 Subject: [PATCH 012/286] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?oscript=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 8 +- src/StandaloneRunner/StandaloneRunner.csproj | 7 +- src/oscript/oscript.csproj | 158 ++----------------- 3 files changed, 18 insertions(+), 155 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index ca4aa30df..6aa476500 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -79,12 +79,12 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.Build.0 = Release|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|Any CPU diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index 56950f361..f48efbf21 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -16,8 +16,8 @@ - - + + @@ -28,5 +28,8 @@ xcopy "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript\" /Y /E /D cp -f "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript/" + + Exe + \ No newline at end of file diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index dceb01ecc..a5a1b924d 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -1,167 +1,27 @@  - - + - Debug - AnyCPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1} + net452 + false + Exe - Properties - oscript - oscript - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - false - false - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - 4 - bin\x86\Release\oscript.XML - CS1591 - false - - - bin\ReleaseNoSnegopat\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x86\ReleaseNoSnegopat\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false + oscript.Program - - ..\packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll - True - - - + - - - - GlobalAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {727a498f-bf50-42f8-8523-40c0b5b1b233} - OneScript.DebugProtocol - - - {F09A46BD-5737-45E7-BA60-A47C9F7821A9} - ScriptEngine.HostedScript - - - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - ScriptEngine - + + + - - - - - - - - - \ No newline at end of file From af266d655124e83cb8e5e7574f7e291681adcd2c Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 16:09:07 +0300 Subject: [PATCH 013/286] =?UTF-8?q?DebugProtocol=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OneScript.DebugProtocol.csproj | 57 +------------------ src/OneScript.DebugProtocol/packages.config | 4 -- 2 files changed, 3 insertions(+), 58 deletions(-) delete mode 100644 src/OneScript.DebugProtocol/packages.config diff --git a/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj b/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj index f9579081d..ff830bceb 100644 --- a/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj +++ b/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj @@ -1,66 +1,15 @@  - - + - Debug - AnyCPU - {727A498F-BF50-42F8-8523-40C0B5B1B233} - Library - Properties - OneScript.DebugProtocol - OneScript.DebugProtocol - v4.0 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + net452 + false - - - - - - GlobalAssemblyInfo.cs - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/OneScript.DebugProtocol/packages.config b/src/OneScript.DebugProtocol/packages.config deleted file mode 100644 index 7c276ed86..000000000 --- a/src/OneScript.DebugProtocol/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From 6031255eca53f994416add2fc687044a763039ab Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 16:23:52 +0300 Subject: [PATCH 014/286] =?UTF-8?q?=D0=9D=D0=B5=D0=BD=D1=83=D0=B6=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/HostedScriptEngine.cs | 2 -- src/ScriptEngine.HostedScript/Process.cs | 1 - src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj | 1 - 3 files changed, 4 deletions(-) diff --git a/src/ScriptEngine.HostedScript/HostedScriptEngine.cs b/src/ScriptEngine.HostedScript/HostedScriptEngine.cs index 9ec96cb23..726857d44 100644 --- a/src/ScriptEngine.HostedScript/HostedScriptEngine.cs +++ b/src/ScriptEngine.HostedScript/HostedScriptEngine.cs @@ -12,8 +12,6 @@ This Source Code Form is subject to the terms of the using System.Collections.Generic; using System.Linq; -using OneScript.DebugProtocol; - namespace ScriptEngine.HostedScript { public class HostedScriptEngine diff --git a/src/ScriptEngine.HostedScript/Process.cs b/src/ScriptEngine.HostedScript/Process.cs index e036628b8..7f40e0a5e 100644 --- a/src/ScriptEngine.HostedScript/Process.cs +++ b/src/ScriptEngine.HostedScript/Process.cs @@ -10,7 +10,6 @@ This Source Code Form is subject to the terms of the using System.Text; using ScriptEngine.Environment; using ScriptEngine.Machine; -using OneScript.DebugProtocol; namespace ScriptEngine.HostedScript { diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 72aeaa096..adbe719c7 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -17,7 +17,6 @@ - From 4844f7708d0145e8f1a31641c7275e3f0d06981a Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 16:24:15 +0300 Subject: [PATCH 015/286] =?UTF-8?q?DebugServer=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DebugServer/DebugServer.csproj | 77 ++++-------------------------- src/DebugServer/packages.config | 4 -- 2 files changed, 8 insertions(+), 73 deletions(-) delete mode 100644 src/DebugServer/packages.config diff --git a/src/DebugServer/DebugServer.csproj b/src/DebugServer/DebugServer.csproj index dd4b20d41..dd2d21c6f 100644 --- a/src/DebugServer/DebugServer.csproj +++ b/src/DebugServer/DebugServer.csproj @@ -1,89 +1,28 @@  - - + - Debug - AnyCPU - {C979F151-AA29-47E4-B020-3039BA0986D9} - Exe - Properties - DebugServer - DebugServer - v4.0 - 512 - true - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + net452 + false + Exe + DebugServer.Program - - ..\packages\Newtonsoft.Json.10.0.1\lib\net40\Newtonsoft.Json.dll - True - - - - - - - - + + GlobalAssemblyInfo.cs - - - - - - - - - - - - - Always Always - - - {727A498F-BF50-42F8-8523-40C0B5B1B233} - OneScript.DebugProtocol - + - - \ No newline at end of file diff --git a/src/DebugServer/packages.config b/src/DebugServer/packages.config deleted file mode 100644 index 028a5be36..000000000 --- a/src/DebugServer/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From d1246f2090295ffeca415d14398aa75a6d8cc4cc Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 17:31:40 +0300 Subject: [PATCH 016/286] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?Component=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 5 ++- src/Component/Component.csproj | 54 ++++-------------------- src/Component/Properties/AssemblyInfo.cs | 12 ------ 3 files changed, 11 insertions(+), 60 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index 6aa476500..c923c3275 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -12,7 +12,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptEngine", "ScriptEngin EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScriptEngine.HostedScript", "ScriptEngine.HostedScript\ScriptEngine.HostedScript.csproj", "{F09A46BD-5737-45E7-BA60-A47C9F7821A9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "oscript", "oscript\oscript.csproj", "{2590E2BB-CC1F-4775-80ED-451F45C9A4F1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "oscript", "oscript\oscript.csproj", "{2590E2BB-CC1F-4775-80ED-451F45C9A4F1}" ProjectSection(ProjectDependencies) = postProject {795AA2F5-3074-4BC5-A30F-1B6354044D9B} = {795AA2F5-3074-4BC5-A30F-1B6354044D9B} EndProjectSection @@ -39,7 +39,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Component", "Component\Comp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DebugServer", "DebugServer\DebugServer.csproj", "{C979F151-AA29-47E4-B020-3039BA0986D9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OneScript.DebugProtocol", "OneScript.DebugProtocol\OneScript.DebugProtocol.csproj", "{727A498F-BF50-42F8-8523-40C0B5B1B233}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OneScript.DebugProtocol", "OneScript.DebugProtocol\OneScript.DebugProtocol.csproj", "{727A498F-BF50-42F8-8523-40C0B5B1B233}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "oscriptTests", "oscriptTest\oscriptTests.csproj", "{69A7869C-203C-4F09-AC3F-04E9B52AD7AB}" EndProject @@ -108,6 +108,7 @@ Global {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU diff --git a/src/Component/Component.csproj b/src/Component/Component.csproj index 028e16e17..8f9b5e219 100644 --- a/src/Component/Component.csproj +++ b/src/Component/Component.csproj @@ -1,54 +1,16 @@  - + - Debug - AnyCPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB} - Library - Component - Component - v4.5.2 - + net452;netstandard2.0 + false - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - - - true - bin\Release - prompt - 4 - false - - - - - - - - - - - - - - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - ScriptEngine - - - {F09A46BD-5737-45E7-BA60-A47C9F7821A9} - ScriptEngine.HostedScript - + + + + GlobalAssemblyInfo.cs + - diff --git a/src/Component/Properties/AssemblyInfo.cs b/src/Component/Properties/AssemblyInfo.cs index 068ade48b..c3c74b433 100644 --- a/src/Component/Properties/AssemblyInfo.cs +++ b/src/Component/Properties/AssemblyInfo.cs @@ -12,18 +12,6 @@ This Source Code Form is subject to the terms of the [assembly: AssemblyTitle("Component")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("${AuthorCopyright}")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.*")] // The following attributes are used to specify the signing key for the assembly, // if desired. See the Mono documentation for more information about signing. From cf2e102652837128c6b3b9ea52b8bc4a8e5c8d63 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 17 Nov 2017 18:55:02 +0300 Subject: [PATCH 017/286] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D1=8B=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 16 ++++++++-------- src/StandaloneRunner/StandaloneRunner.csproj | 1 + src/oscript/oscript.csproj | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index c923c3275..e92b8d3f9 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -79,20 +79,20 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.Build.0 = Release|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.Build.0 = Debug|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.Build.0 = Debug|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.ActiveCfg = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.Build.0 = Release|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|Any CPU.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|x86.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|Any CPU.ActiveCfg = Release|x86 diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index f48efbf21..a77d15683 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -3,6 +3,7 @@ net452 false + AnyCPU;x86 diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index a5a1b924d..1b6d204eb 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -6,6 +6,7 @@ Exe oscript.Program + AnyCPU;x86 From 4f21b9af68004e05f4cf26ff47e1f5af04957cf2 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 20 Nov 2017 00:32:58 +0300 Subject: [PATCH 018/286] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20Comppo?= =?UTF-8?q?nent=20=D0=B8=D0=B7=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20(?= =?UTF-8?q?=D0=BD=D0=B5=20=D1=85=D0=BE=D1=87=D0=B5=D1=82=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D1=82=D1=8C=D1=81=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=B4=D0=B5=20cross-target)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index e92b8d3f9..b8d924ffe 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27004.2006 +VisualStudioVersion = 15.0.27004.2009 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" ProjectSection(ProjectDependencies) = postProject @@ -35,9 +35,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NUnitTests", "NUnitTests\NU {795AA2F5-3074-4BC5-A30F-1B6354044D9B} = {795AA2F5-3074-4BC5-A30F-1B6354044D9B} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Component", "Component\Component.csproj", "{B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component", "Component\Component.csproj", "{B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DebugServer", "DebugServer\DebugServer.csproj", "{C979F151-AA29-47E4-B020-3039BA0986D9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DebugServer", "DebugServer\DebugServer.csproj", "{C979F151-AA29-47E4-B020-3039BA0986D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OneScript.DebugProtocol", "OneScript.DebugProtocol\OneScript.DebugProtocol.csproj", "{727A498F-BF50-42F8-8523-40C0B5B1B233}" EndProject @@ -108,11 +108,9 @@ Global {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.Build.0 = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|x86.ActiveCfg = Debug|Any CPU From 5347d5b3c812210655db0cf861c8f27f97fc6fdd Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 22 Nov 2017 00:21:45 +0300 Subject: [PATCH 019/286] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?TestApp=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=83=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 14 +-- src/TestApp/MainWindow.xaml.cs | 1 - src/TestApp/TestApp.csproj | 198 ++++++--------------------------- src/TestApp/packages.config | 4 - src/oscript/oscript.csproj | 2 +- src/oscript/packages.config | 4 - 6 files changed, 37 insertions(+), 186 deletions(-) delete mode 100644 src/TestApp/packages.config delete mode 100644 src/oscript/packages.config diff --git a/src/1Script.sln b/src/1Script.sln index b8d924ffe..f0839c275 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27004.2009 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" ProjectSection(ProjectDependencies) = postProject {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} = {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} EndProjectSection @@ -53,12 +53,10 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.ActiveCfg = Debug|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.Build.0 = Debug|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.Build.0 = Release|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.Build.0 = Release|x86 {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -77,12 +75,10 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|Any CPU.Build.0 = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.ActiveCfg = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|x86 - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.Build.0 = Release|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/src/TestApp/MainWindow.xaml.cs b/src/TestApp/MainWindow.xaml.cs index c80e1d5db..aa5afdd54 100644 --- a/src/TestApp/MainWindow.xaml.cs +++ b/src/TestApp/MainWindow.xaml.cs @@ -416,7 +416,6 @@ public void Echo(string str, MessageStatusEnum status = MessageStatusEnum.Ordina { _output.AppendText(str + '\n'); _output.ScrollToEnd(); - System.Windows.Forms.Application.DoEvents(); } public void ShowExceptionInfo(Exception exc) diff --git a/src/TestApp/TestApp.csproj b/src/TestApp/TestApp.csproj index b8e0ae474..b546d1e82 100644 --- a/src/TestApp/TestApp.csproj +++ b/src/TestApp/TestApp.csproj @@ -1,190 +1,54 @@  - - + - Debug - AnyCPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999} + net452 + $(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets + false + WinExe - Properties - TestApp - TestApp - v4.5.2 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - SAK - SAK - SAK - SAK - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false - - - script_badge.ico - - - bin\ReleaseNoSnegopat\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - - - bin\x86\ReleaseNoSnegopat\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - false + TestApp.App + x86 - - ..\packages\AvalonEdit.4.4.2.9744\lib\Net40\ICSharpCode.AvalonEdit.dll - - - - - - - - - - - 4.0 - + - + MSBuild:Compile Designer - - MSBuild:Compile + + Designer - - MSBuild:Compile - Designer - - MSBuild:Compile - Designer - - + + GlobalAssemblyInfo.cs - - App.xaml - Code - - - - - - - - MainWindow.xaml - Code - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - - - + + + + + + + + + + + + + + - - {f09a46bd-5737-45e7-ba60-a47c9f7821a9} - ScriptEngine.HostedScript - - - {f062d1d9-d307-492a-a56b-ff3c55f8f6c0} - ScriptEngine - + + - - + + \ No newline at end of file diff --git a/src/TestApp/packages.config b/src/TestApp/packages.config deleted file mode 100644 index f44bfadfb..000000000 --- a/src/TestApp/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index 1b6d204eb..bca19834f 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -6,7 +6,7 @@ Exe oscript.Program - AnyCPU;x86 + x86 diff --git a/src/oscript/packages.config b/src/oscript/packages.config deleted file mode 100644 index 7926e6ce9..000000000 --- a/src/oscript/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From d8af494a1a87221e55a207163ca1c9cc5a46bfd6 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 22 Nov 2017 23:42:47 +0300 Subject: [PATCH 020/286] =?UTF-8?q?=D0=AD=D0=BA=D1=81=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=B5=D1=82=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=D0=B8=D1=80=D0=B0=D0=B5=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D1=81?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E=20msbuild?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj | 1 + src/ScriptEngine/ScriptEngine.csproj | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index adbe719c7..6cbde068e 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -7,6 +7,7 @@ + diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index e91951c56..a18af7ec3 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -9,6 +9,9 @@ GlobalAssemblyInfo.cs + + + From d994007d6743ada1f2e59589a88ada4702a83185 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 24 Nov 2017 11:28:00 +0300 Subject: [PATCH 021/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=83=D1=8E?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=BF=D0=BE=D0=B4=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D1=83=20netstandard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 30 ++++++++++++++++++- src/Component/Component.csproj | 7 +++-- src/DebugServer/DebugServer.csproj | 1 + src/NUnitTests/NUnitTests.csproj | 9 ++++++ .../OneScript.DebugProtocol.csproj | 1 + .../ScriptEngine.HostedScript.csproj | 2 +- src/ScriptEngine/ScriptEngine.csproj | 4 +-- src/StandaloneRunner/StandaloneRunner.csproj | 1 + src/TestApp/TestApp.csproj | 1 + src/oscript/oscript.csproj | 1 + src/oscriptTest/oscriptTests.csproj | 15 ++++++++-- 11 files changed, 61 insertions(+), 11 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index f0839c275..94fe9e1a7 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27004.2009 +VisualStudioVersion = 15.0.27004.2006 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" ProjectSection(ProjectDependencies) = postProject @@ -51,6 +51,8 @@ Global Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x86 = Release|x86 + ReleaseNetStandard|Any CPU = ReleaseNetStandard|Any CPU + ReleaseNetStandard|x86 = ReleaseNetStandard|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|x86 @@ -59,6 +61,8 @@ Global {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.Build.0 = Release|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -67,6 +71,10 @@ Global {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|Any CPU.Build.0 = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.ActiveCfg = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.Build.0 = Release|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|Any CPU.Build.0 = ReleaseNetStandard|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|x86.Build.0 = ReleaseNetStandard|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -75,12 +83,18 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|Any CPU.Build.0 = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.ActiveCfg = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|Any CPU.Build.0 = ReleaseNetStandard|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|x86.Build.0 = ReleaseNetStandard|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|x86 @@ -89,10 +103,14 @@ Global {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.Build.0 = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|Any CPU.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|x86.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|Any CPU.ActiveCfg = Release|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|x86.ActiveCfg = Release|x86 + {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNetStandard|Any CPU.ActiveCfg = Release|x86 + {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNetStandard|x86.ActiveCfg = Release|x86 {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -101,12 +119,16 @@ Global {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|Any CPU.Build.0 = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.ActiveCfg = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.Build.0 = Release|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -115,6 +137,8 @@ Global {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|Any CPU.Build.0 = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.ActiveCfg = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.Build.0 = Release|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.Build.0 = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -123,12 +147,16 @@ Global {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|Any CPU.Build.0 = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.ActiveCfg = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.Build.0 = Release|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|x86.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.Build.0 = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|x86.ActiveCfg = Release|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Component/Component.csproj b/src/Component/Component.csproj index 8f9b5e219..00bf75067 100644 --- a/src/Component/Component.csproj +++ b/src/Component/Component.csproj @@ -1,12 +1,13 @@  - net452;netstandard2.0 + net452 false + Debug;Release;ReleaseNetStandard - - + + GlobalAssemblyInfo.cs diff --git a/src/DebugServer/DebugServer.csproj b/src/DebugServer/DebugServer.csproj index dd2d21c6f..58788dc80 100644 --- a/src/DebugServer/DebugServer.csproj +++ b/src/DebugServer/DebugServer.csproj @@ -5,6 +5,7 @@ false Exe DebugServer.Program + Debug;Release;ReleaseNetStandard diff --git a/src/NUnitTests/NUnitTests.csproj b/src/NUnitTests/NUnitTests.csproj index 085f8e391..92edbafef 100644 --- a/src/NUnitTests/NUnitTests.csproj +++ b/src/NUnitTests/NUnitTests.csproj @@ -37,6 +37,15 @@ prompt 4 + + bin\ReleaseNetStandard\ + TRACE + true + pdbonly + AnyCPU + prompt + MinimumRecommendedRules.ruleset + ..\packages\NUnit.3.5.0\lib\net45\nunit.framework.dll diff --git a/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj b/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj index ff830bceb..5e2ac0721 100644 --- a/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj +++ b/src/OneScript.DebugProtocol/OneScript.DebugProtocol.csproj @@ -3,6 +3,7 @@ net452 false + Debug;Release;ReleaseNetStandard diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 6cbde068e..d3695014f 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -3,11 +3,11 @@ net452;netstandard2.0 false + Debug;Release;ReleaseNetStandard - diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index a18af7ec3..f1cf694d0 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -3,15 +3,13 @@ net452;netstandard2.0 false + Debug;Release;ReleaseNetStandard GlobalAssemblyInfo.cs - - - diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index a77d15683..f63820149 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -4,6 +4,7 @@ net452 false AnyCPU;x86 + Debug;Release;ReleaseNetStandard diff --git a/src/TestApp/TestApp.csproj b/src/TestApp/TestApp.csproj index b546d1e82..ec009ce22 100644 --- a/src/TestApp/TestApp.csproj +++ b/src/TestApp/TestApp.csproj @@ -8,6 +8,7 @@ WinExe TestApp.App x86 + Debug;Release;ReleaseNetStandard diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index bca19834f..e1f16770b 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -7,6 +7,7 @@ Exe oscript.Program x86 + Debug;Release;ReleaseNetStandard diff --git a/src/oscriptTest/oscriptTests.csproj b/src/oscriptTest/oscriptTests.csproj index 396ba0c16..0232b565c 100644 --- a/src/oscriptTest/oscriptTests.csproj +++ b/src/oscriptTest/oscriptTests.csproj @@ -37,6 +37,15 @@ prompt 4 + + bin\ReleaseNetStandard\ + TRACE + true + pdbonly + AnyCPU + prompt + MinimumRecommendedRules.ruleset + ..\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll @@ -52,15 +61,15 @@ + + + {2590e2bb-cc1f-4775-80ed-451f45c9a4f1} oscript - - - From 2d58ab8fad7b39bf1a8a1e2121d30f38edc7d62a Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 24 Nov 2017 11:29:41 +0300 Subject: [PATCH 022/286] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BD=D1=83=D0=B4?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=86=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B2=D0=BE=D0=B9=20=D0=BF=D0=BB=D0=B0=D1=82=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index a6b54fde8..b3dc09014 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,7 +33,7 @@ pipeline { checkout scm bat 'set' - bat "chcp $outputEnc > nul\r\n\"${tool 'MSBuild'}\" BuildAll.csproj /p:Configuration=Release /p:Platform=x86 /t:Build" + bat "chcp $outputEnc > nul\r\n\"${tool 'MSBuild'}\" BuildAll.csproj /p:Configuration=Release /p:Platform=x86 /p:TargetFramework=net452 /t:Build" stash includes: 'tests, install/build/**, mddoc/**', name: 'buildResults' } From bb1f322295999ca29b8559b1b35814420a366447 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Fri, 24 Nov 2017 16:11:12 +0300 Subject: [PATCH 023/286] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=84=D1=80=D0=B0=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D0=B0=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2?= =?UTF-8?q?=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Properties/AssemblyInfo.cs | 39 --------------------- src/ScriptEngine/ScriptEngine.csproj | 30 ++++++++++++---- src/ScriptEngine/ScriptEngine.nuspec | 16 --------- 3 files changed, 23 insertions(+), 62 deletions(-) delete mode 100644 src/ScriptEngine/Properties/AssemblyInfo.cs delete mode 100644 src/ScriptEngine/ScriptEngine.nuspec diff --git a/src/ScriptEngine/Properties/AssemblyInfo.cs b/src/ScriptEngine/Properties/AssemblyInfo.cs deleted file mode 100644 index f3804f2e0..000000000 --- a/src/ScriptEngine/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ScriptEngine")] -[assembly: AssemblyDescription("1C language runtime")] -[assembly: AssemblyProduct("ScriptEngine")] -#if DEBUG -[assembly: InternalsVisibleTo("EngineTests")] -#endif - - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d40a0ecf-c2ee-460f-bc90-05ead73f7a58")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index f1cf694d0..31e9aa75c 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -2,20 +2,36 @@ net452;netstandard2.0 - false Debug;Release;ReleaseNetStandard - - - GlobalAssemblyInfo.cs - - xcopy "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D cp -f "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner/" ScriptEngine - ScriptEngine + 1C (BSL) language runtime + ScriptEngine + + 1.0.$(ReleaseNumber).$(BuildNumber) + $(Version) + 1C (BSL) language runtime + Copyright (c) 2017 EvilBeaver + + + + OneScript + 1.0.$(ReleaseNumber) + OneScript OpenSource Community + EvilBeaver <ovsiankin.aa@gmail.com> + http://mozilla.org/MPL/2.0/ + http://oscript.io + false + Core Runtime Engine for 1Script + OneScript OpenSource Community 2015 + BSL 1C 1Script OneScript + + + \ No newline at end of file diff --git a/src/ScriptEngine/ScriptEngine.nuspec b/src/ScriptEngine/ScriptEngine.nuspec deleted file mode 100644 index c538d8352..000000000 --- a/src/ScriptEngine/ScriptEngine.nuspec +++ /dev/null @@ -1,16 +0,0 @@ - - - - OneScript - $version$ - OneScript Runtime Core - OneScript OpenSource Community - EvilBeaver <ovsiankin.aa@gmail.com> - http://mozilla.org/MPL/2.0/ - http://oscript.io - false - Core Runtime Engine for 1Script - OneScript OpenSource Community 2015 - BSL 1C 1Script OneScript - - \ No newline at end of file From 615a127a51369582cb8abfcbd00d332e6623fe20 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 11:51:52 +0300 Subject: [PATCH 024/286] =?UTF-8?q?=D0=A3=D1=81=D0=BB=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BD=D0=B0=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20(=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=D0=B8=D1=80=D0=B0=D0=BB=D0=BE=D1=81=D1=8C=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=20=D1=81=D1=82=D1=83=D0=B4=D0=B8=D0=B5=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/ScriptEngine.csproj | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index 31e9aa75c..9d5f0f66f 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -4,16 +4,19 @@ net452;netstandard2.0 Debug;Release;ReleaseNetStandard - - + + + 19 + $(BUILD_NUMBER) + 0 + + - xcopy "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D - cp -f "$(TargetDir)ScriptEngine.dll" "$(SolutionDir)StandaloneRunner/" ScriptEngine 1C (BSL) language runtime - ScriptEngine + ScriptEngine - 1.0.$(ReleaseNumber).$(BuildNumber) + 1.0.$(ReleaseNumber).$(BuildNumber) $(Version) 1C (BSL) language runtime Copyright (c) 2017 EvilBeaver @@ -23,15 +26,15 @@ OneScript 1.0.$(ReleaseNumber) - OneScript OpenSource Community + OneScript OpenSource Community EvilBeaver <ovsiankin.aa@gmail.com> - http://mozilla.org/MPL/2.0/ + http://mozilla.org/MPL/2.0/ http://oscript.io false Core Runtime Engine for 1Script OneScript OpenSource Community 2015 BSL 1C 1Script OneScript - + \ No newline at end of file From ae3b35129604dbe1ed65a90402f124ad4ad21f51 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 11:52:15 +0300 Subject: [PATCH 025/286] =?UTF-8?q?=D0=9A=D1=80=D0=BE=D1=81=D1=81-=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/ScriptEngine.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index 9d5f0f66f..40dfb53a6 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -37,4 +37,8 @@ + + + + \ No newline at end of file From a099f44d88657603ffbd466c0d18373054e1bf82 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 15:41:42 +0300 Subject: [PATCH 026/286] =?UTF-8?q?=D0=91=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Properties/AssemblyInfo.cs | 34 ------------- .../ScriptEngine.HostedScript.csproj | 49 +++++++++++++------ src/ScriptEngine/ScriptEngine.csproj | 5 +- 3 files changed, 37 insertions(+), 51 deletions(-) delete mode 100644 src/ScriptEngine.HostedScript/Properties/AssemblyInfo.cs diff --git a/src/ScriptEngine.HostedScript/Properties/AssemblyInfo.cs b/src/ScriptEngine.HostedScript/Properties/AssemblyInfo.cs deleted file mode 100644 index 046b363f3..000000000 --- a/src/ScriptEngine.HostedScript/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,34 +0,0 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ScriptEngine.HostedScript")] -[assembly: AssemblyProduct("ScriptEngine.HostedScript")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("1b057f7e-4a28-4c51-8620-3c90a75408bf")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index d3695014f..8ed4254ac 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -2,31 +2,50 @@ net452;netstandard2.0 - false Debug;Release;ReleaseNetStandard + + + + 19 + $(BUILD_NUMBER) + 0 + + + + ScriptEngine.HostedScript + 1C (BSL) language runtime + ScriptEngine.HostedScript + + 1.0.$(ReleaseNumber).$(BuildNumber) + $(Version) + 1C (BSL) language runtime + Copyright (c) 2017 EvilBeaver + + + - - GlobalAssemblyInfo.cs - - + PreserveNewest + - + - - net452 - xcopy "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D -xcopy "$(TargetDir)Ionic.Zip.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D -xcopy "$(TargetDir)Newtonsoft.Json.dll" "$(SolutionDir)StandaloneRunner\" /Y /E /D - cp -f "$(TargetDir)ScriptEngine.HostedScript.dll" "$(SolutionDir)StandaloneRunner" -cp -f "$(TargetDir)Ionic.Zip.dll" "$(SolutionDir)StandaloneRunner" -cp -f "$(TargetDir)Newtonsoft.Json.dll" "$(SolutionDir)StandaloneRunner" - + + + + + + + + + + + \ No newline at end of file diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index 40dfb53a6..5f00a96af 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -37,8 +37,9 @@ - - + + + \ No newline at end of file From d8b43f04e8627a054ab51834071f9995b461338c Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 15:45:12 +0300 Subject: [PATCH 027/286] =?UTF-8?q?=D0=A2=D0=B0=D0=B1=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/StandaloneRunner/StandaloneRunner.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index f63820149..26ae5c3ef 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -24,8 +24,8 @@ - - + + xcopy "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript\" /Y /E /D From 71686879e5f417d61267343eaf66857deae14991 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 15:45:54 +0300 Subject: [PATCH 028/286] =?UTF-8?q?=D0=9A=D0=BE=D0=BF=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20StandaloneRunner=20=D1=81?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0=D0=BC=D0=B8=20msbuil?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/StandaloneRunner/StandaloneRunner.csproj | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index 26ae5c3ef..dda5c4bca 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -5,6 +5,9 @@ false AnyCPU;x86 Debug;Release;ReleaseNetStandard + + Exe + StandaloneRunner.Program @@ -27,11 +30,10 @@ - - xcopy "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript\" /Y /E /D - cp -f "$(TargetDir)StandaloneRunner.exe" "$(SolutionDir)oscript/" - - Exe - - + + + + + + \ No newline at end of file From 5930322da14d5543f21e14f9a47c6c1d2cc9fd00 Mon Sep 17 00:00:00 2001 From: Andrei Ovsiankin Date: Mon, 27 Nov 2017 18:20:43 +0300 Subject: [PATCH 029/286] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=20=D1=80?= =?UTF-8?q?=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20?= =?UTF-8?q?=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 63 ++++++++++++++++++++ src/StandaloneRunner/StandaloneRunner.csproj | 4 ++ src/oscript/oscript.csproj | 5 ++ 3 files changed, 72 insertions(+) create mode 100644 Build.csproj diff --git a/Build.csproj b/Build.csproj new file mode 100644 index 000000000..aebd094a4 --- /dev/null +++ b/Build.csproj @@ -0,0 +1,63 @@ + + + + + 19 + $(MSBuildProjectDirectory)/built + $(MSBuildProjectDirectory)/src/1Script.sln + Release + net452;netstandard2.0 + + + + + + + + + + + + + + + + + + + + + Configuration=Release;Platform=x86 + + + + + + + + + + + + + + + $(ArtifactsRoot)/tmp + $(TempFolder)/bin + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/StandaloneRunner/StandaloneRunner.csproj b/src/StandaloneRunner/StandaloneRunner.csproj index dda5c4bca..9ef3f67cb 100644 --- a/src/StandaloneRunner/StandaloneRunner.csproj +++ b/src/StandaloneRunner/StandaloneRunner.csproj @@ -31,6 +31,10 @@ + + + + diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index e1f16770b..fd4dc51d0 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -26,4 +26,9 @@ + + + + + \ No newline at end of file From 3b4077c336f2f509b24374e79e7bc335a5245734 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 28 Nov 2017 10:57:29 +0300 Subject: [PATCH 030/286] =?UTF-8?q?=D0=A3=D1=81=D1=82=D0=B0=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D1=88=D0=B0=D1=8F=20=D0=BF=D0=B0=D0=BF=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScriptEngine.HostedScript.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 8ed4254ac..42389e1de 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -34,10 +34,6 @@ - - - - From 16180b3906899d89c138e9ecb6e06896f0bd4836 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 28 Nov 2017 11:06:20 +0300 Subject: [PATCH 031/286] =?UTF-8?q?nuspec=20=D0=B2=20hosted=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B5=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScriptEngine.HostedScript.csproj | 15 +++++++++++++++ .../ScriptEngine.HostedScript.nuspec | 16 ---------------- src/ScriptEngine/ScriptEngine.csproj | 1 + 3 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.nuspec diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 42389e1de..161562180 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -33,6 +33,21 @@ PreserveNewest + + + OneScript.StandardLibrary + 1.0.$(ReleaseNumber) + OneScript Main Client Libraries + OneScript OpenSource Community + EvilBeaver <ovsiankin.aa@gmail.com> + http://mozilla.org/MPL/2.0/ + http://oscript.io + false + Standard class libraries for 1Script - collections, network, filesystem etc... + OneScript OpenSource Community 2015 + BSL 1C 1Script OneScript + + diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.nuspec b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.nuspec deleted file mode 100644 index e343b674b..000000000 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.nuspec +++ /dev/null @@ -1,16 +0,0 @@ - - - - OneScript.StandardLibrary - $version$ - OneScript Main Client Libraries - OneScript OpenSource Community - EvilBeaver <ovsiankin.aa@gmail.com> - http://mozilla.org/MPL/2.0/ - http://oscript.io - false - Standard class libraries for 1Script - collections, network, filesystem etc... - OneScript OpenSource Community 2015 - BSL 1C 1Script OneScript - - \ No newline at end of file diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index 5f00a96af..c050c0b96 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -31,6 +31,7 @@ http://mozilla.org/MPL/2.0/ http://oscript.io false + OneScript Core Runtime Core Runtime Engine for 1Script OneScript OpenSource Community 2015 BSL 1C 1Script OneScript From dbffca099efb3721a11bec3a97b54d15422d406d Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 29 Nov 2017 00:31:17 +0300 Subject: [PATCH 032/286] =?UTF-8?q?xml=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/ScriptEngine.csproj | 4 ++++ src/oscript/oscript.csproj | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index c050c0b96..cafb35d7d 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -38,6 +38,10 @@ + + bin\Release\net452\ScriptEngine.xml + + diff --git a/src/oscript/oscript.csproj b/src/oscript/oscript.csproj index fd4dc51d0..5391f97f0 100644 --- a/src/oscript/oscript.csproj +++ b/src/oscript/oscript.csproj @@ -9,6 +9,9 @@ x86 Debug;Release;ReleaseNetStandard + + bin\x86\Debug\net452\oscript.xml + From 23dc43f216ebdde6b5fc34d822ac6211ea6836df Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 29 Nov 2017 00:33:21 +0300 Subject: [PATCH 033/286] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BD=D1=83=D1=8E=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/1Script.sln | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/1Script.sln b/src/1Script.sln index 94fe9e1a7..4b161b0cb 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27004.2006 +VisualStudioVersion = 15.0.27004.2009 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" ProjectSection(ProjectDependencies) = postProject @@ -21,6 +21,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StandaloneRunner", "Standal EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D14BF321-348C-46B8-B96A-43A22BA7AC10}" ProjectSection(SolutionItems) = preProject + ..\Build.csproj = ..\Build.csproj ..\BuildAll.csproj = ..\BuildAll.csproj GlobalAssemblyInfo.cs = GlobalAssemblyInfo.cs EndProjectSection @@ -51,8 +52,6 @@ Global Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x86 = Release|x86 - ReleaseNetStandard|Any CPU = ReleaseNetStandard|Any CPU - ReleaseNetStandard|x86 = ReleaseNetStandard|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|x86 @@ -61,8 +60,6 @@ Global {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.ActiveCfg = Release|x86 {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.Build.0 = Release|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -71,10 +68,6 @@ Global {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|Any CPU.Build.0 = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.ActiveCfg = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.Build.0 = Release|Any CPU - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|Any CPU.Build.0 = ReleaseNetStandard|Any CPU - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNetStandard|x86.Build.0 = ReleaseNetStandard|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -83,18 +76,12 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|Any CPU.Build.0 = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.ActiveCfg = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU - {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|Any CPU.Build.0 = ReleaseNetStandard|Any CPU - {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU - {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNetStandard|x86.Build.0 = ReleaseNetStandard|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.Build.0 = Debug|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|x86 - {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|x86 @@ -103,14 +90,10 @@ Global {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.Build.0 = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|x86 - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|Any CPU.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|x86.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|Any CPU.ActiveCfg = Release|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|x86.ActiveCfg = Release|x86 - {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNetStandard|Any CPU.ActiveCfg = Release|x86 - {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNetStandard|x86.ActiveCfg = Release|x86 {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -119,16 +102,12 @@ Global {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|Any CPU.Build.0 = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.ActiveCfg = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.Build.0 = Release|Any CPU - {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -137,8 +116,6 @@ Global {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|Any CPU.Build.0 = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.ActiveCfg = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.Build.0 = Release|Any CPU - {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.Build.0 = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -147,16 +124,12 @@ Global {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|Any CPU.Build.0 = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.ActiveCfg = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.Build.0 = Release|Any CPU - {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|x86.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.Build.0 = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|x86.ActiveCfg = Release|Any CPU - {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNetStandard|Any CPU.ActiveCfg = ReleaseNetStandard|Any CPU - {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNetStandard|x86.ActiveCfg = ReleaseNetStandard|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From fb463759ff97ae9547a20c62a0d583569391127e Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 29 Nov 2017 00:33:39 +0300 Subject: [PATCH 034/286] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Build.csproj b/Build.csproj index aebd094a4..9c9a8c200 100644 --- a/Build.csproj +++ b/Build.csproj @@ -1,5 +1,5 @@ - + 19 @@ -13,13 +13,13 @@ - + - - + + - + @@ -31,13 +31,13 @@ - + - - + + @@ -45,18 +45,18 @@ $(ArtifactsRoot)/tmp $(TempFolder)/bin - + - - - - - + + + + + - + From fa8ae4d0679e70ffda14f22f6e5851e443e8b0c6 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Wed, 29 Nov 2017 14:16:21 +0300 Subject: [PATCH 035/286] =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=90=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=20=D0=B2=20=D0=A0=D0=B5=D1=84=D0=BB=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/Library/Reflector.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index 5a7d1520f..5805b0b4e 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -228,6 +228,7 @@ public ValueTable.ValueTable GetPropertiesTable(IRuntimeContextInstance target) ValueTable.ValueTable Result = new ValueTable.ValueTable(); var NameColumn = Result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); + var AnnotationsColumn = Result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); var SystemVarNames = new string[] { "этотобъект", "thisobject" }; @@ -237,6 +238,11 @@ public ValueTable.ValueTable GetPropertiesTable(IRuntimeContextInstance target) ValueTableRow new_row = Result.Add(); new_row.Set(NameColumn, ValueFactory.Create(propInfo.Identifier)); + + if (propInfo.AnnotationsCount != 0) + { + new_row.Set(AnnotationsColumn, CreateAnnotationTable(propInfo.Annotations)); + } } return Result; From dcaf9d9ae2c152d974b9ab0391a13a6a5522d7a4 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Wed, 29 Nov 2017 16:08:53 +0300 Subject: [PATCH 036/286] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/annotations.os | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/annotations.os b/tests/annotations.os index 2f887df7e..88b9c12d2 100644 --- a/tests/annotations.os +++ b/tests/annotations.os @@ -11,6 +11,7 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийМетода"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийПараметров"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеАннотацийСвойств"); Возврат ВсеТесты; @@ -92,3 +93,60 @@ юТест.ПроверитьРавенство(Парам4.Аннотации, Неопределено); КонецПроцедуры + +Процедура ТестДолжен_ПроверитьПолучениеАннотацийСвойств() Экспорт + + ПроверяемыйОбъект = ЗагрузитьСценарийИзСтроки(" + |&НаСервере + |&НаКлиентеНаСервереБезКонтекста + |&НаЧемУгодно(ДажеСПараметром = ""Да"", СПараметромБезЗначения, ""Значение без параметра"") + |&НаЧемУгодно(ДажеДважды = Истина) + // У свойства 2 не будет аннотаций + |Перем Свойство1 Экспорт, Свойство2 Экспорт; + | + // Тут будут свои аннотации, независимо от первых + |&АннотацияДляСвойства3 + |Перем Свойство3 Экспорт; + | + |&ЭтаАннотацияНеМожетБытьПолученаИзВне + |Перем НеЭкспортноеСвойство; + | + |&АннотацияДляСвойства4 + |Перем Свойство4 Экспорт; + |"); + + Рефлектор = Новый Рефлектор; + ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ПроверяемыйОбъект); + + юТест.ПроверитьНеРавенство(ТаблицаСвойств.Колонки.Найти("Аннотации"), Неопределено, "Есть колонка Аннотации"); + + СтрокаСвойства1 = ТаблицаСвойств.Найти("Свойство1", "Имя"); + СтрокаСвойства2 = ТаблицаСвойств.Найти("Свойство2", "Имя"); + СтрокаСвойства3 = ТаблицаСвойств.Найти("Свойство3", "Имя"); + СтрокаСвойства4 = ТаблицаСвойств.Найти("Свойство4", "Имя"); + + юТест.ПроверитьНеРавенство(СтрокаСвойства1, Неопределено, "Найдено свойство 1"); + юТест.ПроверитьНеРавенство(СтрокаСвойства2, Неопределено, "Найдено свойство 2"); + юТест.ПроверитьНеРавенство(СтрокаСвойства3, Неопределено, "Найдено свойство 3"); + юТест.ПроверитьНеРавенство(СтрокаСвойства4, Неопределено, "Найдено свойство 4"); + + юТест.ПроверитьРавенство(СтрокаСвойства1.Аннотации.Количество(), 4); + юТест.ПроверитьРавенство(СтрокаСвойства2.Аннотации, Неопределено); + юТест.ПроверитьРавенство(СтрокаСвойства3.Аннотации.Количество(), 1); + юТест.ПроверитьРавенство(СтрокаСвойства4.Аннотации.Количество(), 1); + + юТест.ПроверитьРавенство(СтрокаСвойства1.Аннотации[0].Имя, "НаСервере", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаСвойства1.Аннотации[1].Имя, "НаКлиентеНаСервереБезКонтекста", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаСвойства1.Аннотации[2].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); + юТест.ПроверитьРавенство(СтрокаСвойства1.Аннотации[3].Имя, "НаЧемУгодно", "Рефлектор сохранил порядок указания аннотаций"); + + Аннотация2 = СтрокаСвойства1.Аннотации.Получить(2); + юТест.ПроверитьНеРавенство(Аннотация2.Параметры, Неопределено, "Есть таблица параметров аннотации"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Имя, "ДажеСПараметром", "Знаем имя именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(0).Значение, "Да", "Знаем значение именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Имя, "СПараметромБезЗначения", "Знаем имя именованного параметра"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(1).Значение, Неопределено, "Знаем, что значение не определено"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Имя, Неопределено, "Знаем, что имя не определно"); + юТест.ПроверитьРавенство (Аннотация2.Параметры.Получить(2).Значение, "Значение без параметра", "Знаем значение параметра без имени"); + +КонецПроцедуры From e53f59aa5bc9369f28fc18512cd2c241ee309e32 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Wed, 29 Nov 2017 16:17:43 +0300 Subject: [PATCH 037/286] =?UTF-8?q?=D0=A1=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B0=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Compiler/Compiler.cs | 18 +++++++++++----- src/ScriptEngine/CompilerService.cs | 5 +++++ .../Machine/Contexts/ScriptDrivenObject.cs | 15 +++++++++++-- src/ScriptEngine/Machine/Core.cs | 20 ++++++++++++++++++ .../Machine/IRuntimeContextInstance.cs | 21 +++++++++++++++++++ src/ScriptEngine/Machine/LoadedModule.cs | 7 +++++++ src/ScriptEngine/ModuleImage.cs | 9 ++++++++ 7 files changed, 88 insertions(+), 7 deletions(-) diff --git a/src/ScriptEngine/Compiler/Compiler.cs b/src/ScriptEngine/Compiler/Compiler.cs index 3f3e3ec59..a3a842734 100644 --- a/src/ScriptEngine/Compiler/Compiler.cs +++ b/src/ScriptEngine/Compiler/Compiler.cs @@ -173,11 +173,6 @@ private AnnotationDefinition[] ExtractAnnotations() return result; } - private void ClearAnnotations() - { - _annotations.Clear(); - } - private void BuildModule() { NextToken(); @@ -313,6 +308,7 @@ private void BuildVariableDefinitions() if (IsUserSymbol(ref _lastExtractedLexem)) { var symbolicName = _lastExtractedLexem.Content; + var annotations = ExtractAnnotations(); var definition = _ctx.DefineVariable(symbolicName); if (_inMethodScope) { @@ -339,6 +335,18 @@ private void BuildVariableDefinitions() SymbolicName = symbolicName, Index = definition.CodeIndex }); + _module.Properties.Add(new PropertyDescriptor() + { + Signature = new VariableInfo() + { + Identifier = symbolicName, + Annotations = annotations, + CanGet = true, + CanSet = true, + Index = definition.CodeIndex + }, + Index = definition.CodeIndex + }); NextToken(); } if (_lastExtractedLexem.Token == Token.Comma) diff --git a/src/ScriptEngine/CompilerService.cs b/src/ScriptEngine/CompilerService.cs index 670fbcd49..d5f0a9c5b 100644 --- a/src/ScriptEngine/CompilerService.cs +++ b/src/ScriptEngine/CompilerService.cs @@ -127,6 +127,11 @@ private ScriptModuleHandle Compile(ICodeSource source) SymbolicName = varDef.Identifier, Index = varDef.Index }); + compiledImage.Properties.Add(new PropertyDescriptor() + { + Signature = new VariableInfo(varDef.Identifier, varDef.Index), + Index = varDef.Index + }); } } diff --git a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs index ee6934122..a86386b82 100644 --- a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs +++ b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs @@ -7,12 +7,11 @@ This Source Code Form is subject to the terms of the using System; using System.Collections.Generic; using System.Linq; -using System.Text; using ScriptEngine.Environment; namespace ScriptEngine.Machine.Contexts { - public abstract class ScriptDrivenObject : PropertyNameIndexAccessor, IRunnable + public abstract class ScriptDrivenObject : PropertyNameIndexAccessor, IRunnable, IRuntimeContextWithProperties { private readonly LoadedModule _module; private MachineInstance _machine; @@ -354,6 +353,18 @@ public override void CallAsFunction(int methodNumber, IValue[] arguments, out IV } + public VariableInfo GetPropertyInfo(int propNum) + { + if (PropDefinedInScript(propNum)) + { + return _module.Properties[propNum - VARIABLE_COUNT].Signature; + } + else + { + return new VariableInfo(GetPropName(propNum), propNum); + } + } + public override int GetPropCount() { return VARIABLE_COUNT + _module.ExportedProperies.Length; diff --git a/src/ScriptEngine/Machine/Core.cs b/src/ScriptEngine/Machine/Core.cs index 155559842..4efe988cc 100644 --- a/src/ScriptEngine/Machine/Core.cs +++ b/src/ScriptEngine/Machine/Core.cs @@ -7,6 +7,7 @@ This Source Code Form is subject to the terms of the using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Text; namespace ScriptEngine.Machine @@ -276,6 +277,25 @@ public struct VariableInfo public int Index; public string Identifier; public SymbolType Type; + + public string Alias; + public bool CanGet; + public bool CanSet; + + public AnnotationDefinition[] Annotations; + + public VariableInfo(string name, int index = -1) + { + Index = index; + Identifier = name; + Alias = null; + CanGet = true; + CanSet = true; + Annotations = null; + Type = SymbolType.Variable; + } + + public int AnnotationsCount => Annotations?.Length ?? 0; } struct VariableBinding diff --git a/src/ScriptEngine/Machine/IRuntimeContextInstance.cs b/src/ScriptEngine/Machine/IRuntimeContextInstance.cs index 03d72be51..49948f845 100644 --- a/src/ScriptEngine/Machine/IRuntimeContextInstance.cs +++ b/src/ScriptEngine/Machine/IRuntimeContextInstance.cs @@ -36,6 +36,11 @@ public interface IRuntimeContextInstance } + public interface IRuntimeContextWithProperties : IRuntimeContextInstance + { + VariableInfo GetPropertyInfo(int propNum); + } + public static class RCIHelperExtensions { public static IEnumerable GetMethods(this IRuntimeContextInstance context) @@ -51,6 +56,10 @@ public static IEnumerable GetMethods(this IRuntimeContextInstance co public static IEnumerable GetProperties(this IRuntimeContextInstance context) { + if (context is IRuntimeContextWithProperties) + { + return ((IRuntimeContextWithProperties) context).GetProperties(); + } VariableInfo[] infos = new VariableInfo[context.GetPropCount()]; for (int i = 0; i < infos.Length; i++) { @@ -64,6 +73,18 @@ public static IEnumerable GetProperties(this IRuntimeContextInstan return infos; } + + public static IEnumerable GetProperties(this IRuntimeContextWithProperties context) + { + VariableInfo[] infos = new VariableInfo[context.GetPropCount()]; + for (int i = 0; i < infos.Length; i++) + { + infos[i] = context.GetPropertyInfo(i); + } + + return infos; + } + } } \ No newline at end of file diff --git a/src/ScriptEngine/Machine/LoadedModule.cs b/src/ScriptEngine/Machine/LoadedModule.cs index 41891c104..47cdf02c4 100644 --- a/src/ScriptEngine/Machine/LoadedModule.cs +++ b/src/ScriptEngine/Machine/LoadedModule.cs @@ -27,6 +27,7 @@ internal LoadedModule(ModuleImage image) this.ExportedProperies = image.ExportedProperties.ToArray(); this.ExportedMethods = image.ExportedMethods.ToArray(); this.ModuleInfo = image.ModuleInfo; + this.Properties = image.Properties.ToArray(); for (int i = 0; i < image.Constants.Count; i++) { var def = image.Constants[i]; @@ -42,6 +43,11 @@ internal LoadedModule(ModuleImage image) EvaluateAnnotationParametersValues(Methods[i].Signature.Params[j].Annotations); } } + + for (int i = 0; i < Properties.Length; i++) + { + EvaluateAnnotationParametersValues(Properties[i].Signature.Annotations); + } } private void EvaluateAnnotationParametersValues(AnnotationDefinition[] annotations) @@ -70,6 +76,7 @@ private void EvaluateAnnotationParametersValues(AnnotationDefinition[] annotatio public ExportedSymbol[] ExportedProperies { get; private set; } public ExportedSymbol[] ExportedMethods { get; private set; } public ModuleInformation ModuleInfo { get; private set; } + public PropertyDescriptor[] Properties { get; private set; } } diff --git a/src/ScriptEngine/ModuleImage.cs b/src/ScriptEngine/ModuleImage.cs index 50822cbdd..5951c298c 100644 --- a/src/ScriptEngine/ModuleImage.cs +++ b/src/ScriptEngine/ModuleImage.cs @@ -27,6 +27,7 @@ public ModuleImage() ExportedProperties = new List(); ExportedMethods = new List(); Variables = new VariablesFrame(); + Properties = new List(); } public VariablesFrame Variables { get; } @@ -35,6 +36,7 @@ public ModuleImage() public IList VariableRefs { get; set; } public IList MethodRefs { get; set; } public IList Methods { get; set; } + public IList Properties { get; set; } public IList Constants { get; set; } public IList ExportedProperties { get; set; } public IList ExportedMethods { get; set; } @@ -64,6 +66,13 @@ struct MethodDescriptor public int EntryPoint; } + [Serializable] + struct PropertyDescriptor + { + public VariableInfo Signature; + public int Index; + } + [Serializable] struct ExportedSymbol { From 6d3ff3b5c7e3288c9e5b1b84561de923d767130c Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Thu, 30 Nov 2017 01:37:50 +0300 Subject: [PATCH 038/286] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Build.csproj b/Build.csproj index 9c9a8c200..6ab4775a9 100644 --- a/Build.csproj +++ b/Build.csproj @@ -40,23 +40,31 @@ - + $(ArtifactsRoot)/tmp $(TempFolder)/bin + $(TempFolder)/lib + $(TempFolder)/examples - - - + + + + + + + - + + + + From 56d7f3c935b4b70c03555166dc897ad2e14c5bc5 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 5 Dec 2017 22:14:17 +0300 Subject: [PATCH 039/286] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D0=B2=20gitignore=20=D0=BF=D0=B0=D0=BF=D0=BA=D1=83=20?= =?UTF-8?q?=D1=81=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 16133043c..b128013eb 100644 --- a/.gitignore +++ b/.gitignore @@ -41,8 +41,7 @@ _ReSharper*/ JetBrains.ReSharper.CommandLineTools # CI and full build|deploy -dist -install/build +built/ *.os.xml /src/packages/DotNetZip.1.9.3/lib/net20 From 641331458cc55d1117cc95899eb1ef94969116d9 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 5 Dec 2017 22:14:36 +0300 Subject: [PATCH 040/286] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 71 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/Build.csproj b/Build.csproj index 6ab4775a9..ccbe5e7c9 100644 --- a/Build.csproj +++ b/Build.csproj @@ -36,36 +36,83 @@ - - - - - $(ArtifactsRoot)/tmp $(TempFolder)/bin $(TempFolder)/lib $(TempFolder)/examples + $(TempFolder)/examples + $(ArtifactsRoot)/mddoc + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file From e4f8007b3ceb5aab061bb4da1d4442846fd232b3 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 5 Dec 2017 22:42:57 +0300 Subject: [PATCH 041/286] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=20=D0=B3=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 6 ++++-- .../ScriptEngine.HostedScript.csproj | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Build.csproj b/Build.csproj index ccbe5e7c9..c41d7546e 100644 --- a/Build.csproj +++ b/Build.csproj @@ -41,7 +41,7 @@ $(TempFolder)/bin $(TempFolder)/lib $(TempFolder)/examples - $(TempFolder)/examples + $(TempFolder)/doc $(ArtifactsRoot)/mddoc @@ -94,7 +94,7 @@ - + @@ -111,6 +111,8 @@ + + diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 161562180..9d4d073d4 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -48,6 +48,10 @@ BSL 1C 1Script OneScript + + + bin\Release\net452\ScriptEngine.HostedScript.xml + From 5c51add4673017773f30b9febcd5dc75a4d6f156 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 5 Dec 2017 23:36:53 +0300 Subject: [PATCH 042/286] =?UTF-8?q?=D0=A8=D0=B0=D0=B3=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 13 +++++++++++-- install/install.iss | 30 ++++++++++++++++-------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Build.csproj b/Build.csproj index c41d7546e..3fe36eee4 100644 --- a/Build.csproj +++ b/Build.csproj @@ -10,14 +10,14 @@ - + - + @@ -117,4 +117,13 @@ + + + + "$(InnoSetupPath)\iscc.exe" + $(ArtifactsRoot) + + + + \ No newline at end of file diff --git a/install/install.iss b/install/install.iss index f6f457c46..6e877cc2a 100644 --- a/install/install.iss +++ b/install/install.iss @@ -2,12 +2,14 @@ #define AppName "OneScript engine" #define FSFriendlyName "OneScript" #define MainExe "TestApp.exe" +#define ArtifactRoot "..\built\tmp" #define VerMajor #define VerMinor #define VerRelease #define Build -#expr ParseVersion("build\bin\ScriptEngine.dll",VerMajor,VerMinor,VerRelease,Build) +; duplicates ArtifactsRoot because ISPP can't resolve directives +#expr ParseVersion(ArtifactRoot + "\bin\ScriptEngine.dll",VerMajor,VerMinor,VerRelease,Build) [Setup] AppName={#AppName} @@ -37,25 +39,25 @@ Name: "testapp"; Description: "Тестовая консоль (TestApp)"; Name: "docs"; Description: "Документация по свойствам и методам (синтакс-помощник)"; [Files] -Source: "build\bin\oscript.exe"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\ScriptEngine.HostedScript.dll"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\ScriptEngine.dll"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\OneScript.DebugProtocol.dll"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\Ionic.Zip.dll"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\Newtonsoft.Json.dll"; DestDir: "{app}\bin"; Components: main -Source: "build\bin\oscript.cfg"; DestDir: "{app}\bin"; Components: main; Flags: onlyifdoesntexist +Source: "{#ArtifactRoot}\bin\oscript.exe"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\ScriptEngine.HostedScript.dll"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\ScriptEngine.dll"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\OneScript.DebugProtocol.dll"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\Ionic.Zip.dll"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\Newtonsoft.Json.dll"; DestDir: "{app}\bin"; Components: main +Source: "{#ArtifactRoot}\bin\oscript.cfg"; DestDir: "{app}\bin"; Components: main; Flags: onlyifdoesntexist -Source: "build\examples\*"; DestDir: "{app}\examples"; Components: main +Source: "{#ArtifactRoot}\examples\*"; DestDir: "{app}\examples"; Components: main ; testapp -Source: "build\bin\TestApp.exe"; DestDir: "{app}\bin"; Components: testapp -Source: "build\bin\ICSharpCode.AvalonEdit.dll"; DestDir: "{app}\bin"; Components: testapp +Source: "{#ArtifactRoot}\bin\TestApp.exe"; DestDir: "{app}\bin"; Components: testapp +Source: "{#ArtifactRoot}\bin\ICSharpCode.AvalonEdit.dll"; DestDir: "{app}\bin"; Components: testapp ; библиотека -Source: "build\lib\*"; DestDir: "{app}\lib"; Components: stdlib; Flags: recursesubdirs -Source: "build\bin\*.bat"; DestDir: "{app}\bin"; Components: stdlib +Source: "{#ArtifactRoot}\lib\*"; DestDir: "{app}\lib"; Components: stdlib; Flags: recursesubdirs +Source: "{#ArtifactRoot}\bin\*.bat"; DestDir: "{app}\bin"; Components: stdlib ; документация -Source: "build\doc\*"; DestDir: "{app}\doc"; Components: docs; Flags: recursesubdirs +Source: "{#ArtifactRoot}\doc\*"; DestDir: "{app}\doc"; Components: docs; Flags: recursesubdirs Source: "dotNetFx40_Full_setup.exe"; DestDir: {tmp}; Flags: deleteafterinstall; Check: not IsRequiredDotNetDetected Source: "vcredist_x86.exe"; DestDir: {tmp}; Flags: deleteafterinstall; Check: VCRedistNeedsInstall From 9d62f80b36af4f363bc9386a9955c0e0d7d83cad Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 5 Dec 2017 23:48:31 +0300 Subject: [PATCH 043/286] =?UTF-8?q?=D0=A1=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?nuget=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build.csproj | 10 ++++++++++ .../ScriptEngine.HostedScript.csproj | 2 +- src/ScriptEngine/ScriptEngine.csproj | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Build.csproj b/Build.csproj index 3fe36eee4..e4be35610 100644 --- a/Build.csproj +++ b/Build.csproj @@ -126,4 +126,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj index 9d4d073d4..7baf01045 100644 --- a/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj +++ b/src/ScriptEngine.HostedScript/ScriptEngine.HostedScript.csproj @@ -60,7 +60,7 @@ - + \ No newline at end of file diff --git a/src/ScriptEngine/ScriptEngine.csproj b/src/ScriptEngine/ScriptEngine.csproj index cafb35d7d..54967db57 100644 --- a/src/ScriptEngine/ScriptEngine.csproj +++ b/src/ScriptEngine/ScriptEngine.csproj @@ -44,7 +44,7 @@ - + \ No newline at end of file From be50092e6f2cd50883ab2163e89a9ea346e0fcb4 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 16 Dec 2017 14:45:35 +0300 Subject: [PATCH 044/286] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D0=B0=D1=80=D1=85=D0=B8=D0=B2=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=D1=81=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D1=8F=D0=BC=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20#627?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/zip.os | 140 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 134 insertions(+), 6 deletions(-) diff --git a/tests/zip.os b/tests/zip.os index 3a6ea78be..5eeaa2988 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -1,4 +1,5 @@ Перем юТест; +Перем ТекущийКаталогСохр; Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт @@ -13,7 +14,9 @@ ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивОдиночныйСПолнымПутем"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогТестов"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогТестовПоМаске"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутей"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутейДляОдиночногоЭлемента"); @@ -25,7 +28,13 @@ Возврат юТест.ИмяВременногоФайла(Расширение); КонецФункции +Процедура ПередЗапускомТеста() Экспорт + ТекущийКаталогСохр = ТекущийКаталог(); +КонецПроцедуры + Процедура ПослеЗапускаТеста() Экспорт + УстановитьТекущийКаталог(ТекущийКаталогСохр); + юТест.УдалитьВременныеФайлы(); КонецПроцедуры @@ -275,20 +284,139 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями() Экспорт + УстановитьВременныйКаталогКакТекущий(); + + ИМЯ_КАТАЛОГА = "РодительскийКаталог"; + ИМЯ_ФАЙЛА = "ВложенныйФайл"; + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); + ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; + ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьКаталога); + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); + + ИскомыйПутьКаталога = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Каталог должен был существовать в корне, а его нет."); + + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать во вложенном каталоге, а его нет."); + +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями() Экспорт + УстановитьВременныйКаталогКакТекущий(); + + ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; + ИМЯ_КАТАЛОГА = "ВложенныйКаталог"; + ИМЯ_ФАЙЛА = "ВложенныйФайл"; + + СоздатьКаталог(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ОбъединитьПути(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА, ИМЯ_КАТАЛОГА), ИМЯ_ФАЙЛА); + ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; + ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьКаталога); + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); + ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); + + НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); + + ИскомыйПутьРодительскогоКаталога = ОбъединитьПути(Распаковка, ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); + ПроверитьНаличиеФайла(ИскомыйПутьРодительскогоКаталога, "Родительский каталог должен был существовать в корне, а его нет."); + + ИскомыйПутьКаталога = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Вложенный каталог должен был существовать в каталоге родителя, а его нет."); + + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать во вложенном каталоге, а его нет."); + +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями() Экспорт + УстановитьВременныйКаталогКакТекущий(); + + ИМЯ_КАТАЛОГА = "РодительскийКаталог"; + ИМЯ_ФАЙЛА = "ВложенныйФайл"; + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); + ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; + ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьФайла); + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); + + ИскомыйПутьКаталога = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Каталог должен был существовать в корне, а его нет."); + + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать во вложенном каталоге, а его нет."); +КонецПроцедуры + +Функция УстановитьВременныйКаталогКакТекущий() + ИмяКаталогаКорня = юТест.ИмяВременногоФайла(); + СоздатьКаталог(ИмяКаталогаКорня); + УстановитьТекущийКаталог(ИмяКаталогаКорня); + Возврат ТекущийКаталог(); +КонецФункции + +Функция ПодготовитьФайлВоВложенномКаталоге(Знач ИмяКаталога, Знач ИмяФайла) + ПутьКаталога = ИмяКаталога; + СоздатьКаталог(ПутьКаталога); + + ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); + СоздатьФайл(ПутьФайла); + + Возврат Новый Структура("ПутьКаталога, ПутьФайла", ПутьКаталога, ПутьФайла); +КонецФункции + +Функция СоздатьФайл(Знач ПутьФайла = "") + Если ПутьФайла = "" Тогда + ПутьФайла = СоздатьВременныйФайл(); + КонецЕсли; + + ЗТ = Новый ЗаписьТекста(ПутьФайла); + ЗТ.Записать("Привет"); + ЗТ.Закрыть(); + Возврат ПутьФайла; +КонецФункции + +Функция ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Знач ОтносительныйПуть) ИмяАрхива = юТест.ИмяВременногоФайла("zip"); Архив = Новый ЗаписьZIPФайла(ИмяАрхива); - Архив.Добавить("preprocessor", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); + Архив.Добавить(ОтносительныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); Архив.Записать(); - + Возврат ИмяАрхива; +КонецФункции + +Функция ИзвлечьВсеИзАрхиваВоВременныйКаталог(Знач ИмяАрхива) Архив = Новый ЧтениеZipФайла(ИмяАрхива); Распаковка = юТест.ИмяВременногоФайла(); СоздатьКаталог(Распаковка); Архив.ИзвлечьВсе(Распаковка); Архив.Закрыть(); - - Файл = Новый Файл(Распаковка + ПолучитьРазделительПути() + "preprocessor"); - юТест.ПроверитьИстину(Файл.Существует()); - + + Возврат Распаковка; +КонецФункции + +Процедура ПроверитьНаличиеФайла(Знач ИскомыйПутьФайла, Знач СообщениеОшибки) + Файл = Новый Файл(ИскомыйПутьФайла); + юТест.ПроверитьИстину(Файл.Существует(), СообщениеОшибки + ИскомыйПутьФайла); КонецПроцедуры + +Процедура ПроверитьОтсутствиеФайла(Знач НеверныйПутьФайла, Знач СообщениеОшибки) + Файл = Новый Файл(НеверныйПутьФайла); + юТест.ПроверитьЛожь(Файл.Существует(), СообщениеОшибки + НеверныйПутьФайла); +КонецПроцедуры \ No newline at end of file From ddedd27b751f9fb4cfdd57a0b464f675481e0427 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 16 Dec 2017 20:16:23 +0300 Subject: [PATCH 045/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81=D1=82=20NU?= =?UTF-8?q?nit=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20zip=20#627?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NUnitTests/TestRunnerTest.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/NUnitTests/TestRunnerTest.cs b/src/NUnitTests/TestRunnerTest.cs index 8d8ba75b7..f4dbdb2c3 100644 --- a/src/NUnitTests/TestRunnerTest.cs +++ b/src/NUnitTests/TestRunnerTest.cs @@ -51,7 +51,12 @@ private void RunSpecificTest(string testName) public void Test_Reflector() { RunSpecificTest(@"reflector.os"); - } + } + [Test] + public void Test_Zip() + { + RunSpecificTest(@"zip.os"); + } [Test] [Ignore("Внутри валится очень много тестов, надо чинить механизм.")] From b2c6f2cb63586aa2f0207b0f723ee510a5a71b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 Dec 2017 08:43:43 +0300 Subject: [PATCH 046/286] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BB=20xml-doc.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Reflector.cs | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index 128f91ef2..b7bb51d39 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -208,18 +208,7 @@ private static Type GetReflectableClrType(TypeTypeValue type) /// Получает таблицу методов для переданного объекта.. /// /// Объект, из которого получаем таблицу методов. - /// Таблица значений колонками: - /// - /// Имя - Строка - /// КоличествоПараметров - Число - /// ЭтоФункция - Булево - /// Аннотации - Неопределено, ТаблицаЗначений: - /// - /// Имя - /// Параметры - /// - /// - /// + /// Таблица значений колонками: Имя, Количество, ЭтоФункция, Аннотации [ContextMethod("ПолучитьТаблицуМетодов", "GetMethodsTable")] public ValueTable.ValueTable GetMethodsTable(IValue target) { @@ -303,7 +292,7 @@ private static void FillMethodsTable(ValueTable.ValueTable result, IEnumerable /// Объект, из которого получаем таблицу свойств. - /// Таблица значений с 1 колонкой - Имя + /// Таблица значений с колонками - Имя, Аннотации [ContextMethod("ПолучитьТаблицуСвойств", "GetPropertiesTable")] public ValueTable.ValueTable GetPropertiesTable(IValue target) { From a466f3d7ff4a4f6b5db242cdd9cba27f7ab44b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 Dec 2017 09:21:13 +0300 Subject: [PATCH 047/286] =?UTF-8?q?=D0=A3=D0=BC=D0=B5=D0=BD=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B3=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=BB=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Compiler/ModuleWriter.cs | 45 +++++++++++++---------- src/ScriptEngine/Machine/Core.cs | 17 +++++++-- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/ScriptEngine/Compiler/ModuleWriter.cs b/src/ScriptEngine/Compiler/ModuleWriter.cs index 5c4de57aa..2424ae6cf 100644 --- a/src/ScriptEngine/Compiler/ModuleWriter.cs +++ b/src/ScriptEngine/Compiler/ModuleWriter.cs @@ -84,6 +84,27 @@ private void WriteSymbolMap(TextWriter output, IList map) } } + private void WriteAnnotationsList(TextWriter output, AnnotationDefinition[] annotations) + { + output.WriteLine(".annotations ["); + foreach (var annotation in annotations) + { + output.Write(" {0}", annotation.Name); + if (annotation.ParamCount != 0) + { + var delimiter = ": "; + foreach (var parameter in annotation.Parameters) + { + output.Write(delimiter); + output.Write(parameter); + delimiter = ", "; + } + } + output.WriteLine(""); + } + output.WriteLine("]"); + } + private void WriteMethodDefinition(TextWriter output, MethodDescriptor item) { output.Write(item.Signature.IsFunction ? "Func " : "Proc "); @@ -93,33 +114,17 @@ private void WriteMethodDefinition(TextWriter output, MethodDescriptor item) item.Variables.Count)); if (item.Signature.AnnotationsCount != 0) { - output.WriteLine(".annotations ["); - foreach (var annotation in item.Signature.Annotations) - { - output.Write(string.Format(" {0}", annotation.Name)); - if (annotation.ParamCount != 0) - { - var delimiter = ": "; - foreach (var parameter in annotation.Parameters) - { - output.Write(string.Format("{3}{0}{2}{1}", parameter.Name, parameter.ValueIndex, - parameter.Name != null ? "=" : "", delimiter)); - delimiter = ", "; - } - } - output.WriteLine(""); - } - output.WriteLine("]"); + WriteAnnotationsList(output, item.Signature.Annotations); } - output.Write(string.Format(".args {0}\n", item.Signature.ArgCount)); + output.Write(".args {0}\n", item.Signature.ArgCount); if (item.Signature.Params != null) { for (int i = 0; i < item.Signature.Params.Length; i++) { - output.Write(string.Format("{0,-3}: ByVal={1}", i, item.Signature.Params[i].IsByValue.ToString())); + output.Write("{0,-3}: ByVal={1}", i, item.Signature.Params[i].IsByValue); if (item.Signature.Params[i].HasDefaultValue) { - output.Write(string.Format(" defValue: {0}\n", item.Signature.Params[i].DefaultValueIndex)); + output.Write(" defValue: {0}\n", item.Signature.Params[i].DefaultValueIndex); } else { diff --git a/src/ScriptEngine/Machine/Core.cs b/src/ScriptEngine/Machine/Core.cs index af8db8917..8f7a643d3 100644 --- a/src/ScriptEngine/Machine/Core.cs +++ b/src/ScriptEngine/Machine/Core.cs @@ -5,10 +5,6 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; namespace ScriptEngine.Machine { @@ -240,6 +236,19 @@ public struct AnnotationParameter public IValue RuntimeValue; public const int UNDEFINED_VALUE_INDEX = -1; + + public override string ToString() + { + if (string.IsNullOrEmpty(Name)) + { + return string.Format("[{0}]", ValueIndex); + } + if (ValueIndex == UNDEFINED_VALUE_INDEX) + { + return Name; + } + return String.Format("{0}=[{1}]", Name, ValueIndex); + } } public struct TypeDescriptor : IEquatable From 5eacef1eedda9950b9354eb1406898873e4da7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 Dec 2017 10:38:13 +0300 Subject: [PATCH 048/286] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8B=D0=BB=D1=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/SystemGlobalContext.cs | 5 +++ .../Machine/Contexts/ContextIValueImpl.cs | 14 ++++++-- .../Machine/Contexts/ContextPropertyMapper.cs | 26 ++++++++------- .../Contexts/DynamicPropertiesHolder.cs | 12 +++++++ .../Machine/Contexts/GlobalContextBase.cs | 5 +++ .../Machine/Contexts/ReflectableSDO.cs | 9 +++-- .../Machine/Contexts/ScriptDrivenObject.cs | 2 +- .../Machine/IRuntimeContextInstance.cs | 33 ++----------------- src/oscript/CgiBehavior.cs | 11 +++++++ 9 files changed, 68 insertions(+), 49 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs b/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs index cc2445838..6cbf0b761 100755 --- a/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs +++ b/src/ScriptEngine.HostedScript/Library/SystemGlobalContext.cs @@ -676,6 +676,11 @@ public string GetPropName(int index) return _propHolder.GetProperties().First(x => x.Value == index).Key; } + public VariableInfo GetPropertyInfo(int propNum) + { + return _propHolder.GetPropertyInfo(propNum); + } + public int FindMethod(string name) { return _methods.FindMethod(name); diff --git a/src/ScriptEngine/Machine/Contexts/ContextIValueImpl.cs b/src/ScriptEngine/Machine/Contexts/ContextIValueImpl.cs index e904ac0cc..e0c9aab52 100644 --- a/src/ScriptEngine/Machine/Contexts/ContextIValueImpl.cs +++ b/src/ScriptEngine/Machine/Contexts/ContextIValueImpl.cs @@ -5,9 +5,6 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace ScriptEngine.Machine.Contexts { @@ -179,6 +176,17 @@ public virtual string GetPropName(int propNum) throw new NotImplementedException(); } + public virtual VariableInfo GetPropertyInfo(int propNum) + { + return new VariableInfo() + { + Identifier = GetPropName(propNum), + CanGet = IsPropReadable(propNum), + CanSet = IsPropWritable(propNum), + Type = SymbolType.ContextProperty + }; + } + public virtual int GetMethodsCount() { throw new NotImplementedException(); diff --git a/src/ScriptEngine/Machine/Contexts/ContextPropertyMapper.cs b/src/ScriptEngine/Machine/Contexts/ContextPropertyMapper.cs index af0c3a380..9504f7c82 100644 --- a/src/ScriptEngine/Machine/Contexts/ContextPropertyMapper.cs +++ b/src/ScriptEngine/Machine/Contexts/ContextPropertyMapper.cs @@ -212,23 +212,25 @@ public int Count } } + public VariableInfo GetPropertyInfo(int propNum) + { + var prop = _properties[propNum]; + return new VariableInfo() + { + Identifier = prop.Name, + Alias = prop.Alias, + Type = SymbolType.ContextProperty, + Index = propNum + }; + } + public IEnumerable GetProperties() { Init(); - var infos = new VariableInfo[Count]; - for (int i = 0; i < infos.Length; i++) + for (int i = 0; i < Count; i++) { - var prop = _properties[i]; - infos[i] = new VariableInfo() - { - Identifier = prop.Name, - Alias = prop.Alias, - Type = SymbolType.ContextProperty, - Index = i - }; + yield return GetPropertyInfo(i); } - - return infos; } } } diff --git a/src/ScriptEngine/Machine/Contexts/DynamicPropertiesHolder.cs b/src/ScriptEngine/Machine/Contexts/DynamicPropertiesHolder.cs index 2cb75599d..58f7584f3 100644 --- a/src/ScriptEngine/Machine/Contexts/DynamicPropertiesHolder.cs +++ b/src/ScriptEngine/Machine/Contexts/DynamicPropertiesHolder.cs @@ -75,6 +75,18 @@ public IEnumerable> GetProperties() return _propNumbers.AsEnumerable(); } + public VariableInfo GetPropertyInfo(int idx) + { + return new VariableInfo() + { + Identifier = GetPropertyName(idx), + CanGet = true, + CanSet = true, + Index = idx, + Type = SymbolType.ContextProperty + }; + } + public int Count => _propNumbers.Count; private bool IsValidIdentifier(string name) diff --git a/src/ScriptEngine/Machine/Contexts/GlobalContextBase.cs b/src/ScriptEngine/Machine/Contexts/GlobalContextBase.cs index 7424b7cec..07e2ae866 100644 --- a/src/ScriptEngine/Machine/Contexts/GlobalContextBase.cs +++ b/src/ScriptEngine/Machine/Contexts/GlobalContextBase.cs @@ -98,6 +98,11 @@ public string GetPropName(int propNum) return prop.Name; } + public VariableInfo GetPropertyInfo(int propNum) + { + return _properties.GetPropertyInfo(propNum); + } + public virtual int FindMethod(string name) { return _methods.FindMethod(name); diff --git a/src/ScriptEngine/Machine/Contexts/ReflectableSDO.cs b/src/ScriptEngine/Machine/Contexts/ReflectableSDO.cs index 5eb42e239..5032d430b 100644 --- a/src/ScriptEngine/Machine/Contexts/ReflectableSDO.cs +++ b/src/ScriptEngine/Machine/Contexts/ReflectableSDO.cs @@ -5,13 +5,11 @@ This Source Code Form is subject to the terms of the at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using ScriptEngine.Environment; -//#if !__MonoCS__ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; + namespace ScriptEngine.Machine.Contexts { @@ -335,6 +333,11 @@ public string GetPropName(int propNum) return _instance.GetPropName(propNum); } + public VariableInfo GetPropertyInfo(int propNum) + { + return _instance.GetPropertyInfo(propNum); + } + public int GetMethodsCount() { return _instance.GetMethodsCount(); diff --git a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs index a86386b82..c558f0c4f 100644 --- a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs +++ b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs @@ -11,7 +11,7 @@ This Source Code Form is subject to the terms of the namespace ScriptEngine.Machine.Contexts { - public abstract class ScriptDrivenObject : PropertyNameIndexAccessor, IRunnable, IRuntimeContextWithProperties + public abstract class ScriptDrivenObject : PropertyNameIndexAccessor, IRunnable { private readonly LoadedModule _module; private MachineInstance _machine; diff --git a/src/ScriptEngine/Machine/IRuntimeContextInstance.cs b/src/ScriptEngine/Machine/IRuntimeContextInstance.cs index 49948f845..d15d8adbd 100644 --- a/src/ScriptEngine/Machine/IRuntimeContextInstance.cs +++ b/src/ScriptEngine/Machine/IRuntimeContextInstance.cs @@ -27,6 +27,7 @@ public interface IRuntimeContextInstance int GetPropCount(); string GetPropName(int propNum); + VariableInfo GetPropertyInfo(int propNum); int FindMethod(string name); int GetMethodsCount(); @@ -36,11 +37,6 @@ public interface IRuntimeContextInstance } - public interface IRuntimeContextWithProperties : IRuntimeContextInstance - { - VariableInfo GetPropertyInfo(int propNum); - } - public static class RCIHelperExtensions { public static IEnumerable GetMethods(this IRuntimeContextInstance context) @@ -56,33 +52,10 @@ public static IEnumerable GetMethods(this IRuntimeContextInstance co public static IEnumerable GetProperties(this IRuntimeContextInstance context) { - if (context is IRuntimeContextWithProperties) - { - return ((IRuntimeContextWithProperties) context).GetProperties(); - } - VariableInfo[] infos = new VariableInfo[context.GetPropCount()]; - for (int i = 0; i < infos.Length; i++) - { - infos[i] = new VariableInfo() - { - Identifier = context.GetPropName(i), - Type = SymbolType.ContextProperty, - Index = i - }; - } - - return infos; - } - - public static IEnumerable GetProperties(this IRuntimeContextWithProperties context) - { - VariableInfo[] infos = new VariableInfo[context.GetPropCount()]; - for (int i = 0; i < infos.Length; i++) + for (int i = 0; i < context.GetPropCount(); i++) { - infos[i] = context.GetPropertyInfo(i); + yield return context.GetPropertyInfo(i); } - - return infos; } } diff --git a/src/oscript/CgiBehavior.cs b/src/oscript/CgiBehavior.cs index 69691f93d..4c530022f 100644 --- a/src/oscript/CgiBehavior.cs +++ b/src/oscript/CgiBehavior.cs @@ -246,6 +246,17 @@ public void SetPropValue(int propNum, IValue newVal) throw new InvalidOperationException("global props are not writable"); } + public VariableInfo GetPropertyInfo(int propNum) + { + return new VariableInfo() + { + Identifier = GetPropName(propNum), + CanGet = IsPropReadable(propNum), + CanSet = IsPropWritable(propNum), + Index = propNum + }; + } + public int FindMethod(string name) { return _methods.FindMethod(name); From 1b9ac4392b6b9479fc8537e131d294dab3437afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 Dec 2017 11:46:15 +0300 Subject: [PATCH 049/286] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B3=D0=B0=D0=B4=D0=BE?= =?UTF-8?q?=D1=87=D0=BD=D0=BE=D0=B5=20=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20dynamic=20=D0=BD=D0=B0=20=D0=B1=D0=B8=D0=BB=D0=B4-?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Reflector.cs | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Reflector.cs b/src/ScriptEngine.HostedScript/Library/Reflector.cs index b7bb51d39..be3ae3b99 100644 --- a/src/ScriptEngine.HostedScript/Library/Reflector.cs +++ b/src/ScriptEngine.HostedScript/Library/Reflector.cs @@ -177,12 +177,11 @@ private static object CreateMethodsMapper(Type clrType) return instance; } - private static dynamic CreatePropertiesMapper(Type clrType) + private static object CreatePropertiesMapper(Type clrType) { var mapperType = typeof(ContextPropertyMapper<>).MakeGenericType(clrType); var instance = Activator.CreateInstance(mapperType); - dynamic magicCaller = instance; // зачем строить ExpressionTree, когда есть dynamic - return magicCaller; + return instance; } private static Type GetReflectableClrType(TypeTypeValue type) @@ -240,6 +239,19 @@ private static void FillMethodsTableForType(TypeTypeValue type, ValueTable.Value new object[0]); FillMethodsTable(result, infos); } + + private static void FillPropertiesTableForType(TypeTypeValue type, ValueTable.ValueTable result) + { + var clrType = GetReflectableClrType(type); + var mapper = CreatePropertiesMapper(clrType); + var actualType = mapper.GetType(); + var infos = (IEnumerable) actualType.InvokeMember("GetProperties", + BindingFlags.InvokeMethod, + null, + mapper, + new object[0]); + FillPropertiesTable(result, infos); + } private static void FillMethodsTable(ValueTable.ValueTable result, IEnumerable methods) { @@ -303,9 +315,7 @@ public ValueTable.ValueTable GetPropertiesTable(IValue target) else if (target.DataType == DataType.Type) { var type = target.GetRawValue() as TypeTypeValue; - var clrType = GetReflectableClrType(type); - var magicCaller = CreatePropertiesMapper(clrType); - FillPropertiesTable(result, magicCaller.GetProperties()); + FillPropertiesTableForType(type, result); } else throw RuntimeException.InvalidArgumentType(); @@ -313,7 +323,7 @@ public ValueTable.ValueTable GetPropertiesTable(IValue target) return result; } - private void FillPropertiesTable(ValueTable.ValueTable result, IEnumerable properties) + private static void FillPropertiesTable(ValueTable.ValueTable result, IEnumerable properties) { var nameColumn = result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var annotationsColumn = result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); From 878b26b77dfbe688b6bafe6e20cb2a942806688b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 22 Dec 2017 09:24:08 +0300 Subject: [PATCH 050/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B2=20=D0=B0=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D0=B2=20=D1=81=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D1=8F=D0=BC=D0=B8=20#627?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 70 ++++++++--- tests/zip.os | 109 +++++++++++++++--- 2 files changed, 146 insertions(+), 33 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 68ac9293e..8cf6b8673 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -106,7 +106,6 @@ public void Add(string file, SelfAwareEnumValue storePathM private void AddDirectory(string file, System.IO.SearchOption searchOption, SelfAwareEnumValue storePathMode) { - var path = Path.IsPathRooted(file) ? Path.GetDirectoryName(file) : Path.GetFullPath(file); string allFilesMask; if (System.Environment.OSVersion.Platform == PlatformID.Unix || System.Environment.OSVersion.Platform == PlatformID.MacOSX) @@ -115,7 +114,25 @@ private void AddDirectory(string file, System.IO.SearchOption searchOption, Self allFilesMask = "*.*"; var filesToAdd = System.IO.Directory.EnumerateFiles(file, allFilesMask, searchOption); - AddEnumeratedFiles(filesToAdd, path, storePathMode); + AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(file), storePathMode); + } + + private string GetPathForParentFolder(string filepath) + { + var pathForParentFolder = ""; + if (Path.IsPathRooted(filepath)) + { + var currDir = System.IO.Directory.GetCurrentDirectory(); + var path = GetRelativePath(filepath, currDir); + if (path == filepath || path.Substring(0, 2) == "..") + pathForParentFolder = System.IO.Path.Combine(Path.GetDirectoryName(filepath), ".."); + else + pathForParentFolder = currDir; + } + else + pathForParentFolder = System.IO.Path.Combine(filepath, ".."); + + return pathForParentFolder; } private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) @@ -124,9 +141,15 @@ private void AddSingleFile(string file, SelfAwareEnumValue if (storePathMode == null) storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; - string pathInArchive; + var currDir = System.IO.Directory.GetCurrentDirectory(); + + string pathInArchive; if (storePathMode == storeModeEnum.StoreFullPath) pathInArchive = null; + else if (storePathMode == storeModeEnum.StoreRelativePath) + { + pathInArchive = GetRelativePath(file, currDir); + } else pathInArchive = ""; @@ -185,8 +208,10 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP foreach (var item in filesToAdd) { string pathInArchive; - if (storePathMode == storeModeEnum.StoreRelativePath) - pathInArchive = GetRelativePath(item, relativePath); + if (storePathMode == storeModeEnum.StoreRelativePath) + { + pathInArchive = System.IO.Path.GetDirectoryName(GetRelativePath(item, relativePath)); + } else if (storePathMode == storeModeEnum.StoreFullPath) pathInArchive = null; else @@ -195,19 +220,28 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP _zip.AddFile(item, pathInArchive); } } - - private string GetRelativePath(string item, string basePath) - { - var dir = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(item)); - int startIndex; - if (dir == basePath) - startIndex = System.IO.Path.GetDirectoryName(basePath).Length; - else - startIndex = basePath.Length; - - return dir.Substring(startIndex).TrimStart(System.IO.Path.DirectorySeparatorChar, System.IO.Path.AltDirectorySeparatorChar); - } - + + private string GetRelativePath(string filespec, string folder) + { + Uri pathUri = null; + try + { + pathUri = new Uri(filespec); + } + catch (System.UriFormatException) + { + return filespec; + } + + // Folders must end in a slash + if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) + { + folder += Path.DirectorySeparatorChar; + } + Uri folderUri = new Uri(folder); + return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + } + private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) { if (recurseSubdirectories == null) diff --git a/tests/zip.os b/tests/zip.os index 5eeaa2988..ab1eac4dc 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -13,10 +13,13 @@ ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивОдиночныйФайлБезПутей"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивОдиночныйСПолнымПутем"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогТестов"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогТестовПоМаске"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями"); - ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивКаталогТестовПоМаске"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутей"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутейДляОдиночногоЭлемента"); @@ -132,16 +135,18 @@ ФайлСкрипта = Новый Файл(ТекущийСценарий().Источник); КаталогСкрипта = Новый Файл(ФайлСкрипта.Путь); + ВременныйКаталог = СоздатьВременныйФайл(); КаталогКопииТестов = ОбъединитьПути(ВременныйКаталог, КаталогСкрипта.Имя); СоздатьКаталог(КаталогКопииТестов); + ВсеФайлы = НайтиФайлы(КаталогСкрипта.ПолноеИмя, "*.os"); Для Каждого Файл Из ВсеФайлы Цикл Если Файл.ЭтоФайл() Тогда КопироватьФайл(Файл.ПолноеИмя, ОбъединитьПути(КаталогКопииТестов, Файл.Имя)); КонецЕсли; КонецЦикла; - + ИмяАрхива = СоздатьВременныйФайл("zip"); Архив = Новый ЗаписьZipФайла(); Архив.Открыть(ИмяАрхива); @@ -284,6 +289,22 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями() Экспорт + ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Истина); +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями() Экспорт + ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Ложь, Истина); +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем() Экспорт + ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Ложь); +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем() Экспорт + ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Ложь, Ложь); +КонецПроцедуры + +Процедура ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(ПередатьКаталог, ПередатьОтносительныйПуть) Экспорт УстановитьВременныйКаталогКакТекущий(); ИМЯ_КАТАЛОГА = "РодительскийКаталог"; @@ -292,8 +313,24 @@ ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; - - ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьКаталога); + ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); + ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); + + Если ПередатьКаталог Тогда + Если ПередатьОтносительныйПуть Тогда + Путь = ОтносительныйПутьКаталога; + Иначе + Путь = ПолныйПутьКаталога; + КонецЕсли; + Иначе + Если ПередатьОтносительныйПуть Тогда + Путь = ОтносительныйПутьФайла; + Иначе + Путь = ПолныйПутьФайла; + КонецЕсли; + КонецЕсли; + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); @@ -340,27 +377,59 @@ КонецПроцедуры -Процедура ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями() Экспорт +Процедура ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями() Экспорт УстановитьВременныйКаталогКакТекущий(); - - ИМЯ_КАТАЛОГА = "РодительскийКаталог"; + + ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; + ИМЯ_КАТАЛОГА = "ВложенныйКаталог"; + ИМЯ_КАТАЛОГА2 = "ВложенныйКаталог2"; ИМЯ_ФАЙЛА = "ВложенныйФайл"; + ИМЯ_ФАЙЛА2 = "ВложенныйФайл2"; - ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); + СоздатьКаталог(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ОбъединитьПути(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА, ИМЯ_КАТАЛОГА), ИМЯ_ФАЙЛА); ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + + ОписаниеКаталога2 = ПодготовитьФайлВоВложенномКаталоге(ОбъединитьПути(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА, ИМЯ_КАТАЛОГА2), ИМЯ_ФАЙЛА2); + ОтносительныйПутьКаталога2 = ОписаниеКаталога2.ПутьКаталога; + ОтносительныйПутьФайла2 = ОписаниеКаталога2.ПутьФайла; + + МассивПутей = Новый Массив; + МассивПутей.Добавить(ОтносительныйПутьКаталога); + МассивПутей.Добавить(ОтносительныйПутьКаталога2); - ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьФайла); + ИмяАрхива = ДобавитьКоллекциюФайловИлиКаталоговВАрхивСОтносительнымиПутями(МассивПутей); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); + ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); + НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); + НеверныйПутьКаталогаВКорне2 = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА2); + ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне2, "Второй вложенный каталог не должен был существовать в корне, а он есть."); + + НеверныйПутьФайлаВКорне2 = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА2); + ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне2, "Второй файл не должен был существовать в корне распаковки, а он есть."); + + ИскомыйПутьРодительскогоКаталога = ОбъединитьПути(Распаковка, ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); + ПроверитьНаличиеФайла(ИскомыйПутьРодительскогоКаталога, "Родительский каталог должен был существовать в корне, а его нет."); + ИскомыйПутьКаталога = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога); - ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Каталог должен был существовать в корне, а его нет."); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Вложенный каталог должен был существовать в каталоге родителя, а его нет."); ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла); ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать во вложенном каталоге, а его нет."); + + ИскомыйПутьКаталога2 = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога2); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога2, "Второй вложенный каталог должен был существовать в каталоге родителя, а его нет."); + + ИскомыйПутьФайла2 = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла2); + ПроверитьНаличиеФайла(ИскомыйПутьФайла2, "Второй файл должен был существовать во втором вложенном каталоге, а его нет."); + КонецПроцедуры Функция УстановитьВременныйКаталогКакТекущий() @@ -376,8 +445,9 @@ ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); СоздатьФайл(ПутьФайла); - - Возврат Новый Структура("ПутьКаталога, ПутьФайла", ПутьКаталога, ПутьФайла); + + Возврат Новый Структура( + "ПутьКаталога, ПутьФайла", ПутьКаталога, ПутьФайла); КонецФункции Функция СоздатьФайл(Знач ПутьФайла = "") @@ -391,15 +461,24 @@ Возврат ПутьФайла; КонецФункции -Функция ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Знач ОтносительныйПуть) +Функция ДобавитьКоллекциюФайловИлиКаталоговВАрхивСОтносительнымиПутями(Знач МассивПутей) ИмяАрхива = юТест.ИмяВременногоФайла("zip"); Архив = Новый ЗаписьZIPФайла(ИмяАрхива); - Архив.Добавить(ОтносительныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); + Для каждого ОтносительныйПуть Из МассивПутей Цикл + Архив.Добавить(ОтносительныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); + КонецЦикла; + Архив.Записать(); Возврат ИмяАрхива; КонецФункции +Функция ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Знач ОтносительныйПуть) + МассивПутей = Новый Массив; + МассивПутей.Добавить(ОтносительныйПуть); + Возврат ДобавитьКоллекциюФайловИлиКаталоговВАрхивСОтносительнымиПутями(МассивПутей); +КонецФункции + Функция ИзвлечьВсеИзАрхиваВоВременныйКаталог(Знач ИмяАрхива) Архив = Новый ЧтениеZipФайла(ИмяАрхива); Распаковка = юТест.ИмяВременногоФайла(); @@ -419,4 +498,4 @@ Процедура ПроверитьОтсутствиеФайла(Знач НеверныйПутьФайла, Знач СообщениеОшибки) Файл = Новый Файл(НеверныйПутьФайла); юТест.ПроверитьЛожь(Файл.Существует(), СообщениеОшибки + НеверныйПутьФайла); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры From adcec78bac5be1a09f154ce1f0fd5e71a72e10f9 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 22 Dec 2017 11:26:18 +0300 Subject: [PATCH 051/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2/=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=BD=D0=B5=20=D0=B8=D0=B7=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=BE=D0=B3=20=D1=81=20=D1=83=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B8=D1=85=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=83=D1=82=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D1=80=D1=85=D0=B8=D0=B2=20=D1=81=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BF=D1=83=D1=82=D1=8F=D0=BC=D0=B8=20#627=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 25 ++-- tests/zip.os | 115 ++++++++++++++++-- 2 files changed, 126 insertions(+), 14 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 8cf6b8673..fe4780eb8 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -117,24 +117,29 @@ private void AddDirectory(string file, System.IO.SearchOption searchOption, Self AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(file), storePathMode); } - private string GetPathForParentFolder(string filepath) + private string GetPathForParentFolder(string dirpath) { var pathForParentFolder = ""; - if (Path.IsPathRooted(filepath)) + if (Path.IsPathRooted(dirpath)) { var currDir = System.IO.Directory.GetCurrentDirectory(); - var path = GetRelativePath(filepath, currDir); - if (path == filepath || path.Substring(0, 2) == "..") - pathForParentFolder = System.IO.Path.Combine(Path.GetDirectoryName(filepath), ".."); + var path = GetRelativePath(dirpath, currDir); + if (IsNotRelativePath(dirpath, path)) + pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); else pathForParentFolder = currDir; } else - pathForParentFolder = System.IO.Path.Combine(filepath, ".."); + pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); return pathForParentFolder; } + private bool IsNotRelativePath(string filepath, string relativePath) + { + return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); + } + private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) { var storeModeEnum = GlobalsManager.GetEnum(); @@ -148,7 +153,13 @@ private void AddSingleFile(string file, SelfAwareEnumValue pathInArchive = null; else if (storePathMode == storeModeEnum.StoreRelativePath) { - pathInArchive = GetRelativePath(file, currDir); + var relativePath = GetRelativePath(file, currDir); + if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) + { + pathInArchive = "."; + } + else + pathInArchive = Path.GetDirectoryName(relativePath); } else pathInArchive = ""; diff --git a/tests/zip.os b/tests/zip.os index ab1eac4dc..1e0fb2bf9 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -1,5 +1,6 @@ Перем юТест; Перем ТекущийКаталогСохр; +Перем Чтение; Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт @@ -20,6 +21,9 @@ ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивФайлСОтносительнымиПутями"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем"); ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога"); + ВсеТесты.Добавить("ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутей"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвлечениеБезПутейДляОдиночногоЭлемента"); @@ -38,6 +42,10 @@ Процедура ПослеЗапускаТеста() Экспорт УстановитьТекущийКаталог(ТекущийКаталогСохр); + Если ЗначениеЗаполнено(Чтение) Тогда + Чтение.Закрыть(); + КонецЕсли; + юТест.УдалитьВременныеФайлы(); КонецПроцедуры @@ -304,11 +312,11 @@ ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Ложь, Ложь); КонецПроцедуры -Процедура ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(ПередатьКаталог, ПередатьОтносительныйПуть) Экспорт +Процедура ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Знач ПередатьКаталог, Знач ПередатьОтносительныйПуть) Экспорт УстановитьВременныйКаталогКакТекущий(); ИМЯ_КАТАЛОГА = "РодительскийКаталог"; - ИМЯ_ФАЙЛА = "ВложенныйФайл"; + ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; @@ -331,6 +339,13 @@ КонецЕсли; ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); + + Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); + Элемент = Чтение.Элементы[0]; + юТест.ПроверитьРавенство(СтрЗаменить(ОтносительныйПутьФайла, "\", "/"), + Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); @@ -349,7 +364,7 @@ ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; ИМЯ_КАТАЛОГА = "ВложенныйКаталог"; - ИМЯ_ФАЙЛА = "ВложенныйФайл"; + ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; СоздатьКаталог(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); @@ -383,8 +398,8 @@ ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; ИМЯ_КАТАЛОГА = "ВложенныйКаталог"; ИМЯ_КАТАЛОГА2 = "ВложенныйКаталог2"; - ИМЯ_ФАЙЛА = "ВложенныйФайл"; - ИМЯ_ФАЙЛА2 = "ВложенныйФайл2"; + ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; + ИМЯ_ФАЙЛА2 = "ВложенныйФайл2.txt"; СоздатьКаталог(ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА); @@ -432,6 +447,88 @@ КонецПроцедуры +Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога() Экспорт + ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Истина); +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт + ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Ложь); +КонецПроцедуры + +Процедура ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Знач ПередатьКаталог) Экспорт + УстановитьВременныйКаталогКакТекущий(); + + ИМЯ_КАТАЛОГА = "ДругойРодительскийКаталог"; + ИМЯ_ФАЙЛА = "ДругойВложенныйФайл.txt"; + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге(ИМЯ_КАТАЛОГА, ИМЯ_ФАЙЛА); + ОтносительныйПутьКаталога = ОписаниеКаталога.ПутьКаталога; + ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); + ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); + + УстановитьТекущийКаталог(ТекущийКаталогСохр); + + Если ПередатьКаталог Тогда + Путь = ПолныйПутьКаталога; + Иначе + Путь = ПолныйПутьФайла; + КонецЕсли; + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); + + Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); + Элемент = Чтение.Элементы[0]; + Если ПередатьКаталог Тогда + юТест.ПроверитьРавенство(ОтносительныйПутьКаталога + ПолучитьРазделительПути(), Элемент.Путь, "Проверка элемента zip: " + Элемент.ПолноеИмя); + Иначе + юТест.ПроверитьРавенство(ИМЯ_ФАЙЛА, Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); + юТест.ПроверитьРавенство("", Элемент.Путь, "Проверка пути элемента zip: " + Элемент.ПолноеИмя); + КонецЕсли; + + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + Если ПередатьКаталог Тогда + НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); + + ИскомыйПутьКаталога = ОбъединитьПути(Распаковка, ОтносительныйПутьКаталога); + ПроверитьНаличиеФайла(ИскомыйПутьКаталога, "Каталог должен был существовать в корне, а его нет."); + + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ОтносительныйПутьФайла); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать во вложенном каталоге, а его нет."); + Иначе + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать в корне распаковки, а его нет."); + КонецЕсли; + +КонецПроцедуры + +Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт + УстановитьВременныйКаталогКакТекущий(); + + ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; + + ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге("", ИМЯ_ФАЙЛА); + ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; + ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); + + УстановитьТекущийКаталог(ТекущийКаталогСохр); + + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ПолныйПутьФайла); + + Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); + Элемент = Чтение.Элементы[0]; + юТест.ПроверитьРавенство(ИМЯ_ФАЙЛА, Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); + + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); + ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать в корне распаковки, а его нет."); +КонецПроцедуры + Функция УстановитьВременныйКаталогКакТекущий() ИмяКаталогаКорня = юТест.ИмяВременногоФайла(); СоздатьКаталог(ИмяКаталогаКорня); @@ -441,9 +538,13 @@ Функция ПодготовитьФайлВоВложенномКаталоге(Знач ИмяКаталога, Знач ИмяФайла) ПутьКаталога = ИмяКаталога; - СоздатьКаталог(ПутьКаталога); + Если Не ПустаяСтрока(ИмяКаталога) Тогда + СоздатьКаталог(ПутьКаталога); + ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); + Иначе + ПутьФайла = ИмяФайла; + КонецЕсли; - ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); СоздатьФайл(ПутьФайла); Возврат Новый Структура( From d2bf8927a794815c477c9becaf6e11c5e9811bc3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 11:44:26 +0300 Subject: [PATCH 052/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B=20?= =?UTF-8?q?=D1=81=20=D0=9B=D0=B8=D0=BD=D1=83=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 42 ++++++++++- tests/zip.os | 75 +++++++++++++++++-- 2 files changed, 109 insertions(+), 8 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index fe4780eb8..107052595 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -119,24 +119,41 @@ private void AddDirectory(string file, System.IO.SearchOption searchOption, Self private string GetPathForParentFolder(string dirpath) { + DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}.", dirpath)); var pathForParentFolder = ""; if (Path.IsPathRooted(dirpath)) { + DebugEcho("GetPathForParentFolder: is rooted"); + var currDir = System.IO.Directory.GetCurrentDirectory(); + DebugEcho(String.Format("GetPathForParentFolder currDir is {0}.", currDir)); + var path = GetRelativePath(dirpath, currDir); + DebugEcho(String.Format("GetPathForParentFolder GetRelativePath is {0}.", path)); if (IsNotRelativePath(dirpath, path)) + { + DebugEcho("GetPathForParentFolder IsNotRelativePath is true"); pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); + } else + { + DebugEcho("GetPathForParentFolder IsNotRelativePath is false"); pathForParentFolder = currDir; + } } - else + else + { + DebugEcho("GetPathForParentFolder: is not rooted"); pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); + } + DebugEcho(String.Format("GetPathForParentFolder pathForParentFolder is {0}.", pathForParentFolder)); return pathForParentFolder; } private bool IsNotRelativePath(string filepath, string relativePath) { + DebugEcho(String.Format("IsNotRelativePath: filepath is {0}, relativePath is {1}", filepath, relativePath)); return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); } @@ -153,18 +170,24 @@ private void AddSingleFile(string file, SelfAwareEnumValue pathInArchive = null; else if (storePathMode == storeModeEnum.StoreRelativePath) { + DebugEcho(String.Format("AddSingleFile: file is {0}", file)); var relativePath = GetRelativePath(file, currDir); + DebugEcho(String.Format("AddSingleFile: relativePath is {0}", relativePath)); if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) { + DebugEcho("Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)"); pathInArchive = "."; } else + { + DebugEcho("NOT Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)"); pathInArchive = Path.GetDirectoryName(relativePath); + } } else pathInArchive = ""; - + DebugEcho(String.Format("AddSingleFile: pathInArchive is {0}", pathInArchive)); _zip.AddFile(file, pathInArchive); } @@ -221,6 +244,9 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP string pathInArchive; if (storePathMode == storeModeEnum.StoreRelativePath) { + DebugEcho(String.Format("AddEnumeratedFiles: relativePath is {0}", relativePath)); + DebugEcho(String.Format("AddEnumeratedFiles: item is {0}", item)); + DebugEcho(String.Format("AddEnumeratedFiles: GetRelativePath(item, relativePath) is {0}", GetRelativePath(item, relativePath))); pathInArchive = System.IO.Path.GetDirectoryName(GetRelativePath(item, relativePath)); } else if (storePathMode == storeModeEnum.StoreFullPath) @@ -228,12 +254,14 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP else pathInArchive = ""; + DebugEcho(String.Format("AddEnumeratedFiles: pathInArchive is {0}", pathInArchive)); _zip.AddFile(item, pathInArchive); } } private string GetRelativePath(string filespec, string folder) { + DebugEcho(String.Format("GetRelativePath: filespec is {0}, folder is {1}", filespec, folder)); Uri pathUri = null; try { @@ -241,6 +269,7 @@ private string GetRelativePath(string filespec, string folder) } catch (System.UriFormatException) { + DebugEcho(String.Format("GetRelativePath catch is {0}.", filespec)); return filespec; } @@ -250,7 +279,14 @@ private string GetRelativePath(string filespec, string folder) folder += Path.DirectorySeparatorChar; } Uri folderUri = new Uri(folder); - return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + var res = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + DebugEcho(String.Format("GetRelativePath res is {0}.", res)); + return res; + } + + private void DebugEcho(string str) + { + Console.WriteLine(String.Format("DEBUG ZIP: {0}.", str)); } private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) diff --git a/tests/zip.os b/tests/zip.os index 1e0fb2bf9..a32c73ef2 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -305,10 +305,16 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем + |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Ложь); КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем + |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Ложь, Ложь); КонецПроцедуры @@ -323,6 +329,11 @@ ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); + Вывести("ОтносительныйПутьКаталога %1", ОтносительныйПутьКаталога); + Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла ); + Вывести("ПолныйПутьКаталога %1", ПолныйПутьКаталога); + Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); + // Вывести(" %1", ); Если ПередатьКаталог Тогда Если ПередатьОтносительныйПуть Тогда @@ -337,16 +348,20 @@ Путь = ПолныйПутьФайла; КонецЕсли; КонецЕсли; + Вывести("Путь %1", Путь); ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + ТрассироватьВсеЭлементыАрхива(Чтение); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; юТест.ПроверитьРавенство(СтрЗаменить(ОтносительныйПутьФайла, "\", "/"), Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + Вывести("Распаковали содержимое архива в каталог %1", Распаковка); НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); @@ -448,10 +463,16 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога + |"); ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Истина); КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога + |"); ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Ложь); КонецПроцедуры @@ -466,18 +487,26 @@ ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); + Вывести("ОтносительныйПутьКаталога %1", ОтносительныйПутьКаталога); + Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла ); + Вывести("ПолныйПутьКаталога %1", ПолныйПутьКаталога); + Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); УстановитьТекущийКаталог(ТекущийКаталогСохр); - + Вывести("Установили текущий каталог в %1", ТекущийКаталогСохр); + Если ПередатьКаталог Тогда Путь = ПолныйПутьКаталога; Иначе Путь = ПолныйПутьФайла; КонецЕсли; - + Вывести("Путь %1", Путь); + ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + ТрассироватьВсеЭлементыАрхива(Чтение); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; Если ПередатьКаталог Тогда @@ -488,7 +517,8 @@ КонецЕсли; Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); - + Вывести("Распаковали содержимое архива в каталог %1", Распаковка); + Если ПередатьКаталог Тогда НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); @@ -506,6 +536,9 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога + |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; @@ -513,17 +546,23 @@ ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге("", ИМЯ_ФАЙЛА); ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); - + Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла); + Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); + // Вывести("Путь %1", Путь); УстановитьТекущийКаталог(ТекущийКаталогСохр); + Вывести("Установили текущий каталог в %1", ТекущийКаталогСохр); ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ПолныйПутьФайла); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + ТрассироватьВсеЭлементыАрхива(Чтение); + юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; юТест.ПроверитьРавенство(ИМЯ_ФАЙЛА, Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); - + Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + Вывести("Распаковали содержимое архива в каталог %1", Распаковка); ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать в корне распаковки, а его нет."); @@ -540,6 +579,7 @@ ПутьКаталога = ИмяКаталога; Если Не ПустаяСтрока(ИмяКаталога) Тогда СоздатьКаталог(ПутьКаталога); + Вывести("ПодготовитьФайлВоВложенномКаталоге: создан каталог %1", ПутьКаталога); ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); Иначе ПутьФайла = ИмяФайла; @@ -559,6 +599,7 @@ ЗТ = Новый ЗаписьТекста(ПутьФайла); ЗТ.Записать("Привет"); ЗТ.Закрыть(); + Вывести("СоздатьФайл: Создан файл %1", ПутьФайла); Возврат ПутьФайла; КонецФункции @@ -567,9 +608,11 @@ Архив = Новый ЗаписьZIPФайла(ИмяАрхива); Для каждого ОтносительныйПуть Из МассивПутей Цикл + Вывести("Добавляю в архив относительный путь %1", ОтносительныйПуть); Архив.Добавить(ОтносительныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); КонецЦикла; + Вывести("Записываю архив %1", ИмяАрхива); Архив.Записать(); Возврат ИмяАрхива; КонецФункции @@ -582,8 +625,10 @@ Функция ИзвлечьВсеИзАрхиваВоВременныйКаталог(Знач ИмяАрхива) Архив = Новый ЧтениеZipФайла(ИмяАрхива); + Вывести("Перед распаковкой архива %1", ИмяАрхива); Распаковка = юТест.ИмяВременногоФайла(); СоздатьКаталог(Распаковка); + Вывести("Создали каталог для распаковки %1", Распаковка); Архив.ИзвлечьВсе(Распаковка); Архив.Закрыть(); @@ -600,3 +645,23 @@ Файл = Новый Файл(НеверныйПутьФайла); юТест.ПроверитьЛожь(Файл.Существует(), СообщениеОшибки + НеверныйПутьФайла); КонецПроцедуры + +Процедура ТрассироватьВсеЭлементыАрхива(Знач Чтение) + Вывести("ЧтениеZipФайла.Элементы.Количество() %1", Чтение.Элементы.Количество()); + Для Счетчик = 0 По Чтение.Элементы.Количество()-1 Цикл + + Элемент = Чтение.Элементы[Счетчик]; + Вывести("Элемент архива %1 - Элемент.ПолноеИмя %2", Счетчик, Элемент.ПолноеИмя); + КонецЦикла; +КонецПроцедуры + +Процедура Вывести(Знач Сообщение, + Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Сообщение = СтрШаблон(Сообщение, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + + Сообщить("ОТЛАДКА ЗИП: " + Сообщение); +КонецПроцедуры \ No newline at end of file From ef96971e85ed0c814f2c07ae8114e51bc4ee96de Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 12:40:44 +0300 Subject: [PATCH 053/286] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=8F=D0=B2=D0=BD=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8=20"file://"=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BF=D1=83=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 107052595..9425233f2 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -119,17 +119,17 @@ private void AddDirectory(string file, System.IO.SearchOption searchOption, Self private string GetPathForParentFolder(string dirpath) { - DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}.", dirpath)); + DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}", dirpath)); var pathForParentFolder = ""; if (Path.IsPathRooted(dirpath)) { DebugEcho("GetPathForParentFolder: is rooted"); var currDir = System.IO.Directory.GetCurrentDirectory(); - DebugEcho(String.Format("GetPathForParentFolder currDir is {0}.", currDir)); + DebugEcho(String.Format("GetPathForParentFolder currDir is {0}", currDir)); var path = GetRelativePath(dirpath, currDir); - DebugEcho(String.Format("GetPathForParentFolder GetRelativePath is {0}.", path)); + DebugEcho(String.Format("GetPathForParentFolder GetRelativePath is {0}", path)); if (IsNotRelativePath(dirpath, path)) { DebugEcho("GetPathForParentFolder IsNotRelativePath is true"); @@ -147,7 +147,7 @@ private string GetPathForParentFolder(string dirpath) pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); } - DebugEcho(String.Format("GetPathForParentFolder pathForParentFolder is {0}.", pathForParentFolder)); + DebugEcho(String.Format("GetPathForParentFolder pathForParentFolder is {0}", pathForParentFolder)); return pathForParentFolder; } @@ -265,11 +265,11 @@ private string GetRelativePath(string filespec, string folder) Uri pathUri = null; try { - pathUri = new Uri(filespec); + pathUri = new Uri("file://" + filespec); } catch (System.UriFormatException) { - DebugEcho(String.Format("GetRelativePath catch is {0}.", filespec)); + DebugEcho(String.Format("GetRelativePath catch is {0}", filespec)); return filespec; } @@ -278,15 +278,28 @@ private string GetRelativePath(string filespec, string folder) { folder += Path.DirectorySeparatorChar; } - Uri folderUri = new Uri(folder); + Uri folderUri = new Uri("file://" + folder); var res = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); - DebugEcho(String.Format("GetRelativePath res is {0}.", res)); + DebugEcho(String.Format("GetRelativePath res is {0}", res)); + + var removestr = "file:\\\\"; + if (res.StartsWith(removestr)) + { + DebugEcho(String.Format("GetRelativePath res without {1} is {0}", res, removestr)); + res = res.Substring(removestr.Length); + } + removestr = "file://"; + if (res.StartsWith(removestr)) + { + DebugEcho(String.Format("GetRelativePath res without {1} is {0}", res, removestr)); + res = res.Substring(removestr.Length); + } return res; } private void DebugEcho(string str) { - Console.WriteLine(String.Format("DEBUG ZIP: {0}.", str)); + Console.WriteLine(String.Format("DEBUG ZIP: {0}", str)); } private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) From f2dca3a74e34d7f0617f50c600327267e21ccae8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 12:48:16 +0300 Subject: [PATCH 054/286] =?UTF-8?q?=D0=95=D1=89=D0=B5=20=D0=BD=D0=B5=D0=BC?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/zip.os | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/zip.os b/tests/zip.os index a32c73ef2..18d8e7536 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -297,6 +297,9 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями + |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Истина); КонецПроцедуры @@ -375,6 +378,9 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями + |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; @@ -408,6 +414,9 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями() Экспорт + Вывести(" + |ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями + |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; From 3206bd61430a385cdf853b11a88f197be8bfe88d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 13:06:50 +0300 Subject: [PATCH 055/286] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20"file:",=20=D1=82.=D0=BA.=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=87=D0=B8=D1=81=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D1=8C,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B5=20=D0=B5=D1=81=D1=82=D1=8C=20".."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs | 8 ++++++-- tests/zip.os | 8 +++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 9425233f2..8458cca98 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -265,7 +265,8 @@ private string GetRelativePath(string filespec, string folder) Uri pathUri = null; try { - pathUri = new Uri("file://" + filespec); + pathUri = new Uri(filespec); + //pathUri = new Uri("file://" + filespec); } catch (System.UriFormatException) { @@ -278,10 +279,12 @@ private string GetRelativePath(string filespec, string folder) { folder += Path.DirectorySeparatorChar; } - Uri folderUri = new Uri("file://" + folder); + Uri folderUri = new Uri(folder); + //Uri folderUri = new Uri("file://" + folder); var res = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); DebugEcho(String.Format("GetRelativePath res is {0}", res)); + /* var removestr = "file:\\\\"; if (res.StartsWith(removestr)) { @@ -294,6 +297,7 @@ private string GetRelativePath(string filespec, string folder) DebugEcho(String.Format("GetRelativePath res without {1} is {0}", res, removestr)); res = res.Substring(removestr.Length); } + */ return res; } diff --git a/tests/zip.os b/tests/zip.os index 18d8e7536..31d3b5f3c 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -395,7 +395,10 @@ ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ОтносительныйПутьКаталога); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); - + + Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + ТрассироватьВсеЭлементыАрхива(Чтение); + НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); @@ -441,6 +444,9 @@ ИмяАрхива = ДобавитьКоллекциюФайловИлиКаталоговВАрхивСОтносительнымиПутями(МассивПутей); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); + + Чтение = Новый ЧтениеZipФайла(ИмяАрхива); + ТрассироватьВсеЭлементыАрхива(Чтение); НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); From 21a6ba4ca142c9e2308e97b2d92efcb7721e74c1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 13:21:19 +0300 Subject: [PATCH 056/286] =?UTF-8?q?=D0=A7=D1=83=D1=82=D1=8C=20=D0=B1=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D1=88=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 8458cca98..f514f4250 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -266,6 +266,7 @@ private string GetRelativePath(string filespec, string folder) try { pathUri = new Uri(filespec); + DebugEcho(String.Format("GetRelativePath pathUri is {0}", pathUri.ToString())); //pathUri = new Uri("file://" + filespec); } catch (System.UriFormatException) @@ -278,10 +279,17 @@ private string GetRelativePath(string filespec, string folder) if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) { folder += Path.DirectorySeparatorChar; + DebugEcho(String.Format("GetRelativePath add to folder {0}", Path.DirectorySeparatorChar.ToString())); } Uri folderUri = new Uri(folder); //Uri folderUri = new Uri("file://" + folder); - var res = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + DebugEcho(String.Format("GetRelativePath folderUri is {0}", folderUri.ToString())); + var relativeUri = folderUri.MakeRelativeUri(pathUri); + DebugEcho(String.Format("GetRelativePath relativeUri is {0}", relativeUri.ToString())); + DebugEcho(String.Format("GetRelativePath relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar) is {0}", + relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar))); + + var res = Uri.UnescapeDataString(relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar)); DebugEcho(String.Format("GetRelativePath res is {0}", res)); /* From d68e50eb655f1a583c4040e71ea0a9fadfd9a536 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 13:39:50 +0300 Subject: [PATCH 057/286] =?UTF-8?q?1=D1=8F=20=D0=BF=D0=BE=D0=BF=D1=8B?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index f514f4250..1fdeca913 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -290,8 +290,18 @@ private string GetRelativePath(string filespec, string folder) relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar))); var res = Uri.UnescapeDataString(relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar)); - DebugEcho(String.Format("GetRelativePath res is {0}", res)); + DebugEcho(String.Format("GetRelativePath Uri.UnescapeDataString is {0}", res)); + // в Linux может возвращаться двойное имя пути, что неверно! + // Например, file:///tmp/smpk1cx3.y1n.tmp/РодительскийКаталог/ВложенныйФайл.txt/tmp/smpk1cx3.y1n.tmp/РодительскийКаталог/ВложенныйФайл.txt + var filesuffix = "file://"; + if (res.StartsWith(filesuffix)) + { + DebugEcho(String.Format("GetRelativePath remove {1} from res is {0}", res, filesuffix)); + res = res.Substring(filesuffix.Length); + DebugEcho(String.Format("GetRelativePath remove duplicate path from res is {0}", res)); + res = res.Substring(filespec.Length); + } /* var removestr = "file:\\\\"; if (res.StartsWith(removestr)) @@ -306,6 +316,7 @@ private string GetRelativePath(string filespec, string folder) res = res.Substring(removestr.Length); } */ + DebugEcho(String.Format("GetRelativePath res is {0}", res)); return res; } From 107bf8a89cc137492947f527e7b7a76887a0f50e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 15:25:22 +0300 Subject: [PATCH 058/286] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B8=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BF=D1=83=D1=82=D0=B5=D0=B9=20=D0=97?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=20=D0=B2=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 147 +++++++----------- 1 file changed, 56 insertions(+), 91 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 1fdeca913..5c7579380 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -87,24 +87,24 @@ public void Add(string file, SelfAwareEnumValue storePathM var pathIsMasked = file.IndexOfAny(new[] { '*', '?' }) >= 0; var recursiveFlag = GetRecursiveFlag(recurseSubdirectories); - var searchOption = recursiveFlag ? System.IO.SearchOption.AllDirectories : System.IO.SearchOption.TopDirectoryOnly; + var searchOption = recursiveFlag ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; if(pathIsMasked) { AddFilesByMask(file, searchOption, storePathMode); } - else if (System.IO.Directory.Exists(file)) + else if (Directory.Exists(file)) { AddDirectory(file, searchOption, storePathMode); } - else if (System.IO.File.Exists(file)) + else if (File.Exists(file)) { AddSingleFile(file, storePathMode); } } - private void AddDirectory(string file, System.IO.SearchOption searchOption, SelfAwareEnumValue storePathMode) + private void AddDirectory(string dir, SearchOption searchOption, SelfAwareEnumValue storePathMode) { string allFilesMask; @@ -113,47 +113,33 @@ private void AddDirectory(string file, System.IO.SearchOption searchOption, Self else allFilesMask = "*.*"; - var filesToAdd = System.IO.Directory.EnumerateFiles(file, allFilesMask, searchOption); - AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(file), storePathMode); - } - - private string GetPathForParentFolder(string dirpath) + var filesToAdd = Directory.EnumerateFiles(dir, allFilesMask, searchOption); + AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(dir), storePathMode); + } + + private string GetPathForParentFolder(string dir) { - DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}", dirpath)); - var pathForParentFolder = ""; - if (Path.IsPathRooted(dirpath)) + DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}", dir)); + var rootPath = GetRelativePath(dir, Directory.GetCurrentDirectory()); + DebugEcho(String.Format("GetPathForParentFolder: rootPath is {0}", rootPath)); + if (rootPath == "") { - DebugEcho("GetPathForParentFolder: is rooted"); - - var currDir = System.IO.Directory.GetCurrentDirectory(); - DebugEcho(String.Format("GetPathForParentFolder currDir is {0}", currDir)); - - var path = GetRelativePath(dirpath, currDir); - DebugEcho(String.Format("GetPathForParentFolder GetRelativePath is {0}", path)); - if (IsNotRelativePath(dirpath, path)) - { - DebugEcho("GetPathForParentFolder IsNotRelativePath is true"); - pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); - } - else - { - DebugEcho("GetPathForParentFolder IsNotRelativePath is false"); - pathForParentFolder = currDir; - } - } + rootPath = Path.Combine(Directory.GetCurrentDirectory(), dir, ".."); + DebugEcho(String.Format("GetPathForParentFolder: final rootPath is {0}", rootPath)); + } else { - DebugEcho("GetPathForParentFolder: is not rooted"); - pathForParentFolder = System.IO.Path.Combine(dirpath, ".."); + rootPath = Directory.GetCurrentDirectory(); + DebugEcho(String.Format("GetPathForParentFolder: final rootPath is {0}", rootPath)); } - - DebugEcho(String.Format("GetPathForParentFolder pathForParentFolder is {0}", pathForParentFolder)); - return pathForParentFolder; + return rootPath; } private bool IsNotRelativePath(string filepath, string relativePath) { DebugEcho(String.Format("IsNotRelativePath: filepath is {0}, relativePath is {1}", filepath, relativePath)); + if (relativePath == "") + return true; return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); } @@ -163,7 +149,7 @@ private void AddSingleFile(string file, SelfAwareEnumValue if (storePathMode == null) storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; - var currDir = System.IO.Directory.GetCurrentDirectory(); + var currDir = Directory.GetCurrentDirectory(); string pathInArchive; if (storePathMode == storeModeEnum.StoreFullPath) @@ -191,7 +177,7 @@ private void AddSingleFile(string file, SelfAwareEnumValue _zip.AddFile(file, pathInArchive); } - private void AddFilesByMask(string file, System.IO.SearchOption searchOption, SelfAwareEnumValue storePathMode) + private void AddFilesByMask(string file, SearchOption searchOption, SelfAwareEnumValue storePathMode) { // надо разделить на каталог и маску var pathEnd = file.LastIndexOfAny(new[] { '\\', '/' }); @@ -213,7 +199,7 @@ private void AddFilesByMask(string file, System.IO.SearchOption searchOption, Se } // несуществующие пути или пути к файлам, вместо папок 1С откидывает - if (!System.IO.Directory.Exists(path)) + if (!Directory.Exists(path)) return; } else if (pathEnd == 0) @@ -227,8 +213,8 @@ private void AddFilesByMask(string file, System.IO.SearchOption searchOption, Se mask = file; } - filesToAdd = System.IO.Directory.EnumerateFiles(path, mask, searchOption); - var relativePath = System.IO.Path.GetFullPath(path); + filesToAdd = Directory.EnumerateFiles(path, mask, searchOption); + var relativePath = Path.GetFullPath(path); AddEnumeratedFiles(filesToAdd, relativePath, storePathMode); } @@ -247,7 +233,7 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP DebugEcho(String.Format("AddEnumeratedFiles: relativePath is {0}", relativePath)); DebugEcho(String.Format("AddEnumeratedFiles: item is {0}", item)); DebugEcho(String.Format("AddEnumeratedFiles: GetRelativePath(item, relativePath) is {0}", GetRelativePath(item, relativePath))); - pathInArchive = System.IO.Path.GetDirectoryName(GetRelativePath(item, relativePath)); + pathInArchive = Path.GetDirectoryName(GetRelativePath(item, relativePath)); } else if (storePathMode == storeModeEnum.StoreFullPath) pathInArchive = null; @@ -258,65 +244,44 @@ private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativeP _zip.AddFile(item, pathInArchive); } } - - private string GetRelativePath(string filespec, string folder) + + // возвращает относительный путь или "", если путь не является относительным + private string GetRelativePath(string filespec, string rootfolder) { - DebugEcho(String.Format("GetRelativePath: filespec is {0}, folder is {1}", filespec, folder)); - Uri pathUri = null; - try - { - pathUri = new Uri(filespec); - DebugEcho(String.Format("GetRelativePath pathUri is {0}", pathUri.ToString())); - //pathUri = new Uri("file://" + filespec); - } - catch (System.UriFormatException) - { - DebugEcho(String.Format("GetRelativePath catch is {0}", filespec)); - return filespec; - } + DebugEcho(String.Format("GetRelativePath: filespec is {0}, folder is {1}", filespec, rootfolder)); - // Folders must end in a slash - if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) - { - folder += Path.DirectorySeparatorChar; - DebugEcho(String.Format("GetRelativePath add to folder {0}", Path.DirectorySeparatorChar.ToString())); - } - Uri folderUri = new Uri(folder); - //Uri folderUri = new Uri("file://" + folder); - DebugEcho(String.Format("GetRelativePath folderUri is {0}", folderUri.ToString())); - var relativeUri = folderUri.MakeRelativeUri(pathUri); - DebugEcho(String.Format("GetRelativePath relativeUri is {0}", relativeUri.ToString())); - DebugEcho(String.Format("GetRelativePath relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar) is {0}", - relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar))); + var currDir = Directory.GetCurrentDirectory(); + DebugEcho(String.Format("GetRelativePath currDir is {0}", currDir)); + + DirectoryInfo directory = new DirectoryInfo(Path.Combine(currDir, rootfolder)); + var folderpath = directory.FullName; + DebugEcho(String.Format("GetRelativePath folderpath is {0}", folderpath)); - var res = Uri.UnescapeDataString(relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar)); - DebugEcho(String.Format("GetRelativePath Uri.UnescapeDataString is {0}", res)); + var filepath = Path.Combine(currDir, filespec); + DebugEcho(String.Format("GetRelativePath combine filepath is {0}", filepath)); - // в Linux может возвращаться двойное имя пути, что неверно! - // Например, file:///tmp/smpk1cx3.y1n.tmp/РодительскийКаталог/ВложенныйФайл.txt/tmp/smpk1cx3.y1n.tmp/РодительскийКаталог/ВложенныйФайл.txt - var filesuffix = "file://"; - if (res.StartsWith(filesuffix)) + if (Directory.Exists(filespec)) { - DebugEcho(String.Format("GetRelativePath remove {1} from res is {0}", res, filesuffix)); - res = res.Substring(filesuffix.Length); - DebugEcho(String.Format("GetRelativePath remove duplicate path from res is {0}", res)); - res = res.Substring(filespec.Length); + DirectoryInfo dir = new DirectoryInfo(filepath); + filepath = dir.FullName; + DebugEcho(String.Format("GetRelativePath filepath (for dir) is {0}", filepath)); } - /* - var removestr = "file:\\\\"; - if (res.StartsWith(removestr)) - { - DebugEcho(String.Format("GetRelativePath res without {1} is {0}", res, removestr)); - res = res.Substring(removestr.Length); + else { + FileInfo file = new FileInfo(filepath); + filepath = file.FullName; + DebugEcho(String.Format("GetRelativePath filepath (for file) is {0}", filepath)); } - removestr = "file://"; - if (res.StartsWith(removestr)) + + if (!filepath.StartsWith(folderpath)) { - DebugEcho(String.Format("GetRelativePath res without {1} is {0}", res, removestr)); - res = res.Substring(removestr.Length); + DebugEcho("GetRelativePath filepath is absolute, not relative"); + return ""; } - */ - DebugEcho(String.Format("GetRelativePath res is {0}", res)); + + var res = filepath.Substring(folderpath.Length + 1); + if (res == "") + res = "."; + DebugEcho(String.Format("GetRelativePath res = filepath.Substring(folderpath.Length + 1) is {0}", res)); return res; } From 9a8a4628846ed92d4e01353d762799e0900b1743 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 15:49:26 +0300 Subject: [PATCH 059/286] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20#627?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 690 +++++++++--------- tests/zip.os | 62 -- 2 files changed, 325 insertions(+), 427 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 5c7579380..298ca590c 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -1,421 +1,381 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ -using Ionic.Zip; -using Ionic.Zlib; -using ScriptEngine.Machine; -using ScriptEngine.Machine.Contexts; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace ScriptEngine.HostedScript.Library.Zip -{ - /// - /// Объект записи ZIP-архивов. - /// - [ContextClass("ЗаписьZipФайла", "ZipFileWriter")] - public class ZipWriter : AutoContext, IDisposable - { - private ZipFile _zip; - private string _filename; - - public ZipWriter() - { - - } - - /// - /// Открыть архив для записи. - /// - /// Имя файла будущего архива - /// Пароль на архив - /// Комментарий к архиву - /// МетодСжатияZIP (Сжатие/Копирование) - /// УровеньСжатияZIP (Минимальный/Оптимальный/Максимальный) - /// МетодШифрованияZIP (в текущей реализации не поддерживается) - [ContextMethod("Открыть", "Open")] - public void Open( - string filename, - string password = null, - string comment = null, - SelfAwareEnumValue compressionMethod = null, - SelfAwareEnumValue compressionLevel = null, - SelfAwareEnumValue encryptionMethod = null) - { - _filename = filename; - _zip = new ZipFile(); - _zip.AlternateEncoding = Encoding.GetEncoding(866); // fuck non-russian encodings on non-ascii files - _zip.AlternateEncodingUsage = ZipOption.Always; - _zip.Password = password; - _zip.Comment = comment; - _zip.CompressionMethod = MakeZipCompressionMethod(compressionMethod); - _zip.CompressionLevel = MakeZipCompressionLevel(compressionLevel); - _zip.UseZip64WhenSaving = Zip64Option.AsNecessary; - // Zlib падает с NullReferenceException, если задать шифрование - //_zip.Encryption = MakeZipEncryption(encryptionMethod); - } - - /// - /// Записывает и закрывает файл архива. - /// - [ContextMethod("Записать", "Write")] - public void Write() - { - CheckIfOpened(); - - _zip.Save(_filename); - Dispose(true); - } - - /// - /// Добавление файла к архиву. - /// - /// Имя файла, помещаемого в архив, или маска. - /// РежимСохраненияПутейZIP (НеСохранятьПути/СохранятьОтносительныеПути/СохранятьПолныеПути) - /// РежимОбработкиПодкаталоговZIP (НеОбрабатывать/ОбрабатыватьРекурсивно) - [ContextMethod("Добавить", "Add")] - public void Add(string file, SelfAwareEnumValue storePathMode = null, SelfAwareEnumValue recurseSubdirectories = null) - { - CheckIfOpened(); - - var pathIsMasked = file.IndexOfAny(new[] { '*', '?' }) >= 0; - - var recursiveFlag = GetRecursiveFlag(recurseSubdirectories); - var searchOption = recursiveFlag ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; - - if(pathIsMasked) - { - AddFilesByMask(file, searchOption, storePathMode); - } - else if (Directory.Exists(file)) - { - AddDirectory(file, searchOption, storePathMode); - } - else if (File.Exists(file)) - { - AddSingleFile(file, storePathMode); - } - - } - - private void AddDirectory(string dir, SearchOption searchOption, SelfAwareEnumValue storePathMode) - { - string allFilesMask; - - if (System.Environment.OSVersion.Platform == PlatformID.Unix || System.Environment.OSVersion.Platform == PlatformID.MacOSX) - allFilesMask = "*"; - else - allFilesMask = "*.*"; - +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ +using Ionic.Zip; +using Ionic.Zlib; +using ScriptEngine.Machine; +using ScriptEngine.Machine.Contexts; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace ScriptEngine.HostedScript.Library.Zip +{ + /// + /// Объект записи ZIP-архивов. + /// + [ContextClass("ЗаписьZipФайла", "ZipFileWriter")] + public class ZipWriter : AutoContext, IDisposable + { + private ZipFile _zip; + private string _filename; + + public ZipWriter() + { + + } + + /// + /// Открыть архив для записи. + /// + /// Имя файла будущего архива + /// Пароль на архив + /// Комментарий к архиву + /// МетодСжатияZIP (Сжатие/Копирование) + /// УровеньСжатияZIP (Минимальный/Оптимальный/Максимальный) + /// МетодШифрованияZIP (в текущей реализации не поддерживается) + [ContextMethod("Открыть", "Open")] + public void Open( + string filename, + string password = null, + string comment = null, + SelfAwareEnumValue compressionMethod = null, + SelfAwareEnumValue compressionLevel = null, + SelfAwareEnumValue encryptionMethod = null) + { + _filename = filename; + _zip = new ZipFile(); + _zip.AlternateEncoding = Encoding.GetEncoding(866); // fuck non-russian encodings on non-ascii files + _zip.AlternateEncodingUsage = ZipOption.Always; + _zip.Password = password; + _zip.Comment = comment; + _zip.CompressionMethod = MakeZipCompressionMethod(compressionMethod); + _zip.CompressionLevel = MakeZipCompressionLevel(compressionLevel); + _zip.UseZip64WhenSaving = Zip64Option.AsNecessary; + // Zlib падает с NullReferenceException, если задать шифрование + //_zip.Encryption = MakeZipEncryption(encryptionMethod); + } + + /// + /// Записывает и закрывает файл архива. + /// + [ContextMethod("Записать", "Write")] + public void Write() + { + CheckIfOpened(); + + _zip.Save(_filename); + Dispose(true); + } + + /// + /// Добавление файла к архиву. + /// + /// Имя файла, помещаемого в архив, или маска. + /// РежимСохраненияПутейZIP (НеСохранятьПути/СохранятьОтносительныеПути/СохранятьПолныеПути) + /// РежимОбработкиПодкаталоговZIP (НеОбрабатывать/ОбрабатыватьРекурсивно) + [ContextMethod("Добавить", "Add")] + public void Add(string file, SelfAwareEnumValue storePathMode = null, SelfAwareEnumValue recurseSubdirectories = null) + { + CheckIfOpened(); + + var pathIsMasked = file.IndexOfAny(new[] { '*', '?' }) >= 0; + + var recursiveFlag = GetRecursiveFlag(recurseSubdirectories); + var searchOption = recursiveFlag ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + if(pathIsMasked) + { + AddFilesByMask(file, searchOption, storePathMode); + } + else if (Directory.Exists(file)) + { + AddDirectory(file, searchOption, storePathMode); + } + else if (File.Exists(file)) + { + AddSingleFile(file, storePathMode); + } + + } + + private void AddDirectory(string dir, SearchOption searchOption, SelfAwareEnumValue storePathMode) + { + string allFilesMask; + + if (System.Environment.OSVersion.Platform == PlatformID.Unix || System.Environment.OSVersion.Platform == PlatformID.MacOSX) + allFilesMask = "*"; + else + allFilesMask = "*.*"; + var filesToAdd = Directory.EnumerateFiles(dir, allFilesMask, searchOption); - AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(dir), storePathMode); + AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(dir), storePathMode); } private string GetPathForParentFolder(string dir) { - DebugEcho(String.Format("GetPathForParentFolder dirpath is {0}", dir)); var rootPath = GetRelativePath(dir, Directory.GetCurrentDirectory()); - DebugEcho(String.Format("GetPathForParentFolder: rootPath is {0}", rootPath)); if (rootPath == "") - { rootPath = Path.Combine(Directory.GetCurrentDirectory(), dir, ".."); - DebugEcho(String.Format("GetPathForParentFolder: final rootPath is {0}", rootPath)); - } else - { rootPath = Directory.GetCurrentDirectory(); - DebugEcho(String.Format("GetPathForParentFolder: final rootPath is {0}", rootPath)); - } - return rootPath; - } - + return rootPath; + } + private bool IsNotRelativePath(string filepath, string relativePath) { - DebugEcho(String.Format("IsNotRelativePath: filepath is {0}, relativePath is {1}", filepath, relativePath)); if (relativePath == "") return true; return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); - } - - private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) - { - var storeModeEnum = GlobalsManager.GetEnum(); - if (storePathMode == null) - storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; - - var currDir = Directory.GetCurrentDirectory(); - + } + + private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) + { + var storeModeEnum = GlobalsManager.GetEnum(); + if (storePathMode == null) + storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; + + var currDir = Directory.GetCurrentDirectory(); + string pathInArchive; - if (storePathMode == storeModeEnum.StoreFullPath) - pathInArchive = null; + if (storePathMode == storeModeEnum.StoreFullPath) + pathInArchive = null; else if (storePathMode == storeModeEnum.StoreRelativePath) { - DebugEcho(String.Format("AddSingleFile: file is {0}", file)); var relativePath = GetRelativePath(file, currDir); - DebugEcho(String.Format("AddSingleFile: relativePath is {0}", relativePath)); if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) - { - DebugEcho("Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)"); pathInArchive = "."; - } else - { - DebugEcho("NOT Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)"); pathInArchive = Path.GetDirectoryName(relativePath); + } + else + pathInArchive = ""; + + _zip.AddFile(file, pathInArchive); + } + + private void AddFilesByMask(string file, SearchOption searchOption, SelfAwareEnumValue storePathMode) + { + // надо разделить на каталог и маску + var pathEnd = file.LastIndexOfAny(new[] { '\\', '/' }); + string path; + string mask; + IEnumerable filesToAdd; + + if (pathEnd > 1) + { + path = file.Substring(0, pathEnd); + var maskLen = file.Length - pathEnd - 1; + if (maskLen > 0) + mask = file.Substring(pathEnd + 1, maskLen); + else + { + // маска была не в конце пути + // 1С такое откидывает + return; } - } - else - pathInArchive = ""; - - DebugEcho(String.Format("AddSingleFile: pathInArchive is {0}", pathInArchive)); - _zip.AddFile(file, pathInArchive); - } - - private void AddFilesByMask(string file, SearchOption searchOption, SelfAwareEnumValue storePathMode) - { - // надо разделить на каталог и маску - var pathEnd = file.LastIndexOfAny(new[] { '\\', '/' }); - string path; - string mask; - IEnumerable filesToAdd; - - if (pathEnd > 1) - { - path = file.Substring(0, pathEnd); - var maskLen = file.Length - pathEnd - 1; - if (maskLen > 0) - mask = file.Substring(pathEnd + 1, maskLen); - else - { - // маска была не в конце пути - // 1С такое откидывает - return; - } - - // несуществующие пути или пути к файлам, вместо папок 1С откидывает - if (!Directory.Exists(path)) - return; - } - else if (pathEnd == 0) - { - path = ""; - mask = file.Substring(1); - } - else - { - path = ""; - mask = file; - } - - filesToAdd = Directory.EnumerateFiles(path, mask, searchOption); - var relativePath = Path.GetFullPath(path); - AddEnumeratedFiles(filesToAdd, relativePath, storePathMode); - - } - - private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativePath, SelfAwareEnumValue storePathMode) - { - var storeModeEnum = GlobalsManager.GetEnum(); - if (storePathMode == null) - storePathMode = (SelfAwareEnumValue)storeModeEnum.DontStorePath; - - foreach (var item in filesToAdd) - { - string pathInArchive; + + // несуществующие пути или пути к файлам, вместо папок 1С откидывает + if (!Directory.Exists(path)) + return; + } + else if (pathEnd == 0) + { + path = ""; + mask = file.Substring(1); + } + else + { + path = ""; + mask = file; + } + + filesToAdd = Directory.EnumerateFiles(path, mask, searchOption); + var relativePath = Path.GetFullPath(path); + AddEnumeratedFiles(filesToAdd, relativePath, storePathMode); + + } + + private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativePath, SelfAwareEnumValue storePathMode) + { + var storeModeEnum = GlobalsManager.GetEnum(); + if (storePathMode == null) + storePathMode = (SelfAwareEnumValue)storeModeEnum.DontStorePath; + + foreach (var item in filesToAdd) + { + string pathInArchive; if (storePathMode == storeModeEnum.StoreRelativePath) - { - DebugEcho(String.Format("AddEnumeratedFiles: relativePath is {0}", relativePath)); - DebugEcho(String.Format("AddEnumeratedFiles: item is {0}", item)); - DebugEcho(String.Format("AddEnumeratedFiles: GetRelativePath(item, relativePath) is {0}", GetRelativePath(item, relativePath))); - pathInArchive = Path.GetDirectoryName(GetRelativePath(item, relativePath)); - } - else if (storePathMode == storeModeEnum.StoreFullPath) - pathInArchive = null; - else - pathInArchive = ""; - - DebugEcho(String.Format("AddEnumeratedFiles: pathInArchive is {0}", pathInArchive)); - _zip.AddFile(item, pathInArchive); - } - } - - // возвращает относительный путь или "", если путь не является относительным + pathInArchive = Path.GetDirectoryName(GetRelativePath(item, relativePath)); + else if (storePathMode == storeModeEnum.StoreFullPath) + pathInArchive = null; + else + pathInArchive = ""; + + _zip.AddFile(item, pathInArchive); + } + } + + // возвращает относительный путь или "", если путь не является относительным private string GetRelativePath(string filespec, string rootfolder) { - DebugEcho(String.Format("GetRelativePath: filespec is {0}, folder is {1}", filespec, rootfolder)); - var currDir = Directory.GetCurrentDirectory(); - DebugEcho(String.Format("GetRelativePath currDir is {0}", currDir)); DirectoryInfo directory = new DirectoryInfo(Path.Combine(currDir, rootfolder)); var folderpath = directory.FullName; - DebugEcho(String.Format("GetRelativePath folderpath is {0}", folderpath)); var filepath = Path.Combine(currDir, filespec); - DebugEcho(String.Format("GetRelativePath combine filepath is {0}", filepath)); if (Directory.Exists(filespec)) { DirectoryInfo dir = new DirectoryInfo(filepath); filepath = dir.FullName; - DebugEcho(String.Format("GetRelativePath filepath (for dir) is {0}", filepath)); } else { FileInfo file = new FileInfo(filepath); filepath = file.FullName; - DebugEcho(String.Format("GetRelativePath filepath (for file) is {0}", filepath)); } if (!filepath.StartsWith(folderpath)) - { - DebugEcho("GetRelativePath filepath is absolute, not relative"); return ""; - } var res = filepath.Substring(folderpath.Length + 1); if (res == "") res = "."; - DebugEcho(String.Format("GetRelativePath res = filepath.Substring(folderpath.Length + 1) is {0}", res)); return res; } - private void DebugEcho(string str) + private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) + { + if (recurseSubdirectories == null) + return false; + else + return recurseSubdirectories == ((ZIPSubDirProcessingModeEnum)recurseSubdirectories.Owner).Recurse; + } + + private CompressionMethod MakeZipCompressionMethod(SelfAwareEnumValue compressionMethod) + { + if (compressionMethod == null) + return CompressionMethod.Deflate; + + var owner = (ZipCompressionMethodEnum)compressionMethod.Owner; + if (compressionMethod == owner.Deflate) + return CompressionMethod.Deflate; + if (compressionMethod == owner.Copy) + return CompressionMethod.None; + + throw RuntimeException.InvalidArgumentValue(); + + } + + private CompressionLevel MakeZipCompressionLevel(SelfAwareEnumValue compressionLevel) + { + if (compressionLevel == null) + return CompressionLevel.Default; + + var owner = (ZipCompressionLevelEnum)compressionLevel.Owner; + if (compressionLevel == owner.Minimal) + return CompressionLevel.BestSpeed; + if (compressionLevel == owner.Optimal) + return CompressionLevel.Default; + if (compressionLevel == owner.Maximal) + return CompressionLevel.BestCompression; + + throw RuntimeException.InvalidArgumentValue(); + } + + private EncryptionAlgorithm MakeZipEncryption(SelfAwareEnumValue encryptionMethod) { - Console.WriteLine(String.Format("DEBUG ZIP: {0}", str)); + if (encryptionMethod == null) + return EncryptionAlgorithm.PkzipWeak; + + var enumOwner = (ZipEncryptionMethodEnum)encryptionMethod.Owner; + + if(encryptionMethod == enumOwner.Zip20) + return EncryptionAlgorithm.PkzipWeak; + if (encryptionMethod == enumOwner.Aes128) + return EncryptionAlgorithm.WinZipAes128; + if (encryptionMethod == enumOwner.Aes256) + return EncryptionAlgorithm.WinZipAes256; + + throw RuntimeException.InvalidArgumentValue(); + + } + + private void CheckIfOpened() + { + if (_zip == null) + throw new RuntimeException("Архив не открыт"); + } + + [ScriptConstructor(Name = "Формирование неинициализированного объекта")] + public static ZipWriter Construct() + { + return new ZipWriter(); + } + + [ScriptConstructor(Name = "На основании имени файла")] + public static ZipWriter ConstructByFileOptions(IValue filename, IValue password = null, IValue comment = null, IValue compressionMethod = null, IValue compressionLevel = null, IValue encryptionMethod = null) + { + var zip = new ZipWriter(); + zip.Open(filename.AsString(), + ConvertParam(password), + ConvertParam(comment), + ConvertParam>(compressionMethod), + ConvertParam>(compressionLevel), + ConvertParam>(encryptionMethod) + ); + return zip; + } + + private static T ConvertParam(IValue paramSource) + { + if (paramSource == null) + return default(T); + + if (paramSource.DataType == DataType.NotAValidValue) + return default(T); + + var raw = paramSource.GetRawValue(); + if (typeof(EnumerationValue).IsAssignableFrom(typeof(T))) + { + try + { + return (T)raw; + } + catch (InvalidCastException) + { + throw RuntimeException.InvalidArgumentType(); + } + } + else + return ContextValuesMarshaller.ConvertParam(raw); + } + + #region IDisposable Members + + public void Dispose() + { + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_zip != null) + { + _zip.Dispose(); + _zip = null; + } + } } - private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) - { - if (recurseSubdirectories == null) - return false; - else - return recurseSubdirectories == ((ZIPSubDirProcessingModeEnum)recurseSubdirectories.Owner).Recurse; - } - - private CompressionMethod MakeZipCompressionMethod(SelfAwareEnumValue compressionMethod) - { - if (compressionMethod == null) - return CompressionMethod.Deflate; - - var owner = (ZipCompressionMethodEnum)compressionMethod.Owner; - if (compressionMethod == owner.Deflate) - return CompressionMethod.Deflate; - if (compressionMethod == owner.Copy) - return CompressionMethod.None; - - throw RuntimeException.InvalidArgumentValue(); - - } - - private CompressionLevel MakeZipCompressionLevel(SelfAwareEnumValue compressionLevel) - { - if (compressionLevel == null) - return CompressionLevel.Default; - - var owner = (ZipCompressionLevelEnum)compressionLevel.Owner; - if (compressionLevel == owner.Minimal) - return CompressionLevel.BestSpeed; - if (compressionLevel == owner.Optimal) - return CompressionLevel.Default; - if (compressionLevel == owner.Maximal) - return CompressionLevel.BestCompression; - - throw RuntimeException.InvalidArgumentValue(); - } - - private EncryptionAlgorithm MakeZipEncryption(SelfAwareEnumValue encryptionMethod) - { - if (encryptionMethod == null) - return EncryptionAlgorithm.PkzipWeak; - - var enumOwner = (ZipEncryptionMethodEnum)encryptionMethod.Owner; - - if(encryptionMethod == enumOwner.Zip20) - return EncryptionAlgorithm.PkzipWeak; - if (encryptionMethod == enumOwner.Aes128) - return EncryptionAlgorithm.WinZipAes128; - if (encryptionMethod == enumOwner.Aes256) - return EncryptionAlgorithm.WinZipAes256; - - throw RuntimeException.InvalidArgumentValue(); - - } - - private void CheckIfOpened() - { - if (_zip == null) - throw new RuntimeException("Архив не открыт"); - } - - [ScriptConstructor(Name = "Формирование неинициализированного объекта")] - public static ZipWriter Construct() - { - return new ZipWriter(); - } - - [ScriptConstructor(Name = "На основании имени файла")] - public static ZipWriter ConstructByFileOptions(IValue filename, IValue password = null, IValue comment = null, IValue compressionMethod = null, IValue compressionLevel = null, IValue encryptionMethod = null) - { - var zip = new ZipWriter(); - zip.Open(filename.AsString(), - ConvertParam(password), - ConvertParam(comment), - ConvertParam>(compressionMethod), - ConvertParam>(compressionLevel), - ConvertParam>(encryptionMethod) - ); - return zip; - } - - private static T ConvertParam(IValue paramSource) - { - if (paramSource == null) - return default(T); - - if (paramSource.DataType == DataType.NotAValidValue) - return default(T); - - var raw = paramSource.GetRawValue(); - if (typeof(EnumerationValue).IsAssignableFrom(typeof(T))) - { - try - { - return (T)raw; - } - catch (InvalidCastException) - { - throw RuntimeException.InvalidArgumentType(); - } - } - else - return ContextValuesMarshaller.ConvertParam(raw); - } - - #region IDisposable Members - - public void Dispose() - { - Dispose(true); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - if (_zip != null) - { - _zip.Dispose(); - _zip = null; - } - } - } - - #endregion - } -} + #endregion + } +} diff --git a/tests/zip.os b/tests/zip.os index 31d3b5f3c..a31d8dbc4 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -297,9 +297,6 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивКаталогСОтносительнымиПутями - |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Истина); КонецПроцедуры @@ -308,16 +305,10 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменем - |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Истина, Ложь); КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменем - |"); ДобавитьВАрхивСОтносительнымиПутями_КаталогИлиФайл(Ложь, Ложь); КонецПроцедуры @@ -332,11 +323,6 @@ ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); - Вывести("ОтносительныйПутьКаталога %1", ОтносительныйПутьКаталога); - Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла ); - Вывести("ПолныйПутьКаталога %1", ПолныйПутьКаталога); - Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); - // Вывести(" %1", ); Если ПередатьКаталог Тогда Если ПередатьОтносительныйПуть Тогда @@ -351,7 +337,6 @@ Путь = ПолныйПутьФайла; КонецЕсли; КонецЕсли; - Вывести("Путь %1", Путь); ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); @@ -364,7 +349,6 @@ Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); - Вывести("Распаковали содержимое архива в каталог %1", Распаковка); НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьОтсутствиеФайла(НеверныйПутьФайлаВКорне, "Файл не должен был существовать в корне распаковки, а он есть."); @@ -378,9 +362,6 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивВложенныйКаталогСОтносительнымиПутями - |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; @@ -417,9 +398,6 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивНесколькоВложенныхКаталоговСОтносительнымиПутями - |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_РОДИТЕЛЬСКОГО_КАТАЛОГА = "РодительскийКаталог"; @@ -478,16 +456,10 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиКаталогСПолнымИменемНеИзТекущегоКаталога - |"); ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Истина); КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиВложенныйФайлСПолнымИменемНеИзТекущегоКаталога - |"); ДобавитьВАрхивСОтносительнымиПутямиФайлИлиКаталогСПолнымИменемНеИзТекущегоКаталога(Ложь); КонецПроцедуры @@ -502,20 +474,14 @@ ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьКаталога = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьКаталога); ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); - Вывести("ОтносительныйПутьКаталога %1", ОтносительныйПутьКаталога); - Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла ); - Вывести("ПолныйПутьКаталога %1", ПолныйПутьКаталога); - Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); УстановитьТекущийКаталог(ТекущийКаталогСохр); - Вывести("Установили текущий каталог в %1", ТекущийКаталогСохр); Если ПередатьКаталог Тогда Путь = ПолныйПутьКаталога; Иначе Путь = ПолныйПутьФайла; КонецЕсли; - Вывести("Путь %1", Путь); ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); @@ -532,7 +498,6 @@ КонецЕсли; Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); - Вывести("Распаковали содержимое архива в каталог %1", Распаковка); Если ПередатьКаталог Тогда НеверныйПутьФайлаВКорне = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); @@ -551,9 +516,6 @@ КонецПроцедуры Процедура ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога() Экспорт - Вывести(" - |ТестДолжен_ДобавитьВАрхивСОтносительнымиПутямиФайлСПолнымИменемНеИзТекущегоКаталога - |"); УстановитьВременныйКаталогКакТекущий(); ИМЯ_ФАЙЛА = "ВложенныйФайл.txt"; @@ -561,11 +523,7 @@ ОписаниеКаталога = ПодготовитьФайлВоВложенномКаталоге("", ИМЯ_ФАЙЛА); ОтносительныйПутьФайла = ОписаниеКаталога.ПутьФайла; ПолныйПутьФайла = ОбъединитьПути(ТекущийКаталог(), ОписаниеКаталога.ПутьФайла); - Вывести("ОтносительныйПутьФайла %1", ОтносительныйПутьФайла); - Вывести("ПолныйПутьФайла %1", ПолныйПутьФайла); - // Вывести("Путь %1", Путь); УстановитьТекущийКаталог(ТекущийКаталогСохр); - Вывести("Установили текущий каталог в %1", ТекущийКаталогСохр); ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ПолныйПутьФайла); @@ -577,7 +535,6 @@ юТест.ПроверитьРавенство(ИМЯ_ФАЙЛА, Элемент.ПолноеИмя, "Проверка элемента zip: " + Элемент.ПолноеИмя); Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); - Вывести("Распаковали содержимое архива в каталог %1", Распаковка); ИскомыйПутьФайла = ОбъединитьПути(Распаковка, ИМЯ_ФАЙЛА); ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать в корне распаковки, а его нет."); @@ -594,7 +551,6 @@ ПутьКаталога = ИмяКаталога; Если Не ПустаяСтрока(ИмяКаталога) Тогда СоздатьКаталог(ПутьКаталога); - Вывести("ПодготовитьФайлВоВложенномКаталоге: создан каталог %1", ПутьКаталога); ПутьФайла = ОбъединитьПути(ПутьКаталога, ИмяФайла); Иначе ПутьФайла = ИмяФайла; @@ -614,7 +570,6 @@ ЗТ = Новый ЗаписьТекста(ПутьФайла); ЗТ.Записать("Привет"); ЗТ.Закрыть(); - Вывести("СоздатьФайл: Создан файл %1", ПутьФайла); Возврат ПутьФайла; КонецФункции @@ -623,11 +578,9 @@ Архив = Новый ЗаписьZIPФайла(ИмяАрхива); Для каждого ОтносительныйПуть Из МассивПутей Цикл - Вывести("Добавляю в архив относительный путь %1", ОтносительныйПуть); Архив.Добавить(ОтносительныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); КонецЦикла; - Вывести("Записываю архив %1", ИмяАрхива); Архив.Записать(); Возврат ИмяАрхива; КонецФункции @@ -640,10 +593,8 @@ Функция ИзвлечьВсеИзАрхиваВоВременныйКаталог(Знач ИмяАрхива) Архив = Новый ЧтениеZipФайла(ИмяАрхива); - Вывести("Перед распаковкой архива %1", ИмяАрхива); Распаковка = юТест.ИмяВременногоФайла(); СоздатьКаталог(Распаковка); - Вывести("Создали каталог для распаковки %1", Распаковка); Архив.ИзвлечьВсе(Распаковка); Архив.Закрыть(); @@ -662,21 +613,8 @@ КонецПроцедуры Процедура ТрассироватьВсеЭлементыАрхива(Знач Чтение) - Вывести("ЧтениеZipФайла.Элементы.Количество() %1", Чтение.Элементы.Количество()); Для Счетчик = 0 По Чтение.Элементы.Количество()-1 Цикл Элемент = Чтение.Элементы[Счетчик]; - Вывести("Элемент архива %1 - Элемент.ПолноеИмя %2", Счетчик, Элемент.ПолноеИмя); КонецЦикла; КонецПроцедуры - -Процедура Вывести(Знач Сообщение, - Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, - Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, - Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) - - Сообщение = СтрШаблон(Сообщение, Параметр1, - Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); - - Сообщить("ОТЛАДКА ЗИП: " + Сообщение); -КонецПроцедуры \ No newline at end of file From 0c4f1c3a5b7f37b3ac92b1d04ebbfcf40a955adb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 16:03:05 +0300 Subject: [PATCH 060/286] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20=D0=BD?= =?UTF-8?q?=D0=B0=20CRLF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Zip/ZipWriter.cs | 762 +++++++++--------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 298ca590c..55c2009c1 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -1,381 +1,381 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ -using Ionic.Zip; -using Ionic.Zlib; -using ScriptEngine.Machine; -using ScriptEngine.Machine.Contexts; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace ScriptEngine.HostedScript.Library.Zip -{ - /// - /// Объект записи ZIP-архивов. - /// - [ContextClass("ЗаписьZipФайла", "ZipFileWriter")] - public class ZipWriter : AutoContext, IDisposable - { - private ZipFile _zip; - private string _filename; - - public ZipWriter() - { - - } - - /// - /// Открыть архив для записи. - /// - /// Имя файла будущего архива - /// Пароль на архив - /// Комментарий к архиву - /// МетодСжатияZIP (Сжатие/Копирование) - /// УровеньСжатияZIP (Минимальный/Оптимальный/Максимальный) - /// МетодШифрованияZIP (в текущей реализации не поддерживается) - [ContextMethod("Открыть", "Open")] - public void Open( - string filename, - string password = null, - string comment = null, - SelfAwareEnumValue compressionMethod = null, - SelfAwareEnumValue compressionLevel = null, - SelfAwareEnumValue encryptionMethod = null) - { - _filename = filename; - _zip = new ZipFile(); - _zip.AlternateEncoding = Encoding.GetEncoding(866); // fuck non-russian encodings on non-ascii files - _zip.AlternateEncodingUsage = ZipOption.Always; - _zip.Password = password; - _zip.Comment = comment; - _zip.CompressionMethod = MakeZipCompressionMethod(compressionMethod); - _zip.CompressionLevel = MakeZipCompressionLevel(compressionLevel); - _zip.UseZip64WhenSaving = Zip64Option.AsNecessary; - // Zlib падает с NullReferenceException, если задать шифрование - //_zip.Encryption = MakeZipEncryption(encryptionMethod); - } - - /// - /// Записывает и закрывает файл архива. - /// - [ContextMethod("Записать", "Write")] - public void Write() - { - CheckIfOpened(); - - _zip.Save(_filename); - Dispose(true); - } - - /// - /// Добавление файла к архиву. - /// - /// Имя файла, помещаемого в архив, или маска. - /// РежимСохраненияПутейZIP (НеСохранятьПути/СохранятьОтносительныеПути/СохранятьПолныеПути) - /// РежимОбработкиПодкаталоговZIP (НеОбрабатывать/ОбрабатыватьРекурсивно) - [ContextMethod("Добавить", "Add")] - public void Add(string file, SelfAwareEnumValue storePathMode = null, SelfAwareEnumValue recurseSubdirectories = null) - { - CheckIfOpened(); - - var pathIsMasked = file.IndexOfAny(new[] { '*', '?' }) >= 0; - - var recursiveFlag = GetRecursiveFlag(recurseSubdirectories); - var searchOption = recursiveFlag ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; - - if(pathIsMasked) - { - AddFilesByMask(file, searchOption, storePathMode); - } - else if (Directory.Exists(file)) - { - AddDirectory(file, searchOption, storePathMode); - } - else if (File.Exists(file)) - { - AddSingleFile(file, storePathMode); - } - - } - - private void AddDirectory(string dir, SearchOption searchOption, SelfAwareEnumValue storePathMode) - { - string allFilesMask; - - if (System.Environment.OSVersion.Platform == PlatformID.Unix || System.Environment.OSVersion.Platform == PlatformID.MacOSX) - allFilesMask = "*"; - else - allFilesMask = "*.*"; - - var filesToAdd = Directory.EnumerateFiles(dir, allFilesMask, searchOption); - AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(dir), storePathMode); - } - - private string GetPathForParentFolder(string dir) - { - var rootPath = GetRelativePath(dir, Directory.GetCurrentDirectory()); - if (rootPath == "") - rootPath = Path.Combine(Directory.GetCurrentDirectory(), dir, ".."); - else - rootPath = Directory.GetCurrentDirectory(); - return rootPath; - } - - private bool IsNotRelativePath(string filepath, string relativePath) - { - if (relativePath == "") - return true; - return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); - } - - private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) - { - var storeModeEnum = GlobalsManager.GetEnum(); - if (storePathMode == null) - storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; - - var currDir = Directory.GetCurrentDirectory(); - - string pathInArchive; - if (storePathMode == storeModeEnum.StoreFullPath) - pathInArchive = null; - else if (storePathMode == storeModeEnum.StoreRelativePath) - { - var relativePath = GetRelativePath(file, currDir); - if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) - pathInArchive = "."; - else - pathInArchive = Path.GetDirectoryName(relativePath); - } - else - pathInArchive = ""; - - _zip.AddFile(file, pathInArchive); - } - - private void AddFilesByMask(string file, SearchOption searchOption, SelfAwareEnumValue storePathMode) - { - // надо разделить на каталог и маску - var pathEnd = file.LastIndexOfAny(new[] { '\\', '/' }); - string path; - string mask; - IEnumerable filesToAdd; - - if (pathEnd > 1) - { - path = file.Substring(0, pathEnd); - var maskLen = file.Length - pathEnd - 1; - if (maskLen > 0) - mask = file.Substring(pathEnd + 1, maskLen); - else - { - // маска была не в конце пути - // 1С такое откидывает - return; - } - - // несуществующие пути или пути к файлам, вместо папок 1С откидывает - if (!Directory.Exists(path)) - return; - } - else if (pathEnd == 0) - { - path = ""; - mask = file.Substring(1); - } - else - { - path = ""; - mask = file; - } - - filesToAdd = Directory.EnumerateFiles(path, mask, searchOption); - var relativePath = Path.GetFullPath(path); - AddEnumeratedFiles(filesToAdd, relativePath, storePathMode); - - } - - private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativePath, SelfAwareEnumValue storePathMode) - { - var storeModeEnum = GlobalsManager.GetEnum(); - if (storePathMode == null) - storePathMode = (SelfAwareEnumValue)storeModeEnum.DontStorePath; - - foreach (var item in filesToAdd) - { - string pathInArchive; - if (storePathMode == storeModeEnum.StoreRelativePath) - pathInArchive = Path.GetDirectoryName(GetRelativePath(item, relativePath)); - else if (storePathMode == storeModeEnum.StoreFullPath) - pathInArchive = null; - else - pathInArchive = ""; - - _zip.AddFile(item, pathInArchive); - } - } - - // возвращает относительный путь или "", если путь не является относительным - private string GetRelativePath(string filespec, string rootfolder) - { - var currDir = Directory.GetCurrentDirectory(); - - DirectoryInfo directory = new DirectoryInfo(Path.Combine(currDir, rootfolder)); - var folderpath = directory.FullName; - - var filepath = Path.Combine(currDir, filespec); - - if (Directory.Exists(filespec)) - { - DirectoryInfo dir = new DirectoryInfo(filepath); - filepath = dir.FullName; - } - else { - FileInfo file = new FileInfo(filepath); - filepath = file.FullName; - } - - if (!filepath.StartsWith(folderpath)) - return ""; - - var res = filepath.Substring(folderpath.Length + 1); - if (res == "") - res = "."; - return res; - } - - private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) - { - if (recurseSubdirectories == null) - return false; - else - return recurseSubdirectories == ((ZIPSubDirProcessingModeEnum)recurseSubdirectories.Owner).Recurse; - } - - private CompressionMethod MakeZipCompressionMethod(SelfAwareEnumValue compressionMethod) - { - if (compressionMethod == null) - return CompressionMethod.Deflate; - - var owner = (ZipCompressionMethodEnum)compressionMethod.Owner; - if (compressionMethod == owner.Deflate) - return CompressionMethod.Deflate; - if (compressionMethod == owner.Copy) - return CompressionMethod.None; - - throw RuntimeException.InvalidArgumentValue(); - - } - - private CompressionLevel MakeZipCompressionLevel(SelfAwareEnumValue compressionLevel) - { - if (compressionLevel == null) - return CompressionLevel.Default; - - var owner = (ZipCompressionLevelEnum)compressionLevel.Owner; - if (compressionLevel == owner.Minimal) - return CompressionLevel.BestSpeed; - if (compressionLevel == owner.Optimal) - return CompressionLevel.Default; - if (compressionLevel == owner.Maximal) - return CompressionLevel.BestCompression; - - throw RuntimeException.InvalidArgumentValue(); - } - - private EncryptionAlgorithm MakeZipEncryption(SelfAwareEnumValue encryptionMethod) - { - if (encryptionMethod == null) - return EncryptionAlgorithm.PkzipWeak; - - var enumOwner = (ZipEncryptionMethodEnum)encryptionMethod.Owner; - - if(encryptionMethod == enumOwner.Zip20) - return EncryptionAlgorithm.PkzipWeak; - if (encryptionMethod == enumOwner.Aes128) - return EncryptionAlgorithm.WinZipAes128; - if (encryptionMethod == enumOwner.Aes256) - return EncryptionAlgorithm.WinZipAes256; - - throw RuntimeException.InvalidArgumentValue(); - - } - - private void CheckIfOpened() - { - if (_zip == null) - throw new RuntimeException("Архив не открыт"); - } - - [ScriptConstructor(Name = "Формирование неинициализированного объекта")] - public static ZipWriter Construct() - { - return new ZipWriter(); - } - - [ScriptConstructor(Name = "На основании имени файла")] - public static ZipWriter ConstructByFileOptions(IValue filename, IValue password = null, IValue comment = null, IValue compressionMethod = null, IValue compressionLevel = null, IValue encryptionMethod = null) - { - var zip = new ZipWriter(); - zip.Open(filename.AsString(), - ConvertParam(password), - ConvertParam(comment), - ConvertParam>(compressionMethod), - ConvertParam>(compressionLevel), - ConvertParam>(encryptionMethod) - ); - return zip; - } - - private static T ConvertParam(IValue paramSource) - { - if (paramSource == null) - return default(T); - - if (paramSource.DataType == DataType.NotAValidValue) - return default(T); - - var raw = paramSource.GetRawValue(); - if (typeof(EnumerationValue).IsAssignableFrom(typeof(T))) - { - try - { - return (T)raw; - } - catch (InvalidCastException) - { - throw RuntimeException.InvalidArgumentType(); - } - } - else - return ContextValuesMarshaller.ConvertParam(raw); - } - - #region IDisposable Members - - public void Dispose() - { - Dispose(true); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - if (_zip != null) - { - _zip.Dispose(); - _zip = null; - } - } - } - - #endregion - } -} +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ +using Ionic.Zip; +using Ionic.Zlib; +using ScriptEngine.Machine; +using ScriptEngine.Machine.Contexts; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace ScriptEngine.HostedScript.Library.Zip +{ + /// + /// Объект записи ZIP-архивов. + /// + [ContextClass("ЗаписьZipФайла", "ZipFileWriter")] + public class ZipWriter : AutoContext, IDisposable + { + private ZipFile _zip; + private string _filename; + + public ZipWriter() + { + + } + + /// + /// Открыть архив для записи. + /// + /// Имя файла будущего архива + /// Пароль на архив + /// Комментарий к архиву + /// МетодСжатияZIP (Сжатие/Копирование) + /// УровеньСжатияZIP (Минимальный/Оптимальный/Максимальный) + /// МетодШифрованияZIP (в текущей реализации не поддерживается) + [ContextMethod("Открыть", "Open")] + public void Open( + string filename, + string password = null, + string comment = null, + SelfAwareEnumValue compressionMethod = null, + SelfAwareEnumValue compressionLevel = null, + SelfAwareEnumValue encryptionMethod = null) + { + _filename = filename; + _zip = new ZipFile(); + _zip.AlternateEncoding = Encoding.GetEncoding(866); // fuck non-russian encodings on non-ascii files + _zip.AlternateEncodingUsage = ZipOption.Always; + _zip.Password = password; + _zip.Comment = comment; + _zip.CompressionMethod = MakeZipCompressionMethod(compressionMethod); + _zip.CompressionLevel = MakeZipCompressionLevel(compressionLevel); + _zip.UseZip64WhenSaving = Zip64Option.AsNecessary; + // Zlib падает с NullReferenceException, если задать шифрование + //_zip.Encryption = MakeZipEncryption(encryptionMethod); + } + + /// + /// Записывает и закрывает файл архива. + /// + [ContextMethod("Записать", "Write")] + public void Write() + { + CheckIfOpened(); + + _zip.Save(_filename); + Dispose(true); + } + + /// + /// Добавление файла к архиву. + /// + /// Имя файла, помещаемого в архив, или маска. + /// РежимСохраненияПутейZIP (НеСохранятьПути/СохранятьОтносительныеПути/СохранятьПолныеПути) + /// РежимОбработкиПодкаталоговZIP (НеОбрабатывать/ОбрабатыватьРекурсивно) + [ContextMethod("Добавить", "Add")] + public void Add(string file, SelfAwareEnumValue storePathMode = null, SelfAwareEnumValue recurseSubdirectories = null) + { + CheckIfOpened(); + + var pathIsMasked = file.IndexOfAny(new[] { '*', '?' }) >= 0; + + var recursiveFlag = GetRecursiveFlag(recurseSubdirectories); + var searchOption = recursiveFlag ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + if(pathIsMasked) + { + AddFilesByMask(file, searchOption, storePathMode); + } + else if (Directory.Exists(file)) + { + AddDirectory(file, searchOption, storePathMode); + } + else if (File.Exists(file)) + { + AddSingleFile(file, storePathMode); + } + + } + + private void AddDirectory(string dir, SearchOption searchOption, SelfAwareEnumValue storePathMode) + { + string allFilesMask; + + if (System.Environment.OSVersion.Platform == PlatformID.Unix || System.Environment.OSVersion.Platform == PlatformID.MacOSX) + allFilesMask = "*"; + else + allFilesMask = "*.*"; + + var filesToAdd = Directory.EnumerateFiles(dir, allFilesMask, searchOption); + AddEnumeratedFiles(filesToAdd, GetPathForParentFolder(dir), storePathMode); + } + + private string GetPathForParentFolder(string dir) + { + var rootPath = GetRelativePath(dir, Directory.GetCurrentDirectory()); + if (rootPath == "") + rootPath = Path.Combine(Directory.GetCurrentDirectory(), dir, ".."); + else + rootPath = Directory.GetCurrentDirectory(); + return rootPath; + } + + private bool IsNotRelativePath(string filepath, string relativePath) + { + if (relativePath == "") + return true; + return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); + } + + private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) + { + var storeModeEnum = GlobalsManager.GetEnum(); + if (storePathMode == null) + storePathMode = (SelfAwareEnumValue)storeModeEnum.StoreRelativePath; + + var currDir = Directory.GetCurrentDirectory(); + + string pathInArchive; + if (storePathMode == storeModeEnum.StoreFullPath) + pathInArchive = null; + else if (storePathMode == storeModeEnum.StoreRelativePath) + { + var relativePath = GetRelativePath(file, currDir); + if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) + pathInArchive = "."; + else + pathInArchive = Path.GetDirectoryName(relativePath); + } + else + pathInArchive = ""; + + _zip.AddFile(file, pathInArchive); + } + + private void AddFilesByMask(string file, SearchOption searchOption, SelfAwareEnumValue storePathMode) + { + // надо разделить на каталог и маску + var pathEnd = file.LastIndexOfAny(new[] { '\\', '/' }); + string path; + string mask; + IEnumerable filesToAdd; + + if (pathEnd > 1) + { + path = file.Substring(0, pathEnd); + var maskLen = file.Length - pathEnd - 1; + if (maskLen > 0) + mask = file.Substring(pathEnd + 1, maskLen); + else + { + // маска была не в конце пути + // 1С такое откидывает + return; + } + + // несуществующие пути или пути к файлам, вместо папок 1С откидывает + if (!Directory.Exists(path)) + return; + } + else if (pathEnd == 0) + { + path = ""; + mask = file.Substring(1); + } + else + { + path = ""; + mask = file; + } + + filesToAdd = Directory.EnumerateFiles(path, mask, searchOption); + var relativePath = Path.GetFullPath(path); + AddEnumeratedFiles(filesToAdd, relativePath, storePathMode); + + } + + private void AddEnumeratedFiles(IEnumerable filesToAdd, string relativePath, SelfAwareEnumValue storePathMode) + { + var storeModeEnum = GlobalsManager.GetEnum(); + if (storePathMode == null) + storePathMode = (SelfAwareEnumValue)storeModeEnum.DontStorePath; + + foreach (var item in filesToAdd) + { + string pathInArchive; + if (storePathMode == storeModeEnum.StoreRelativePath) + pathInArchive = Path.GetDirectoryName(GetRelativePath(item, relativePath)); + else if (storePathMode == storeModeEnum.StoreFullPath) + pathInArchive = null; + else + pathInArchive = ""; + + _zip.AddFile(item, pathInArchive); + } + } + + // возвращает относительный путь или "", если путь не является относительным + private string GetRelativePath(string filespec, string rootfolder) + { + var currDir = Directory.GetCurrentDirectory(); + + DirectoryInfo directory = new DirectoryInfo(Path.Combine(currDir, rootfolder)); + var folderpath = directory.FullName; + + var filepath = Path.Combine(currDir, filespec); + + if (Directory.Exists(filespec)) + { + DirectoryInfo dir = new DirectoryInfo(filepath); + filepath = dir.FullName; + } + else { + FileInfo file = new FileInfo(filepath); + filepath = file.FullName; + } + + if (!filepath.StartsWith(folderpath)) + return ""; + + var res = filepath.Substring(folderpath.Length + 1); + if (res == "") + res = "."; + return res; + } + + private static bool GetRecursiveFlag(SelfAwareEnumValue recurseSubdirectories) + { + if (recurseSubdirectories == null) + return false; + else + return recurseSubdirectories == ((ZIPSubDirProcessingModeEnum)recurseSubdirectories.Owner).Recurse; + } + + private CompressionMethod MakeZipCompressionMethod(SelfAwareEnumValue compressionMethod) + { + if (compressionMethod == null) + return CompressionMethod.Deflate; + + var owner = (ZipCompressionMethodEnum)compressionMethod.Owner; + if (compressionMethod == owner.Deflate) + return CompressionMethod.Deflate; + if (compressionMethod == owner.Copy) + return CompressionMethod.None; + + throw RuntimeException.InvalidArgumentValue(); + + } + + private CompressionLevel MakeZipCompressionLevel(SelfAwareEnumValue compressionLevel) + { + if (compressionLevel == null) + return CompressionLevel.Default; + + var owner = (ZipCompressionLevelEnum)compressionLevel.Owner; + if (compressionLevel == owner.Minimal) + return CompressionLevel.BestSpeed; + if (compressionLevel == owner.Optimal) + return CompressionLevel.Default; + if (compressionLevel == owner.Maximal) + return CompressionLevel.BestCompression; + + throw RuntimeException.InvalidArgumentValue(); + } + + private EncryptionAlgorithm MakeZipEncryption(SelfAwareEnumValue encryptionMethod) + { + if (encryptionMethod == null) + return EncryptionAlgorithm.PkzipWeak; + + var enumOwner = (ZipEncryptionMethodEnum)encryptionMethod.Owner; + + if(encryptionMethod == enumOwner.Zip20) + return EncryptionAlgorithm.PkzipWeak; + if (encryptionMethod == enumOwner.Aes128) + return EncryptionAlgorithm.WinZipAes128; + if (encryptionMethod == enumOwner.Aes256) + return EncryptionAlgorithm.WinZipAes256; + + throw RuntimeException.InvalidArgumentValue(); + + } + + private void CheckIfOpened() + { + if (_zip == null) + throw new RuntimeException("Архив не открыт"); + } + + [ScriptConstructor(Name = "Формирование неинициализированного объекта")] + public static ZipWriter Construct() + { + return new ZipWriter(); + } + + [ScriptConstructor(Name = "На основании имени файла")] + public static ZipWriter ConstructByFileOptions(IValue filename, IValue password = null, IValue comment = null, IValue compressionMethod = null, IValue compressionLevel = null, IValue encryptionMethod = null) + { + var zip = new ZipWriter(); + zip.Open(filename.AsString(), + ConvertParam(password), + ConvertParam(comment), + ConvertParam>(compressionMethod), + ConvertParam>(compressionLevel), + ConvertParam>(encryptionMethod) + ); + return zip; + } + + private static T ConvertParam(IValue paramSource) + { + if (paramSource == null) + return default(T); + + if (paramSource.DataType == DataType.NotAValidValue) + return default(T); + + var raw = paramSource.GetRawValue(); + if (typeof(EnumerationValue).IsAssignableFrom(typeof(T))) + { + try + { + return (T)raw; + } + catch (InvalidCastException) + { + throw RuntimeException.InvalidArgumentType(); + } + } + else + return ContextValuesMarshaller.ConvertParam(raw); + } + + #region IDisposable Members + + public void Dispose() + { + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_zip != null) + { + _zip.Dispose(); + _zip = null; + } + } + } + + #endregion + } +} From a6a979b0c93cc55582780403651101f75ed10c4d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 23 Dec 2017 16:06:46 +0300 Subject: [PATCH 061/286] =?UTF-8?q?=D0=95=D1=89=D0=B5=20=D1=83=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/zip.os | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tests/zip.os b/tests/zip.os index a31d8dbc4..5f767fdf4 100644 --- a/tests/zip.os +++ b/tests/zip.os @@ -341,7 +341,6 @@ ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); - ТрассироватьВсеЭлементыАрхива(Чтение); юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; @@ -378,7 +377,6 @@ Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); - ТрассироватьВсеЭлементыАрхива(Чтение); НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); @@ -424,7 +422,6 @@ Распаковка = ИзвлечьВсеИзАрхиваВоВременныйКаталог(ИмяАрхива); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); - ТрассироватьВсеЭлементыАрхива(Чтение); НеверныйПутьКаталогаВКорне = ОбъединитьПути(Распаковка, ИМЯ_КАТАЛОГА); ПроверитьОтсутствиеФайла(НеверныйПутьКаталогаВКорне, "Вложенный каталог не должен был существовать в корне, а он есть."); @@ -486,7 +483,6 @@ ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(Путь); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); - ТрассироватьВсеЭлементыАрхива(Чтение); юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; @@ -528,7 +524,6 @@ ИмяАрхива = ДобавитьФайлИлиКаталогВАрхивСОтносительнымиПутями(ПолныйПутьФайла); Чтение = Новый ЧтениеZipФайла(ИмяАрхива); - ТрассироватьВсеЭлементыАрхива(Чтение); юТест.ПроверитьРавенство(Чтение.Элементы.Количество(), 1, "Количество элементов zip: "); Элемент = Чтение.Элементы[0]; @@ -611,10 +606,3 @@ Файл = Новый Файл(НеверныйПутьФайла); юТест.ПроверитьЛожь(Файл.Существует(), СообщениеОшибки + НеверныйПутьФайла); КонецПроцедуры - -Процедура ТрассироватьВсеЭлементыАрхива(Знач Чтение) - Для Счетчик = 0 По Чтение.Элементы.Количество()-1 Цикл - - Элемент = Чтение.Элементы[Счетчик]; - КонецЦикла; -КонецПроцедуры From fc02f891c2f2e4e5aa174443cf2623cd965377f2 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 25 Dec 2017 15:27:38 +0300 Subject: [PATCH 062/286] =?UTF-8?q?=D0=98=D0=B7=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D1=81=D1=8F=20=D0=BE=D1=82=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D1=88=D0=B5=D0=B9=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs index 55c2009c1..50c40d06e 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs @@ -127,13 +127,6 @@ private string GetPathForParentFolder(string dir) return rootPath; } - private bool IsNotRelativePath(string filepath, string relativePath) - { - if (relativePath == "") - return true; - return (relativePath == filepath || relativePath.Substring(0, 2) == ".."); - } - private void AddSingleFile(string file, SelfAwareEnumValue storePathMode) { var storeModeEnum = GlobalsManager.GetEnum(); @@ -148,7 +141,7 @@ private void AddSingleFile(string file, SelfAwareEnumValue else if (storePathMode == storeModeEnum.StoreRelativePath) { var relativePath = GetRelativePath(file, currDir); - if (Path.IsPathRooted(file) && IsNotRelativePath(file, relativePath)) + if (relativePath == "") pathInArchive = "."; else pathInArchive = Path.GetDirectoryName(relativePath); From 62b51879be2f176e515ef8851fe4b9f3e62767b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=A3=D0=B9=20=D0=91=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Wed, 27 Dec 2017 14:53:42 +0300 Subject: [PATCH 063/286] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B2=D0=BD=D1=8F=D1=82=D0=BD=D1=8B=D0=B5=20Proper?= =?UTF-8?q?ties.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ScriptEngine/Compiler/Compiler.cs | 23 ++++++--------- src/ScriptEngine/CompilerService.cs | 5 ---- .../Machine/Contexts/ScriptDrivenObject.cs | 17 +++-------- src/ScriptEngine/Machine/LoadedModule.cs | 6 ++-- src/ScriptEngine/Machine/MachineInstance.cs | 12 ++++++-- src/ScriptEngine/Machine/Variables.cs | 9 ++++++ src/ScriptEngine/ModuleImage.cs | 2 -- src/ScriptEngine/VariablesFrame.cs | 29 +++++++++---------- 8 files changed, 47 insertions(+), 56 deletions(-) diff --git a/src/ScriptEngine/Compiler/Compiler.cs b/src/ScriptEngine/Compiler/Compiler.cs index 78bdece87..7d4772133 100644 --- a/src/ScriptEngine/Compiler/Compiler.cs +++ b/src/ScriptEngine/Compiler/Compiler.cs @@ -325,7 +325,14 @@ private void BuildVariableDefinitions() } _module.VariableRefs.Add(definition); - _module.Variables.Add(symbolicName); + _module.Variables.Add(new VariableInfo() + { + Identifier = symbolicName, + Annotations = annotations, + CanGet = true, + CanSet = true, + Index = definition.CodeIndex + }); } NextToken(); if (_lastExtractedLexem.Token == Token.Export) @@ -335,18 +342,6 @@ private void BuildVariableDefinitions() SymbolicName = symbolicName, Index = definition.CodeIndex }); - _module.Properties.Add(new PropertyDescriptor() - { - Signature = new VariableInfo() - { - Identifier = symbolicName, - Annotations = annotations, - CanGet = true, - CanSet = true, - Index = definition.CodeIndex - }, - Index = definition.CodeIndex - }); NextToken(); } if (_lastExtractedLexem.Token == Token.Comma) @@ -420,7 +415,7 @@ private static void FillVariablesFrame(ref MethodDescriptor descriptor, SymbolSc for (int i = 0; i < localCtx.VariableCount; i++) { - descriptor.Variables.Add(localCtx.GetVariable(i).Identifier); + descriptor.Variables.Add(localCtx.GetVariable(i)); } } diff --git a/src/ScriptEngine/CompilerService.cs b/src/ScriptEngine/CompilerService.cs index 948561ee6..415bdc8b6 100644 --- a/src/ScriptEngine/CompilerService.cs +++ b/src/ScriptEngine/CompilerService.cs @@ -125,11 +125,6 @@ private ScriptModuleHandle Compile(ICodeSource source) SymbolicName = varDef.Identifier, Index = varDef.Index }); - compiledImage.Properties.Add(new PropertyDescriptor() - { - Signature = new VariableInfo(varDef.Identifier, varDef.Index), - Index = varDef.Index - }); } } diff --git a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs index c558f0c4f..e4c9abf2f 100644 --- a/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs +++ b/src/ScriptEngine/Machine/Contexts/ScriptDrivenObject.cs @@ -357,12 +357,10 @@ public VariableInfo GetPropertyInfo(int propNum) { if (PropDefinedInScript(propNum)) { - return _module.Properties[propNum - VARIABLE_COUNT].Signature; - } - else - { - return new VariableInfo(GetPropName(propNum), propNum); + var mappedIndex = _module.ExportedProperies[propNum - VARIABLE_COUNT].Index; + return _module.Variables[mappedIndex]; } + return new VariableInfo(GetOwnPropName(propNum), propNum); } public override int GetPropCount() @@ -372,14 +370,7 @@ public override int GetPropCount() public override string GetPropName(int propNum) { - if(PropDefinedInScript(propNum)) - { - return _module.ExportedProperies[propNum - VARIABLE_COUNT].SymbolicName; - } - else - { - return GetOwnPropName(propNum); - } + return GetPropertyInfo(propNum).Identifier; } #endregion diff --git a/src/ScriptEngine/Machine/LoadedModule.cs b/src/ScriptEngine/Machine/LoadedModule.cs index 47cdf02c4..f7a0570ad 100644 --- a/src/ScriptEngine/Machine/LoadedModule.cs +++ b/src/ScriptEngine/Machine/LoadedModule.cs @@ -27,7 +27,6 @@ internal LoadedModule(ModuleImage image) this.ExportedProperies = image.ExportedProperties.ToArray(); this.ExportedMethods = image.ExportedMethods.ToArray(); this.ModuleInfo = image.ModuleInfo; - this.Properties = image.Properties.ToArray(); for (int i = 0; i < image.Constants.Count; i++) { var def = image.Constants[i]; @@ -44,9 +43,9 @@ internal LoadedModule(ModuleImage image) } } - for (int i = 0; i < Properties.Length; i++) + for (int i = 0; i < Variables.Count; i++) { - EvaluateAnnotationParametersValues(Properties[i].Signature.Annotations); + EvaluateAnnotationParametersValues(Variables[i].Annotations); } } @@ -76,7 +75,6 @@ private void EvaluateAnnotationParametersValues(AnnotationDefinition[] annotatio public ExportedSymbol[] ExportedProperies { get; private set; } public ExportedSymbol[] ExportedMethods { get; private set; } public ModuleInformation ModuleInfo { get; private set; } - public PropertyDescriptor[] Properties { get; private set; } } diff --git a/src/ScriptEngine/Machine/MachineInstance.cs b/src/ScriptEngine/Machine/MachineInstance.cs index 8e1df3f9d..bd35cdec5 100644 --- a/src/ScriptEngine/Machine/MachineInstance.cs +++ b/src/ScriptEngine/Machine/MachineInstance.cs @@ -104,8 +104,12 @@ internal IValue ExecuteMethod(IRunnable sdo, int methodIndex, IValue[] arguments for (int i = 0; i < arguments.Length; i++) { if (arguments[i] is IVariable) - _currentFrame.Locals[i] = Variable.CreateReference((IVariable)arguments[i], method.Variables[i]); - else if(arguments[i] == null) + { + // TODO: Alias ? + _currentFrame.Locals[i] = + Variable.CreateReference((IVariable) arguments[i], method.Variables[i].Identifier); + } + else if (arguments[i] == null) _currentFrame.Locals[i] = Variable.Create(GetDefaultArgValue(methodIndex, i), method.Variables[i]); else _currentFrame.Locals[i] = Variable.Create(arguments[i], method.Variables[i]); @@ -902,7 +906,9 @@ private bool MethodCallImpl(int arg, bool asFunc) } else { - frame.Locals[i] = Variable.CreateReference((IVariable)argValues[i], methDescr.Variables[i]); + // TODO: Alias ? + frame.Locals[i] = Variable.CreateReference((IVariable) argValues[i], + methDescr.Variables[i].Identifier); } } else if (argValues[i] == null) diff --git a/src/ScriptEngine/Machine/Variables.cs b/src/ScriptEngine/Machine/Variables.cs index 03a161597..f55feac18 100644 --- a/src/ScriptEngine/Machine/Variables.cs +++ b/src/ScriptEngine/Machine/Variables.cs @@ -39,6 +39,15 @@ public static IVariable Create(IValue val, string symbol) }; } + public static IVariable Create(IValue val, VariableInfo metadata) + { + return new Variable() + { + _val = val, + Name = metadata.Identifier + }; + } + public static IVariable CreateReference(IVariable variable, string refName) { return VariableReference.CreateSimpleReference(variable, refName); diff --git a/src/ScriptEngine/ModuleImage.cs b/src/ScriptEngine/ModuleImage.cs index 5951c298c..4a01f8321 100644 --- a/src/ScriptEngine/ModuleImage.cs +++ b/src/ScriptEngine/ModuleImage.cs @@ -27,7 +27,6 @@ public ModuleImage() ExportedProperties = new List(); ExportedMethods = new List(); Variables = new VariablesFrame(); - Properties = new List(); } public VariablesFrame Variables { get; } @@ -36,7 +35,6 @@ public ModuleImage() public IList VariableRefs { get; set; } public IList MethodRefs { get; set; } public IList Methods { get; set; } - public IList Properties { get; set; } public IList Constants { get; set; } public IList ExportedProperties { get; set; } public IList ExportedMethods { get; set; } diff --git a/src/ScriptEngine/VariablesFrame.cs b/src/ScriptEngine/VariablesFrame.cs index 3fcd43840..607b74798 100644 --- a/src/ScriptEngine/VariablesFrame.cs +++ b/src/ScriptEngine/VariablesFrame.cs @@ -7,27 +7,26 @@ This Source Code Form is subject to the terms of the using System; using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Text; +using ScriptEngine.Machine; namespace ScriptEngine { [Serializable] - internal class VariablesFrame : IList + internal class VariablesFrame : IList { - private readonly List _data; + private readonly List _data; public VariablesFrame() { - _data = new List(); + _data = new List(); } - public VariablesFrame(IEnumerable src) + public VariablesFrame(IEnumerable src) { - _data = new List(src); + _data = new List(src); } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { return _data.GetEnumerator(); } @@ -37,7 +36,7 @@ IEnumerator IEnumerable.GetEnumerator() return ((IEnumerable) _data).GetEnumerator(); } - public void Add(string item) + public void Add(VariableInfo item) { _data.Add(item); } @@ -47,17 +46,17 @@ public void Clear() _data.Clear(); } - public bool Contains(string item) + public bool Contains(VariableInfo item) { return _data.Contains(item); } - public void CopyTo(string[] array, int arrayIndex) + public void CopyTo(VariableInfo[] array, int arrayIndex) { _data.CopyTo(array, arrayIndex); } - public bool Remove(string item) + public bool Remove(VariableInfo item) { return _data.Remove(item); } @@ -72,12 +71,12 @@ public bool IsReadOnly get { return false; } } - public int IndexOf(string item) + public int IndexOf(VariableInfo item) { return _data.IndexOf(item); } - public void Insert(int index, string item) + public void Insert(int index, VariableInfo item) { _data.Insert(index, item); } @@ -87,7 +86,7 @@ public void RemoveAt(int index) _data.RemoveAt(index); } - public string this[int index] + public VariableInfo this[int index] { get { return _data[index]; } set { _data[index] = value; } From 613e05da417face52acfaba61423370abde9fa39 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Wed, 27 Dec 2017 22:21:50 +0300 Subject: [PATCH 064/286] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=80=D1=82=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e2bafd522..33c415a32 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { agent none environment { - ReleaseNumber = 19 + ReleaseNumber = 20 outputEnc = '65001' } From c2d7cac73117612db7943ad2422b478075a67828 Mon Sep 17 00:00:00 2001 From: jdeshin <33670268+jdeshin@users.noreply.github.com> Date: Thu, 28 Dec 2017 14:13:03 +0400 Subject: [PATCH 065/286] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=BE=20null=20<->=20=D0=9D=D0=B5=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=BE=20(#634)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Доработано null <-> Неопределено * Поправил на ValueFactory.Create() на SimpleConstantValue.Undefined() * Убрал проверку на null из if (type == typeof(IValue)) * Поправил. В ConvertParam null возвращается, если тип параметра не IValue и не IVariable и он равен SimpleConstantValue.Undefined() * Добавил класс для тестов * Удалил TestApp * Поправил имя класса, поправил свойства * Поправил TestClassNull * Удалил MarshallerTest * Сделал функцию тестов CheckUndefinedIsNull в ContextTests * Отформатировал тесты, добавил TestApp --- src/1Script.sln | 80 +- src/NUnitTests/ContextTests.cs | 654 +++++++++++-- src/NUnitTests/NUnitTests.csproj | 1 + src/NUnitTests/TestNullConversion.cs | 297 ++++++ .../Contexts/ContextValuesMarshaller.cs | 19 +- src/TestApp/Controls/1CV8Syntax.xshd | 294 +++--- src/TestApp/EditedFileSource.cs | 86 +- src/TestApp/MainWindow.xaml | 226 ++--- src/TestApp/MainWindow.xaml.cs | 890 +++++++++--------- src/TestApp/TestApp.csproj | 378 ++++---- 10 files changed, 1888 insertions(+), 1037 deletions(-) create mode 100644 src/NUnitTests/TestNullConversion.cs diff --git a/src/1Script.sln b/src/1Script.sln index c72cc5152..8b4cdc947 100644 --- a/src/1Script.sln +++ b/src/1Script.sln @@ -1,13 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2006 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" - ProjectSection(ProjectDependencies) = postProject - {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} = {F062D1D9-D307-492A-A56B-FF3C55F8F6C0} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptEngine", "ScriptEngine\ScriptEngine.csproj", "{F062D1D9-D307-492A-A56B-FF3C55F8F6C0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptEngine.HostedScript", "ScriptEngine.HostedScript\ScriptEngine.HostedScript.csproj", "{F09A46BD-5737-45E7-BA60-A47C9F7821A9}" @@ -49,22 +44,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HTTPServices", "ASPNETHandl EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWebApp", "TestWebApp\TestWebApp.csproj", "{6DE97986-8304-45AE-BD47-63A5563F9C3A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{4585BA5D-9EC4-4C89-8250-2033D2AC2999}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x86 = Release|x86 + ReleaseNoSnegopat|Any CPU = ReleaseNoSnegopat|Any CPU + ReleaseNoSnegopat|x86 = ReleaseNoSnegopat|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.ActiveCfg = Debug|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.Build.0 = Debug|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.Build.0 = Release|Any CPU - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.ActiveCfg = Release|x86 - {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.Build.0 = Release|x86 {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -73,6 +64,10 @@ Global {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|Any CPU.Build.0 = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.ActiveCfg = Release|Any CPU {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.Release|x86.Build.0 = Release|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNoSnegopat|Any CPU.ActiveCfg = ReleaseNoSnegopat|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNoSnegopat|Any CPU.Build.0 = ReleaseNoSnegopat|Any CPU + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNoSnegopat|x86.ActiveCfg = ReleaseNoSnegopat|x86 + {F062D1D9-D307-492A-A56B-FF3C55F8F6C0}.ReleaseNoSnegopat|x86.Build.0 = ReleaseNoSnegopat|x86 {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -81,6 +76,10 @@ Global {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|Any CPU.Build.0 = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.ActiveCfg = Release|Any CPU {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.Release|x86.Build.0 = Release|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNoSnegopat|Any CPU.ActiveCfg = ReleaseNoSnegopat|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNoSnegopat|Any CPU.Build.0 = ReleaseNoSnegopat|Any CPU + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNoSnegopat|x86.ActiveCfg = ReleaseNoSnegopat|x86 + {F09A46BD-5737-45E7-BA60-A47C9F7821A9}.ReleaseNoSnegopat|x86.Build.0 = ReleaseNoSnegopat|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|Any CPU.Build.0 = Debug|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Debug|x86.ActiveCfg = Debug|x86 @@ -89,6 +88,10 @@ Global {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|Any CPU.Build.0 = Release|Any CPU {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.ActiveCfg = Release|x86 {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.Release|x86.Build.0 = Release|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNoSnegopat|Any CPU.ActiveCfg = ReleaseNoSnegopat|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNoSnegopat|Any CPU.Build.0 = ReleaseNoSnegopat|Any CPU + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNoSnegopat|x86.ActiveCfg = ReleaseNoSnegopat|x86 + {2590E2BB-CC1F-4775-80ED-451F45C9A4F1}.ReleaseNoSnegopat|x86.Build.0 = ReleaseNoSnegopat|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Debug|x86.ActiveCfg = Debug|x86 @@ -97,10 +100,16 @@ Global {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|Any CPU.Build.0 = Release|Any CPU {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.ActiveCfg = Release|x86 {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.Release|x86.Build.0 = Release|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNoSnegopat|Any CPU.ActiveCfg = ReleaseNoSnegopat|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNoSnegopat|Any CPU.Build.0 = ReleaseNoSnegopat|Any CPU + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNoSnegopat|x86.ActiveCfg = ReleaseNoSnegopat|x86 + {795AA2F5-3074-4BC5-A30F-1B6354044D9B}.ReleaseNoSnegopat|x86.Build.0 = ReleaseNoSnegopat|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|Any CPU.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Debug|x86.ActiveCfg = Debug|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|Any CPU.ActiveCfg = Release|x86 {BBE794A6-B159-422F-B655-B7F03F25F223}.Release|x86.ActiveCfg = Release|x86 + {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|x86 + {BBE794A6-B159-422F-B655-B7F03F25F223}.ReleaseNoSnegopat|x86.ActiveCfg = Release|x86 {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -109,6 +118,10 @@ Global {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|Any CPU.Build.0 = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.ActiveCfg = Release|Any CPU {93ACC849-E7E1-4695-B59D-54B3737E48A6}.Release|x86.Build.0 = Release|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {93ACC849-E7E1-4695-B59D-54B3737E48A6}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -117,6 +130,10 @@ Global {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|Any CPU.Build.0 = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.ActiveCfg = Release|Any CPU {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.Release|x86.Build.0 = Release|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {B6C3C000-699B-4A2F-92D1-EEAEA9CFE2AB}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -125,6 +142,10 @@ Global {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|Any CPU.Build.0 = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.ActiveCfg = Release|Any CPU {C979F151-AA29-47E4-B020-3039BA0986D9}.Release|x86.Build.0 = Release|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {C979F151-AA29-47E4-B020-3039BA0986D9}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|Any CPU.Build.0 = Debug|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -133,12 +154,20 @@ Global {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|Any CPU.Build.0 = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.ActiveCfg = Release|Any CPU {727A498F-BF50-42F8-8523-40C0B5B1B233}.Release|x86.Build.0 = Release|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {727A498F-BF50-42F8-8523-40C0B5B1B233}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Debug|x86.ActiveCfg = Debug|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|Any CPU.Build.0 = Release|Any CPU {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.Release|x86.ActiveCfg = Release|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {69A7869C-203C-4F09-AC3F-04E9B52AD7AB}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -147,12 +176,33 @@ Global {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Release|Any CPU.Build.0 = Release|Any CPU {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Release|x86.ActiveCfg = Release|Any CPU {B7CD7F52-E387-490E-8F77-E1FB060401B5}.Release|x86.Build.0 = Release|Any CPU + {B7CD7F52-E387-490E-8F77-E1FB060401B5}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {B7CD7F52-E387-490E-8F77-E1FB060401B5}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {B7CD7F52-E387-490E-8F77-E1FB060401B5}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {B7CD7F52-E387-490E-8F77-E1FB060401B5}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Debug|x86.ActiveCfg = Debug|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Release|Any CPU.Build.0 = Release|Any CPU {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Release|x86.ActiveCfg = Release|Any CPU + {6DE97986-8304-45AE-BD47-63A5563F9C3A}.Release|x86.Build.0 = Release|Any CPU + {6DE97986-8304-45AE-BD47-63A5563F9C3A}.ReleaseNoSnegopat|Any CPU.ActiveCfg = Release|Any CPU + {6DE97986-8304-45AE-BD47-63A5563F9C3A}.ReleaseNoSnegopat|Any CPU.Build.0 = Release|Any CPU + {6DE97986-8304-45AE-BD47-63A5563F9C3A}.ReleaseNoSnegopat|x86.ActiveCfg = Release|Any CPU + {6DE97986-8304-45AE-BD47-63A5563F9C3A}.ReleaseNoSnegopat|x86.Build.0 = Release|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.ActiveCfg = Debug|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Debug|x86.Build.0 = Debug|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|Any CPU.Build.0 = Release|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.ActiveCfg = Release|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.Release|x86.Build.0 = Release|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNoSnegopat|Any CPU.ActiveCfg = ReleaseNoSnegopat|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNoSnegopat|Any CPU.Build.0 = ReleaseNoSnegopat|Any CPU + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNoSnegopat|x86.ActiveCfg = ReleaseNoSnegopat|x86 + {4585BA5D-9EC4-4C89-8250-2033D2AC2999}.ReleaseNoSnegopat|x86.Build.0 = ReleaseNoSnegopat|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/NUnitTests/ContextTests.cs b/src/NUnitTests/ContextTests.cs index 4053976e8..1f59ce05f 100644 --- a/src/NUnitTests/ContextTests.cs +++ b/src/NUnitTests/ContextTests.cs @@ -14,88 +14,588 @@ This Source Code Form is subject to the terms of the namespace NUnitTests { - [TestFixture] - public class ContextTests : ISystemLogWriter - { - private EngineWrapperNUnit host; - private readonly List _messages = new List(); - - [OneTimeSetUp] - public void Init() - { - host = new EngineWrapperNUnit(); - host.StartEngine(); - var solutionRoot = Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "..", ".."); - host.Engine.InitExternalLibraries(Path.Combine(solutionRoot, "oscript-library", "src"), null); - host.Engine.AttachAssembly(typeof(TestContextClass).Assembly); - } - - [Test] - public void TestICallDeprecatedAndHaveWarning() - { - SystemLogger.SetWriter(this); - _messages.Clear(); - host.RunTestString( - @"К = Новый ТестовыйКласс; + [TestFixture] + public class ContextTests : ISystemLogWriter + { + private EngineWrapperNUnit host; + private readonly List _messages = new List(); + + [OneTimeSetUp] + public void Init() + { + host = new EngineWrapperNUnit(); + host.StartEngine(); + var solutionRoot = Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "..", ".."); + host.Engine.InitExternalLibraries(Path.Combine(solutionRoot, "oscript-library", "src"), null); + host.Engine.AttachAssembly(typeof(TestContextClass).Assembly); + } + + [Test] + public void TestICallDeprecatedAndHaveWarning() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + host.RunTestString( + @"К = Новый ТестовыйКласс; К.УстаревшийМетод(); К.ObsoleteMethod(); К.УстаревшийМетод();"); - - Assert.AreEqual(1, _messages.Count, "Только ОДНО предупреждение"); - Assert.IsTrue(_messages[0].IndexOf("УстаревшийМетод", StringComparison.InvariantCultureIgnoreCase) >= 0 - || _messages[0].IndexOf("ObsoleteMethod", StringComparison.InvariantCultureIgnoreCase) >= 0); - } - - [Test] - public void TestICallGoodAndHaveNoWarning() - { - SystemLogger.SetWriter(this); - _messages.Clear(); - host.RunTestString( - @"К = Новый ТестовыйКласс; + + Assert.AreEqual(1, _messages.Count, "Только ОДНО предупреждение"); + Assert.IsTrue(_messages[0].IndexOf("УстаревшийМетод", StringComparison.InvariantCultureIgnoreCase) >= 0 + || _messages[0].IndexOf("ObsoleteMethod", StringComparison.InvariantCultureIgnoreCase) >= 0); + } + + [Test] + public void CheckUndefinedIsNull0() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат Неопределено в функцию IValue + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.5; + ВЗ = К.ТестIValueНеопределено(Арг); + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test IValue Func(IValue) -> Func(Unknown): return value is not equal Undefined""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull1() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат значения в функцию IValue + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 7.5; + ВЗ = 5.7; + ВЗ = К.ТестIValue(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test IValue Func(IValue) -> Func(IValue): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull2() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат значения Class в функцию Class + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Новый ПNullClass; + ВЗ = 5.7; + ВЗ = К.ТестКласс(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test Class Func(Class) -> Func(Class): return value is not equal of argument""; + КонецЕсли;"); + } + [Test] + public void CheckUndefinedIsNull3() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат значения Неопределено в функцию Class + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестClassНеопределено(Арг); + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test Class Func(Class) -> Func(Unknown): return value is not equal of Unknown""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull4() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат значения в функцию Строка + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = ""привет""; + ВЗ = 5.7; + ВЗ = К.ТестString(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test string Func(string) -> Func(string): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull5() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат Неопределено в функцию Строка + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестNullString(Арг); + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test string Func(string) -> Func(Unknown): return value is not equal of null""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull6() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат double в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3.6; + ВЗ = 5.7; + ВЗ = К.ТестDouble(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test double Func(double) -> Func(double): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull7() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат double в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестDouble(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test double Func(double) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull8() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат int в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3; + ВЗ = 5.7; + ВЗ = К.ТестInt(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test int Func(int) -> Func(int): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull9() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестInt(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test int Func(int) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull10() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3; + ВЗ = 5.7; + ВЗ = К.ТестUInt(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test uint Func(uint) -> Func(uint): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull11() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестUInt(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test uint Func(uint) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull12() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат long в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3; + ВЗ = 5.7; + ВЗ = К.ТестLong(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test long Func(long) -> Func(long): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull13() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестLong(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test long Func(long) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull14() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат ulong в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3; + ВЗ = 5.7; + ВЗ = К.ТестULong(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test ulong Func(ulong) -> Func(ulong): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull15() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестULong(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test ulong Func(ulong) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull16() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат DateTime в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = ТекущаяДата(); + ВЗ = 5.7; + ВЗ = К.ТестDateTime(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test DateTime Func(DateTime) -> Func(DateTime): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull17() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестDateTime(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test DateTime Func(DateTime) -> Func(Unknown): must raise exception"); + } + + [Test] + public void CheckUndefinedIsNull18() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат bool в функцию + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Истина; + ВЗ = 5.7; + ВЗ = К.ТестBool(Арг); + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test bool Func(bool) -> Func(bool): return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull19() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + bool wasException = false; + // Передача и возврат Неопределено в функцию + try + { + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + ВЗ = 5.7; + ВЗ = К.ТестBool(Арг);"); + } + catch (Exception e) + { + wasException = true; + } + + if (!wasException) + Assert.Fail("Test bool Func(bool) -> Func(Unknown): must raise exception"); + } + // + // Чтение/запись свойств + // + // Передача и возврат ivalue + + [Test] + public void CheckUndefinedIsNull20() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = 3.5; + К.ПIValue = Арг; + ВЗ = К.КПIValue; + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test IValue Prop <-> IValue: return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull21() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат ivalue + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + К.ПNullIValue = Арг; + ВЗ = К.ПNullIValue; + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test IValue Prop <-> Unknown: return value is not equal of Unknown""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull22() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + + // Передача и возврат Class + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Новый ТестNullКласс; + К.ПClass = Арг; + ВЗ = К.ПClass; + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test Class Prop <-> Class: return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull23() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат Class + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + К.ПNullClass = Арг; + ВЗ = К.ПNullClass; + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test Class Prop <-> Unknown: return value is not equal of Unknown""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull24() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат string + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = ""hello""; + К.ПString = Арг; + ВЗ = К.ПString; + Если Не ВЗ = Арг Тогда + ВызватьИсключение ""Test string Prop <-> string: return value is not equal of argument""; + КонецЕсли;"); + } + + [Test] + public void CheckUndefinedIsNull25() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + + // Передача и возврат string + host.RunTestString( + @"К = Новый ТестNullПреобразования; + Арг = Неопределено; + К.ПNullString = Арг; + ВЗ = К.ПNullString; + Если Не ВЗ = Неопределено Тогда + ВызватьИсключение ""Test string Prop <-> Unknown: return value is not equal of Unknown""; + КонецЕсли;"); + } + + [Test] + public void TestICallGoodAndHaveNoWarning() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + host.RunTestString( + @"К = Новый ТестовыйКласс; К.ХорошийМетод(); К.GoodMethod();"); - - Assert.AreEqual(0, _messages.Count, "Нет предупреждений"); - } - - [Test] - public void TestICallDeprecatedAliasAndHaveWarning() - { - SystemLogger.SetWriter(this); - _messages.Clear(); - host.RunTestString( - @"К = Новый ТестовыйКласс; + + Assert.AreEqual(0, _messages.Count, "Нет предупреждений"); + } + + [Test] + public void TestICallDeprecatedAliasAndHaveWarning() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + host.RunTestString( + @"К = Новый ТестовыйКласс; К.ObsoleteAlias();"); - - Assert.AreEqual(1, _messages.Count, "Только ОДНО предупреждение"); - Assert.IsTrue(_messages[0].IndexOf("ObsoleteAlias", StringComparison.InvariantCultureIgnoreCase) >= 0); - } - - [Test] - public void TestICallDeprecatedAliasAndHaveException() - { - SystemLogger.SetWriter(this); - _messages.Clear(); - var exceptionThrown = false; - - try - { - host.RunTestString( - @"К = Новый ТестовыйКласс; + + Assert.AreEqual(1, _messages.Count, "Только ОДНО предупреждение"); + Assert.IsTrue(_messages[0].IndexOf("ObsoleteAlias", StringComparison.InvariantCultureIgnoreCase) >= 0); + } + + [Test] + public void TestICallDeprecatedAliasAndHaveException() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + var exceptionThrown = false; + + try + { + host.RunTestString( + @"К = Новый ТестовыйКласс; К.VeryObsoleteAlias();"); - } - catch (RuntimeException) - { - exceptionThrown = true; - } - Assert.IsTrue(exceptionThrown, "Безнадёжно устаревший метод должен вызвать исключение"); - } - - public void Write(string text) - { - _messages.Add(text); - } - - } + } + catch (RuntimeException) + { + exceptionThrown = true; + } + Assert.IsTrue(exceptionThrown, "Безнадёжно устаревший метод должен вызвать исключение"); + } + + public void Write(string text) + { + _messages.Add(text); + } + + } } \ No newline at end of file diff --git a/src/NUnitTests/NUnitTests.csproj b/src/NUnitTests/NUnitTests.csproj index 10c9a8ad3..37b21c23f 100644 --- a/src/NUnitTests/NUnitTests.csproj +++ b/src/NUnitTests/NUnitTests.csproj @@ -61,6 +61,7 @@ + diff --git a/src/NUnitTests/TestNullConversion.cs b/src/NUnitTests/TestNullConversion.cs new file mode 100644 index 000000000..31541afcb --- /dev/null +++ b/src/NUnitTests/TestNullConversion.cs @@ -0,0 +1,297 @@ +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using ScriptEngine.Machine; +using ScriptEngine.Machine.Contexts; +using ScriptEngine.HostedScript.Library; +using ScriptEngine.HostedScript.Library.Binary; +using NUnit.Framework; + +namespace NUnitTests +{ + [ContextClass("ТестNullПреобразования", "TestNullConversion")] + class TestNullConversion : AutoContext + { + IValue _pIValue; + string _pString; + TestNullClass _pClass; + + + public TestNullConversion() + { + + } + + [ScriptConstructor(Name = "Без параметров")] + public static IRuntimeContextInstance Constructor() + { + return new TestNullConversion(); + } + + [ContextMethod("ТестIValue", "IValueTest")] + public IValue TestIValue(IValue arg) + { + if (arg.GetType() != typeof(IValue)) + Assert.Fail("Test IValue Func(IValue) -> Func(IValue): argument type is different from IValue."); + + return arg; + } + + [ContextMethod("ТестIValueНеопределено", "IValueNullTest")] + public IValue TestIValueNull(IValue arg) + { + if (arg != ValueFactory.Create()) + Assert.Fail("Test IValue Func(IValue) -> Func(Unknown): argument value is different from null."); + + return arg; + } + + [ContextMethod("ТестКласс", "ClassTest")] + public TestNullClass TestClass(TestNullClass arg) + { + if (arg.GetType() != typeof(TestNullClass)) + Assert.Fail("Test Class Func(Class) -> Func(Class): argument type is different from Class."); + + return arg; + } + + [ContextMethod("ТестClassНеопределено", "ClassNullTest")] + public TestNullClass TestClassNull(TestNullClass arg) + { + if (arg != null) + Assert.Fail("Test Class Func(Class) -> Func(Unknown): argument value is different from null."); + + return arg; + } + + + + [ContextMethod("ТестString", "StringTest")] + public string TestString(string arg) + { + if (arg.GetType() != typeof(System.String)) + Assert.Fail("Test string Func(string) -> Func(string): argument type is different from string."); + + return arg; + } + + [ContextMethod("ТестNullString", "StringNullTest")] + public string TestStringNull(string arg) + { + if (arg != null) + Assert.Fail("Test string Func(string) -> Func(Unknown): argument value is different from null."); + + return arg; + } + + [ContextMethod("ТестInt", "IntTest")] + public int TestInt(int arg) + { + return arg; + } + + [ContextMethod("ТестUInt", "UIntTest")] + public uint TestUInt(uint arg) + { + return arg; + } + + [ContextMethod("ТестLong", "LongTest")] + public long TestLong(long arg) + { + return arg; + } + + [ContextMethod("ТестULong", "ULongTest")] + public ulong TestULong(ulong arg) + { + return arg; + } + + [ContextMethod("ТестDouble", "DoubleTest")] + public double TestDouble(double arg) + { + return arg; + } + + [ContextMethod("ТестDateTime", "DateTimeTest")] + public DateTime TestDateTime(DateTime arg) + { + return arg; + } + + [ContextMethod("ТестBool", "BoolTest")] + public bool TestBool(bool arg) + { + return arg; + } + + + [ContextProperty("ПInt", "PInt")] + public int PInt + { + get;set; + } + + [ContextProperty("ПUint", "PUint")] + public uint PUint + { + get;set; + } + + [ContextProperty("ПLong", "PLong")] + public long PLong + { + get;set; + } + + [ContextProperty("ПUlong", "PUlong")] + public ulong PUlong + { + get;set; + } + + [ContextProperty("ПDouble", "PDouble")] + public double PDouble + { + get;set; + } + + [ContextProperty("ПDateTime", "PDateTime")] + public DateTime PDateTime + { + get;set; + } + + [ContextProperty("ПBool", "PBool")] + public bool PBool + { + get;set; + } + + [ContextProperty("ПString", "PString")] + public string PString + { + get + { + return _pString; + } + set + { + if (value.GetType() != typeof(System.String)) + Assert.Fail("Test string Property = string: value type is different from string."); + + _pString = value; + } + } + + [ContextProperty("ПNullString", "PNullString")] + public string PNullString + { + get + { + return _pString; + } + set + { + if (value != null) + Assert.Fail("Test string Property = Unknown: value value is different from null."); + + _pString = value; + } + } + + [ContextProperty("ПIValue", "PIValue")] + public IValue PIValue + { + get + { + return _pIValue; + } + set + { + if (value.GetType() != typeof(IValue)) + Assert.Fail("Test IValue Property = IValue: value type is different from IValue."); + + _pIValue = value; + } + } + + [ContextProperty("ПNullIValue", "PNullIValue")] + public IValue PNullIValue + { + get + { + return _pIValue; + } + set + { + if (value != ValueFactory.Create()) + Assert.Fail("Test IValue Property = Unknown: value value is different from Unknown."); + + _pIValue = value; + } + } + + + + [ContextProperty("ПClass", "PClass")] + public TestNullClass PClass + { + get + { + return _pClass; + } + set + { + if (value.GetType() != typeof(TestNullClass)) + Assert.Fail("Test TestNullClass Property = TestNullClass: value type is different from TestNullClass."); + + _pClass = value; + } + } + + [ContextProperty("ПNullClass", "PNullClass")] + public TestNullClass PNullClass + { + get + { + return _pClass; + } + set + { + if (value != null) + Assert.Fail("Test TestNullClass Property = Unknown: value value is different from null."); + _pIValue = value; + } + } + + } + + [ContextClass("ТестNullКласс", "TestNullClass")] + class TestNullClass : AutoContext + { + public TestNullClass() + { + + } + + [ScriptConstructor(Name = "Без параметров")] + public static IRuntimeContextInstance Constructor() + { + return new TestNullClass(); + } + + } + +} diff --git a/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs b/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs index a3dcfe72d..d10616d72 100644 --- a/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs +++ b/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs @@ -51,6 +51,11 @@ public static object ConvertParam(IValue value, Type type) { valueObj = value; } + else if (value == SimpleConstantValue.Undefined()) + { + // Если тип параметра не IValue и не IVariable && Неопределено -> null + valueObj = null; + } else if (type == typeof(string)) { valueObj = value.AsString(); @@ -99,12 +104,13 @@ public static IValue ConvertReturnValue(TRet param) { var type = typeof(TRet); object objParam = (object)param; + + if (objParam == null) + return ValueFactory.Create(); + if (type == typeof(IValue)) { - if (param != null) - return (IValue)param; - else - return ValueFactory.Create(); + return (IValue)param; } else if (type == typeof(string)) { @@ -151,10 +157,7 @@ public static IValue ConvertReturnValue(TRet param) } else if (typeof(IRuntimeContextInstance).IsAssignableFrom(type)) { - if (objParam != null) - return ValueFactory.Create((IRuntimeContextInstance)objParam); - else - return ValueFactory.Create(); + return ValueFactory.Create((IRuntimeContextInstance)objParam); } else { diff --git a/src/TestApp/Controls/1CV8Syntax.xshd b/src/TestApp/Controls/1CV8Syntax.xshd index fa84d6058..4ce28d87e 100644 --- a/src/TestApp/Controls/1CV8Syntax.xshd +++ b/src/TestApp/Controls/1CV8Syntax.xshd @@ -1,147 +1,147 @@ - - - - - - - - - - - - - - - \# - - - - \& - - - - // - - - - ' - ' - - - - " - " - - - - - - \| - " - - - - - - - Перем - Если - Тогда - Иначе - ИначеЕсли - КонецЕсли - Для - Каждого - Из - По - Пока - Цикл - КонецЦикла - Возврат - Продолжить - Прервать - Попытка - Исключение - ВызватьИсключение - КонецПопытки - НачатьТранзакцию - ЗафиксироватьТранзакцию - Процедура - Функция - КонецПроцедуры - КонецФункции - Знач - Новый - Экспорт - Истина - Ложь - Неопределено - Null - Лев - Прав - Сред - Число - Дата - и - или - не - - - Var - If - Then - Else - ElseIf - EndIf - For - Each - In - To - While - Do - EndDo - Return - Continue - Break - Try - Except - Raise - EndTry - Procedure - Function - EndProcedure - EndFunction - Val - New - Export - True - False - Undefıne - and - or - not - - - - - - - - \b0[xX][0-9a-fA-F]+ # hex number - | - ( \b\d+(\.[0-9]+)? #number with optional floating point - | \.[0-9]+ #or just starting with floating point - ) - ([eE][+-]?[0-9]+)? # optional exponent - - - - [?,.;()\[\]{}+\-/%*=<>^+~!|&]+ - - - + + + + + + + + + + + + + + + \# + + + + \& + + + + // + + + + ' + ' + + + + " + " + + + + + + \| + " + + + + + + + Перем + Если + Тогда + Иначе + ИначеЕсли + КонецЕсли + Для + Каждого + Из + По + Пока + Цикл + КонецЦикла + Возврат + Продолжить + Прервать + Попытка + Исключение + ВызватьИсключение + КонецПопытки + НачатьТранзакцию + ЗафиксироватьТранзакцию + Процедура + Функция + КонецПроцедуры + КонецФункции + Знач + Новый + Экспорт + Истина + Ложь + Неопределено + Null + Лев + Прав + Сред + Число + Дата + и + или + не + + + Var + If + Then + Else + ElseIf + EndIf + For + Each + In + To + While + Do + EndDo + Return + Continue + Break + Try + Except + Raise + EndTry + Procedure + Function + EndProcedure + EndFunction + Val + New + Export + True + False + Undefıne + and + or + not + + + + + + + + \b0[xX][0-9a-fA-F]+ # hex number + | + ( \b\d+(\.[0-9]+)? #number with optional floating point + | \.[0-9]+ #or just starting with floating point + ) + ([eE][+-]?[0-9]+)? # optional exponent + + + + [?,.;()\[\]{}+\-/%*=<>^+~!|&]+ + + + diff --git a/src/TestApp/EditedFileSource.cs b/src/TestApp/EditedFileSource.cs index 0d9ec1130..03851c3fd 100644 --- a/src/TestApp/EditedFileSource.cs +++ b/src/TestApp/EditedFileSource.cs @@ -1,44 +1,44 @@ -/*---------------------------------------------------------- -This Source Code Form is subject to the terms of the -Mozilla Public License, v.2.0. If a copy of the MPL -was not distributed with this file, You can obtain one -at http://mozilla.org/MPL/2.0/. -----------------------------------------------------------*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -using ScriptEngine.Environment; - -namespace TestApp -{ - internal class EditedFileSource : ICodeSource - { - private readonly string _code; - - private readonly string _path = ""; - - public EditedFileSource(string code, string path) - { - if (path != "") - _path = Path.GetFullPath(path); - _code = code; - } - - private string GetCodeString() - { - return _code; - } - - #region ICodeSource Members - - string ICodeSource.Code => GetCodeString(); - - string ICodeSource.SourceDescription => _path != "" ? _path : ""; - - #endregion - } +/*---------------------------------------------------------- +This Source Code Form is subject to the terms of the +Mozilla Public License, v.2.0. If a copy of the MPL +was not distributed with this file, You can obtain one +at http://mozilla.org/MPL/2.0/. +----------------------------------------------------------*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +using ScriptEngine.Environment; + +namespace TestApp +{ + internal class EditedFileSource : ICodeSource + { + private readonly string _code; + + private readonly string _path = ""; + + public EditedFileSource(string code, string path) + { + if (path != "") + _path = Path.GetFullPath(path); + _code = code; + } + + private string GetCodeString() + { + return _code; + } + + #region ICodeSource Members + + string ICodeSource.Code => GetCodeString(); + + string ICodeSource.SourceDescription => _path != "" ? _path : ""; + + #endregion + } } \ No newline at end of file diff --git a/src/TestApp/MainWindow.xaml b/src/TestApp/MainWindow.xaml index ebacfa42b..5b677a738 100644 --- a/src/TestApp/MainWindow.xaml +++ b/src/TestApp/MainWindow.xaml @@ -1,113 +1,113 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M1,4 L5,4 L3,8 Z - - - - - - - - Файл - - - - - - - - - -