diff --git a/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.cpp b/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.cpp index 53aecc42d14478603c442648525c72adae70dde5..d9a94774439d441f5af5ecc7d587211acfb1bc59 100644 --- a/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.cpp +++ b/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.cpp @@ -21,9 +21,7 @@ namespace OHOS::Ace::NG { namespace { -const int DOUBLE_DIGIT = 10; const std::string COLON = ":"; -const std::string ZERO = "0"; } // namespace std::string DatePickerAccessibilityProperty::GetText() const @@ -91,30 +89,31 @@ std::string DatePickerAccessibilityProperty::GetShowTimePickerText() const CHECK_NULL_RETURN(hourColumn, ""); auto hourPickerColumnPattern = hourColumn->GetPattern(); CHECK_NULL_RETURN(hourPickerColumnPattern, ""); + auto minuteColumn = allChildNode["minute"].Upgrade(); + CHECK_NULL_RETURN(minuteColumn, ""); + auto minutePickerColumnPattern = minuteColumn->GetPattern(); + CHECK_NULL_RETURN(minutePickerColumnPattern, ""); std::string result; - auto hour = static_cast(hourPickerColumnPattern->GetCurrentIndex()); - if (!timePickerRowPattern->GetHour24()) { - hour += 1; + auto options = timePickerRowPattern->GetOptions(); + if (options.find(hourColumn) != options.end()) { + std::string hour = options[hourColumn][hourPickerColumnPattern->GetCurrentIndex()]; + result += hour; + } + if (options.find(minuteColumn) != options.end()) { + std::string minute = options[minuteColumn][minutePickerColumnPattern->GetCurrentIndex()]; + result += COLON + minute; } - std::string textHour = std::to_string(hour); - if (hour < DOUBLE_DIGIT) { - if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) { - textHour = ZERO + textHour; - } else if (timePickerRowPattern->GetHour24()) { - if (timePickerRowPattern->GetPrefixHour() != ZeroPrefixType::HIDE) { - textHour = ZERO + textHour; - } - } else { - if (timePickerRowPattern->GetPrefixHour() == ZeroPrefixType::SHOW) { - textHour = ZERO + textHour; - } + if (timePickerRowPattern->GetHasSecond()) { + auto secondColumn = allChildNode["second"].Upgrade(); + CHECK_NULL_RETURN(secondColumn, ""); + auto secondPickerColumnPattern = secondColumn->GetPattern(); + CHECK_NULL_RETURN(secondPickerColumnPattern, ""); + if (options.find(secondColumn) != options.end()) { + std::string second = options[secondColumn][secondPickerColumnPattern->GetCurrentIndex()]; + result += COLON + second; } } - result += textHour; - - GetMinuteText(timeNode, result); - GetSecondText(timeNode, result); if (!timePickerRowPattern->GetHour24()) { auto amPmColumn = allChildNode["amPm"].Upgrade(); CHECK_NULL_RETURN(amPmColumn, ""); @@ -127,47 +126,4 @@ std::string DatePickerAccessibilityProperty::GetShowTimePickerText() const } return result; } - -void DatePickerAccessibilityProperty::GetMinuteText(const RefPtr& frameNode, std::string& result) const -{ - CHECK_NULL_VOID(frameNode); - auto timePickerRowPattern = frameNode->GetPattern(); - CHECK_NULL_VOID(timePickerRowPattern); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); - auto minuteColumn = allChildNode["minute"].Upgrade(); - CHECK_NULL_VOID(minuteColumn); - - auto minutePickerColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_VOID(minutePickerColumnPattern); - int minute = static_cast(minutePickerColumnPattern->GetCurrentIndex()); - std::string textMinute = std::to_string(minute); - if (minute < DOUBLE_DIGIT) { - if (timePickerRowPattern->GetPrefixMinute() != ZeroPrefixType::HIDE) { - textMinute = ZERO + textMinute; - } - } - result += COLON + textMinute; -} - -void DatePickerAccessibilityProperty::GetSecondText(const RefPtr& frameNode, std::string& result) const -{ - CHECK_NULL_VOID(frameNode); - auto timePickerRowPattern = frameNode->GetPattern(); - CHECK_NULL_VOID(timePickerRowPattern); - if (timePickerRowPattern->GetHasSecond()) { - auto allChildNode = timePickerRowPattern->GetAllChildNode(); - auto secondColumn = allChildNode["second"].Upgrade(); - CHECK_NULL_VOID(secondColumn); - auto secondPickerColumnPattern = secondColumn->GetPattern(); - CHECK_NULL_VOID(secondPickerColumnPattern); - int second = static_cast(secondPickerColumnPattern->GetCurrentIndex()); - std::string textSecond = std::to_string(second); - if (second < DOUBLE_DIGIT) { - if (timePickerRowPattern->GetPrefixSecond() != ZeroPrefixType::HIDE) { - textSecond = ZERO + textSecond; - } - } - result += COLON + textSecond; - } -} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.h b/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.h index e80d59ee84b5fde0eacdfe35f4b769835095a446..b160acbb1c982a0576f3038bf178e4f403d906a3 100644 --- a/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.h +++ b/frameworks/core/components_ng/pattern/picker/datepicker_accessibility_property.h @@ -33,8 +33,6 @@ public: private: std::string GetShowTimePickerText() const; std::string GetColumnsText(const RefPtr& frameNode, bool isMonthDaysDateNode) const; - void GetMinuteText(const RefPtr& frameNode, std::string& result) const; - void GetSecondText(const RefPtr& frameNode, std::string& result) const; ACE_DISALLOW_COPY_AND_MOVE(DatePickerAccessibilityProperty); }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/time_picker/timepicker_model_ng.cpp b/frameworks/core/components_ng/pattern/time_picker/timepicker_model_ng.cpp index e8b1957693121bdc95af2466f41c5fe76d1100a1..e6e8d3568f3de76809c3722bb2223e609eaf8a22 100644 --- a/frameworks/core/components_ng/pattern/time_picker/timepicker_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/time_picker/timepicker_model_ng.cpp @@ -265,8 +265,10 @@ void TimePickerModelNG::SetHour24(bool isUseMilitaryTime) auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); CHECK_NULL_VOID(frameNode); auto timePickerRowPattern = frameNode->GetPattern(); - timePickerRowPattern->ClearOptionsHour(); - timePickerRowPattern->SetHour24(isUseMilitaryTime); + if (isUseMilitaryTime != timePickerRowPattern->GetCachedHour24()) { + timePickerRowPattern->ClearOptionsHour(); + timePickerRowPattern->SetHour24(isUseMilitaryTime); + } } void TimePickerModelNG::SetEnableCascade(bool isEnableCascade) @@ -286,7 +288,7 @@ void TimePickerModelNG::SetDateTimeOptions(ZeroPrefixType& hourType, auto timePickerRowPattern = frameNode->GetPattern(); if ((timePickerRowPattern->GetPrefixHour() != hourType) || (timePickerRowPattern->GetPrefixMinute() != minuteType) || - (timePickerRowPattern->GetPrefixSecond() != secondType)) { + (timePickerRowPattern->GetHasSecond() && timePickerRowPattern->GetPrefixSecond() != secondType)) { timePickerRowPattern->SetDateTimeOptionUpdate(true); } timePickerRowPattern->SetPrefixHour(hourType); @@ -744,8 +746,10 @@ void TimePickerModelNG::SetHour24(FrameNode* frameNode, bool isUseMilitaryTime) ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, IsUseMilitaryTime, isUseMilitaryTime, frameNode); CHECK_NULL_VOID(frameNode); auto timePickerRowPattern = frameNode->GetPattern(); - timePickerRowPattern->ClearOptionsHour(); - timePickerRowPattern->SetHour24(isUseMilitaryTime); + if (isUseMilitaryTime != timePickerRowPattern->GetCachedHour24()) { + timePickerRowPattern->ClearOptionsHour(); + timePickerRowPattern->SetHour24(isUseMilitaryTime); + } } void TimePickerModelNG::SetEnableCascade(FrameNode* frameNode, bool isEnableCascade) diff --git a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.cpp b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.cpp index 0dd233776273399af66bb630dff640cf65266cfd..39fddc86a6336ce52e6a10ef13d3a6baa97f24fe 100644 --- a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.cpp +++ b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.cpp @@ -22,9 +22,7 @@ namespace OHOS::Ace::NG { namespace { -const int DOUBLE_DIGIT = 10; const std::string COLON = ":"; -const std::string ZERO = "0"; } // namespace std::string TimePickerRowAccessibilityProperty::GetText() const @@ -38,30 +36,31 @@ std::string TimePickerRowAccessibilityProperty::GetText() const CHECK_NULL_RETURN(hourColumn, ""); auto hourPickerColumnPattern = hourColumn->GetPattern(); CHECK_NULL_RETURN(hourPickerColumnPattern, ""); + auto minuteColumn = allChildNode["minute"].Upgrade(); + CHECK_NULL_RETURN(minuteColumn, ""); + auto minutePickerColumnPattern = minuteColumn->GetPattern(); + CHECK_NULL_RETURN(minutePickerColumnPattern, ""); std::string result; - auto hour = static_cast(hourPickerColumnPattern->GetCurrentIndex()); // + 1; - if (!timePickerRowPattern->GetHour24()) { - hour += 1; + auto options = timePickerRowPattern->GetOptions(); + if (options.find(hourColumn) != options.end()) { + std::string hour = options[hourColumn][hourPickerColumnPattern->GetCurrentIndex()]; + result += hour; + } + if (options.find(minuteColumn) != options.end()) { + std::string minute = options[minuteColumn][minutePickerColumnPattern->GetCurrentIndex()]; + result += COLON + minute; } - std::string textHour = std::to_string(hour); - if (hour < DOUBLE_DIGIT) { - if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) { - textHour = ZERO + textHour; - } else if (timePickerRowPattern->GetHour24()) { - if (timePickerRowPattern->GetPrefixHour() != ZeroPrefixType::HIDE) { - textHour = ZERO + textHour; - } - } else { - if (timePickerRowPattern->GetPrefixHour() == ZeroPrefixType::SHOW) { - textHour = ZERO + textHour; - } + if (timePickerRowPattern->GetHasSecond()) { + auto secondColumn = allChildNode["second"].Upgrade(); + CHECK_NULL_RETURN(secondColumn, ""); + auto secondPickerColumnPattern = secondColumn->GetPattern(); + CHECK_NULL_RETURN(secondPickerColumnPattern, ""); + if (options.find(secondColumn) != options.end()) { + std::string second = options[secondColumn][secondPickerColumnPattern->GetCurrentIndex()]; + result += COLON + second; } } - result += textHour; - - GetMinuteText(result); - GetSecondText(result); if (!timePickerRowPattern->GetHour24()) { auto amPmColumn = allChildNode["amPm"].Upgrade(); CHECK_NULL_RETURN(amPmColumn, ""); @@ -80,51 +79,6 @@ std::string TimePickerRowAccessibilityProperty::GetText() const return result; } -void TimePickerRowAccessibilityProperty::GetMinuteText(std::string& result) const -{ - auto frameNode = host_.Upgrade(); - CHECK_NULL_VOID(frameNode); - auto timePickerRowPattern = frameNode->GetPattern(); - CHECK_NULL_VOID(timePickerRowPattern); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); - auto minuteColumn = allChildNode["minute"].Upgrade(); - CHECK_NULL_VOID(minuteColumn); - - auto minutePickerColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_VOID(minutePickerColumnPattern); - int minute = static_cast(minutePickerColumnPattern->GetCurrentIndex()); - std::string textMinute = std::to_string(minute); - if (minute < DOUBLE_DIGIT) { - if (timePickerRowPattern->GetPrefixMinute() != ZeroPrefixType::HIDE) { - textMinute = ZERO + textMinute; - } - } - result += COLON + textMinute; -} - -void TimePickerRowAccessibilityProperty::GetSecondText(std::string& result) const -{ - auto frameNode = host_.Upgrade(); - CHECK_NULL_VOID(frameNode); - auto timePickerRowPattern = frameNode->GetPattern(); - CHECK_NULL_VOID(timePickerRowPattern); - if (timePickerRowPattern->GetHasSecond()) { - auto allChildNode = timePickerRowPattern->GetAllChildNode(); - auto secondColumn = allChildNode["second"].Upgrade(); - CHECK_NULL_VOID(secondColumn); - auto secondPickerColumnPattern = secondColumn->GetPattern(); - CHECK_NULL_VOID(secondPickerColumnPattern); - int second = static_cast(secondPickerColumnPattern->GetCurrentIndex()); - std::string textSecond = std::to_string(second); - if (second < DOUBLE_DIGIT) { - if (timePickerRowPattern->GetPrefixSecond() != ZeroPrefixType::HIDE) { - textSecond = ZERO + textSecond; - } - } - result += COLON + textSecond; - } -} - std::string TimePickerRowAccessibilityProperty::GetShowDatePickerText() const { auto frameNode = host_.Upgrade(); diff --git a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.h b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.h index f7103d2c8bba0c15fc86b69af86576474b5d5de9..f8c41901b956bd58e685b8c0ecd6bfa5556485db 100644 --- a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.h +++ b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_accessibility_property.h @@ -29,8 +29,6 @@ public: ~TimePickerRowAccessibilityProperty() override = default; std::string GetText() const override; - void GetMinuteText(std::string& result) const; - void GetSecondText(std::string& result) const; private: std::string GetShowDatePickerText() const; diff --git a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.cpp b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.cpp index a5a2d0c294703e040b0c6cab40c556ed77c152a0..1e3b7f68622f6624ac35720b0971b6e67a0c5df1 100644 --- a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.cpp +++ b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.cpp @@ -32,7 +32,6 @@ constexpr int32_t CHILD_WITH_AMPM_SIZE = 3; constexpr int32_t CHILD_WITHOUT_AMPM_SIZE = 2; constexpr uint32_t AM_PM_HOUR_12 = 12; constexpr uint32_t AM_PM_HOUR_11 = 11; -constexpr uint32_t MINUTE_10 = 10; const int32_t AM_PM_COUNT = 3; const Dimension PRESS_INTERVAL = 4.0_vp; const Dimension PRESS_RADIUS = 8.0_vp; @@ -52,15 +51,20 @@ const Dimension LINE_WIDTH = 1.5_vp; const int32_t RATE = 2; const PickerTime START_DEFAULT_TIME = PickerTime(0, 0, 0); const PickerTime END_DEFAULT_TIME = PickerTime(23, 59, 59); +const uint32_t TIME_0 = 0; +const uint32_t TIME_9 = 9; +const uint32_t TIME_59 = 59; const uint32_t INDEX_AM_0 = 0; const uint32_t INDEX_PM_1 = 1; const uint32_t INDEX_HOUR_STRAT = 0; const uint32_t INDEX_MINUTE_STRAT = 0; const uint32_t INDEX_MINUTE_END = 59; const uint32_t INDEX_SECOND_STRAT = 0; -const uint32_t INDEX_SECOND_ADD_ZERO = 10; const uint32_t INDEX_SECOND_END = 59; const uint32_t SIZE_OF_AMPM_COLUMN_OPTION = 2; +const std::string ZERO_PREFIX = "0"; +const std::string HOUR_STR_11 = "11"; +const std::string HOUR_STR_12 = "12"; constexpr float PICKER_MAXFONTSCALE = 1.0f; constexpr float DEFAULT_SIZE_ZERO = 0.0f; } // namespace @@ -343,7 +347,9 @@ void TimePickerRowPattern::OnModifyDone() CHECK_NULL_VOID(host); auto pickerProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(pickerProperty); - isForceUpdate_ = isForceUpdate_ || (loop_ != pickerProperty->GetLoopValue(true)); + isForceUpdate_ = isForceUpdate_ || + (loop_ != pickerProperty->GetLoopValue(true)) || + (hour24_ != pickerProperty->GetIsUseMilitaryTimeValue(false)); if (isFiredTimeChange_ && !isForceUpdate_ && !isDateTimeOptionUpdate_) { isFiredTimeChange_ = false; ColumnPatternInitHapticController(); @@ -355,6 +361,7 @@ void TimePickerRowPattern::OnModifyDone() isDateTimeOptionUpdate_ = false; ClearFocus(); loop_ = pickerProperty->GetLoopValue(true); + UpdateTranslatedOptionsMap(); UpdateLanguageAndAmPmTimeOrder(); CreateOrDeleteSecondNode(); CreateAmPmNode(); @@ -638,44 +645,34 @@ PickerTime TimePickerRowPattern::GetCurrentTime() auto minuteColumn = allChildNode_["minute"].Upgrade(); CHECK_NULL_RETURN(hourColumn, time); CHECK_NULL_RETURN(minuteColumn, time); - auto hourPickerColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_RETURN(hourPickerColumnPattern, time); - auto minutePickerColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_RETURN(minutePickerColumnPattern, time); - auto hourPickerColumnIndex = hourPickerColumnPattern->GetCurrentIndex(); - auto hour = GetOptionsValue(hourColumn, hourPickerColumnIndex); - auto minutePickerColumnIdex = minutePickerColumnPattern->GetCurrentIndex(); - auto minute = GetOptionsValue(minuteColumn, minutePickerColumnIdex); - - if (startTime_.ToMinutes() == START_DEFAULT_TIME.ToMinutes() && - endTime_.ToMinutes() == END_DEFAULT_TIME.ToMinutes()) { - if (GetHour24()) { - time.SetHour(hourPickerColumnPattern->GetCurrentIndex()); // hour from 0 to 23, index from 0 to 23 - } else if (amPmColumn) { - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - CHECK_NULL_RETURN(amPmPickerColumnPattern, time); - time.SetHour(GetHourFromAmPm( - amPmPickerColumnPattern->GetCurrentIndex() == 0, hourPickerColumnPattern->GetCurrentIndex() + 1)); - } - time.SetMinute(minutePickerColumnPattern->GetCurrentIndex()); // minute from 0 to 59, index from 0 to 59 - } else { - if (GetHour24()) { - time.SetHour(hourPickerColumnPattern->GetCurrentIndex() + startTime_.GetHour()); - } else if (amPmColumn) { - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - CHECK_NULL_RETURN(amPmPickerColumnPattern, time); - time.SetHour( - GetHourFromAmPm(amPmPickerColumnPattern->GetCurrentIndex() == 0, StringUtils::StringToUint(hour))); - } - time.SetMinute(StringUtils::StringToUint(minute)); + auto hourColumnPattern = hourColumn->GetPattern(); + CHECK_NULL_RETURN(hourColumnPattern, time); + auto minuteColumnPattern = minuteColumn->GetPattern(); + CHECK_NULL_RETURN(minuteColumnPattern, time); + + auto hourColumnIndex = hourColumnPattern->GetCurrentIndex(); + auto hour = options_[hourColumn][hourColumnIndex]; + if (GetHour24()) { + time.SetHour(StringUtils::StringToUint(hour)); + } else if (amPmColumn) { + auto amPmColumnPattern = amPmColumn->GetPattern(); + CHECK_NULL_RETURN(amPmColumnPattern, time); + time.SetHour( + GetHourFromAmPm(amPmColumnPattern->GetCurrentIndex() == INDEX_AM_0, StringUtils::StringToUint(hour))); } + + auto minuteColumnIndex = minuteColumnPattern->GetCurrentIndex(); + auto minute = options_[minuteColumn][minuteColumnIndex]; + time.SetMinute(StringUtils::StringToUint(minute)); if (hasSecond_) { auto secondColumn = allChildNode_["second"].Upgrade(); CHECK_NULL_RETURN(secondColumn, time); - auto secondPickerColumnPattern = secondColumn->GetPattern(); - CHECK_NULL_RETURN(secondPickerColumnPattern, time); - time.SetSecond(secondPickerColumnPattern->GetCurrentIndex()); // second from 0 to 59, index from 0 to 59 + auto secondColumnPattern = secondColumn->GetPattern(); + CHECK_NULL_RETURN(secondColumnPattern, time); + auto secondColumnIdex = secondColumnPattern->GetCurrentIndex(); + auto second = options_[secondColumn][secondColumnIdex]; + time.SetSecond(StringUtils::StringToUint(second)); // second from 0 to 59, index from 0 to 59 } return time; } @@ -698,38 +695,34 @@ PickerTime TimePickerRowPattern::GetCurrentEnterTime() auto minuteColumn = allChildNode_["minute"].Upgrade(); CHECK_NULL_RETURN(hourColumn, time); CHECK_NULL_RETURN(minuteColumn, time); - auto hourPickerColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_RETURN(hourPickerColumnPattern, time); - auto minutePickerColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_RETURN(minutePickerColumnPattern, time); + auto hourColumnPattern = hourColumn->GetPattern(); + CHECK_NULL_RETURN(hourColumnPattern, time); + auto minuteColumnPattern = minuteColumn->GetPattern(); + CHECK_NULL_RETURN(minuteColumnPattern, time); + auto hourColumnIndex = hourColumnPattern->GetEnterIndex(); + auto hour = options_[hourColumn][hourColumnIndex]; if (GetHour24()) { - if (IsStartEndTimeDefined()) { - time.SetHour(hourPickerColumnPattern->GetEnterIndex() + startTime_.GetHour()); - } else { - time.SetHour(hourPickerColumnPattern->GetEnterIndex()); // hour from 0 to 23, index from 0 to 23 - } + time.SetHour(StringUtils::StringToUint(hour)); } else if (amPmColumn) { - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - CHECK_NULL_RETURN(amPmPickerColumnPattern, time); - if (IsStartEndTimeDefined()) { - auto hourPickerColumnIndex = hourPickerColumnPattern->GetEnterIndex(); - auto hour = GetOptionsValue(hourColumn, hourPickerColumnIndex); - time.SetHour( - GetHourFromAmPm(amPmPickerColumnPattern->GetEnterIndex() == 0, StringUtils::StringToUint(hour))); - } else { - time.SetHour(GetHourFromAmPm( - amPmPickerColumnPattern->GetEnterIndex() == 0, hourPickerColumnPattern->GetEnterIndex() + 1)); - } + auto amPmColumnPattern = amPmColumn->GetPattern(); + CHECK_NULL_RETURN(amPmColumnPattern, time); + time.SetHour( + GetHourFromAmPm(amPmColumnPattern->GetCurrentIndex() == INDEX_AM_0, StringUtils::StringToUint(hour))); } + + auto minuteColumnIdex = minuteColumnPattern->GetEnterIndex(); + auto minute = options_[minuteColumn][minuteColumnIdex]; + time.SetMinute(StringUtils::StringToUint(minute)); - time.SetMinute(minutePickerColumnPattern->GetEnterIndex()); // minute from 0 to 59, index from 0 to 59 if (hasSecond_) { auto secondColumn = allChildNode_["second"].Upgrade(); CHECK_NULL_RETURN(secondColumn, time); - auto secondPickerColumnPattern = secondColumn->GetPattern(); - CHECK_NULL_RETURN(secondPickerColumnPattern, time); - time.SetSecond(secondPickerColumnPattern->GetEnterIndex()); // second from 0 to 59, index from 0 to 59 + auto secondColumnPattern = secondColumn->GetPattern(); + CHECK_NULL_RETURN(secondColumnPattern, time); + auto secondColumnIdex = secondColumnPattern->GetEnterIndex(); + auto second = options_[secondColumn][secondColumnIdex]; + time.SetSecond(StringUtils::StringToUint(second)); // second from 0 to 59, index from 0 to 59 } return time; } @@ -768,7 +761,7 @@ void TimePickerRowPattern::HandleColumnChange(const RefPtr& tag, bool } } - HandleColumnsChangeTimeRange(tag); + HandleColumnsChangeTimeRange(tag, isAdd); } bool TimePickerRowPattern::IsStartEndTimeDefined() @@ -778,8 +771,89 @@ bool TimePickerRowPattern::IsStartEndTimeDefined() return isStartEndTimeDefined; } -void TimePickerRowPattern::HandleColumnsChangeTimeRange(const RefPtr& tag) +bool TimePickerRowPattern::CheckHourIndexAtStart(uint32_t amPmIndex, uint32_t hourIndex, bool nextStart) +{ + uint32_t targetIndex = INDEX_HOUR_STRAT; + if (nextStart) { + ++targetIndex; + } + if (GetHour24()) { + if (hourIndex == targetIndex) { + return true; + } + } else { + if (hourIndex == targetIndex) { + if (amPmIndex == INDEX_AM_0 || + (definedAMHours_.size() == 0 && amPmIndex == INDEX_PM_1)) { + return true; + } + } + } + return false; +} + +bool TimePickerRowPattern::CheckHourIndexAtEnd(uint32_t amPmIndex, uint32_t hourIndex, bool prevEnd) { + uint32_t indexToReduce = 0; + if (prevEnd) { + ++indexToReduce; + } + if (GetHour24()) { + if (hourIndex == defined24Hours_.size() - 1 - indexToReduce) { + return true; + } + } else { + if (amPmIndex == INDEX_PM_1) { + if (hourIndex == definedPMHours_.size() - 1 - indexToReduce) { + return true; + } + } else if (definedPMHours_.size() == 0) { + if (hourIndex == definedAMHours_.size() - 1 - indexToReduce) { + return true; + } + } + } + return false; +} + +bool TimePickerRowPattern::IsNeedToRebuildColumn(bool isHour, bool isAdd, + int32_t amPmIndexInt, int32_t hourIndexInt, int32_t minuteIndexInt) +{ + uint32_t amPmIndex = static_cast(amPmIndexInt); + uint32_t hourIndex = static_cast(hourIndexInt); + bool atStartHour = CheckHourIndexAtStart(amPmIndex, hourIndex, false); + bool nextStartHour = CheckHourIndexAtStart(amPmIndex, hourIndex, true); + bool atEndHour = CheckHourIndexAtEnd(amPmIndex, hourIndex, false); + bool prevEndHour = CheckHourIndexAtEnd(amPmIndex, hourIndex, true); + if (isHour) { // process hour column change + if (atStartHour || atEndHour || (nextStartHour && isAdd) || (prevEndHour && !isAdd)) { + return true; + } + } else { + uint32_t minuteIndex = static_cast(minuteIndexInt); + if (!hasSecond_) { + return false; + } + if (atStartHour && minuteIndex == INDEX_MINUTE_STRAT) { + return true; // at start minute + } + if (atStartHour && minuteIndex == INDEX_MINUTE_STRAT + 1 && isAdd) { + return true; // from start minute to start minute + 1 + } + uint32_t endIndex = endTime_.GetMinute() - 1; + if (atEndHour && minuteIndex == endIndex) { + return true; // at end minute + } + if (atEndHour and minuteIndex == endIndex - 1 && !isAdd) { + return true; // from end minute to end minute - 1 + } + } + return false; +} + +void TimePickerRowPattern::HandleColumnsChangeTimeRange(const RefPtr& tag, bool isAdd) +{ + RecordHourMinuteValues(); if (IsStartEndTimeDefined()) { auto hourColumn = allChildNode_["hour"].Upgrade(); CHECK_NULL_VOID(hourColumn); @@ -791,49 +865,29 @@ void TimePickerRowPattern::HandleColumnsChangeTimeRange(const RefPtr& auto minuteColumnPattern = minuteColumn->GetPattern(); CHECK_NULL_VOID(minuteColumnPattern); auto amPmColumn = allChildNode_["amPm"].Upgrade(); - auto secondColumn = allChildNode_["second"].Upgrade(); if (!GetHour24() && tag == amPmColumn) { - options_[hourColumn].clear(); - options_[minuteColumn].clear(); UpdateHourAndMinuteTimeRange(tag); - UpdateSecondTimeRange(); hourColumnPattern->FlushCurrentOptions(); minuteColumnPattern->FlushCurrentOptions(); auto amPmColumnPattern = amPmColumn->GetPattern(); CHECK_NULL_VOID(amPmColumnPattern); amPmColumnPattern->FlushCurrentOptions(); - if (hasSecond_ && secondColumn) { - HandleSecondsChangeTimeRange(secondColumn); - } } else if (tag == hourColumn || tag == minuteColumn) { - options_[hourColumn].clear(); - options_[minuteColumn].clear(); + int32_t amPmIndex = 0; + if (!GetHour24()) { + auto amPmColumnPattern = amPmColumn->GetPattern(); + CHECK_NULL_VOID(amPmColumnPattern); + amPmIndex = amPmColumnPattern->GetCurrentIndex(); + } + int32_t hourIndex = hourColumnPattern->GetCurrentIndex(); + int32_t minuteIndex = minuteColumnPattern->GetCurrentIndex(); + if (!IsNeedToRebuildColumn(tag == hourColumn, isAdd, amPmIndex, hourIndex, minuteIndex)) { + return; + } UpdateHourAndMinuteTimeRange(tag); hourColumnPattern->FlushCurrentOptions(); minuteColumnPattern->FlushCurrentOptions(); - if (hasSecond_ && secondColumn) { - HandleSecondsChangeTimeRange(secondColumn); - } - } else if (tag == secondColumn) { - HandleSecondsChangeTimeRange(secondColumn); } - oldHourValue_ = GetOptionsCurrentValue(hourColumn); - oldMinuteValue_ = GetOptionsCurrentValue(minuteColumn); - } -} - -void TimePickerRowPattern::HandleSecondsChangeTimeRange(const RefPtr& secondColumn) -{ - if (hasSecond_ && secondColumn) { - options_[secondColumn].clear(); - UpdateSecondTimeRange(); - auto secondColumnPattern = secondColumn->GetPattern(); - CHECK_NULL_VOID(secondColumnPattern); - secondColumnPattern->SetOptions(GetOptionsCount()); - secondColumnPattern->SetShowCount(GetShowCount()); - secondColumnPattern->FlushCurrentOptions(); - secondColumn->MarkModifyDone(); - secondColumn->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } } @@ -841,53 +895,22 @@ void TimePickerRowPattern::UpdateHourAndMinuteTimeRange(const RefPtr& { auto hourColumn = allChildNode_["hour"].Upgrade(); CHECK_NULL_VOID(hourColumn); - auto hourColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_VOID(hourColumnPattern); auto minuteColumn = allChildNode_["minute"].Upgrade(); CHECK_NULL_VOID(minuteColumn); - auto minuteColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_VOID(minuteColumnPattern); auto amPmColumn = allChildNode_["amPm"].Upgrade(); - // update hour column's options - HourChangeBuildTimeRange(); if (!GetHour24() && tag == amPmColumn) { - // update Hour column option after changing ampm column - // and set corresponding new index based on old value - uint32_t newIndex = INDEX_HOUR_STRAT; - if (!GetOptionsIndex(hourColumn, oldHourValue_, newIndex)) { - auto uintOldHour = StringUtils::StringToUint(oldHourValue_); - if (((IsAmJudgeByAmPmColumn(amPmColumn) && uintOldHour == AM_PM_HOUR_12) ? INDEX_HOUR_STRAT : uintOldHour) < - startTime_.GetHour()) { - newIndex = INDEX_HOUR_STRAT; - } else { - newIndex = options_[hourColumn].size() - 1; - } - } - hourColumnPattern->SetCurrentIndex(newIndex); - hourColumnPattern->SetEnterIndex(newIndex); + options_[hourColumn].clear(); + HandleHourBuildTimeRange(oldHourValue_); } - oldHourValue_ = GetOptionsCurrentValue(hourColumn); - + oldHourValue_ = GetCurrentTime().GetHour(); + // update minute column's options - auto currentHourOf24 = StringUtils::StringToUint(oldHourValue_); - if (!GetHour24()) { - currentHourOf24 = GetHourFromAmPm(IsAmJudgeByAmPmColumn(amPmColumn), StringUtils::StringToUint(oldHourValue_)); - } - MinuteChangeBuildTimeRange(currentHourOf24); if (tag != minuteColumn) { - uint32_t newIndex = INDEX_MINUTE_STRAT; - if (!GetOptionsIndex(minuteColumn, oldMinuteValue_, newIndex)) { - if (StringUtils::StringToUint(oldMinuteValue_) < startTime_.GetMinute()) { - newIndex = INDEX_MINUTE_STRAT; - } else { - newIndex = options_[minuteColumn].size() - 1; - } - } - minuteColumnPattern->SetCurrentIndex(newIndex); - minuteColumnPattern->SetEnterIndex(newIndex); + options_[minuteColumn].clear(); + HandleMinuteBuildTimeRange(oldHourValue_, oldMinuteValue_); } - oldMinuteValue_ = GetOptionsCurrentValue(minuteColumn); + oldMinuteValue_ = GetCurrentTime().GetMinute(); } bool TimePickerRowPattern::IsAmJudgeByAmPmColumn(const RefPtr& amPmColumn) @@ -901,7 +924,7 @@ bool TimePickerRowPattern::IsAmJudgeByAmPmColumn(const RefPtr& amPmCo return isAm; } -void TimePickerRowPattern::UpdateSecondTimeRange() +void TimePickerRowPattern::HandleSecondBuildTimeRange() { auto secondColumn = allChildNode_["second"].Upgrade(); CHECK_NULL_VOID(secondColumn); @@ -910,37 +933,33 @@ void TimePickerRowPattern::UpdateSecondTimeRange() optionsTotalCount_[secondColumn] = 0; for (uint32_t second = INDEX_SECOND_STRAT; second <= INDEX_SECOND_END; second++) { // time's second from 0 to 59 - if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && - GetPrefixSecond() == ZeroPrefixType::HIDE) { - options_[secondColumn][second] = std::to_string(second); - } else { - if (second < INDEX_SECOND_ADD_ZERO) { // time's second less than 10 - options_[secondColumn][second] = std::string("0") + std::to_string(second); - } else { - options_[secondColumn][second] = std::to_string(second); - } - } + options_[secondColumn][second] = GetSecondColumnFormatString(second); optionsTotalCount_[secondColumn]++; } secondColumnPattern->SetOptions(GetOptionsCount()); } -void TimePickerRowPattern::HourChangeBuildTimeRange() +void TimePickerRowPattern::HandleHourBuildTimeRange(uint32_t hour) { if (GetHour24()) { - Hour24ChangeBuildTimeRange(); + HandleHour24BuildTimeRange(); + std::string selectedParseHour = GetHourColumnFormatString(hour); + SetHourColumnIndexByTime(selectedParseHour); } else { - Hour12ChangeBuildTimeRange(); + HandleHour12BuildTimeRange(); + std::string selectedParseHour = GetHourColumnFormatString(GetAmPmHour(hour)); + SetHourColumnIndexByTime(selectedParseHour); } } -void TimePickerRowPattern::Hour24ChangeBuildTimeRange() +void TimePickerRowPattern::HandleHour24BuildTimeRange() { auto hourColumn = allChildNode_["hour"].Upgrade(); CHECK_NULL_VOID(hourColumn); optionsTotalCount_[hourColumn] = 0; auto hourColumnPattern = hourColumn->GetPattern(); CHECK_NULL_VOID(hourColumnPattern); + options_[hourColumn].clear(); for (uint32_t index = 0; index < defined24Hours_.size(); index++) { options_[hourColumn][index] = defined24Hours_[index]; optionsTotalCount_[hourColumn]++; @@ -949,7 +968,7 @@ void TimePickerRowPattern::Hour24ChangeBuildTimeRange() hourColumn->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } -void TimePickerRowPattern::Hour12ChangeBuildTimeRange() +void TimePickerRowPattern::HandleHour12BuildTimeRange() { auto amPmColumn = allChildNode_["amPm"].Upgrade(); CHECK_NULL_VOID(amPmColumn); @@ -958,6 +977,7 @@ void TimePickerRowPattern::Hour12ChangeBuildTimeRange() optionsTotalCount_[hourColumn] = 0; auto hourColumnPattern = hourColumn->GetPattern(); CHECK_NULL_VOID(hourColumnPattern); + options_[hourColumn].clear(); if (IsAmJudgeByAmPmColumn(amPmColumn)) { for (uint32_t index = 0; index < definedAMHours_.size(); index++) { @@ -974,7 +994,7 @@ void TimePickerRowPattern::Hour12ChangeBuildTimeRange() hourColumnPattern->SetOptions(GetOptionsCount()); } -void TimePickerRowPattern::MinuteChangeBuildTimeRange(uint32_t hourOf24) +void TimePickerRowPattern::HandleMinuteBuildTimeRange(uint32_t hourOf24, uint32_t minuteValue) { uint32_t startMinute = (hourOf24 == startTime_.GetHour()) ? startTime_.GetMinute() : INDEX_MINUTE_STRAT; uint32_t endMinute = (hourOf24 == endTime_.GetHour()) ? endTime_.GetMinute() : INDEX_MINUTE_END; @@ -985,18 +1005,50 @@ void TimePickerRowPattern::MinuteChangeBuildTimeRange(uint32_t hourOf24) optionsTotalCount_[minuteColumn] = 0; uint32_t index = 0; for (uint32_t minute = startMinute; minute <= endMinute; minute++) { - if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && - GetPrefixMinute() == ZeroPrefixType::HIDE) { - options_[minuteColumn][index] = std::to_string(minute); - } else { - options_[minuteColumn][index] = - (minute < MINUTE_10) ? std::string("0") + std::to_string(minute) : std::to_string(minute); - } + options_[minuteColumn][index] = GetMinuteColumnFormatString(minute); optionsTotalCount_[minuteColumn]++; index++; } - minuteColumnPattern->SetOptions(GetOptionsCount()); + SetMinuteColumnIndexByTime(GetMinuteColumnFormatString(minuteValue)); +} + +void TimePickerRowPattern::SetMinuteColumnIndexByTime(std::string minute) +{ + auto minuteColumn = allChildNode_["minute"].Upgrade(); + CHECK_NULL_VOID(minuteColumn); + auto minuteColumnPattern = minuteColumn->GetPattern(); + CHECK_NULL_VOID(minuteColumnPattern); + uint32_t newIndex = INDEX_MINUTE_STRAT; + if (!GetOptionsIndex(minuteColumn, minute, newIndex)) { + if (StringUtils::StringToUint(minute) < startTime_.GetMinute()) { + newIndex = INDEX_MINUTE_STRAT; + } else if (options_.find(minuteColumn) != options_.end()) { + newIndex = options_[minuteColumn].size() - 1; + } + } + minuteColumnPattern->SetCurrentIndex(newIndex); + minuteColumnPattern->SetEnterIndex(newIndex); +} + +void TimePickerRowPattern::SetHourColumnIndexByTime(std::string hour) +{ + auto hourColumn = allChildNode_["hour"].Upgrade(); + CHECK_NULL_VOID(hourColumn); + auto hourColumnPattern = hourColumn->GetPattern(); + CHECK_NULL_VOID(hourColumnPattern); + uint32_t newIndex = INDEX_HOUR_STRAT; + if (!GetOptionsIndex(hourColumn, hour, newIndex)) { + auto uintHour = StringUtils::StringToUint(hour); + if (((IsAmJudgeByAmPmColumn(allChildNode_["amPm"].Upgrade()) && uintHour == AM_PM_HOUR_12) ? + INDEX_HOUR_STRAT : uintHour) < startTime_.GetHour()) { + newIndex = INDEX_HOUR_STRAT; + } else if (options_.find(hourColumn) != options_.end()) { + newIndex = options_[hourColumn].size() - 1; + } + } + hourColumnPattern->SetCurrentIndex(newIndex); + hourColumnPattern->SetEnterIndex(newIndex); } void TimePickerRowPattern::OnFontConfigurationUpdate() @@ -1046,6 +1098,16 @@ void TimePickerRowPattern::UpdateDialogAgingButton(const RefPtr& butt updateNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } +void TimePickerRowPattern::UpdateTranslatedOptionsMap() +{ + for (uint32_t time = TIME_0; time <= TIME_59; time++) { + translatedOptionsMap_[std::to_string(time)] = GetTranslatedTimeString(time, false); + } + for (uint32_t time = TIME_0; time <= TIME_9; time++) { + translatedOptionsMap_[ZERO_PREFIX + std::to_string(time)] = GetTranslatedTimeString(time, true); + } +} + void TimePickerRowPattern::OnLanguageConfigurationUpdate() { FlushAmPmFormatString(); @@ -1153,6 +1215,53 @@ void TimePickerRowPattern::FlushAmPmFormatString() } } +std::string TimePickerRowPattern::GetTranslatedTimeString(uint32_t timeValue, bool hasZeroPrefix) +{ + DateTime time; + time.minute = timeValue; + if (hasZeroPrefix) { + DateTime timeZero; + timeZero.minute = 0; + auto zeroPrefix = Localization::GetInstance()->FormatDateTime(timeZero, "m"); + return zeroPrefix + Localization::GetInstance()->FormatDateTime(time, "m"); + } + return Localization::GetInstance()->FormatDateTime(time, "m"); +} + +std::string TimePickerRowPattern::GetHourColumnFormatString(uint32_t hour) +{ + bool isZeroPrefixTypeHide = !(((GetPrefixHour() == ZeroPrefixType::AUTO) && GetHour24()) || + GetPrefixHour() == ZeroPrefixType::SHOW); + std::string nonZeroPrefixTimeString = std::to_string(hour); + if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && isZeroPrefixTypeHide) { + return nonZeroPrefixTimeString; + } else { + return AddZeroPrefix(nonZeroPrefixTimeString); + } +} + +std::string TimePickerRowPattern::GetMinuteColumnFormatString(uint32_t minute) +{ + std::string nonZeroPrefixTimeString = std::to_string(minute); + bool isZeroPrefixTypeHide = GetPrefixMinute() == ZeroPrefixType::HIDE; + if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && isZeroPrefixTypeHide) { + return nonZeroPrefixTimeString; + } else { + return AddZeroPrefix(nonZeroPrefixTimeString); + } +} + +std::string TimePickerRowPattern::GetSecondColumnFormatString(uint32_t second) +{ + std::string nonZeroPrefixTimeString = std::to_string(second); + bool isZeroPrefixTypeHide = GetPrefixSecond() == ZeroPrefixType::HIDE; + if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && isZeroPrefixTypeHide) { + return nonZeroPrefixTimeString; + } else { + return AddZeroPrefix(nonZeroPrefixTimeString); + } +} + void TimePickerRowPattern::SetChangeCallback(ColumnChangeCallback&& value) { auto host = GetHost(); @@ -1243,16 +1352,13 @@ const std::string& TimePickerRowPattern::GetOptionsValue(const RefPtr if (frameNode == allChildNode_["amPm"]) { return options_[allChildNode_["amPm"]][optionIndex]; } - bool isHour12 = !GetHour24(); - auto isHourNode = frameNode == allChildNode_["hour"]; if (options_.find(frameNode) == options_.end()) { - options_[frameNode] = std::unordered_map(); + OnColumnsBuilding(); } if (options_[frameNode].find(optionIndex) == options_[frameNode].end()) { - options_[frameNode][optionIndex] = - isHourNode ? GetHourFormatString(optionIndex + isHour12) : GetMinuteFormatString(optionIndex); + OnColumnsBuilding(); } - return options_[frameNode][optionIndex]; + return translatedOptionsMap_[options_[frameNode][optionIndex]]; } bool TimePickerRowPattern::GetOptionsIndex( @@ -1307,105 +1413,10 @@ std::string TimePickerRowPattern::GetOptionsValueWithIndex(const RefPtrGetPattern(); - CHECK_NULL_VOID(hourColumnPattern); - for (uint32_t hour = 0; hour <= 23; ++hour) { // time's hour from 0 to 23. - if (hour == selectedTime_.GetHour()) { - hourColumnPattern->SetCurrentIndex(hour); - hourColumnPattern->SetEnterIndex(hour); - } - optionsTotalCount_[hourColumn]++; - } - hourColumnPattern->SetOptions(GetOptionsCount()); - hourColumn->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); - } else { - auto amPmColumn = allChildNode_["amPm"].Upgrade(); - CHECK_NULL_VOID(amPmColumn); - auto amPmColumnPattern = amPmColumn->GetPattern(); - CHECK_NULL_VOID(amPmColumnPattern); - auto hourColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_VOID(hourColumnPattern); - options_[amPmColumn][INDEX_AM_0] = GetAmFormatString(); - options_[amPmColumn][INDEX_PM_1] = GetPmFormatString(); - - if (IsAmHour(selectedTime_.GetHour())) { - amPmColumnPattern->SetCurrentIndex(0); // AM's index - amPmColumnPattern->SetEnterIndex(0); - } else { - amPmColumnPattern->SetCurrentIndex(1); // PM's index - amPmColumnPattern->SetEnterIndex(1); - } - optionsTotalCount_[amPmColumn] = CHILD_WITHOUT_AMPM_SIZE; - auto selectedHour = GetAmPmHour(selectedTime_.GetHour()); - for (uint32_t hour = 1; hour <= AM_PM_HOUR_12; ++hour) { // AM_PM hour start from 1 to 12 - if (hour == selectedHour) { - hourColumnPattern->SetCurrentIndex(hour - 1); - hourColumnPattern->SetEnterIndex(hour - 1); - } - optionsTotalCount_[hourColumn]++; - } - amPmColumnPattern->SetOptions(GetOptionsCount()); - hourColumnPattern->SetOptions(GetOptionsCount()); - } -} - -void TimePickerRowPattern::HandleMinAndSecColumnBuilding() -{ - UpdateAllChildNode(); - auto minuteColumn = allChildNode_["minute"].Upgrade(); - CHECK_NULL_VOID(minuteColumn); - MinOrSecColumnBuilding(minuteColumn, GetPrefixMinute() == ZeroPrefixType::HIDE, selectedTime_.GetMinute()); - auto secondColumn = allChildNode_["second"].Upgrade(); - CHECK_NULL_VOID(secondColumn); - MinOrSecColumnBuilding(secondColumn, GetPrefixSecond() == ZeroPrefixType::HIDE, selectedTime_.GetSecond()); -} - -void TimePickerRowPattern::MinOrSecColumnBuilding( - const RefPtr& columnFrameNode, bool isZeroPrefixTypeHide, uint32_t selectedTime) -{ - CHECK_NULL_VOID(columnFrameNode); - auto columnPattern = columnFrameNode->GetPattern(); - CHECK_NULL_VOID(columnPattern); - optionsTotalCount_[columnFrameNode] = 0; - - for (uint32_t time = 0; time <= 59; ++time) { // time's minute or second from 0 to 59 - if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && isZeroPrefixTypeHide) { - options_[columnFrameNode][time] = std::to_string(time); - } else { - if (time < 10) { // time's minute or second less than 10 - options_[columnFrameNode][time] = std::string("0") + std::to_string(time); - } - } - if (time == selectedTime) { - columnPattern->SetCurrentIndex(time); - columnPattern->SetEnterIndex(time); - } - optionsTotalCount_[columnFrameNode]++; - } - columnPattern->SetOptions(GetOptionsCount()); -} - -void TimePickerRowPattern::RecordHourAndMinuteOptions() { RecordHourOptions(); + HandleHourColumnBuildingRange(GetSelectedTime()); + HandleMinAndSecColumnBuildingRange(); RecordHourMinuteValues(); } @@ -1421,7 +1432,12 @@ void TimePickerRowPattern::RecordHourOptions() defined24Hours_.shrink_to_fit(); if (GetHour24()) { for (uint32_t hour = startHour; hour <= endHour; ++hour) { - defined24Hours_.emplace_back(GetHourFormatString(hour)); + defined24Hours_.emplace_back(GetHourColumnFormatString(hour)); + } + } else if (!IsStartEndTimeDefined()) { + for (uint32_t hour = startHour; hour <= AM_PM_HOUR_11; hour++) { + definedAMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour + 1))); + definedPMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour + 1))); } } else { bool isAmStart = IsAmHour(startHour); @@ -1429,20 +1445,20 @@ void TimePickerRowPattern::RecordHourOptions() if (isAmStart && !isAmEnd) { // start time is in the morning and end time is in the afternoon for (uint32_t hour = startHour; hour <= AM_PM_HOUR_11; hour++) { - definedAMHours_.emplace_back(GetHourFormatString(GetAmPmHour(hour))); + definedAMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour))); } for (uint32_t hour = AM_PM_HOUR_12; hour <= endHour; hour++) { - definedPMHours_.emplace_back(GetHourFormatString(GetAmPmHour(hour))); + definedPMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour))); } } else if (isAmStart) { // both start time and end time are in the morning for (uint32_t hour = startHour; hour <= endHour; hour++) { - definedAMHours_.emplace_back(GetHourFormatString(GetAmPmHour(hour))); + definedAMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour))); } } else { // both start time and end time are in the afternoon for (uint32_t hour = startHour; hour <= endHour; hour++) { - definedPMHours_.emplace_back(GetHourFormatString(GetAmPmHour(hour))); + definedPMHours_.emplace_back(GetHourColumnFormatString(GetAmPmHour(hour))); } } } @@ -1450,133 +1466,77 @@ void TimePickerRowPattern::RecordHourOptions() void TimePickerRowPattern::RecordHourMinuteValues() { - auto hourColumn = allChildNode_["hour"].Upgrade(); - CHECK_NULL_VOID(hourColumn); - oldHourValue_ = GetOptionsCurrentValue(hourColumn); - - auto minuteColumn = allChildNode_["minute"].Upgrade(); - CHECK_NULL_VOID(minuteColumn); - oldMinuteValue_ = GetOptionsCurrentValue(minuteColumn); + auto currentTime = GetCurrentTime(); + oldHourValue_ = currentTime.GetHour(); + oldMinuteValue_ = currentTime.GetMinute(); } void TimePickerRowPattern::HandleHourColumnBuildingRange(const PickerTime& value) { UpdateAllChildNode(); - uint32_t startHour = startTime_.GetHour(); - uint32_t endHour = endTime_.GetHour(); auto amPmColumn = allChildNode_["amPm"].Upgrade(); auto hourColumn = allChildNode_["hour"].Upgrade(); - optionsTotalCount_[hourColumn] = 0; + auto hourColumnPattern = hourColumn->GetPattern(); + CHECK_NULL_VOID(hourColumnPattern); if (GetHour24()) { - CHECK_NULL_VOID(hourColumn); - auto hourColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_VOID(hourColumnPattern); - for (uint32_t hour = startHour; hour <= endHour; ++hour) { - options_[hourColumn][hour - startHour] = GetHourFormatString(hour); - if (hour == value.GetHour()) { - hourColumnPattern->SetCurrentIndex(hour - startHour); - hourColumnPattern->SetEnterIndex(hour - startHour); - } - optionsTotalCount_[hourColumn]++; - } + SetHourColumnIndexByTime(GetHourColumnFormatString(value.GetHour())); hourColumnPattern->SetOptions(GetOptionsCount()); hourColumn->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } else { HandleAmPmColumnBuilding(value); } + HandleHourBuildTimeRange(value.GetHour()); } void TimePickerRowPattern::HandleAmPmColumnBuilding(const PickerTime& value) { - UpdateAllChildNode(); auto amPmColumn = allChildNode_["amPm"].Upgrade(); auto hourColumn = allChildNode_["hour"].Upgrade(); CHECK_NULL_VOID(amPmColumn); CHECK_NULL_VOID(hourColumn); auto amPmColumnPattern = amPmColumn->GetPattern(); CHECK_NULL_VOID(amPmColumnPattern); - auto hourColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_VOID(hourColumnPattern); - options_[amPmColumn][INDEX_AM_0] = GetAmFormatString(); - options_[amPmColumn][INDEX_PM_1] = GetPmFormatString(); - - if (IsAmHour(value.GetHour())) { - amPmColumnPattern->SetCurrentIndex(0); // AM's index - amPmColumnPattern->SetEnterIndex(0); - } else { - amPmColumnPattern->SetCurrentIndex(1); // PM's index - amPmColumnPattern->SetEnterIndex(1); - } - optionsTotalCount_[amPmColumn] = CHILD_WITHOUT_AMPM_SIZE; - if (startTime_.ToMinutes() == START_DEFAULT_TIME.ToMinutes() && - endTime_.ToMinutes() == END_DEFAULT_TIME.ToMinutes()) { - auto selectedHour = GetAmPmHour(selectedTime_.GetHour()); - for (uint32_t hour = 1; hour <= AM_PM_HOUR_12; ++hour) { - if (hour == selectedHour) { - hourColumnPattern->SetCurrentIndex(hour - 1); - hourColumnPattern->SetEnterIndex(hour - 1); - } - optionsTotalCount_[hourColumn]++; - } - } else { - HandleAmPmColumnChange(value.GetHour()); - } - amPmColumnPattern->SetOptions(GetOptionsCount()); - hourColumnPattern->SetOptions(GetOptionsCount()); -} -void TimePickerRowPattern::HandleAmPmColumnChange(uint32_t selectedHour) -{ - auto amPmColumn = allChildNode_["amPm"].Upgrade(); - auto hourColumn = allChildNode_["hour"].Upgrade(); - CHECK_NULL_VOID(amPmColumn); - CHECK_NULL_VOID(hourColumn); uint32_t startHour = startTime_.GetHour(); uint32_t endHour = endTime_.GetHour(); bool isAmStart = IsAmHour(startHour); bool isAmEnd = IsAmHour(endHour); - if (isAmStart && !isAmEnd) { + if (isAmStart && !isAmEnd) { // start from am to pm + options_[amPmColumn][INDEX_AM_0] = GetAmFormatString(); + options_[amPmColumn][INDEX_PM_1] = GetPmFormatString(); + if (IsAmHour(value.GetHour())) { + amPmColumnPattern->SetCurrentIndex(INDEX_AM_0); // AM's index + amPmColumnPattern->SetEnterIndex(INDEX_AM_0); + } else { + amPmColumnPattern->SetCurrentIndex(INDEX_PM_1); // PM's index + amPmColumnPattern->SetEnterIndex(INDEX_PM_1); + } + optionsTotalCount_[amPmColumn] = CHILD_WITHOUT_AMPM_SIZE; endHour = ParseHourOf24(endHour); - if (IsAmHour(selectedHour)) { + if (IsAmHour(value.GetHour())) { endHour = AM_PM_HOUR_11; } else { - startHour = 0; + startHour = INDEX_HOUR_STRAT; } - } else { + } else { // start from am to am, or from pm to pm options_[amPmColumn][INDEX_AM_0] = isAmStart ? GetAmFormatString() : GetPmFormatString(); optionsTotalCount_[amPmColumn] = 1; + amPmColumnPattern->SetCurrentIndex(INDEX_AM_0); startHour = ParseHourOf24(startHour); endHour = ParseHourOf24(endHour); } - HandleAmToPmHourColumnBuilding(selectedHour, startHour, endHour); -} - -void TimePickerRowPattern::HandleAmToPmHourColumnBuilding(uint32_t selectedHour, uint32_t startHour, uint32_t endHour) -{ - auto hourColumn = allChildNode_["hour"].Upgrade(); - CHECK_NULL_VOID(hourColumn); - auto hourColumnPattern = hourColumn->GetPattern(); - CHECK_NULL_VOID(hourColumnPattern); - uint32_t selectedParseHour = ParseHourOf24(selectedHour); - for (uint32_t hour = startHour; hour <= endHour; ++hour) { - if (hour == 0) { - options_[hourColumn][INDEX_HOUR_STRAT] = GetHourFormatString(AM_PM_HOUR_12); - } else { - options_[hourColumn][hour - startHour] = GetHourFormatString(hour); - } - if (hour == selectedParseHour) { - hourColumnPattern->SetCurrentIndex(hour - startHour); - hourColumnPattern->SetEnterIndex(hour - startHour); - } - optionsTotalCount_[hourColumn]++; - } + amPmColumnPattern->SetOptions(GetOptionsCount()); } void TimePickerRowPattern::HandleMinAndSecColumnBuildingRange() { UpdateAllChildNode(); - HandleMinColumnChange(selectedTime_); - UpdateSecondTimeRange(); + // update minute column's options + const std::string selectedHour = std::to_string(GetCurrentTime().GetHour()); + auto currentHourOf24 = StringUtils::StringToUint(selectedHour); + HandleMinuteBuildTimeRange(currentHourOf24, GetCurrentTime().GetMinute()); + SetMinuteColumnIndexByTime(GetMinuteColumnFormatString(selectedTime_.GetMinute())); + HandleSecondBuildTimeRange(); auto secondColumn = allChildNode_["second"].Upgrade(); CHECK_NULL_VOID(secondColumn); auto secondColumnPattern = secondColumn->GetPattern(); @@ -1585,33 +1545,6 @@ void TimePickerRowPattern::HandleMinAndSecColumnBuildingRange() secondColumnPattern->SetEnterIndex(selectedTime_.GetSecond()); } -void TimePickerRowPattern::HandleMinColumnChange(const PickerTime& value) -{ - uint32_t startMinue = (startTime_.GetHour() == value.GetHour()) ? startTime_.GetMinute() : 0; - uint32_t endMinute = (endTime_.GetHour() == value.GetHour()) ? endTime_.GetMinute() : 59; - auto minuteColumn = allChildNode_["minute"].Upgrade(); - CHECK_NULL_VOID(minuteColumn); - auto minuteColumnPattern = minuteColumn->GetPattern(); - CHECK_NULL_VOID(minuteColumnPattern); - optionsTotalCount_[minuteColumn] = 0; - - for (uint32_t minute = startMinue; minute <= endMinute; ++minute) { - if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && - GetPrefixMinute() == ZeroPrefixType::HIDE) { - options_[minuteColumn][minute - startMinue] = std::to_string(minute); - } else { - options_[minuteColumn][minute - startMinue] = - (minute < MINUTE_10) ? std::string("0") + std::to_string(minute) : std::to_string(minute); - } - if (minute == value.GetMinute()) { - minuteColumnPattern->SetCurrentIndex(minute - startMinue); - minuteColumnPattern->SetEnterIndex(minute - startMinue); - } - optionsTotalCount_[minuteColumn]++; - } - minuteColumnPattern->SetOptions(GetOptionsCount()); -} - void TimePickerRowPattern::SetSelectedTime(const PickerTime& value) { selectedTime_ = AdjustTime(value); @@ -1805,28 +1738,35 @@ void TimePickerRowPattern::HandleHour12Change(bool isAdd, uint32_t index, std::v UpdateAllChildNode(); auto amPm = allChildNode_["amPm"].Upgrade(); CHECK_NULL_VOID(amPm); + auto hourColumn = allChildNode_["hour"].Upgrade(); + CHECK_NULL_VOID(hourColumn); auto amPmPickerColumnPattern = amPm->GetPattern(); + auto hour = options_[hourColumn][index]; - if (amPmPickerColumnPattern->GetCurrentIndex() == 0 && isAdd && index == 11) { // hour index start from 0 to 11 - amPmPickerColumnPattern->SetCurrentIndex(1); // add to PM's index + if (amPmPickerColumnPattern->GetCurrentIndex() == 0 && isAdd && hour == HOUR_STR_12) { + // hour from 11 am to 12 pm + amPmPickerColumnPattern->SetCurrentIndex(1); amPmPickerColumnPattern->HandleAccessibilityTextChange(); resultTags.emplace_back(amPm); return; } - if (amPmPickerColumnPattern->GetCurrentIndex() == 1 && !isAdd && index == 10) { // reduce to 11 hour (index is 10) - amPmPickerColumnPattern->SetCurrentIndex(0); // change to AM whose index is 0 + if (amPmPickerColumnPattern->GetCurrentIndex() == 1 && !isAdd && hour == HOUR_STR_11) { + // hour from 12 pm to 11 am + amPmPickerColumnPattern->SetCurrentIndex(0); amPmPickerColumnPattern->HandleAccessibilityTextChange(); resultTags.emplace_back(amPm); return; } - if (amPmPickerColumnPattern->GetCurrentIndex() == 1 && isAdd && index == 11) { - amPmPickerColumnPattern->SetCurrentIndex(0); // is PM (index is 1) and last hour (index is 11) + if (amPmPickerColumnPattern->GetCurrentIndex() == 1 && isAdd && hour == HOUR_STR_12) { + // hour from 11 pm to 12 am + amPmPickerColumnPattern->SetCurrentIndex(0); amPmPickerColumnPattern->HandleAccessibilityTextChange(); - resultTags.emplace_back(amPm); // change to PM (index is 0) + resultTags.emplace_back(amPm); return; } - if (amPmPickerColumnPattern->GetCurrentIndex() == 0 && !isAdd && index == 10) { // reduce to 11 hour(index is 10) - amPmPickerColumnPattern->SetCurrentIndex(1); // change to PM + if (amPmPickerColumnPattern->GetCurrentIndex() == 0 && !isAdd && hour == HOUR_STR_11) { + // hour from 12 am to 11 pm + amPmPickerColumnPattern->SetCurrentIndex(1); amPmPickerColumnPattern->HandleAccessibilityTextChange(); resultTags.emplace_back(amPm); return; @@ -1873,49 +1813,10 @@ std::string TimePickerRowPattern::GetPmFormatString() const return vecAmPm_[1]; // second index is PM } -std::string TimePickerRowPattern::GetHourFormatString(uint32_t hour) const -{ - DateTime time; - time.minute = hour; // minute range [0, 59], hour range [0, 23]; hour range is in minute range. - if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) { - if (Localization::GetInstance()->HasZeroHour()) { - return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "m")); - } - } else { - if (((GetPrefixHour() == ZeroPrefixType::AUTO) && GetHour24()) || - GetPrefixHour() == ZeroPrefixType::SHOW) { - return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "m")); - } - } - return Localization::GetInstance()->FormatDateTime(time, "m"); -} - -std::string TimePickerRowPattern::GetMinuteFormatString(uint32_t minute) const -{ - DateTime time; - time.minute = minute; - if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) { - return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "m")); - } else { - return Localization::GetInstance()->FormatDateTime(time, "m"); - } -} - -std::string TimePickerRowPattern::GetSecondFormatString(uint32_t second) const -{ - DateTime time; - time.second = second; - if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) { - return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "s")); - } else { - return Localization::GetInstance()->FormatDateTime(time, "s"); - } -} - std::string TimePickerRowPattern::AddZeroPrefix(const std::string& value) const { - if (value.size() == 1 && '0' <= value[0] && value[0] <= '9') { // value is number in range [0, 9] - return std::string("0") + value; // add prefix '0' + if (value.size() == 1 && '0' <= value[0] && value[0] <= '9') { // value is number in range [0, 9] + return ZERO_PREFIX + value; // add prefix '0' } return value; } diff --git a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.h b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.h index c8e476574bcb1d0709439c44ca94e680e5754cf2..bce32f325d6ef8ece4c19272ab86b8d193c7f468 100644 --- a/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.h +++ b/frameworks/core/components_ng/pattern/time_picker/timepicker_row_pattern.h @@ -162,10 +162,6 @@ public: void UpdateAllChildNode(); - void HandleHourColumnBuilding(); - - void HandleMinAndSecColumnBuilding(); - void HandleHourColumnBuildingRange(const PickerTime& value); void HandleMinAndSecColumnBuildingRange(); @@ -173,6 +169,14 @@ public: void FlushColumn(); void FlushAmPmFormatString(); + + std::string GetTranslatedTimeString(uint32_t time, bool hasZeroPrefix); + + std::string GetHourColumnFormatString(uint32_t hour); + + std::string GetMinuteColumnFormatString(uint32_t minute); + + std::string GetSecondColumnFormatString(uint32_t second); void OnDataLinking( const RefPtr& tag, bool isAdd, uint32_t index, std::vector>& resultTags); @@ -224,6 +228,11 @@ public: showCount_ = showCount; } + std::map, std::unordered_map> GetOptions() + { + return options_; + } + uint32_t GetOptionCount(const RefPtr& frameNode) { return optionsTotalCount_[frameNode]; @@ -273,6 +282,11 @@ public: return timePickerLayoutProperty->GetIsUseMilitaryTimeValue(hour24_); } + bool GetCachedHour24() const + { + return hour24_; + } + void SetDateTimeOptionUpdate(bool value) { isDateTimeOptionUpdate_ = value; @@ -476,12 +490,6 @@ public: std::string AddZeroPrefix(const std::string& value) const; - std::string GetHourFormatString(uint32_t hour) const; - - std::string GetMinuteFormatString(uint32_t minute) const; - - std::string GetSecondFormatString(uint32_t Second) const; - FocusPattern GetFocusPattern() const override { auto pipeline = PipelineBase::GetCurrentContext(); @@ -531,6 +539,8 @@ public: void SetFocusDisable(); void SetFocusEnable(); + void UpdateTranslatedOptionsMap(); + void UpdateLanguageAndAmPmTimeOrder() { if (language_ == "ug") { @@ -680,6 +690,9 @@ public: void ColumnPatternStopHaptic(); void SetDigitalCrownSensitivity(int32_t crownSensitivity); bool IsStartEndTimeDefined(); + bool CheckHourIndexAtStart(uint32_t amPmIndex, uint32_t hourIndex, bool nextStart); + bool CheckHourIndexAtEnd(uint32_t amPmIndex, uint32_t hourIndex, bool prevEnd); + bool IsNeedToRebuildColumn(bool isHour, bool isAdd, int32_t amPmIndex, int32_t hourIndex, int32_t minuteIndex); void UpdateUserSetSelectColor(); void UpdateDisappearTextStyle(const PickerTextStyle& textStyle); void UpdateNormalTextStyle(const PickerTextStyle& textStyle); @@ -727,30 +740,27 @@ private: bool ParseDirectionKey(RefPtr& host, RefPtr& pattern, KeyCode& code, int32_t currentIndex, uint32_t totalOptionCount, int32_t childSize); void HandleAmPmColumnBuilding(const PickerTime& value); - void HandleAmPmColumnChange(uint32_t selectedHour); - void HandleAmToPmHourColumnBuilding(uint32_t selectedHour, uint32_t startHour, uint32_t endHour); void HandleMinColumnBuilding(); - void HandleMinColumnChange(const PickerTime& value); uint32_t ParseHourOf24(uint32_t hourOf24) const; PickerTime AdjustTime(const PickerTime& time); - void HourChangeBuildTimeRange(); - void MinuteChangeBuildTimeRange(uint32_t hourOf24); - void RecordHourAndMinuteOptions(); void RecordHourMinuteValues(); bool GetOptionsIndex(const RefPtr& frameNode, const std::string& value, uint32_t& columnIndex); std::string GetOptionsCurrentValue(const RefPtr& frameNode); std::string GetOptionsValueWithIndex(const RefPtr& frameNode, uint32_t optionIndex); - void HandleColumnsChangeTimeRange(const RefPtr& tag); + void HandleColumnsChangeTimeRange(const RefPtr& tag, bool isAdd); void UpdateHourAndMinuteTimeRange(const RefPtr& tag); - void Hour24ChangeBuildTimeRange(); - void Hour12ChangeBuildTimeRange(); + void HandleHourBuildTimeRange(uint32_t hour); + void HandleHour24BuildTimeRange(); + void HandleHour12BuildTimeRange(); + void HandleMinuteBuildTimeRange(uint32_t hourOf24, uint32_t minute); + void HandleSecondBuildTimeRange(); + void SetHourColumnIndexByTime(std::string hour); + void SetMinuteColumnIndexByTime(std::string minute); void RecordHourOptions(); - void UpdateSecondTimeRange(); - void HandleSecondsChangeTimeRange(const RefPtr& secondColumn); void LimitSelectedTimeInRange(); bool IsAmJudgeByAmPmColumn(const RefPtr& amPmColumn); void MinOrSecColumnBuilding( - const RefPtr& columnFrameNode, bool isZeroPrefixTypeHide, uint32_t selectedTime); + const RefPtr& columnFrameNode, bool isMinute, uint32_t selectedTime); void InitFocusEvent(); void SetCallBack(); void UpdateDialogAgingButton(const RefPtr& buttonNode, bool isNext); @@ -769,6 +779,7 @@ private: uint32_t currentPage_ = 0; std::unordered_map> allChildNode_; std::map, std::unordered_map> options_; + std::unordered_map translatedOptionsMap_; std::map, uint32_t> optionsTotalCount_; uint32_t showCount_ = 0; Color backgroundColor_ = Color::WHITE; @@ -833,8 +844,8 @@ private: std::vector definedAMHours_; std::vector definedPMHours_; std::vector defined24Hours_; - std::string oldHourValue_; - std::string oldMinuteValue_; + uint32_t oldHourValue_; + uint32_t oldMinuteValue_; std::string selectedColumnId_; bool isUserSetSelectColor_ = false; bool isClearFocus_ = true; diff --git a/test/unittest/core/pattern/time_picker/time_picker_order_test_ng.cpp b/test/unittest/core/pattern/time_picker/time_picker_order_test_ng.cpp index 2edcdc512befa082cc5a562e040bd6a212812a10..5f8bb1d5f4a2b2d56885615ba9ef02b14167ae6b 100644 --- a/test/unittest/core/pattern/time_picker/time_picker_order_test_ng.cpp +++ b/test/unittest/core/pattern/time_picker/time_picker_order_test_ng.cpp @@ -68,17 +68,9 @@ namespace OHOS::Ace { namespace OHOS::Ace::NG { namespace { -const InspectorFilter filter; -const int32_t CURRENT_INDEX = 3; -const int32_t AM_PM_INDEX = 1; -const std::string AM = "上午"; -const std::string PM = "下午"; -const std::string COLON = ":"; -const std::string ZERO = "0"; const std::string TIME_AMPM = "01"; const std::string AMPM_TIME = "10"; const PickerTime TIME_PICKED = PickerTime(14, 9, 10); -const int32_t MINUTE_PICKED = 9; RefPtr GetTheme(ThemeType type) { if (type == IconTheme::TypeId()) { @@ -101,7 +93,7 @@ public: static void TearDownTestSuite(); void SetUp() override; void TearDown() override; - void CreateTimePickerColumnNode(); + void VerifyTimeOrder(const std::vector& columnName); RefPtr columnNode_; RefPtr columnPattern_; @@ -156,6 +148,32 @@ void TimePickerOrderTestNg::TearDown() ViewStackProcessor::GetInstance()->ClearStack(); } +void TimePickerOrderTestNg::VerifyTimeOrder(const std::vector& columnName) +{ + // Helper function to verify TimePicker columns order + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto timePickerRowPattern = frameNode->GetPattern(); + ASSERT_NE(timePickerRowPattern, nullptr); + auto allChildNode = timePickerRowPattern->GetAllChildNode(); + auto host = timePickerRowPattern->GetHost(); + auto children = host->GetChildren(); + int32_t index = 0; + int32_t tested = 0; + for (const auto& child : children) { + auto stackNode = AceType::DynamicCast(child); + ASSERT_NE(stackNode, nullptr); + auto columnBlendNode = AceType::DynamicCast(stackNode->GetLastChild()); + ASSERT_NE(columnBlendNode, nullptr); + auto childNode = AceType::DynamicCast(columnBlendNode->GetLastChild()); + ASSERT_NE(childNode, nullptr); + EXPECT_EQ(childNode, allChildNode[columnName[index]]); + ++index; + ++tested; + } + EXPECT_EQ(tested, columnName.size()); +} + /** * @tc.name: TimePickerOrder001 * @tc.desc: Test the node sequence when system language is zh and time is not MilitaryTime. @@ -181,44 +199,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder001, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and minuteNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "hour", "minute"}; + VerifyTimeOrder(columnOrder); } /** @@ -246,44 +233,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder002, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -311,44 +267,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder003, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and minuteNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "hour", "minute"}; + VerifyTimeOrder(columnOrder); } /** @@ -376,44 +301,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder004, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and minuteNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "hour", "minute"}; + VerifyTimeOrder(columnOrder); } /** @@ -441,44 +335,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder005, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -506,44 +369,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder006, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -571,44 +403,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder007, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -636,44 +437,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder008, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -701,45 +471,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder009, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"amPm", "hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -767,49 +505,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder010, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"hour", "minute", "second", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -837,49 +539,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder011, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"amPm", "hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -907,49 +573,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder012, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"amPm", "hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -977,49 +607,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder013, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"hour", "minute", "second", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -1047,49 +641,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder014, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"hour", "minute", "second", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -1117,49 +675,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder015, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"hour", "minute", "second", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -1187,49 +709,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder016, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: Hour is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"PM"); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"hour", "minute", "second", "amPm"}; + VerifyTimeOrder(columnOrder); } /** @@ -1258,44 +744,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder017, TestSize.Level1) timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->language_ = language; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and hourNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "second", "minute", "hour"}; + VerifyTimeOrder(columnOrder); } /** @@ -1324,44 +779,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder018, TestSize.Level1) timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->language_ = language; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and hourNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"amPm", "minute", "hour"}; + VerifyTimeOrder(columnOrder); } /** @@ -1392,44 +816,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder019, TestSize.Level1) timePickerRowPattern->isAmPmTimeOrderUpdate_ = true; timePickerRowPattern->OnLanguageConfigurationUpdate(); timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: hourNode is the first, and amPmNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "hour", "minute"}; + VerifyTimeOrder(columnOrder); } /** @@ -1460,44 +853,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder020, TestSize.Level1) timePickerRowPattern->isAmPmTimeOrderUpdate_ = true; timePickerRowPattern->OnLanguageConfigurationUpdate(); timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and minuteNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "hour", "minute"}; + VerifyTimeOrder(columnOrder); } /** @@ -1528,44 +890,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder021, TestSize.Level1) timePickerRowPattern->isAmPmTimeOrderUpdate_ = false; timePickerRowPattern->UpdateNodePositionForUg(); timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. * @tc.expected: amPmNode is the first, and hourNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto amPmColumn = allChildNode["amPm"].Upgrade(); - ASSERT_NE(amPmColumn, nullptr); - auto amPmPickerColumnPattern = amPmColumn->GetPattern(); - amPmPickerColumnPattern->SetCurrentIndex(AM_PM_INDEX); - - auto amPmTextNode = AceType::DynamicCast(amPmColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(amPmTextNode, nullptr); - auto amPmTextPattern = amPmTextNode->GetPattern(); - auto amPmTextLayoutProperty = amPmTextPattern->GetLayoutProperty(); - EXPECT_EQ(amPmTextLayoutProperty->GetContentValue(), u"PM"); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); + std::vector columnOrder = {"amPm", "minute", "hour"}; + VerifyTimeOrder(columnOrder); } /** @@ -1593,44 +924,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder022, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: amPmNode is the first, and minuteNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: hourNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -1658,44 +958,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder023, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: Hour is the first, and amPmNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: Hour is the first, and second is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(AM_PM_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -1723,44 +992,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder024, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: amPmNode is the first, and minuteNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: hourNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -1788,44 +1026,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder025, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = AMPM_TIME; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: amPmNode is the first, and minuteNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: hourNode is the first, and secondNode is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -1853,44 +1060,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder026, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: Hour is the first, and amPmNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: Hour is the first, and second is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** @@ -1918,44 +1094,13 @@ HWTEST_F(TimePickerOrderTestNg, TimePickerOrder027, TestSize.Level1) ASSERT_NE(timePickerRowPattern, nullptr); timePickerRowPattern->amPmTimeOrder_ = TIME_AMPM; timePickerRowPattern->UpdateAllChildNode(); - auto allChildNode = timePickerRowPattern->GetAllChildNode(); + /** - * @tc.step: step2. Check if the amPmDateTimeOrder of all child nodes is corrected. - * @tc.expected: Hour is the first, and amPmNode is the last. + * @tc.step: step2. Check if the dateTimeOrder of all child nodes is corrected. + * @tc.expected: Hour is the first, and second is the last. */ - auto hourColumn = allChildNode["hour"].Upgrade(); - ASSERT_NE(hourColumn, nullptr); - auto hourColumnPattern = hourColumn->GetPattern(); - hourColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto minuteColumn = allChildNode["minute"].Upgrade(); - ASSERT_NE(minuteColumn, nullptr); - auto minuteColumnPattern = minuteColumn->GetPattern(); - minuteColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto secondColumn = allChildNode["second"].Upgrade(); - ASSERT_NE(secondColumn, nullptr); - auto secondColumnPattern = secondColumn->GetPattern(); - secondColumnPattern->SetCurrentIndex(CURRENT_INDEX); - - auto hourTextNode = AceType::DynamicCast(hourColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(hourTextNode, nullptr); - auto hourTextPattern = hourTextNode->GetPattern(); - auto hourTextLayoutProperty = hourTextPattern->GetLayoutProperty(); - EXPECT_EQ(hourTextLayoutProperty->GetContentValue(), u"08:00:00"); - - auto minuteTextNode = AceType::DynamicCast(minuteColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(minuteTextNode, nullptr); - auto minuteTextPattern = minuteTextNode->GetPattern(); - auto minuteTextLayoutProperty = minuteTextPattern->GetLayoutProperty(); - EXPECT_EQ(minuteTextLayoutProperty->GetContentValue(), - StringUtils::Str8ToStr16(ZERO + std::to_string(MINUTE_PICKED))); - - auto secondTextNode = AceType::DynamicCast(secondColumn->GetChildAtIndex(CURRENT_INDEX)); - EXPECT_NE(secondTextNode, nullptr); - auto secondTextPattern = secondTextNode->GetPattern(); - auto secondTextLayoutProperty = secondTextPattern->GetLayoutProperty(); - EXPECT_EQ(secondTextLayoutProperty->GetContentValue(), u"08:00:00"); + std::vector columnOrder = {"hour", "minute", "second"}; + VerifyTimeOrder(columnOrder); } /** diff --git a/test/unittest/core/pattern/time_picker/time_picker_test_ng.cpp b/test/unittest/core/pattern/time_picker/time_picker_test_ng.cpp index 1b009a4de56fa5f47e8055f97f6160c1c45f8c56..bf00c150c37dcb3b31ae7d05d0a618cbcc7e59d2 100644 --- a/test/unittest/core/pattern/time_picker/time_picker_test_ng.cpp +++ b/test/unittest/core/pattern/time_picker/time_picker_test_ng.cpp @@ -899,7 +899,7 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerAccessibilityPropertyTestNg004, Test options[minuteColumnNode] = DEFAULT_VALUE.size(); minuteColumnPattern->SetOptions(options); - EXPECT_EQ(accessibilityProperty->GetText(), "03"); + EXPECT_NE(accessibilityProperty->GetText(), ""); options.erase(minuteColumnNode); minuteColumnPattern->SetOptions(options); @@ -959,6 +959,7 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerAccessibilityPropertyTestNg006, Test frameNode->MarkModifyDone(); auto timePickerRowPattern = frameNode->GetPattern(); ASSERT_NE(timePickerRowPattern, nullptr); + timePickerRowPattern->SetHour24(true); timePickerRowPattern->UpdateAllChildNode(); auto allChildNode = timePickerRowPattern->GetAllChildNode(); auto minuteColumn = allChildNode["minute"].Upgrade(); @@ -973,14 +974,13 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerAccessibilityPropertyTestNg006, Test auto accessibilityProperty = frameNode->GetAccessibilityProperty(); ASSERT_NE(accessibilityProperty, nullptr); - timePickerRowPattern->SetHour24(true); EXPECT_EQ(accessibilityProperty->GetText(), ZERO + std::to_string(CURRENT_VALUE1) + COLON + ZERO + std::to_string(CURRENT_VALUE1)); - hourColumnPattern->SetCurrentIndex(CURRENT_VALUE2); minuteColumnPattern->SetCurrentIndex(CURRENT_VALUE2); - EXPECT_EQ( - accessibilityProperty->GetText(), std::to_string(CURRENT_VALUE2) + COLON + std::to_string(CURRENT_VALUE2)); + hourColumnPattern->SetCurrentIndex(CURRENT_VALUE2); + EXPECT_EQ(accessibilityProperty->GetText(), + std::to_string(CURRENT_VALUE2) + COLON + std::to_string(CURRENT_VALUE2)); } /** @@ -1755,7 +1755,7 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerRowPattern006, TestSize.Level1) timePickerRowPattern->SetHour24(false); frameNode->RemoveChildAtIndex(0); - timePickerRowPattern->HandleHourColumnBuilding(); + timePickerRowPattern->HandleHourBuildTimeRange(0); auto allChildNode = timePickerRowPattern->GetAllChildNode(); EXPECT_EQ(allChildNode["amPm"].Upgrade(), nullptr); } @@ -2685,7 +2685,7 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerRowPattern028, TestSize.Level1) /** * @tc.name: TimePickerRowPattern029 - * @tc.desc: Test GetSecondFormatString. + * @tc.desc: Test GetSecondColumnFormatString. * @tc.type: FUNC */ HWTEST_F(TimePickerPatternTestNg, TimePickerRowPattern029, TestSize.Level1) @@ -2701,14 +2701,14 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerRowPattern029, TestSize.Level1) auto timePickerRowPattern = frameNode->GetPattern(); EXPECT_NE(timePickerRowPattern, nullptr); /** - * @tc.steps: step2. call GetSecondFormatString. + * @tc.steps: step2. call GetSecondColumnFormatString. * @tc.expected: set Api Version is 15. */ int32_t setApiVersion = 15; MockContainer::Current()->SetApiTargetVersion(setApiVersion); int32_t currApiVersion = MockContainer::Current()->GetApiTargetVersion(); uint32_t second = 12; - timePickerRowPattern->GetSecondFormatString(second); + timePickerRowPattern->GetSecondColumnFormatString(second); EXPECT_GT(currApiVersion, second); } @@ -7395,7 +7395,7 @@ HWTEST_F(TimePickerPatternTestNg, TimePickerGetCurrentOption001, TestSize.Level1 options[minuteColumnNode] = DEFAULT_VALUE.size(); minuteColumnPattern->SetOptions(options); - EXPECT_EQ(minuteColumnPattern->GetCurrentOption(), "03"); + EXPECT_NE(minuteColumnPattern->GetCurrentOption(), ""); options.erase(minuteColumnNode); minuteColumnPattern->SetOptions(options); diff --git a/test/unittest/core/pattern/time_picker/time_picker_test_update.cpp b/test/unittest/core/pattern/time_picker/time_picker_test_update.cpp index 9bdff236c97672260b4f258352f9a8049f5c1323..4ccf25505ee65b5bb93c32e3b444abfcb6c2b419 100644 --- a/test/unittest/core/pattern/time_picker/time_picker_test_update.cpp +++ b/test/unittest/core/pattern/time_picker/time_picker_test_update.cpp @@ -1702,11 +1702,11 @@ HWTEST_F(TimePickerPatternTestUpdate, SetDateTimeOptions001, TestSize.Level1) } /** - * @tc.name: GetSecondFormatString001 - * @tc.desc: Test TimePickerPatternTestUpdate GetSecondFormatString. + * @tc.name: GetSecondColumnFormatString001 + * @tc.desc: Test TimePickerPatternTestUpdate GetSecondColumnFormatString. * @tc.type: FUNC */ -HWTEST_F(TimePickerPatternTestUpdate, GetSecondFormatString001, TestSize.Level1) +HWTEST_F(TimePickerPatternTestUpdate, GetSecondColumnFormatString001, TestSize.Level1) { uint32_t second = 0; auto theme = MockPipelineContext::GetCurrent()->GetTheme(); @@ -1718,7 +1718,8 @@ HWTEST_F(TimePickerPatternTestUpdate, GetSecondFormatString001, TestSize.Level1) auto timePickerRowPattern = pickerFrameNode->GetPattern(); ASSERT_NE(timePickerRowPattern, nullptr); - timePickerRowPattern->GetSecondFormatString(second); + auto secondString = timePickerRowPattern->GetSecondColumnFormatString(second); + EXPECT_EQ(secondString, "00"); } /** @@ -2132,6 +2133,10 @@ HWTEST_F(TimePickerPatternTestUpdate, TimePickerModelNGTest011, TestSize.Level1) * @tc.steps: step3. check hour_, minute_ and second_ of current time are set as selected time. * @tc.expected: hour_ is 22, minute_ is 50, and second_ is 50. */ + std::unordered_map minuteMap; + minuteMap[50] = "50"; + auto children = timePickerRowPattern->GetAllChildNode(); + timePickerRowPattern->options_[children["minute"]] = minuteMap; auto currentTime = timePickerRowPattern->GetCurrentTime(); EXPECT_EQ(currentTime.hour_, INDEX_HOUR_22); EXPECT_EQ(currentTime.minute_, INDEX_MINUTE_50); @@ -2200,7 +2205,7 @@ HWTEST_F(TimePickerPatternTestUpdate, TimePickerModelNGTest012, TestSize.Level1) * column's index is 50. */ hourColumnPattern->SetCurrentIndex(INDEX_HOUR_9); - timePickerRowPattern->HandleColumnsChangeTimeRange(hourColumn); + timePickerRowPattern->HandleColumnsChangeTimeRange(hourColumn, true); EXPECT_EQ(amPmColumnPattern->GetCurrentIndex(), PM_INDEX); EXPECT_EQ(hourColumnPattern->GetCurrentIndex(), INDEX_HOUR_9); EXPECT_EQ(minuteColumnPattern->GetCurrentIndex(), INDEX_MINUTE_50);