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);
        }
Example #3
0
        /// <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;
        }
Example #4
0
        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);
        }
Example #9
0
        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);
        }