public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) { if (null == inputData) { return(inputData); } var inputObject = inputData.ToPSObject().BaseObject; if (!(inputObject is ScriptBlock)) { return(inputData); } var script = inputObject as ScriptBlock; var dataSource = new PowerShellDataSource { Name = script.ToString(), ScriptBlock = script.ToString(), Trigger = new ImmediateTrigger() }; //TODO: add datasource to datasources: drive var drive = engineIntrinsics.InvokeCommand.InvokeScript("get-psdrive datasources") as IDriveOf <IPowerShellDataSource>; drive.Add(dataSource); return(dataSource); }
public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) { if (null == inputData) { return inputData; } var inputObject = inputData.ToPSObject().BaseObject; if (!(inputObject is ScriptBlock)) { return inputData; } var script = inputObject as ScriptBlock; var dataSource = new PowerShellDataSource { Name = script.ToString(), ScriptBlock = script.ToString(), Trigger = new ImmediateTrigger() }; //TODO: add datasource to datasources: drive var drive = engineIntrinsics.InvokeCommand.InvokeScript("get-psdrive datasources") as IDriveOf<IPowerShellDataSource>; drive.Add(dataSource); return dataSource; }
public void SupportsNewItem() { var s = @"new-item datasources:/test1 -value { @(1,2,3,4) }"; PowerShellDataSource item = Execute <PowerShellDataSource>(s); Assert.NotNull(item); }
public void AllRecordsCountPropertyChangeNotifiedByViewModel() { var vm = new ViewModel(); int called = 0; vm.PropertyChanged += (s, a) => { if (a.PropertyName == "AllRecordsCount") { ++called; } }; var dataSource = new PowerShellDataSource { ScriptBlock = "1 | select -exp ASDF" }; vm.DataSource = dataSource; Assert.Equal(0, vm.AllRecordsCount); called = 0; vm.DataSource.Trigger = new ImmediateTrigger(); dataSource.ScriptComplete.WaitOne(); Assert.Equal(1, vm.AllRecordsCount); Assert.True(1 == called, "Failed to raise property notification change event for AllRecordsCount"); }
public void DefaultTriggerForNewItemIsImmediate() { var s = @"new-item datasources:/test1 -value { @(1,2,3,4) }"; PowerShellDataSource item = Execute <PowerShellDataSource>(s); Assert.NotNull(item); Assert.IsType <ImmediateTrigger>(item.Trigger); }
public void CanAssignTriggerByObject() { var s = @"$trigger = new-item triggers:/trigger0 -manual; new-item datasources:/test1 -trigger $trigger -value { get-random }"; PowerShellDataSource item = Execute <PowerShellDataSource>(s); Assert.NotNull(item); Assert.NotNull(item.Trigger); Assert.Equal("trigger0", item.Trigger.Name); Assert.Equal(0, item.Data.Count); Assert.IsType <ManualTrigger>(item.Trigger); }
public void DataSourceExecutesScriptOnImmediateTriggerAttach() { PowerShellDataSource item = new PowerShellDataSource { Name = "Item", ScriptBlock = "@(0,1,2,3)" }; Assert.NotNull(item); Assert.Equal(0, item.Data.Count); item.Trigger = new ImmediateTrigger(); item.ScriptComplete.WaitOne(500); Assert.Equal(4, item.Data.Count); }
public void DataSourceExecutesScriptOnManualTriggerPull() { PowerShellDataSource item = new PowerShellDataSource { Name = "Item", ScriptBlock = "@(0,1,2,3)" }; Assert.NotNull(item); Assert.Equal(0, item.Data.Count); var trigger = new ManualTrigger(); item.Trigger = trigger; Assert.Equal(0, item.Data.Count); trigger.RaiseTrigger(); item.ScriptComplete.WaitOne(500); Assert.Equal(4, item.Data.Count); }
public void AllRecordsCountUpdatedInSingleDataSourceViewModel() { var vm = new ViewModel(); var dataSource = new PowerShellDataSource { ScriptBlock = "1 | select -exp ASDF" }; vm.DataSource = dataSource; Assert.Equal(0, vm.AllRecordsCount); Assert.Equal(dataSource.AllRecords.Count, vm.AllRecordsCount); vm.DataSource.Trigger = new ImmediateTrigger(); dataSource.ScriptComplete.WaitOne(); Assert.Equal(1, vm.AllRecordsCount); Assert.Equal(dataSource.AllRecords.Count, vm.AllRecordsCount); }
public void AllRecordsCountPropertyChangeNotifiedByViewModel() { var vm = new ViewModel(); int called = 0; vm.PropertyChanged += (s, a) => { if (a.PropertyName == "AllRecordsCount") ++called; }; var dataSource = new PowerShellDataSource { ScriptBlock = "1 | select -exp ASDF" }; vm.DataSource = dataSource; Assert.Equal(0, vm.AllRecordsCount); called = 0; vm.DataSource.Trigger = new ImmediateTrigger(); dataSource.ScriptComplete.WaitOne(); Assert.Equal(1, vm.AllRecordsCount); Assert.True( 1 == called, "Failed to raise property notification change event for AllRecordsCount"); }
public IPathValue NewItem(IProviderContext context, string path, string itemTypeName, object newItemValue) { var parameters = context.DynamicParameters as DataSourceNewItemParameters; var name = path; var script = ConvertToScript(newItemValue); if (null == script) { throw new ArgumentException("new item value must be a script block or string", "newItemValue"); } var dataSource = new PowerShellDataSource { Name = name, ScriptBlock = script, UseDispatcher = true }; if (null != parameters) { if (parameters.MaxItemCount.HasValue) { dataSource.DataCollectionMaxSize = parameters.MaxItemCount.Value; } if (parameters.NoDispatcher.IsPresent) { dataSource.UseDispatcher = false; } if (null != parameters.Args) { string propertyName = null; var specs = parameters.Args.ToHashtable(); foreach (object key in specs.Keys) { var value = specs[key]; IScaleDescriptor descriptor = value as IScaleDescriptor; if (null == descriptor) { if (value is Array) { descriptor = new ScaleDescriptor((object[])value); } else { descriptor = new ScaleDescriptor(value.ToString()); } } dataSource.Scales.Add( new ScaleDescriptorAssignment { Scale = descriptor, PropertyName = key.ToString() } ); } } } ITrigger trigger = Singleton <ImmediateTrigger> .Instance; if (null != parameters && null != parameters.Trigger) { trigger = parameters.Trigger; } dataSource.Trigger = trigger; _drive.Add(dataSource); return(new PathValue(dataSource, name, true)); }