mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 14:13:30 -07:00
resolve comments
This commit is contained in:
parent
84c0c4a041
commit
e82ae9c887
3 changed files with 444 additions and 575 deletions
|
@ -47,23 +47,11 @@ static constexpr int CURRENCY_ID = 16;
|
||||||
static constexpr int GRAPHING_ID = 17;
|
static constexpr int GRAPHING_ID = 17;
|
||||||
// ^^^ THESE CONSTANTS SHOULD NEVER CHANGE ^^^
|
// ^^^ THESE CONSTANTS SHOULD NEVER CHANGE ^^^
|
||||||
|
|
||||||
namespace
|
namespace // put the utils within this TU
|
||||||
{
|
{
|
||||||
Platform::Agile<Windows::System::User^> CurrentUser;
|
Platform::Agile<Windows::System::User^> CurrentUser;
|
||||||
std::mutex GraphingModeCheckMutex;
|
std::mutex GraphingModeCheckMutex;
|
||||||
|
|
||||||
wchar_t* towchar_t(int number)
|
|
||||||
{
|
|
||||||
auto wstr = std::to_wstring(number);
|
|
||||||
return _wcsdup(wstr.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsGraphingModeAvailable()
|
|
||||||
{
|
|
||||||
static bool supportGraph = Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath");
|
|
||||||
return supportGraph;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsGraphingModeEnabled()
|
bool IsGraphingModeEnabled()
|
||||||
{
|
{
|
||||||
static bool isChecked = false;
|
static bool isChecked = false;
|
||||||
|
@ -76,218 +64,183 @@ namespace
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (IsGraphingModeAvailable())
|
auto namedPolicyData = NamedPolicy::GetPolicyFromPathForUser(
|
||||||
{
|
CurrentUser.Get(),
|
||||||
auto namedPolicyData = NamedPolicy::GetPolicyFromPathForUser(
|
L"Education",
|
||||||
CurrentUser.Get(),
|
L"AllowGraphingCalculator");
|
||||||
L"Education",
|
isEnabled = namedPolicyData->GetBoolean();
|
||||||
L"AllowGraphingCalculator");
|
|
||||||
isEnabled = namedPolicyData->GetBoolean();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isEnabled = false;
|
|
||||||
}
|
|
||||||
isChecked = true;
|
isChecked = true;
|
||||||
return isEnabled;
|
return isEnabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// The order of items in this list determines the order of items in the menu.
|
||||||
|
const std::vector<NavCategoryInitializer> s_categoryManifest {
|
||||||
|
NavCategoryInitializer{ ViewMode::Standard,
|
||||||
|
STANDARD_ID,
|
||||||
|
L"Standard",
|
||||||
|
L"StandardMode",
|
||||||
|
L"\uE8EF",
|
||||||
|
CategoryGroupType::Calculator,
|
||||||
|
MyVirtualKey::Number1,
|
||||||
|
L"1",
|
||||||
|
SUPPORTS_ALL },
|
||||||
|
NavCategoryInitializer{ ViewMode::Scientific,
|
||||||
|
SCIENTIFIC_ID,
|
||||||
|
L"Scientific",
|
||||||
|
L"ScientificMode",
|
||||||
|
L"\uF196",
|
||||||
|
CategoryGroupType::Calculator,
|
||||||
|
MyVirtualKey::Number2,
|
||||||
|
L"2",
|
||||||
|
SUPPORTS_ALL },
|
||||||
|
NavCategoryInitializer{ ViewMode::Graphing,
|
||||||
|
GRAPHING_ID,
|
||||||
|
L"Graphing",
|
||||||
|
L"GraphingCalculatorMode",
|
||||||
|
L"\uF770",
|
||||||
|
CategoryGroupType::Calculator,
|
||||||
|
MyVirtualKey::Number3,
|
||||||
|
L"3",
|
||||||
|
SUPPORTS_ALL },
|
||||||
|
NavCategoryInitializer{ ViewMode::Programmer,
|
||||||
|
PROGRAMMER_ID,
|
||||||
|
L"Programmer",
|
||||||
|
L"ProgrammerMode",
|
||||||
|
L"\uECCE",
|
||||||
|
CategoryGroupType::Calculator,
|
||||||
|
MyVirtualKey::Number4,
|
||||||
|
L"4",
|
||||||
|
SUPPORTS_ALL },
|
||||||
|
NavCategoryInitializer{ ViewMode::Date,
|
||||||
|
DATE_ID,
|
||||||
|
L"Date",
|
||||||
|
L"DateCalculationMode",
|
||||||
|
L"\uE787",
|
||||||
|
CategoryGroupType::Calculator,
|
||||||
|
MyVirtualKey::Number5,
|
||||||
|
L"5",
|
||||||
|
SUPPORTS_ALL },
|
||||||
|
NavCategoryInitializer{ ViewMode::Currency,
|
||||||
|
CURRENCY_ID,
|
||||||
|
L"Currency",
|
||||||
|
L"CategoryName_Currency",
|
||||||
|
L"\uEB0D",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Volume,
|
||||||
|
VOLUME_ID,
|
||||||
|
L"Volume",
|
||||||
|
L"CategoryName_Volume",
|
||||||
|
L"\uF1AA",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Length,
|
||||||
|
LENGTH_ID,
|
||||||
|
L"Length",
|
||||||
|
L"CategoryName_Length",
|
||||||
|
L"\uECC6",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Weight,
|
||||||
|
WEIGHT_ID,
|
||||||
|
L"Weight and Mass",
|
||||||
|
L"CategoryName_Weight",
|
||||||
|
L"\uF4C1",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Temperature,
|
||||||
|
TEMPERATURE_ID,
|
||||||
|
L"Temperature",
|
||||||
|
L"CategoryName_Temperature",
|
||||||
|
L"\uE7A3",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
SUPPORTS_NEGATIVE },
|
||||||
|
NavCategoryInitializer{ ViewMode::Energy,
|
||||||
|
ENERGY_ID,
|
||||||
|
L"Energy",
|
||||||
|
L"CategoryName_Energy",
|
||||||
|
L"\uECAD",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Area,
|
||||||
|
AREA_ID,
|
||||||
|
L"Area",
|
||||||
|
L"CategoryName_Area",
|
||||||
|
L"\uE809",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Speed,
|
||||||
|
SPEED_ID,
|
||||||
|
L"Speed",
|
||||||
|
L"CategoryName_Speed",
|
||||||
|
L"\uEADA",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Time,
|
||||||
|
TIME_ID,
|
||||||
|
L"Time",
|
||||||
|
L"CategoryName_Time",
|
||||||
|
L"\uE917",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Power,
|
||||||
|
POWER_ID,
|
||||||
|
L"Power",
|
||||||
|
L"CategoryName_Power",
|
||||||
|
L"\uE945",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
SUPPORTS_NEGATIVE },
|
||||||
|
NavCategoryInitializer{ ViewMode::Data,
|
||||||
|
DATA_ID,
|
||||||
|
L"Data",
|
||||||
|
L"CategoryName_Data",
|
||||||
|
L"\uF20F",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Pressure,
|
||||||
|
PRESSURE_ID,
|
||||||
|
L"Pressure",
|
||||||
|
L"CategoryName_Pressure",
|
||||||
|
L"\uEC4A",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
POSITIVE_ONLY },
|
||||||
|
NavCategoryInitializer{ ViewMode::Angle,
|
||||||
|
ANGLE_ID,
|
||||||
|
L"Angle",
|
||||||
|
L"CategoryName_Angle",
|
||||||
|
L"\uF515",
|
||||||
|
CategoryGroupType::Converter,
|
||||||
|
MyVirtualKey::None,
|
||||||
|
std::nullopt,
|
||||||
|
SUPPORTS_NEGATIVE },
|
||||||
|
};
|
||||||
|
} // namespace unnamed
|
||||||
|
|
||||||
// The order of items in this list determines the order of items in the menu.
|
|
||||||
static std::vector<NavCategoryInitializer> s_categoryManifest = [] {
|
|
||||||
auto res = std::vector<NavCategoryInitializer>{ NavCategoryInitializer{ ViewMode::Standard,
|
|
||||||
STANDARD_ID,
|
|
||||||
L"Standard",
|
|
||||||
L"StandardMode",
|
|
||||||
L"\uE8EF",
|
|
||||||
CategoryGroupType::Calculator,
|
|
||||||
MyVirtualKey::Number1,
|
|
||||||
L"1",
|
|
||||||
SUPPORTS_ALL,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Scientific,
|
|
||||||
SCIENTIFIC_ID,
|
|
||||||
L"Scientific",
|
|
||||||
L"ScientificMode",
|
|
||||||
L"\uF196",
|
|
||||||
CategoryGroupType::Calculator,
|
|
||||||
MyVirtualKey::Number2,
|
|
||||||
L"2",
|
|
||||||
SUPPORTS_ALL,
|
|
||||||
true } };
|
|
||||||
|
|
||||||
int currentIndex = 3;
|
|
||||||
bool supportGraphingCalculator = IsGraphingModeAvailable();
|
|
||||||
if (supportGraphingCalculator)
|
|
||||||
{
|
|
||||||
res.emplace_back(NavCategoryInitializer{ ViewMode::Graphing,
|
|
||||||
GRAPHING_ID,
|
|
||||||
L"Graphing",
|
|
||||||
L"GraphingCalculatorMode",
|
|
||||||
L"\uF770",
|
|
||||||
CategoryGroupType::Calculator,
|
|
||||||
MyVirtualKey::Number3,
|
|
||||||
L"3",
|
|
||||||
SUPPORTS_ALL,
|
|
||||||
false});
|
|
||||||
++currentIndex;
|
|
||||||
}
|
|
||||||
res.insert(
|
|
||||||
res.cend(),
|
|
||||||
{ NavCategoryInitializer{ ViewMode::Programmer,
|
|
||||||
PROGRAMMER_ID,
|
|
||||||
L"Programmer",
|
|
||||||
L"ProgrammerMode",
|
|
||||||
L"\uECCE",
|
|
||||||
CategoryGroupType::Calculator,
|
|
||||||
supportGraphingCalculator ? MyVirtualKey::Number4 : MyVirtualKey::Number3,
|
|
||||||
towchar_t(currentIndex++),
|
|
||||||
SUPPORTS_ALL,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Date,
|
|
||||||
DATE_ID,
|
|
||||||
L"Date",
|
|
||||||
L"DateCalculationMode",
|
|
||||||
L"\uE787",
|
|
||||||
CategoryGroupType::Calculator,
|
|
||||||
supportGraphingCalculator ? MyVirtualKey::Number5 : MyVirtualKey::Number4,
|
|
||||||
towchar_t(currentIndex++),
|
|
||||||
SUPPORTS_ALL,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Currency,
|
|
||||||
CURRENCY_ID,
|
|
||||||
L"Currency",
|
|
||||||
L"CategoryName_Currency",
|
|
||||||
L"\uEB0D",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Volume,
|
|
||||||
VOLUME_ID,
|
|
||||||
L"Volume",
|
|
||||||
L"CategoryName_Volume",
|
|
||||||
L"\uF1AA",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Length,
|
|
||||||
LENGTH_ID,
|
|
||||||
L"Length",
|
|
||||||
L"CategoryName_Length",
|
|
||||||
L"\uECC6",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Weight,
|
|
||||||
WEIGHT_ID,
|
|
||||||
L"Weight and Mass",
|
|
||||||
L"CategoryName_Weight",
|
|
||||||
L"\uF4C1",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Temperature,
|
|
||||||
TEMPERATURE_ID,
|
|
||||||
L"Temperature",
|
|
||||||
L"CategoryName_Temperature",
|
|
||||||
L"\uE7A3",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
SUPPORTS_NEGATIVE,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Energy,
|
|
||||||
ENERGY_ID,
|
|
||||||
L"Energy",
|
|
||||||
L"CategoryName_Energy",
|
|
||||||
L"\uECAD",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Area,
|
|
||||||
AREA_ID,
|
|
||||||
L"Area",
|
|
||||||
L"CategoryName_Area",
|
|
||||||
L"\uE809",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Speed,
|
|
||||||
SPEED_ID,
|
|
||||||
L"Speed",
|
|
||||||
L"CategoryName_Speed",
|
|
||||||
L"\uEADA",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Time,
|
|
||||||
TIME_ID,
|
|
||||||
L"Time",
|
|
||||||
L"CategoryName_Time",
|
|
||||||
L"\uE917",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Power,
|
|
||||||
POWER_ID,
|
|
||||||
L"Power",
|
|
||||||
L"CategoryName_Power",
|
|
||||||
L"\uE945",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
SUPPORTS_NEGATIVE,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Data,
|
|
||||||
DATA_ID,
|
|
||||||
L"Data",
|
|
||||||
L"CategoryName_Data",
|
|
||||||
L"\uF20F",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Pressure,
|
|
||||||
PRESSURE_ID,
|
|
||||||
L"Pressure",
|
|
||||||
L"CategoryName_Pressure",
|
|
||||||
L"\uEC4A",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
POSITIVE_ONLY,
|
|
||||||
true },
|
|
||||||
NavCategoryInitializer{ ViewMode::Angle,
|
|
||||||
ANGLE_ID,
|
|
||||||
L"Angle",
|
|
||||||
L"CategoryName_Angle",
|
|
||||||
L"\uF515",
|
|
||||||
CategoryGroupType::Converter,
|
|
||||||
MyVirtualKey::None,
|
|
||||||
nullptr,
|
|
||||||
SUPPORTS_NEGATIVE,
|
|
||||||
true } });
|
|
||||||
return res;
|
|
||||||
}();
|
|
||||||
|
|
||||||
bool NavCategory::IsCalculatorViewMode(ViewModeType mode)
|
bool NavCategory::IsCalculatorViewMode(ViewModeType mode)
|
||||||
{
|
{
|
||||||
|
@ -347,12 +300,12 @@ NavCategoryGroup::NavCategoryGroup(const NavCategoryGroupInitializer& groupIniti
|
||||||
categoryName,
|
categoryName,
|
||||||
categoryAutomationName,
|
categoryAutomationName,
|
||||||
StringReference(categoryInitializer.glyph),
|
StringReference(categoryInitializer.glyph),
|
||||||
categoryInitializer.accessKey != nullptr ? ref new String(categoryInitializer.accessKey)
|
categoryInitializer.accessKey.has_value() ? ref new String(categoryInitializer.accessKey->c_str())
|
||||||
: resProvider->GetResourceString(nameResourceKey + "AccessKey"),
|
: resProvider->GetResourceString(nameResourceKey + "AccessKey"),
|
||||||
groupMode,
|
groupMode,
|
||||||
categoryInitializer.viewMode,
|
categoryInitializer.viewMode,
|
||||||
categoryInitializer.supportsNegative,
|
categoryInitializer.supportsNegative,
|
||||||
categoryInitializer.isEnabled));
|
categoryInitializer.viewMode != ViewMode::Graphing));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -559,16 +512,13 @@ bool NavCategoryStates::IsValidViewMode(ViewMode mode)
|
||||||
|
|
||||||
bool NavCategoryStates::IsViewModeEnabled(ViewMode mode)
|
bool NavCategoryStates::IsViewModeEnabled(ViewMode mode)
|
||||||
{
|
{
|
||||||
if (mode == ViewMode::Graphing)
|
if (mode != ViewMode::Graphing)
|
||||||
{
|
{
|
||||||
return IsGraphingModeEnabled();
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return std::any_of(
|
return IsGraphingModeEnabled();
|
||||||
s_categoryManifest.cbegin(),
|
|
||||||
s_categoryManifest.cend(),
|
|
||||||
[mode](const auto& initializer) { return initializer.viewMode == mode && initializer.isEnabled; });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,9 +66,8 @@ namespace CalculatorApp::ViewModel
|
||||||
const wchar_t* glyph;
|
const wchar_t* glyph;
|
||||||
CategoryGroupType groupType;
|
CategoryGroupType groupType;
|
||||||
MyVirtualKey virtualKey;
|
MyVirtualKey virtualKey;
|
||||||
const wchar_t* accessKey;
|
std::optional<std::wstring> accessKey;
|
||||||
bool supportsNegative;
|
bool supportsNegative;
|
||||||
bool isEnabled;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -17,136 +17,11 @@ namespace CalculatorUnitTests
|
||||||
TEST_CLASS(NavCategoryUnitTests)
|
TEST_CLASS(NavCategoryUnitTests)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TEST_METHOD(Serialize);
|
|
||||||
TEST_METHOD(Deserialize_AllValid);
|
|
||||||
TEST_METHOD(Deserialize_AllInvalid);
|
|
||||||
|
|
||||||
TEST_METHOD(IsValidViewMode_AllValid);
|
|
||||||
TEST_METHOD(IsValidViewMode_AllInvalid);
|
|
||||||
|
|
||||||
TEST_METHOD(IsCalculatorViewMode);
|
TEST_METHOD(IsCalculatorViewMode);
|
||||||
TEST_METHOD(IsDateCalculatorViewMode);
|
TEST_METHOD(IsDateCalculatorViewMode);
|
||||||
TEST_METHOD(IsConverterViewMode);
|
TEST_METHOD(IsConverterViewMode);
|
||||||
|
|
||||||
TEST_METHOD(GetFriendlyName);
|
|
||||||
TEST_METHOD(GetGroupType);
|
|
||||||
TEST_METHOD(GetIndex);
|
|
||||||
TEST_METHOD(GetPosition);
|
|
||||||
TEST_METHOD(GetIndex_GetPosition_Relationship);
|
|
||||||
TEST_METHOD(GetIndexInGroup);
|
|
||||||
|
|
||||||
TEST_METHOD(GetViewModeForVirtualKey);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void NavCategoryUnitTests::Serialize()
|
|
||||||
{
|
|
||||||
// While values in other tests may change (for example, the order
|
|
||||||
// of a navigation item might change), these values should NEVER
|
|
||||||
// change. We are validating the unique ID for each mode, not
|
|
||||||
// it's position or index.
|
|
||||||
VERIFY_ARE_EQUAL(0, NavCategoryStates::Serialize(ViewMode::Standard));
|
|
||||||
VERIFY_ARE_EQUAL(1, NavCategoryStates::Serialize(ViewMode::Scientific));
|
|
||||||
VERIFY_ARE_EQUAL(2, NavCategoryStates::Serialize(ViewMode::Programmer));
|
|
||||||
VERIFY_ARE_EQUAL(3, NavCategoryStates::Serialize(ViewMode::Date));
|
|
||||||
VERIFY_ARE_EQUAL(16, NavCategoryStates::Serialize(ViewMode::Currency));
|
|
||||||
VERIFY_ARE_EQUAL(4, NavCategoryStates::Serialize(ViewMode::Volume));
|
|
||||||
VERIFY_ARE_EQUAL(5, NavCategoryStates::Serialize(ViewMode::Length));
|
|
||||||
VERIFY_ARE_EQUAL(6, NavCategoryStates::Serialize(ViewMode::Weight));
|
|
||||||
VERIFY_ARE_EQUAL(7, NavCategoryStates::Serialize(ViewMode::Temperature));
|
|
||||||
VERIFY_ARE_EQUAL(8, NavCategoryStates::Serialize(ViewMode::Energy));
|
|
||||||
VERIFY_ARE_EQUAL(9, NavCategoryStates::Serialize(ViewMode::Area));
|
|
||||||
VERIFY_ARE_EQUAL(10, NavCategoryStates::Serialize(ViewMode::Speed));
|
|
||||||
VERIFY_ARE_EQUAL(11, NavCategoryStates::Serialize(ViewMode::Time));
|
|
||||||
VERIFY_ARE_EQUAL(12, NavCategoryStates::Serialize(ViewMode::Power));
|
|
||||||
VERIFY_ARE_EQUAL(13, NavCategoryStates::Serialize(ViewMode::Data));
|
|
||||||
VERIFY_ARE_EQUAL(14, NavCategoryStates::Serialize(ViewMode::Pressure));
|
|
||||||
VERIFY_ARE_EQUAL(15, NavCategoryStates::Serialize(ViewMode::Angle));
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(-1, NavCategoryStates::Serialize(ViewMode::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::Deserialize_AllValid()
|
|
||||||
{
|
|
||||||
// While values in other tests may change (for example, the order
|
|
||||||
// of a navigation item might change), these values should NEVER
|
|
||||||
// change. We are validating the unique ID for each mode, not
|
|
||||||
// it's position or index.
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategoryStates::Deserialize(ref new Box<int>(0)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategoryStates::Deserialize(ref new Box<int>(1)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategoryStates::Deserialize(ref new Box<int>(2)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategoryStates::Deserialize(ref new Box<int>(3)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Currency, NavCategoryStates::Deserialize(ref new Box<int>(16)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Volume, NavCategoryStates::Deserialize(ref new Box<int>(4)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Length, NavCategoryStates::Deserialize(ref new Box<int>(5)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Weight, NavCategoryStates::Deserialize(ref new Box<int>(6)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Temperature, NavCategoryStates::Deserialize(ref new Box<int>(7)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Energy, NavCategoryStates::Deserialize(ref new Box<int>(8)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Area, NavCategoryStates::Deserialize(ref new Box<int>(9)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Speed, NavCategoryStates::Deserialize(ref new Box<int>(10)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Time, NavCategoryStates::Deserialize(ref new Box<int>(11)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Power, NavCategoryStates::Deserialize(ref new Box<int>(12)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Data, NavCategoryStates::Deserialize(ref new Box<int>(13)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Pressure, NavCategoryStates::Deserialize(ref new Box<int>(14)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Angle, NavCategoryStates::Deserialize(ref new Box<int>(15)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::Deserialize_AllInvalid()
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(nullptr));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new String(L"fail")));
|
|
||||||
|
|
||||||
// Boundary testing
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new Box<int>(-1)));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new Box<int>(18)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::IsValidViewMode_AllValid()
|
|
||||||
{
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Standard));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Scientific));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Programmer));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Date));
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Currency));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Volume));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Length));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Weight));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Temperature));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Energy));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Area));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Speed));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Time));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Power));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Data));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Pressure));
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Angle));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::IsValidViewMode_AllInvalid()
|
|
||||||
{
|
|
||||||
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(ViewMode::None));
|
|
||||||
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
// There are 18 total options so int 18 should be the first invalid
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(17)));
|
|
||||||
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(18)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// There are 17 total options when graphing calculator is not present, so int 17 should be the first invalid
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(16)));
|
|
||||||
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(17)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Also verify the lower bound
|
|
||||||
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(0)));
|
|
||||||
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(-1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::IsCalculatorViewMode()
|
void NavCategoryUnitTests::IsCalculatorViewMode()
|
||||||
{
|
{
|
||||||
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Standard));
|
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Standard));
|
||||||
|
@ -154,10 +29,7 @@ namespace CalculatorUnitTests
|
||||||
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Programmer));
|
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Programmer));
|
||||||
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Date));
|
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Date));
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Graphing));
|
||||||
{
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Currency));
|
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Currency));
|
||||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Volume));
|
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Volume));
|
||||||
|
@ -181,10 +53,7 @@ namespace CalculatorUnitTests
|
||||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Programmer));
|
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Programmer));
|
||||||
|
|
||||||
VERIFY_IS_TRUE(NavCategory::IsDateCalculatorViewMode(ViewMode::Date));
|
VERIFY_IS_TRUE(NavCategory::IsDateCalculatorViewMode(ViewMode::Date));
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Graphing));
|
||||||
{
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Currency));
|
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Currency));
|
||||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Volume));
|
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Volume));
|
||||||
|
@ -207,10 +76,7 @@ namespace CalculatorUnitTests
|
||||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Scientific));
|
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Scientific));
|
||||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Programmer));
|
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Programmer));
|
||||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Date));
|
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Date));
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Graphing));
|
||||||
{
|
|
||||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Currency));
|
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Currency));
|
||||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Volume));
|
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Volume));
|
||||||
|
@ -227,178 +93,45 @@ namespace CalculatorUnitTests
|
||||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Angle));
|
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Angle));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetFriendlyName()
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Standard"), NavCategoryStates::GetFriendlyName(ViewMode::Standard));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Scientific"), NavCategoryStates::GetFriendlyName(ViewMode::Scientific));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Programmer"), NavCategoryStates::GetFriendlyName(ViewMode::Programmer));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Date"), NavCategoryStates::GetFriendlyName(ViewMode::Date));
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Graphing"), NavCategoryStates::GetFriendlyName(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Currency"), NavCategoryStates::GetFriendlyName(ViewMode::Currency));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Volume"), NavCategoryStates::GetFriendlyName(ViewMode::Volume));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Length"), NavCategoryStates::GetFriendlyName(ViewMode::Length));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Weight and Mass"), NavCategoryStates::GetFriendlyName(ViewMode::Weight));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Temperature"), NavCategoryStates::GetFriendlyName(ViewMode::Temperature));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Energy"), NavCategoryStates::GetFriendlyName(ViewMode::Energy));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Area"), NavCategoryStates::GetFriendlyName(ViewMode::Area));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Speed"), NavCategoryStates::GetFriendlyName(ViewMode::Speed));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Time"), NavCategoryStates::GetFriendlyName(ViewMode::Time));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Power"), NavCategoryStates::GetFriendlyName(ViewMode::Power));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Data"), NavCategoryStates::GetFriendlyName(ViewMode::Data));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Pressure"), NavCategoryStates::GetFriendlyName(ViewMode::Pressure));
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"Angle"), NavCategoryStates::GetFriendlyName(ViewMode::Angle));
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(StringReference(L"None"), NavCategoryStates::GetFriendlyName(ViewMode::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetGroupType()
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Standard));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Scientific));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Programmer));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Date));
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Graphing));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Currency));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Volume));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Length));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Weight));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Temperature));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Energy));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Area));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Speed));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Time));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Power));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Data));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Pressure));
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Angle));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetIndex()
|
|
||||||
{
|
|
||||||
// Index is the 0-based ordering of modes
|
|
||||||
vector<ViewMode> orderedModes;
|
|
||||||
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Graphing, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency,
|
|
||||||
ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy, ViewMode::Area,
|
|
||||||
ViewMode::Speed, ViewMode::Time, ViewMode::Power, ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency, ViewMode::Volume,
|
|
||||||
ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy, ViewMode::Area, ViewMode::Speed,
|
|
||||||
ViewMode::Time, ViewMode::Power, ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
|
||||||
}
|
|
||||||
|
|
||||||
auto orderedModesSize = size(orderedModes);
|
|
||||||
for (size_t index = 0; index < orderedModesSize; index++)
|
|
||||||
{
|
|
||||||
ViewMode mode = orderedModes[index];
|
|
||||||
VERIFY_ARE_EQUAL(index, (size_t)NavCategoryStates::GetIndex(mode));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndex(ViewMode::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetPosition()
|
|
||||||
{
|
|
||||||
// Position is the 1-based ordering of modes
|
|
||||||
vector<ViewMode> orderedModes;
|
|
||||||
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Graphing, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency,
|
|
||||||
ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy, ViewMode::Area,
|
|
||||||
ViewMode::Speed, ViewMode::Time, ViewMode::Power, ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency, ViewMode::Volume,
|
|
||||||
ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy, ViewMode::Area, ViewMode::Speed,
|
|
||||||
ViewMode::Time, ViewMode::Power, ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
|
||||||
}
|
|
||||||
|
|
||||||
auto orderedModesSize = size(orderedModes);
|
|
||||||
for (size_t pos = 1; pos <= orderedModesSize; pos++)
|
|
||||||
{
|
|
||||||
ViewMode mode = orderedModes[pos - 1];
|
|
||||||
VERIFY_ARE_EQUAL(pos, (size_t)NavCategoryStates::GetPosition(mode));
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetPosition(ViewMode::None));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetIndex_GetPosition_Relationship()
|
|
||||||
{
|
|
||||||
// Index should be 1 less than Position.
|
|
||||||
// The other checks verify the order of Index and Position.
|
|
||||||
// Just verify the relationship here.
|
|
||||||
VERIFY_ARE_EQUAL(NavCategoryStates::GetIndex(ViewMode::Standard) + 1, NavCategoryStates::GetPosition(ViewMode::Standard));
|
|
||||||
VERIFY_ARE_EQUAL(NavCategoryStates::GetPosition(ViewMode::Volume) - 1, NavCategoryStates::GetIndex(ViewMode::Volume));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetIndexInGroup()
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(0, NavCategoryStates::GetIndexInGroup(ViewMode::Standard, CategoryGroupType::Calculator));
|
|
||||||
VERIFY_ARE_EQUAL(1, NavCategoryStates::GetIndexInGroup(ViewMode::Scientific, CategoryGroupType::Calculator));
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(2, NavCategoryStates::GetIndexInGroup(ViewMode::Graphing, CategoryGroupType::Calculator));
|
|
||||||
VERIFY_ARE_EQUAL(3, NavCategoryStates::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
|
||||||
VERIFY_ARE_EQUAL(4, NavCategoryStates::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(2, NavCategoryStates::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
|
||||||
VERIFY_ARE_EQUAL(3, NavCategoryStates::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
|
||||||
}
|
|
||||||
VERIFY_ARE_EQUAL(0, NavCategoryStates::GetIndexInGroup(ViewMode::Currency, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(1, NavCategoryStates::GetIndexInGroup(ViewMode::Volume, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(2, NavCategoryStates::GetIndexInGroup(ViewMode::Length, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(3, NavCategoryStates::GetIndexInGroup(ViewMode::Weight, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(4, NavCategoryStates::GetIndexInGroup(ViewMode::Temperature, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(5, NavCategoryStates::GetIndexInGroup(ViewMode::Energy, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(6, NavCategoryStates::GetIndexInGroup(ViewMode::Area, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(7, NavCategoryStates::GetIndexInGroup(ViewMode::Speed, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(8, NavCategoryStates::GetIndexInGroup(ViewMode::Time, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(9, NavCategoryStates::GetIndexInGroup(ViewMode::Power, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(10, NavCategoryStates::GetIndexInGroup(ViewMode::Data, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(11, NavCategoryStates::GetIndexInGroup(ViewMode::Pressure, CategoryGroupType::Converter));
|
|
||||||
VERIFY_ARE_EQUAL(12, NavCategoryStates::GetIndexInGroup(ViewMode::Angle, CategoryGroupType::Converter));
|
|
||||||
|
|
||||||
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndexInGroup(ViewMode::None, CategoryGroupType::Calculator));
|
|
||||||
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndexInGroup(ViewMode::None, CategoryGroupType::Converter));
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavCategoryUnitTests::GetViewModeForVirtualKey()
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number1));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number2));
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Graphing, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number5));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
|
||||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CLASS(NavCategoryGroupUnitTests)
|
TEST_CLASS(NavCategoryGroupUnitTests)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TEST_METHOD(CreateNavCategoryGroup);
|
TEST_METHOD(CreateNavCategoryGroup)
|
||||||
|
{
|
||||||
|
IObservableVector<NavCategoryGroup ^> ^ menuOptions = NavCategoryStates::CreateMenuOptions();
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(2, menuOptions->Size);
|
||||||
|
|
||||||
|
NavCategoryGroup ^ calculatorGroup = menuOptions->GetAt(0);
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, calculatorGroup->GroupType);
|
||||||
|
|
||||||
|
IObservableVector<NavCategory ^> ^ calculatorCategories = calculatorGroup->Categories;
|
||||||
|
ValidateNavCategory(calculatorCategories, 0u, ViewMode::Standard);
|
||||||
|
ValidateNavCategory(calculatorCategories, 1u, ViewMode::Scientific);
|
||||||
|
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Graphing);
|
||||||
|
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Programmer);
|
||||||
|
ValidateNavCategory(calculatorCategories, 4u, ViewMode::Date);
|
||||||
|
VERIFY_ARE_EQUAL(5, calculatorCategories->Size);
|
||||||
|
|
||||||
|
NavCategoryGroup ^ converterGroup = menuOptions->GetAt(1);
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, converterGroup->GroupType);
|
||||||
|
|
||||||
|
IObservableVector<NavCategory ^> ^ converterCategories = converterGroup->Categories;
|
||||||
|
VERIFY_ARE_EQUAL(13, converterCategories->Size);
|
||||||
|
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency);
|
||||||
|
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume);
|
||||||
|
ValidateNavCategory(converterCategories, 2u, ViewMode::Length);
|
||||||
|
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight);
|
||||||
|
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature);
|
||||||
|
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy);
|
||||||
|
ValidateNavCategory(converterCategories, 6u, ViewMode::Area);
|
||||||
|
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed);
|
||||||
|
ValidateNavCategory(converterCategories, 8u, ViewMode::Time);
|
||||||
|
ValidateNavCategory(converterCategories, 9u, ViewMode::Power);
|
||||||
|
ValidateNavCategory(converterCategories, 10u, ViewMode::Data);
|
||||||
|
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure);
|
||||||
|
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ValidateNavCategory(IObservableVector<NavCategory ^> ^ categories, unsigned int index, ViewMode expectedMode)
|
void ValidateNavCategory(IObservableVector<NavCategory ^> ^ categories, unsigned int index, ViewMode expectedMode)
|
||||||
|
@ -408,52 +141,239 @@ namespace CalculatorUnitTests
|
||||||
|
|
||||||
NavCategory ^ category = categories->GetAt(index);
|
NavCategory ^ category = categories->GetAt(index);
|
||||||
VERIFY_ARE_EQUAL(expectedMode, category->ViewMode);
|
VERIFY_ARE_EQUAL(expectedMode, category->ViewMode);
|
||||||
|
VERIFY_ARE_EQUAL(category->IsEnabled, (expectedMode != ViewMode::Graphing) ? true : false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void NavCategoryGroupUnitTests::CreateNavCategoryGroup()
|
TEST_CLASS(NavCategoryStatesUnitTests)
|
||||||
{
|
{
|
||||||
IObservableVector<NavCategoryGroup ^> ^ menuOptions = NavCategoryStates::CreateMenuOptions();
|
public:
|
||||||
|
TEST_METHOD(Serialize)
|
||||||
VERIFY_ARE_EQUAL(2, menuOptions->Size);
|
|
||||||
|
|
||||||
NavCategoryGroup ^ calculatorGroup = menuOptions->GetAt(0);
|
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, calculatorGroup->GroupType);
|
|
||||||
|
|
||||||
IObservableVector<NavCategory ^> ^ calculatorCategories = calculatorGroup->Categories;
|
|
||||||
ValidateNavCategory(calculatorCategories, 0u, ViewMode::Standard);
|
|
||||||
ValidateNavCategory(calculatorCategories, 1u, ViewMode::Scientific);
|
|
||||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
|
||||||
{
|
{
|
||||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Graphing);
|
// While values in other tests may change (for example, the order
|
||||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Programmer);
|
// of a navigation item might change), these values should NEVER
|
||||||
ValidateNavCategory(calculatorCategories, 4u, ViewMode::Date);
|
// change. We are validating the unique ID for each mode, not
|
||||||
VERIFY_ARE_EQUAL(5, calculatorCategories->Size);
|
// it's position or index.
|
||||||
}
|
VERIFY_ARE_EQUAL(0, NavCategoryStates::Serialize(ViewMode::Standard));
|
||||||
else
|
VERIFY_ARE_EQUAL(1, NavCategoryStates::Serialize(ViewMode::Scientific));
|
||||||
{
|
VERIFY_ARE_EQUAL(2, NavCategoryStates::Serialize(ViewMode::Programmer));
|
||||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Programmer);
|
VERIFY_ARE_EQUAL(3, NavCategoryStates::Serialize(ViewMode::Date));
|
||||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Date);
|
VERIFY_ARE_EQUAL(16, NavCategoryStates::Serialize(ViewMode::Currency));
|
||||||
VERIFY_ARE_EQUAL(4, calculatorCategories->Size);
|
VERIFY_ARE_EQUAL(4, NavCategoryStates::Serialize(ViewMode::Volume));
|
||||||
|
VERIFY_ARE_EQUAL(5, NavCategoryStates::Serialize(ViewMode::Length));
|
||||||
|
VERIFY_ARE_EQUAL(6, NavCategoryStates::Serialize(ViewMode::Weight));
|
||||||
|
VERIFY_ARE_EQUAL(7, NavCategoryStates::Serialize(ViewMode::Temperature));
|
||||||
|
VERIFY_ARE_EQUAL(8, NavCategoryStates::Serialize(ViewMode::Energy));
|
||||||
|
VERIFY_ARE_EQUAL(9, NavCategoryStates::Serialize(ViewMode::Area));
|
||||||
|
VERIFY_ARE_EQUAL(10, NavCategoryStates::Serialize(ViewMode::Speed));
|
||||||
|
VERIFY_ARE_EQUAL(11, NavCategoryStates::Serialize(ViewMode::Time));
|
||||||
|
VERIFY_ARE_EQUAL(12, NavCategoryStates::Serialize(ViewMode::Power));
|
||||||
|
VERIFY_ARE_EQUAL(13, NavCategoryStates::Serialize(ViewMode::Data));
|
||||||
|
VERIFY_ARE_EQUAL(14, NavCategoryStates::Serialize(ViewMode::Pressure));
|
||||||
|
VERIFY_ARE_EQUAL(15, NavCategoryStates::Serialize(ViewMode::Angle));
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(-1, NavCategoryStates::Serialize(ViewMode::None));
|
||||||
}
|
}
|
||||||
|
|
||||||
NavCategoryGroup ^ converterGroup = menuOptions->GetAt(1);
|
TEST_METHOD(Deserialize_AllValid)
|
||||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, converterGroup->GroupType);
|
{
|
||||||
|
// While values in other tests may change (for example, the order
|
||||||
|
// of a navigation item might change), these values should NEVER
|
||||||
|
// change. We are validating the unique ID for each mode, not
|
||||||
|
// it's position or index.
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategoryStates::Deserialize(ref new Box<int>(0)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategoryStates::Deserialize(ref new Box<int>(1)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategoryStates::Deserialize(ref new Box<int>(2)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategoryStates::Deserialize(ref new Box<int>(3)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Currency, NavCategoryStates::Deserialize(ref new Box<int>(16)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Volume, NavCategoryStates::Deserialize(ref new Box<int>(4)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Length, NavCategoryStates::Deserialize(ref new Box<int>(5)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Weight, NavCategoryStates::Deserialize(ref new Box<int>(6)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Temperature, NavCategoryStates::Deserialize(ref new Box<int>(7)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Energy, NavCategoryStates::Deserialize(ref new Box<int>(8)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Area, NavCategoryStates::Deserialize(ref new Box<int>(9)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Speed, NavCategoryStates::Deserialize(ref new Box<int>(10)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Time, NavCategoryStates::Deserialize(ref new Box<int>(11)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Power, NavCategoryStates::Deserialize(ref new Box<int>(12)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Data, NavCategoryStates::Deserialize(ref new Box<int>(13)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Pressure, NavCategoryStates::Deserialize(ref new Box<int>(14)));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Angle, NavCategoryStates::Deserialize(ref new Box<int>(15)));
|
||||||
|
}
|
||||||
|
|
||||||
IObservableVector<NavCategory ^> ^ converterCategories = converterGroup->Categories;
|
TEST_METHOD(Deserialize_AllInvalid)
|
||||||
VERIFY_ARE_EQUAL(13, converterCategories->Size);
|
{
|
||||||
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency);
|
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(nullptr));
|
||||||
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume);
|
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new String(L"fail")));
|
||||||
ValidateNavCategory(converterCategories, 2u, ViewMode::Length);
|
|
||||||
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight);
|
// Boundary testing
|
||||||
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature);
|
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new Box<int>(-1)));
|
||||||
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy);
|
VERIFY_ARE_EQUAL(ViewMode::None, NavCategoryStates::Deserialize(ref new Box<int>(18)));
|
||||||
ValidateNavCategory(converterCategories, 6u, ViewMode::Area);
|
}
|
||||||
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed);
|
|
||||||
ValidateNavCategory(converterCategories, 8u, ViewMode::Time);
|
TEST_METHOD(IsValidViewMode_AllValid)
|
||||||
ValidateNavCategory(converterCategories, 9u, ViewMode::Power);
|
{
|
||||||
ValidateNavCategory(converterCategories, 10u, ViewMode::Data);
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Standard));
|
||||||
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure);
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Scientific));
|
||||||
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle);
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Programmer));
|
||||||
}
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Date));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Graphing));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Currency));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Volume));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Length));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Weight));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Temperature));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Energy));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Area));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Speed));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Time));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Power));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Data));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Pressure));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(ViewMode::Angle));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(IsValidViewMode_AllInvalid)
|
||||||
|
{
|
||||||
|
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(ViewMode::None));
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(17)));
|
||||||
|
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(18)));
|
||||||
|
|
||||||
|
// Also verify the lower bound
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(0)));
|
||||||
|
VERIFY_IS_FALSE(NavCategoryStates::IsValidViewMode(static_cast<ViewMode>(-1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetFriendlyName)
|
||||||
|
{
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Standard"), NavCategoryStates::GetFriendlyName(ViewMode::Standard));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Scientific"), NavCategoryStates::GetFriendlyName(ViewMode::Scientific));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Programmer"), NavCategoryStates::GetFriendlyName(ViewMode::Programmer));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Date"), NavCategoryStates::GetFriendlyName(ViewMode::Date));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Graphing"), NavCategoryStates::GetFriendlyName(ViewMode::Graphing));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Currency"), NavCategoryStates::GetFriendlyName(ViewMode::Currency));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Volume"), NavCategoryStates::GetFriendlyName(ViewMode::Volume));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Length"), NavCategoryStates::GetFriendlyName(ViewMode::Length));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Weight and Mass"), NavCategoryStates::GetFriendlyName(ViewMode::Weight));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Temperature"), NavCategoryStates::GetFriendlyName(ViewMode::Temperature));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Energy"), NavCategoryStates::GetFriendlyName(ViewMode::Energy));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Area"), NavCategoryStates::GetFriendlyName(ViewMode::Area));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Speed"), NavCategoryStates::GetFriendlyName(ViewMode::Speed));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Time"), NavCategoryStates::GetFriendlyName(ViewMode::Time));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Power"), NavCategoryStates::GetFriendlyName(ViewMode::Power));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Data"), NavCategoryStates::GetFriendlyName(ViewMode::Data));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Pressure"), NavCategoryStates::GetFriendlyName(ViewMode::Pressure));
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"Angle"), NavCategoryStates::GetFriendlyName(ViewMode::Angle));
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(StringReference(L"None"), NavCategoryStates::GetFriendlyName(ViewMode::None));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetGroupType)
|
||||||
|
{
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Standard));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Scientific));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Programmer));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Date));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategoryStates::GetGroupType(ViewMode::Graphing));
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Currency));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Volume));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Length));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Weight));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Temperature));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Energy));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Area));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Speed));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Time));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Power));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Data));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Pressure));
|
||||||
|
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategoryStates::GetGroupType(ViewMode::Angle));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetIndex)
|
||||||
|
{
|
||||||
|
// Index is the 0-based ordering of modes
|
||||||
|
const auto orderedModesSize = _orderedModes.size();
|
||||||
|
for (size_t index = 0; index < orderedModesSize; index++)
|
||||||
|
{
|
||||||
|
ViewMode mode = _orderedModes[index];
|
||||||
|
VERIFY_ARE_EQUAL(index, (size_t)NavCategoryStates::GetIndex(mode));
|
||||||
|
}
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndex(ViewMode::None));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetPosition)
|
||||||
|
{
|
||||||
|
// Position is the 1-based ordering of modes
|
||||||
|
const auto orderedModesSize = _orderedModes.size();
|
||||||
|
for (size_t pos = 1; pos <= orderedModesSize; pos++)
|
||||||
|
{
|
||||||
|
ViewMode mode = _orderedModes[pos - 1];
|
||||||
|
VERIFY_ARE_EQUAL(pos, (size_t)NavCategoryStates::GetPosition(mode));
|
||||||
|
}
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetPosition(ViewMode::None));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetIndex_GetPosition_Relationship)
|
||||||
|
{
|
||||||
|
// Index should be 1 less than Position.
|
||||||
|
// The other checks verify the order of Index and Position.
|
||||||
|
// Just verify the relationship here.
|
||||||
|
VERIFY_ARE_EQUAL(NavCategoryStates::GetIndex(ViewMode::Standard) + 1, NavCategoryStates::GetPosition(ViewMode::Standard));
|
||||||
|
VERIFY_ARE_EQUAL(NavCategoryStates::GetPosition(ViewMode::Volume) - 1, NavCategoryStates::GetIndex(ViewMode::Volume));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetIndexInGroup)
|
||||||
|
{
|
||||||
|
VERIFY_ARE_EQUAL(0, NavCategoryStates::GetIndexInGroup(ViewMode::Standard, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(1, NavCategoryStates::GetIndexInGroup(ViewMode::Scientific, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(2, NavCategoryStates::GetIndexInGroup(ViewMode::Graphing, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(3, NavCategoryStates::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(4, NavCategoryStates::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(0, NavCategoryStates::GetIndexInGroup(ViewMode::Currency, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(1, NavCategoryStates::GetIndexInGroup(ViewMode::Volume, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(2, NavCategoryStates::GetIndexInGroup(ViewMode::Length, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(3, NavCategoryStates::GetIndexInGroup(ViewMode::Weight, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(4, NavCategoryStates::GetIndexInGroup(ViewMode::Temperature, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(5, NavCategoryStates::GetIndexInGroup(ViewMode::Energy, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(6, NavCategoryStates::GetIndexInGroup(ViewMode::Area, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(7, NavCategoryStates::GetIndexInGroup(ViewMode::Speed, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(8, NavCategoryStates::GetIndexInGroup(ViewMode::Time, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(9, NavCategoryStates::GetIndexInGroup(ViewMode::Power, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(10, NavCategoryStates::GetIndexInGroup(ViewMode::Data, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(11, NavCategoryStates::GetIndexInGroup(ViewMode::Pressure, CategoryGroupType::Converter));
|
||||||
|
VERIFY_ARE_EQUAL(12, NavCategoryStates::GetIndexInGroup(ViewMode::Angle, CategoryGroupType::Converter));
|
||||||
|
|
||||||
|
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndexInGroup(ViewMode::None, CategoryGroupType::Calculator));
|
||||||
|
VERIFY_ARE_EQUAL(-1, NavCategoryStates::GetIndexInGroup(ViewMode::None, CategoryGroupType::Converter));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(GetViewModeForVirtualKey)
|
||||||
|
{
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number1));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number2));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Graphing, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
||||||
|
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategoryStates::GetViewModeForVirtualKey(MyVirtualKey::Number5));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(IsViewModeEnabled_ShouldBeTrue_ExceptGraphingMode)
|
||||||
|
{
|
||||||
|
for (const auto& mode : _orderedModes)
|
||||||
|
{
|
||||||
|
if (mode != ViewMode::Graphing)
|
||||||
|
{
|
||||||
|
VERIFY_IS_TRUE(NavCategoryStates::IsViewModeEnabled(mode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const static inline std::vector<ViewMode> _orderedModes {
|
||||||
|
ViewMode::Standard, ViewMode::Scientific, ViewMode::Graphing, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency,
|
||||||
|
ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy, ViewMode::Area,
|
||||||
|
ViewMode::Speed, ViewMode::Time, ViewMode::Power, ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue