public async Task SerializeToStreamAsync_SerializesModuleSourceTypeStreamInvocationRequestsAsync() { // Arrange const ModuleSourceType dummyModuleSourceType = ModuleSourceType.Stream; const string dummyModuleSource = "dummyModuleSource"; var dummyModuleStreamSource = new MemoryStream(Encoding.UTF8.GetBytes(dummyModuleSource)); var dummyInvocationRequest = new InvocationRequest(dummyModuleSourceType, moduleStreamSource: dummyModuleStreamSource); var dummyJsonService = new JsonService(); using (ExposedInvocationContent testSubject = CreateInvocationContent(dummyJsonService, dummyInvocationRequest)) { var resultMemoryStream = new MemoryStream(); // Act await testSubject.ExposedSerializeToStreamAsync(resultMemoryStream, null).ConfigureAwait(false); // Assert resultMemoryStream.Position = 0; using (var resultReader = new StreamReader(resultMemoryStream)) { string result = resultReader.ReadToEnd(); Assert.Equal($"{{\"moduleSourceType\":{(int)dummyModuleSourceType}}}{Encoding.UTF8.GetString(InvocationContent.BOUNDARY_BYTES)}{dummyModuleSource}", result); } } }
public void Constructor_CreatesInvocationRequestIfSuccessful() { // Arrange const string dummyModuleSource = "dummyModuleSource"; const string dummyNewCacheIdentifier = "dummyNewCacheIdentifier"; const string dummyExportName = "dummyExportName"; var dummyArgs = new object[0]; const ModuleSourceType dummyModuleSourceType = ModuleSourceType.String; // Act var invocationRequest = new InvocationRequest(dummyModuleSourceType, dummyModuleSource, dummyNewCacheIdentifier, dummyExportName, dummyArgs); // Assert Assert.Equal(dummyModuleSourceType, invocationRequest.ModuleSourceType); Assert.Equal(dummyModuleSource, invocationRequest.ModuleSource); Assert.Equal(dummyNewCacheIdentifier, invocationRequest.NewCacheIdentifier); Assert.Equal(dummyExportName, invocationRequest.ExportName); Assert.Same(dummyArgs, invocationRequest.Args); }
/// <summary> /// Creates an <see cref="InvocationRequest"/> instance. /// </summary> /// <param name="moduleSourceType">The source type of the module to be invoked.</param> /// <param name="moduleSource"><para>The source of the module to be invoked.</para> /// <para>The source can be the path of the module relative to <see cref="NodeJSProcessOptions.ProjectPath"/>, /// the module as a string, or the cache identifier of the module.</para> /// <para> If <paramref name="moduleSourceType"/> is not <see cref="ModuleSourceType.Stream"/>, this parameter must be specified. /// Additionally, if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.File"/> or <see cref="ModuleSourceType.String"/>, this parameter must not be an empty string /// or whitespace.</para> /// </param> /// <param name="newCacheIdentifier"><para>The new cache identifier for the module to be invoked.</para> /// <para>If this parameter is not specified, the module will not be cached. If it is specified, this parameter must not be an empty string or whitespace.</para></param> /// <param name="exportName"><para>The name of the function in the module's exports to invoke.</para> /// <para>If this value is not specified, the module's exports object is assumed to be a function, and that function is invoked. /// If it is specified, it must not be an empty string or whitespace.</para></param> /// <param name="args">The arguments for the function to invoke.</param> /// <param name="moduleStreamSource">The module as a <see cref="Stream"/>.</param> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.Stream"/> but /// <paramref name="moduleStreamSource"/> is null.</exception> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.File"/> or /// <see cref="ModuleSourceType.String"/> but <paramref name="moduleSource"/> is null, whitespace or an empty string.</exception> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.Cache"/> but /// <paramref name="moduleSource"/> is null.</exception> public InvocationRequest(ModuleSourceType moduleSourceType, string moduleSource = null, string newCacheIdentifier = null, string exportName = null, object[] args = null, Stream moduleStreamSource = null) { if (moduleSourceType == ModuleSourceType.Stream) { // moduleSourceType is stream but moduleStreamSource is null if (moduleStreamSource == null) { throw new ArgumentException(Strings.ArgumentException_InvocationRequest_ModuleStreamSourceCannotBeNull, nameof(moduleStreamSource)); } if (moduleStreamSource.CanSeek) { _streamInitialPosition = moduleStreamSource.Position; // Can only get or set Position if CanSeek is true - https://docs.microsoft.com/en-us/dotnet/api/system.io.stream.position?view=netstandard-2.0 } ModuleStreamSource = moduleStreamSource; } else if (moduleSourceType == ModuleSourceType.Cache) { if (moduleSource == null) { // moduleSourceType is cache but moduleSource is null throw new ArgumentException(Strings.ArgumentException_InvocationRequest_ModuleSourceCannotBeNull, nameof(moduleSource)); } } else if (string.IsNullOrWhiteSpace(moduleSource)) { // moduleSourceType is file or string but moduleSource is null, whitespace or an empty string throw new ArgumentException(Strings.ArgumentException_InvocationRequest_ModuleSourceCannotBeNullWhitespaceOrAnEmptyString, nameof(moduleSource)); } ModuleSourceType = moduleSourceType; ModuleSource = moduleSource; NewCacheIdentifier = newCacheIdentifier; ExportName = exportName; Args = args; }
public ExtractModuleForm(ModuleSourceType sourceType) { InitializeComponent(); Settings.StoredPreferences.Instance.GUISettings.Open(this); m_ectractModule.ModuleSource = sourceType; switch (sourceType) { case ModuleSourceType.FromNetlist: Text = "Extract module from external netlist"; break; case ModuleSourceType.FromSelection: Text = "Extract module from loaded design"; break; default: break; } }
/// <summary> /// Creates an <see cref="InvocationRequest"/> instance. /// </summary> /// <param name="moduleSourceType">The source type of the module to be invoked.</param> /// <param name="moduleSource"><para>The source of the module to be invoked.</para> /// <para>The source can be the path of the module relative to <see cref="NodeJSProcessOptions.ProjectPath"/>, /// the module as a string, or the cache identifier of the module.</para> /// <para> If <paramref name="moduleSourceType"/> is not <see cref="ModuleSourceType.Stream"/>, this parameter must be specified. /// Additionally, if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.File"/> or <see cref="ModuleSourceType.String"/>, this parameter must not be an empty string /// or whitespace.</para> /// </param> /// <param name="newCacheIdentifier"><para>The new cache identifier for the module to be invoked.</para> /// <para>If this parameter is not specified, the module will not be cached. If it is specified, this parameter must not be an empty string or whitespace.</para></param> /// <param name="exportName"><para>The name of the function in the module's exports to invoke.</para> /// <para>If this value is not specified, the module's exports object is assumed to be a function, and that function is invoked. /// If it is specified, it must not be an empty string or whitespace.</para></param> /// <param name="args">The arguments for the function to invoke.</param> /// <param name="moduleStreamSource">The module as a <see cref="Stream"/>.</param> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.Stream"/> but /// <paramref name="moduleStreamSource"/> is null.</exception> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.File"/> or /// <see cref="ModuleSourceType.String"/> but <paramref name="moduleSource"/> is null, whitespace or an empty string.</exception> /// <exception cref="ArgumentException">Thrown if <paramref name="moduleSourceType"/> is <see cref="ModuleSourceType.Cache"/> but /// <paramref name="moduleSource"/> is null.</exception> public InvocationRequest(ModuleSourceType moduleSourceType, string moduleSource = null, string newCacheIdentifier = null, string exportName = null, object[] args = null, Stream moduleStreamSource = null) { if (moduleSourceType == ModuleSourceType.Stream) { // moduleSourceType is stream but moduleStreamSource is null if (moduleStreamSource == null) { throw new ArgumentException($"{nameof(moduleSourceType)} is {nameof(ModuleSourceType.Stream)} but {nameof(moduleStreamSource)} is null."); } } else if (moduleSourceType == ModuleSourceType.Cache) { if (moduleSource == null) { // moduleSourceType is cache but moduleSource is null throw new ArgumentException($"{nameof(moduleSourceType)} is {moduleSourceType.ToString()} but {nameof(moduleSource)} is null."); } } else if (string.IsNullOrWhiteSpace(moduleSource)) { // moduleSourceType is file or string but moduleSource is null, whitespace or an empty string throw new ArgumentException($"{nameof(moduleSourceType)} is {moduleSourceType.ToString()} but {nameof(moduleSource)} is null, whitespace or an empty string."); } ModuleSourceType = moduleSourceType; ModuleSource = moduleSource; NewCacheIdentifier = newCacheIdentifier; ExportName = exportName; Args = args; ModuleStreamSource = moduleStreamSource; }
public async Task SerializeToStreamAsync_SerializesNonModuleSourceTypeStreamInvocationRequestsAsync(ModuleSourceType dummyModuleSourceType) { // Arrange const string dummyModuleSource = "dummyModuleSource"; var dummyInvocationRequest = new InvocationRequest(dummyModuleSourceType, dummyModuleSource); var dummyJsonService = new JsonService(); using (ExposedInvocationContent testSubject = CreateInvocationContent(dummyJsonService, dummyInvocationRequest)) { var resultMemoryStream = new MemoryStream(); // Act await testSubject.ExposedSerializeToStreamAsync(resultMemoryStream, null).ConfigureAwait(false); // Assert resultMemoryStream.Position = 0; using (var resultReader = new StreamReader(resultMemoryStream)) { string result = resultReader.ReadToEnd(); Assert.Equal($"{{\"moduleSourceType\":{(int)dummyModuleSourceType},\"moduleSource\":\"{dummyModuleSource}\"}}", result); } } }
public void Constructor_ThrowsArgumentExceptionIfModuleSourceTypeIsFileOrStringButModuleSourceIsNullWhitespaceOrAnEmptyString(ModuleSourceType dummyModuleSourceType, string dummyModuleSource) { // Act and assert ArgumentException result = Assert.Throws <ArgumentException>(() => new InvocationRequest(dummyModuleSourceType, dummyModuleSource)); }
public void Constructor_ThrowsArgumentExceptionIfModuleSourceTypeIsFileOrStringButModuleSourceIsNullWhitespaceOrAnEmptyString(ModuleSourceType dummyModuleSourceType, string dummyModuleSource) { // Act and assert ArgumentException result = Assert.Throws <ArgumentException>(() => new InvocationRequest(dummyModuleSourceType, dummyModuleSource)); Assert.Equal(Strings.ArgumentException_InvocationRequest_ModuleSourceCannotBeNullWhitespaceOrAnEmptyString + "\nParameter name: moduleSource", result.Message, ignoreLineEndingDifferences: true); }
public void Constructor_ThrowsArgumentExceptionIfModuleSourceTypeIsFileOrStringButModuleSourceIsNullWhitespaceOrAnEmptyString(ModuleSourceType dummyModuleSourceType, string dummyModuleSource) { // Act and assert ArgumentException result = Assert.Throws <ArgumentException>(() => new InvocationRequest(dummyModuleSourceType, dummyModuleSource)); Assert.Equal($"moduleSourceType is {dummyModuleSourceType.ToString()} but moduleSource is null, whitespace or an empty string.", result.Message); }