mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-12-15 20:19:17 +08:00
cc708e7ac5
* fixes #20187 * handles PR reviews - fix some typos - updated dev docs - added PR examples to tests - improve method naming style * Fix typo Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> --------- Co-authored-by: José Javier Rodríguez Zas <jj.jobs2live@outlook.com> Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
4.9 KiB
4.9 KiB
Calculator Plugin
The Calculator plugin as the name suggests is used to perform calculations on the user entered query.
Optional plugin settings
-
We have the following settings that the user can configure to change the behavior of the plugin:
Key Default value Name Description InputUseEnglishFormat` | false` | se English (United States) number format for input | gnores your system setting and expects numbers in the format '1,000.50' | OutputUseEnglishFormat` | false` | se English (United States) number format for output | gnores your system setting and returns numbers in the format '1000.50' | -
The optional plugin settings are implemented via the
ISettingProvider
interface fromWox.Plugin
project. All available settings for the plugin are defined in theMain
class of the plugin.
Technical details
BracketHelper
- This helper validates the bracket usage in the input string.
CalculateHelper
- The
CalculateHelper.cs
class checks to see if the user entered query is a valid input to the calculator and only if the input is valid does it perform the operation.- It does so by matching the user query to a valid regex.
- This class also handles some human multiplication expression like
2(1+2)
and(2+3)(3+4)
in order to be computed byMages
lib.- It does so by matching some regex and inserting
'*'
where appropriate, e.g:2(1+2) -> 2 * (1+2)
- It takes into account the combination of numbers (
num
), constants (const
), functions (func
) and expressions in parentheses ((exp)
). - The blank spaces between them are also considered.
- Some combinations were not handled as they are not common such as
'const num'
or'func const'
- It does so by matching some regex and inserting
CalculateEngine
- The main computation is done in the
CalculateEngine.cs
file using theMages
library.
var result = CalculateEngine.Interpret(query.Search, CultureInfo.CurrentUICulture);
CalculateResult
- The class which encapsulates the result of the computation.
- It comprises of the
Result
andRoundedResult
properties.
ErrorHandler
- The class which encapsulates the code to log errors and format the user message.
- It returns an error result if the user searches with the activation command. This error result is shown to the user.
Score
The score of each result from the calculator plugin is 300
.
Unit Tests
We have a Unit Test project that executes various test to ensure that the plugin works as expected.
BracketHelperTests
- The
BracketHelperTests.cs
class contains tests to validate that brackets are handled correctly.
ExtendedCalculatorParserTests
- The
ExtendedCalculatorParserTests.cs
class contains tests to validate that the input is parsed correctly and the result is correct.
NumberTranslatorTests
- The
NumberTranslatorTests.cs
class contains tests to validate that each number is converted correctly based on the defined locals.
QueryTests
- The
QueryTests.cs
class contains tests to validate that the user gets the correct results when searching.