matlab.automation.streams.OutputStream - Interface that determines where to send text output - MATLAB (original) (raw)
Namespace: matlab.automation.streams
Interface that determines where to send text output
Renamed from matlab.unittest.plugins.OutputStream
in R2023a
Description
The matlab.automation.streams.OutputStream
class provides an interface that you can use to specify where plugins direct their text output. To create a custom output stream, implement a print
method that handles the formatted text information passed to it. Many text-oriented plugins accept an OutputStream
instance to redirect the text they produce in a configurable manner.
The matlab.automation.streams.OutputStream
class is a handle class.
Examples
In a file in your current folder, create a class named ToFigure
that redirects the plugin output to a figure and displays it in a list box within the figure. Define the Figure
and ListBox
properties to represent the figure and the handle to the list box, respectively.
classdef ToFigure < matlab.automation.streams.OutputStream
properties(SetAccess = private)
Figure
end
properties(Access = private)
ListBox
end
You must implement the print
method for any subclass ofOutputStream
. In this example, the method creates a new figure (if necessary), formats the incoming text, and then adds it to the output stream.
methods
function print(stream,formatSpec,varargin)
% Create the figure
if isempty(stream.Figure) || ~ishghandle(stream.Figure)
stream.createFigure
end
newStr = sprintf(formatSpec,varargin{:});
oldStr = strjoin(stream.ListBox.String','\n');
% Create the full message
fullStr = strjoin([oldStr,newStr]);
fullStrArray = strsplit(fullStr,'\n','CollapseDelimiters',false);
% Set the string and selection
stream.ListBox.String = fullStrArray';
stream.ListBox.Value = numel(fullStrArray);
drawnow
end
end
In a methods
block with private
access, implement a helper method named createFigure
that creates the figure and the list box used by the plugin.
methods(Access = private)
function createFigure(stream)
stream.Figure = figure(...
'Name', 'Unit Test Output',...
'WindowStyle', 'docked');
stream.ListBox = uicontrol(...
'Parent', stream.Figure,...
'Style', 'listbox',...
'String', {},...
'Units', 'normalized',...
'Position', [.05 .05 .9 .9],...
'Max', 2, ...
'FontName', 'Monospaced',...
'FontSize', 13);
end
end
end
Save the ToFigure
class. Now, in your current folder, create a file named ExampleTest.m
containing the following test class. TheverifyEqual
qualification in testOne
causes a test failure. The verification in testTwo
passes. The test corresponding to testThree
passes without producing an output.
classdef ExampleTest < matlab.unittest.TestCase methods(Test) function testOne(testCase) % Test fails testCase.verifyEqual(5,4,'Testing 5==4'); end function testTwo(testCase) % Test passes testCase.verifyEqual(5,5,'Testing 5==5'); end function testThree(testCase) % test code end end end
At the command prompt, create a test suite from the ExampleTest
class.
import matlab.unittest.TestRunner import matlab.unittest.plugins.DiagnosticsValidationPlugin
suite = testsuite('ExampleTest');
Create a test runner that displays output to the command window.
runner = TestRunner.withTextOutput;
Create a DiagnosticsValidationPlugin instance that explicitly specifies that its output should go to a figure using theToFigure
output stream.
plugin = DiagnosticsValidationPlugin(ToFigure);
Add the plugin to the runner and run the tests.
runner.addPlugin(plugin) result = runner.run(suite);
Running ExampleTest
================================================================================
Verification failed in ExampleTest/testOne.
----------------
Test Diagnostic:
----------------
Testing 5==4
---------------------
Framework Diagnostic:
---------------------
verifyEqual failed.
--> The numeric values are not equal using "isequaln".
--> Failure table:
Actual Expected Error RelativeError
______ ________ _____ _____________
5 4 1 0.25
Actual Value:
5
Expected Value:
4
------------------
Stack Information:
------------------
In C:\work\ExampleTest.m (ExampleTest.testOne) at 4
... Done ExampleTest
Failure Summary:
Name Failed Incomplete Reason(s)
==================================================================
ExampleTest/testOne X Failed by verification.
Only the test failures produce output to the screen. By default,TestRunner.withTextOutput
uses a DiagnosticsOutputPlugin to display output on the screen.
In addition to the default text output being displayed on the screen, theDiagnosticsValidationPlugin
output is directed to a docked figure. The figure shows this text.
Validation of Test Diagnostic:
Testing 5==4
Validation of Test Diagnostic:
Testing 5==5
The DiagnosticsValidationPlugin
displays the diagnostic information regardless of whether the tests encounter failure conditions.
Version History
Introduced in R2014a
To reflect support for additional automated workflows,matlab.unittest.plugins.OutputStream
is now namedmatlab.automation.streams.OutputStream
. The behavior of this class remains the same, and existing instances of matlab.unittest.plugins.OutputStream
in your code continue to work as expected. There are no plans to remove support for existing instances of matlab.unittest.plugins.OutputStream
.