예제 #1
0
    public void OpenReadStream_ReturnsStreamWhoseDisposalReleasesTheJSObject()
    {
        // Arrange: JS runtime that always returns a specific mock IJSStreamReference
        var jsRuntime         = new Mock <IJSRuntime>(MockBehavior.Strict);
        var jsStreamReference = new Mock <IJSStreamReference>();

        jsRuntime.Setup(x => x.InvokeAsync <IJSStreamReference>(It.IsAny <string>(), It.IsAny <CancellationToken>(), It.IsAny <object[]>()))
        .Returns(ValueTask.FromResult(jsStreamReference.Object));

        // Arrange: InputFile
        var inputFile = new InputFile {
            JSRuntime = jsRuntime.Object
        };
        var file = new BrowserFile {
            Owner = inputFile, Size = 5
        };
        var stream = file.OpenReadStream();

        // Assert 1: IJSStreamReference isn't disposed yet
        jsStreamReference.Verify(x => x.DisposeAsync(), Times.Never);

        // Act
        _ = stream.DisposeAsync();

        // Assert: IJSStreamReference is disposed now
        jsStreamReference.Verify(x => x.DisposeAsync());
    }
    public void File_CanSupplySingle()
    {
        var file     = new BrowserFile();
        var instance = new InputFileChangeEventArgs(new[] { file });

        Assert.Same(file, instance.File);
    }
예제 #3
0
    public void SetSize_ThrowsIfSizeIsNegative()
    {
        // Arrange
        var file = new BrowserFile();

        // Act & Assert
        var ex = Assert.Throws <ArgumentOutOfRangeException>(() => file.Size = -7);
    }
예제 #4
0
    public void OpenReadStream_ThrowsIfFileSizeIsLargerThanAllowedSize()
    {
        // Arrange
        var file = new BrowserFile {
            Size = 100
        };

        // Act & Assert
        var ex = Assert.Throws <IOException>(() => file.OpenReadStream(80));

        Assert.Equal("Supplied file with size 100 bytes exceeds the maximum of 80 bytes.", ex.Message);
    }
예제 #5
0
    public BrowserFileStream(
        IJSRuntime jsRuntime,
        ElementReference inputFileElement,
        BrowserFile file,
        long maxAllowedSize,
        CancellationToken cancellationToken)
    {
        _jsRuntime         = jsRuntime;
        _inputFileElement  = inputFileElement;
        _file              = file;
        _maxAllowedSize    = maxAllowedSize;
        _openReadStreamCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);

        OpenReadStreamTask = OpenReadStreamAsync(_openReadStreamCts.Token);
    }
예제 #6
0
    public async Task OpenReadStream_ReturnsStreamWhoseDisposalReleasesTheJSObject_ToleratesDisposalException()
    {
        // Arrange: JS runtime that always returns a specific mock IJSStreamReference whose disposal throws
        var jsRuntime         = new Mock <IJSRuntime>(MockBehavior.Strict);
        var jsStreamReference = new Mock <IJSStreamReference>();

        jsRuntime.Setup(x => x.InvokeAsync <IJSStreamReference>(It.IsAny <string>(), It.IsAny <CancellationToken>(), It.IsAny <object[]>()))
        .Returns(ValueTask.FromResult(jsStreamReference.Object));
        jsStreamReference.Setup(x => x.DisposeAsync()).Throws(new InvalidTimeZoneException());

        // Arrange: InputFile
        var inputFile = new InputFile {
            JSRuntime = jsRuntime.Object
        };
        var file = new BrowserFile {
            Owner = inputFile, Size = 5
        };
        var stream = file.OpenReadStream();

        // Act/Assert. Not throwing is success here.
        await stream.DisposeAsync();
    }
        protected async Task HandleValidSubmit()
        {
            if (BrowserFile != null)
            {
                Logger.LogWarning("Upload using InputFile + HttpClient.");

                var buffer = new byte[BrowserFile.Size];
                await BrowserFile.OpenReadStream().ReadAsync(buffer);

                File.FileName = BrowserFile.Name;
                var res = await FileService.UploadFile(File, buffer);

                NavManager.NavigateTo($"/files/edit/{res.Id}");
            }
            else
            {
                Logger.LogWarning("Upload using JavaScript Interop.");

                var dotNetObj = DotNetObjectReference.Create(this);
                await JSRuntime.InvokeVoidAsync("interop.uploadFile", FileService.GetUploadUrl(), await FileService.GetAccessToken(), File, dotNetObj);
            }
        }
예제 #8
0
 public void AddFile(BrowserFile file)
 {
     this.files.Add(file);
 }