diff --git a/DEPS b/DEPS index a05a110c..e3ba2e6 100644 --- a/DEPS +++ b/DEPS
@@ -102,11 +102,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '8c8e10c7d9c5db8b8ffe34b8cb956ac6c8a0e6c0', + 'skia_revision': 'e45752e58fc30e0fc83dfb89f0ffd7f624ca151c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'ea8869dd155f98ec0c17137e5a2fea7fed170649', + 'v8_revision': 'c33acf2ab821e8c36da115ccebf7228784eced9f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -154,7 +154,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': 'd45d4b97e6a03cfe21a2952138cf6e970fc358e5', + 'freetype_revision': '0589f6e6ee6e9bfe0c7139374fc8812e849e7bf7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. @@ -162,7 +162,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '517100ca073f7deaf4818786104daf7e7c744b8d', + 'catapult_revision': 'c36ea24906979ce68061a752f350f7a2b52d62f8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -504,7 +504,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a05ffccfb494de4c72d52b13b3bc53bdcf81a562', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '80ebf9cc82d2c044543630a482a2c61010a2ee91', 'condition': 'checkout_linux', },
diff --git a/android_webview/browser/surfaces_instance.cc b/android_webview/browser/surfaces_instance.cc index bfaa5f23..687900f 100644 --- a/android_webview/browser/surfaces_instance.cc +++ b/android_webview/browser/surfaces_instance.cc
@@ -54,7 +54,10 @@ // Webview does not own the surface so should not clear it. settings.should_clear_root_render_pass = false; - frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>(); + // The SharedBitmapManager is null as we do not support or use software + // compositing on Android. + frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>( + /*shared_bitmap_manager=*/nullptr); parent_local_surface_id_allocator_.reset( new viz::ParentLocalSurfaceIdAllocator());
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index 315893e..184ee76 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc
@@ -437,10 +437,12 @@ UnifiedSystemTray* tray = RootWindowController::ForWindow(target_root) ->GetStatusAreaWidget() ->unified_system_tray(); - if (tray->IsBubbleShown()) + if (tray->IsBubbleShown()) { tray->CloseBubble(); - else + } else { tray->ShowBubble(false /* show_by_click */); + tray->ActivateBubble(); + } } else { SystemTray* tray = RootWindowController::ForWindow(target_root)->GetSystemTray();
diff --git a/ash/frame/custom_frame_view_ash.cc b/ash/frame/custom_frame_view_ash.cc index 50954c11..3fe6ed7 100644 --- a/ash/frame/custom_frame_view_ash.cc +++ b/ash/frame/custom_frame_view_ash.cc
@@ -332,7 +332,7 @@ overlay_view_->SetHeaderHeight(height); } -views::View* CustomFrameViewAsh::GetHeaderView() { +HeaderView* CustomFrameViewAsh::GetHeaderView() { return header_view_; }
diff --git a/ash/frame/custom_frame_view_ash.h b/ash/frame/custom_frame_view_ash.h index db9e38a..8a9a5fc 100644 --- a/ash/frame/custom_frame_view_ash.h +++ b/ash/frame/custom_frame_view_ash.h
@@ -9,6 +9,7 @@ #include "ash/ash_export.h" #include "ash/frame/caption_buttons/caption_button_model.h" +#include "ash/frame/header_view.h" #include "ash/public/interfaces/window_style.mojom.h" #include "ash/shell_observer.h" #include "ash/wm/splitview/split_view_controller.h" @@ -82,7 +83,7 @@ void SetHeaderHeight(base::Optional<int> height); // Get the view of the header. - views::View* GetHeaderView(); + HeaderView* GetHeaderView(); // Calculate the client bounds for given window bounds. gfx::Rect GetClientBoundsForWindowBounds(
diff --git a/ash/frame/custom_frame_view_ash_unittest.cc b/ash/frame/custom_frame_view_ash_unittest.cc index 6df70c7..766e566 100644 --- a/ash/frame/custom_frame_view_ash_unittest.cc +++ b/ash/frame/custom_frame_view_ash_unittest.cc
@@ -829,8 +829,8 @@ WideFrameView* wide_frame_view = WideFrameView::Create(widget.get()); HeaderView* wide_header_view = wide_frame_view->header_view(); - DefaultFrameHeader* header = static_cast<DefaultFrameHeader*>( - wide_header_view->GetFrameHeaderForTest()); + DefaultFrameHeader* header = + static_cast<DefaultFrameHeader*>(wide_header_view->GetFrameHeader()); EXPECT_EQ(new_active_color, header->active_frame_color_for_testing()); EXPECT_EQ(new_inactive_color, header->inactive_frame_color_for_testing()); }
diff --git a/ash/frame/frame_header.cc b/ash/frame/frame_header.cc index cb17588..e84e766 100644 --- a/ash/frame/frame_header.cc +++ b/ash/frame/frame_header.cc
@@ -131,6 +131,12 @@ DoSetFrameColors(active_frame_color, inactive_frame_color); } +void FrameHeader::SetFrameTextOverride( + const base::string16& frame_text_override) { + frame_text_override_ = frame_text_override; + SchedulePaintForTitle(); +} + /////////////////////////////////////////////////////////////////////////////// // gfx::AnimationDelegate overrides: @@ -161,15 +167,18 @@ } void FrameHeader::PaintTitleBar(gfx::Canvas* canvas) { + base::string16 text = frame_text_override_; views::WidgetDelegate* target_widget_delegate = target_widget_->widget_delegate(); - if (target_widget_delegate && - target_widget_delegate->ShouldShowWindowTitle() && - !target_widget_delegate->GetWindowTitle().empty()) { + if (text.empty() && target_widget_delegate && + target_widget_delegate->ShouldShowWindowTitle()) { + text = target_widget_delegate->GetWindowTitle(); + } + + if (!text.empty()) { canvas->DrawStringRectWithFlags( - target_widget_delegate->GetWindowTitle(), - views::NativeWidgetAura::GetWindowTitleFontList(), GetTitleColor(), - GetTitleBounds(), gfx::Canvas::NO_SUBPIXEL_RENDERING); + text, views::NativeWidgetAura::GetWindowTitleFontList(), + GetTitleColor(), GetTitleBounds(), gfx::Canvas::NO_SUBPIXEL_RENDERING); } }
diff --git a/ash/frame/frame_header.h b/ash/frame/frame_header.h index 9c67e47..1a86b47 100644 --- a/ash/frame/frame_header.h +++ b/ash/frame/frame_header.h
@@ -7,6 +7,7 @@ #include "ash/ash_export.h" #include "ash/frame/caption_buttons/frame_caption_button.h" +#include "base/strings/string16.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/animation/animation_delegate.h" @@ -71,6 +72,10 @@ // will have some transparency added when the frame is drawn. void SetFrameColors(SkColor active_frame_color, SkColor inactive_frame_color); + // Sets text to display in place of the window's title. This will be shown + // regardless of what WidgetDelegate::ShouldShowWindowTitle() returns. + void SetFrameTextOverride(const base::string16& frame_text_override); + // gfx::AnimationDelegate: void AnimationProgressed(const gfx::Animation* animation) override; @@ -151,6 +156,8 @@ // Whether the header is painted for the first time. bool initial_paint_ = true; + base::string16 frame_text_override_; + gfx::SlideAnimation activation_animation_{this}; DISALLOW_COPY_AND_ASSIGN(FrameHeader);
diff --git a/ash/frame/header_view.cc b/ash/frame/header_view.cc index 458a4de..85daf8f7 100644 --- a/ash/frame/header_view.cc +++ b/ash/frame/header_view.cc
@@ -66,7 +66,7 @@ // The view used to draw the content (background and title string) // of the header. This is a separate view so that it can use -// differnent scaling strategy than the rest of the frame such +// different scaling strategy than the rest of the frame such // as caption buttons. class HeaderView::HeaderContentView : public views::View { public:
diff --git a/ash/frame/header_view.h b/ash/frame/header_view.h index e13c894..aa13546 100644 --- a/ash/frame/header_view.h +++ b/ash/frame/header_view.h
@@ -119,7 +119,7 @@ void SetVisibleFraction(double visible_fraction) override; std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override; - FrameHeader* GetFrameHeaderForTest() { return frame_header_.get(); } + FrameHeader* GetFrameHeader() { return frame_header_.get(); } private: class HeaderContentView;
diff --git a/ash/shelf/shelf_tooltip_manager.cc b/ash/shelf/shelf_tooltip_manager.cc index 34f7622..23779e7 100644 --- a/ash/shelf/shelf_tooltip_manager.cc +++ b/ash/shelf/shelf_tooltip_manager.cc
@@ -103,7 +103,7 @@ const base::string16 text = shelf_view_->GetTitleForView(view); if (chromeos::switches::ShouldShowShelfHoverPreviews() && open_windows.size() > 0) { - bubble_ = new ShelfTooltipPreviewBubble(view, arrow, open_windows.front()); + bubble_ = new ShelfTooltipPreviewBubble(view, arrow, open_windows); } else { bubble_ = new ShelfTooltipBubble(view, arrow, text); }
diff --git a/ash/shelf/shelf_tooltip_preview_bubble.cc b/ash/shelf/shelf_tooltip_preview_bubble.cc index 7608d35..ca78b86 100644 --- a/ash/shelf/shelf_tooltip_preview_bubble.cc +++ b/ash/shelf/shelf_tooltip_preview_bubble.cc
@@ -6,47 +6,110 @@ namespace ash { -constexpr int kTooltipMaxDimension = 250; -constexpr int kTooltipMargin = 1; +// The maximum height or width of the whole tooltip. +constexpr int kTooltipMaxDimension = 192; + +// The padding inside the tooltip. +constexpr int kTooltipPadding = 16; + +// The margins above and below window titles. +constexpr int kTitleMarginTop = 2; +constexpr int kTitleMarginBottom = 10; + +// The padding between individual previews. +constexpr int kPreviewPadding = 10; ShelfTooltipPreviewBubble::ShelfTooltipPreviewBubble( views::View* anchor, views::BubbleBorder::Arrow arrow, - aura::Window* window) + const std::vector<aura::Window*>& windows) : views::BubbleDialogDelegateView(anchor, arrow) { - preview_ = - new wm::WindowMirrorView(window, /* trilinear_filtering_on_init */ false); + // The window previews and titles. + for (auto* window : windows) { + wm::WindowMirrorView* preview = new wm::WindowMirrorView( + window, /* trilinear_filtering_on_init=*/false); + previews_.push_back(preview); + AddChildView(preview); - gfx::Size preview_size = preview_->CalculatePreferredSize(); - float preview_ratio = static_cast<float>(preview_size.width()) / - static_cast<float>(preview_size.height()); - int preview_height = kTooltipMaxDimension; - int preview_width = kTooltipMaxDimension; - if (preview_ratio > 1) { - preview_height = kTooltipMaxDimension / preview_ratio; - } else { - preview_width = kTooltipMaxDimension * preview_ratio; + views::Label* title = new views::Label(window->GetTitle()); + titles_.push_back(title); + AddChildView(title); } - preview_->SetBoundsRect(gfx::Rect(gfx::Size(preview_width, preview_height))); - AddChildView(preview_); + SetStyling(); + PerformLayout(); // Place the bubble in the same display as the anchor. set_parent_window( anchor_widget()->GetNativeWindow()->GetRootWindow()->GetChildById( kShellWindowId_SettingBubbleContainer)); - set_margins(gfx::Insets(kTooltipMargin, kTooltipMargin)); - + set_margins(gfx::Insets(kTooltipPadding, kTooltipPadding)); views::BubbleDialogDelegateView::CreateBubble(this); + // This must be done after creating the bubble (a segmentation fault happens + // otherwise). + SetArrowPaintType(views::BubbleBorder::PAINT_TRANSPARENT); +} + +ShelfTooltipPreviewBubble::~ShelfTooltipPreviewBubble() = default; + +void ShelfTooltipPreviewBubble::SetStyling() { + const ui::NativeTheme* theme = anchor_widget()->GetNativeTheme(); + SkColor background_color = + theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipBackground); + set_color(background_color); + + for (auto* title : titles_) { + title->SetEnabledColor( + theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipText)); + title->SetBackgroundColor(background_color); + // The background is not opaque, so we can't do subpixel rendering. + title->SetSubpixelRenderingEnabled(false); + } +} + +void ShelfTooltipPreviewBubble::PerformLayout() { + int top = 0; + int left = 0; + + for (size_t i = 0; i < previews_.size(); i++) { + views::Label* title = titles_[i]; + wm::WindowMirrorView* preview = previews_[i]; + + gfx::Size preview_size = preview->CalculatePreferredSize(); + float preview_ratio = static_cast<float>(preview_size.width()) / + static_cast<float>(preview_size.height()); + int preview_height = kTooltipMaxDimension; + int preview_width = kTooltipMaxDimension; + if (preview_ratio > 1) { + preview_height = kTooltipMaxDimension / preview_ratio; + } else { + preview_width = kTooltipMaxDimension * preview_ratio; + } + + top = kTitleMarginTop; + if (i > 0) { + left += kPreviewPadding; + } + gfx::Size title_size = title->CalculatePreferredSize(); + int title_width = std::min(title_size.width(), preview_width); + title->SetBoundsRect( + gfx::Rect(left, top, title_width, title_size.height())); + top += title_size.height() + kTitleMarginBottom; + + preview->SetBoundsRect(gfx::Rect(left, top, preview_width, preview_height)); + top += preview_height; + left += preview_width; + } + + width_ = left; + height_ = top; } gfx::Size ShelfTooltipPreviewBubble::CalculatePreferredSize() const { - if (preview_ == nullptr) { + if (previews_.empty()) { return BubbleDialogDelegateView::CalculatePreferredSize(); } - // TODO: This is mostly a placeholder for a very first version. Compute this - // properly. - return gfx::Size(kTooltipMaxDimension, kTooltipMaxDimension); + return gfx::Size(width_, height_); } int ShelfTooltipPreviewBubble::GetDialogButtons() const {
diff --git a/ash/shelf/shelf_tooltip_preview_bubble.h b/ash/shelf/shelf_tooltip_preview_bubble.h index b33ff4e..b3da350 100644 --- a/ash/shelf/shelf_tooltip_preview_bubble.h +++ b/ash/shelf/shelf_tooltip_preview_bubble.h
@@ -5,10 +5,13 @@ #ifndef ASH_SHELF_SHELF_TOOLTIP_PREVIEW_BUBBLE_H_ #define ASH_SHELF_SHELF_TOOLTIP_PREVIEW_BUBBLE_H_ +#include <vector> + #include "ash/public/cpp/shell_window_ids.h" #include "ash/wm/window_mirror_view.h" #include "ui/aura/window.h" #include "ui/views/bubble/bubble_dialog_delegate.h" +#include "ui/views/controls/label.h" namespace ash { @@ -18,15 +21,26 @@ public: ShelfTooltipPreviewBubble(views::View* anchor, views::BubbleBorder::Arrow arrow, - aura::Window* window); + const std::vector<aura::Window*>& windows); + ~ShelfTooltipPreviewBubble() override; private: + void SetStyling(); + void PerformLayout(); + // BubbleDialogDelegateView overrides: gfx::Size CalculatePreferredSize() const override; int GetDialogButtons() const override; - // The window preview that this tooltip is meant to display. - wm::WindowMirrorView* preview_; + // The window previews that this tooltip is meant to display. + std::vector<wm::WindowMirrorView*> previews_; + + // The titles of the window that are being previewed. + std::vector<views::Label*> titles_; + + // Computed dimensions for the tooltip. + int width_ = 0; + int height_ = 0; DISALLOW_COPY_AND_ASSIGN(ShelfTooltipPreviewBubble); };
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc index fa697d4..05703272 100644 --- a/ash/shelf/shelf_view.cc +++ b/ash/shelf/shelf_view.cc
@@ -1491,39 +1491,15 @@ overflow_view->last_visible_index_ = last_overflow_index; } -gfx::Rect ShelfView::GetMenuAnchorRect(const views::View* source, - const gfx::Point& location, - ui::MenuSourceType source_type, - bool context_menu) const { - if (context_menu) { - if (source_type == ui::MenuSourceType::MENU_SOURCE_TOUCH) - return GetTouchMenuAnchorRect(source, location); - return gfx::Rect(location, gfx::Size()); - } - - // The menu is for an application list. - DCHECK(source) << "Application lists require a source button view."; - // Application lists use a bubble. It is possible to invoke the menu while - // it is sliding into view. To cover that case, the screen coordinates are - // offsetted by the animation delta. - aura::Window* window = GetWidget()->GetNativeWindow(); - gfx::Rect anchor = - source->GetBoundsInScreen() + - (window->GetTargetBounds().origin() - window->bounds().origin()); - if (source->border()) - anchor.Inset(source->border()->GetInsets()); - return anchor; -} - -gfx::Rect ShelfView::GetTouchMenuAnchorRect(const views::View* source, - const gfx::Point& location) const { - const bool for_item = ShelfItemForView(source); +gfx::Rect ShelfView::GetMenuAnchorRect(const views::View& source, + const gfx::Point& location) const { + const bool for_item = ShelfItemForView(&source); const gfx::Rect shelf_bounds = is_overflow_mode() ? owner_overflow_bubble_->bubble_view()->GetBubbleBounds() : screen_util::GetDisplayBoundsWithShelf( shelf_widget_->GetNativeWindow()); - const gfx::Rect& source_bounds_in_screen = source->GetBoundsInScreen(); + const gfx::Rect& source_bounds_in_screen = source.GetBoundsInScreen(); gfx::Point origin; switch (shelf_->alignment()) { case SHELF_ALIGNMENT_BOTTOM: @@ -2024,9 +2000,9 @@ item ? item->id.app_id : std::string(), std::move(menu_model), source, source_type, base::BindOnce(&ShelfView::OnMenuClosed, base::Unretained(this), source)); - shelf_menu_model_adapter_->Run( - GetMenuAnchorRect(source, click_point, source_type, context_menu), - GetMenuAnchorPosition(item, context_menu), run_types); + shelf_menu_model_adapter_->Run(GetMenuAnchorRect(*source, click_point), + GetMenuAnchorPosition(item, context_menu), + run_types); } void ShelfView::OnMenuClosed(views::View* source) {
diff --git a/ash/shelf/shelf_view.h b/ash/shelf/shelf_view.h index ee9b97bd..61e4de9 100644 --- a/ash/shelf/shelf_view.h +++ b/ash/shelf/shelf_view.h
@@ -306,19 +306,9 @@ void UpdateOverflowRange(ShelfView* overflow_view) const; // Gets the menu anchor rect for menus. |source| is the view that is - // asking for a menu, |location| is the location of the event, - // |source_type| is the type of event that asked for the menu, and - // |context_menu| is whether the menu is for a context or app menu. - gfx::Rect GetMenuAnchorRect(const views::View* source, - const gfx::Point& location, - ui::MenuSourceType source_type, - bool context_menu) const; - - // Gets the menu anchor rect that aligns the menu to the edge of the - // shelf for touch events. |source| is the view that is asking for the - // menu, |location| is the location of the event. - gfx::Rect GetTouchMenuAnchorRect(const views::View* source, - const gfx::Point& location) const; + // asking for a menu, |location| is the location of the event. + gfx::Rect GetMenuAnchorRect(const views::View& source, + const gfx::Point& location) const; // Gets the menu anchor position for a menu. |for_item| is true if the menu is // for an item on the shelf, or false if the menu is for the shelf view
diff --git a/ash/shelf/shelf_view_test_api.cc b/ash/shelf/shelf_view_test_api.cc index 49d1061..fb99645 100644 --- a/ash/shelf/shelf_view_test_api.cc +++ b/ash/shelf/shelf_view_test_api.cc
@@ -117,12 +117,10 @@ shelf_view_->bounds_animator_->RemoveObserver(observer.get()); } -gfx::Rect ShelfViewTestAPI::GetMenuAnchorRect(const views::View* source, - const gfx::Point& location, - ui::MenuSourceType source_type, - bool context_menu) const { - return shelf_view_->GetMenuAnchorRect(source, location, source_type, - context_menu); +gfx::Rect ShelfViewTestAPI::GetMenuAnchorRect( + const views::View& source, + const gfx::Point& location) const { + return shelf_view_->GetMenuAnchorRect(source, location); } bool ShelfViewTestAPI::CloseMenu() {
diff --git a/ash/shelf/shelf_view_test_api.h b/ash/shelf/shelf_view_test_api.h index cc1a63d..7ae8fe8 100644 --- a/ash/shelf/shelf_view_test_api.h +++ b/ash/shelf/shelf_view_test_api.h
@@ -75,10 +75,8 @@ // Gets the anchor point that would be used for a context menu with these // parameters. - gfx::Rect GetMenuAnchorRect(const views::View* source, - const gfx::Point& location, - ui::MenuSourceType source_type, - bool context_menu) const; + gfx::Rect GetMenuAnchorRect(const views::View& source, + const gfx::Point& location) const; // Close any open app list or context menu; returns true if a menu was closed. bool CloseMenu();
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc index 7eb8d3c..b984eb0 100644 --- a/ash/shelf/shelf_view_unittest.cc +++ b/ash/shelf/shelf_view_unittest.cc
@@ -2085,82 +2085,27 @@ DISALLOW_COPY_AND_ASSIGN(ShelfViewTouchableContextMenuTest); }; -// Tests that anchor points are aligned with the shelf button bounds for touch. -TEST_F(ShelfViewTouchableContextMenuTest, - ShelfViewContextMenuAnchorPointTouch) { +// Tests that menu anchor points are aligned with the shelf button bounds. +TEST_F(ShelfViewTouchableContextMenuTest, ShelfViewMenuAnchorPoint) { const ShelfButton* shelf_button = GetButtonByID(AddApp()); EXPECT_EQ(ash::ShelfAlignment::SHELF_ALIGNMENT_BOTTOM, GetPrimaryShelf()->alignment()); // Test for bottom shelf. EXPECT_EQ(shelf_button->GetBoundsInScreen().y(), - test_api_ - ->GetMenuAnchorRect(shelf_button, gfx::Point(), - ui::MenuSourceType::MENU_SOURCE_TOUCH, - true /*context_menu*/) - .y()); + test_api_->GetMenuAnchorRect(*shelf_button, gfx::Point()).y()); // Test for left shelf. GetPrimaryShelf()->SetAlignment(ash::ShelfAlignment::SHELF_ALIGNMENT_LEFT); EXPECT_EQ(shelf_button->GetBoundsInScreen().x(), - test_api_ - ->GetMenuAnchorRect(shelf_button, gfx::Point(), - ui::MenuSourceType::MENU_SOURCE_TOUCH, - true /*context_menu*/) - .x()); + test_api_->GetMenuAnchorRect(*shelf_button, gfx::Point()).x()); // Test for right shelf. GetPrimaryShelf()->SetAlignment(ash::ShelfAlignment::SHELF_ALIGNMENT_RIGHT); EXPECT_EQ(shelf_button->GetBoundsInScreen().x(), - test_api_ - ->GetMenuAnchorRect(shelf_button, gfx::Point(), - ui::MenuSourceType::MENU_SOURCE_TOUCH, - true /*context_menu*/) - .x()); -} - -// Tests that anchor points are the click point for mouse context menus. -TEST_F(ShelfViewTouchableContextMenuTest, ShelfViewContextMenuAnchorPoint) { - const ShelfButton* shelf_button = GetButtonByID(AddApp()); - EXPECT_EQ(ash::ShelfAlignment::SHELF_ALIGNMENT_BOTTOM, - GetPrimaryShelf()->alignment()); - - // Test for bottom shelf. - const gfx::Point click_point_bottom = - shelf_button->GetBoundsInScreen().CenterPoint(); - - EXPECT_EQ(click_point_bottom, - test_api_ - ->GetMenuAnchorRect(shelf_button, click_point_bottom, - ui::MenuSourceType::MENU_SOURCE_MOUSE, - true /*context_menu*/) - .origin()); - - // Test for left shelf. - GetPrimaryShelf()->SetAlignment(ash::ShelfAlignment::SHELF_ALIGNMENT_LEFT); - const gfx::Point click_point_left = - shelf_button->GetBoundsInScreen().CenterPoint(); - - EXPECT_EQ(click_point_left, - test_api_ - ->GetMenuAnchorRect(shelf_button, click_point_left, - ui::MenuSourceType::MENU_SOURCE_MOUSE, - true /*context_menu*/) - .origin()); - - // Test for right shelf. - GetPrimaryShelf()->SetAlignment(ash::ShelfAlignment::SHELF_ALIGNMENT_RIGHT); - const gfx::Point click_point_right = - shelf_button->GetBoundsInScreen().CenterPoint(); - - EXPECT_EQ(click_point_right, - test_api_ - ->GetMenuAnchorRect(shelf_button, click_point_right, - ui::MenuSourceType::MENU_SOURCE_MOUSE, - true /*context_menu*/) - .origin()); + test_api_->GetMenuAnchorRect(*shelf_button, gfx::Point()).x()); } // Tests that the app list button does not show a context menu on right click
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc index 852b49d..57951507 100644 --- a/ash/system/unified/unified_system_tray.cc +++ b/ash/system/unified/unified_system_tray.cc
@@ -172,6 +172,11 @@ return !!bubble_; } +void UnifiedSystemTray::ActivateBubble() { + if (bubble_) + bubble_->ActivateBubble(); +} + gfx::Rect UnifiedSystemTray::GetBubbleBoundsInScreen() const { return bubble_ ? bubble_->GetBoundsInScreen() : gfx::Rect(); }
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h index 1ce9290..8b572f1f4 100644 --- a/ash/system/unified/unified_system_tray.h +++ b/ash/system/unified/unified_system_tray.h
@@ -39,6 +39,9 @@ // True if the bubble is shown. bool IsBubbleShown() const; + // Activates the system tray bubble. + void ActivateBubble(); + // Return the bounds of the bubble in the screen. gfx::Rect GetBubbleBoundsInScreen() const;
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc index f7ca9d00..6c0203e 100644 --- a/ash/system/unified/unified_system_tray_bubble.cc +++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -40,6 +40,7 @@ tray->shelf()->GetSystemTrayAnchor()->GetBubbleAnchor(); init_params.corner_radius = kUnifiedTrayCornerRadius; init_params.has_shadow = false; + init_params.show_by_click = show_by_click; bubble_view_ = new views::TrayBubbleView(init_params); int max_height = tray->shelf()->GetUserWorkAreaBounds().height() - @@ -67,9 +68,6 @@ kUnifiedMenuBackgroundBlur); } - bubble_widget_->widget_delegate()->set_can_activate(true); - bubble_widget_->Activate(); - tray->tray_event_filter()->AddBubble(this); } @@ -86,6 +84,12 @@ return bubble_view_->GetBoundsInScreen(); } +void UnifiedSystemTrayBubble::ActivateBubble() { + DCHECK(bubble_widget_); + bubble_widget_->widget_delegate()->set_can_activate(true); + bubble_widget_->Activate(); +} + TrayBackgroundView* UnifiedSystemTrayBubble::GetTray() const { return tray_; }
diff --git a/ash/system/unified/unified_system_tray_bubble.h b/ash/system/unified/unified_system_tray_bubble.h index 2568229..ae7a32e 100644 --- a/ash/system/unified/unified_system_tray_bubble.h +++ b/ash/system/unified/unified_system_tray_bubble.h
@@ -37,6 +37,9 @@ // Return the bounds of the bubble in the screen. gfx::Rect GetBoundsInScreen() const; + // Activates the system tray bubble. + void ActivateBubble(); + // TrayBubbleBase: TrayBackgroundView* GetTray() const override; views::TrayBubbleView* GetBubbleView() const override;
diff --git a/base/bind.h b/base/bind.h index aab682896..66d5d82d 100644 --- a/base/bind.h +++ b/base/bind.h
@@ -8,6 +8,12 @@ #include <utility> #include "base/bind_internal.h" +#include "base/compiler_specific.h" +#include "build/build_config.h" + +#if defined(OS_MACOSX) && !HAS_FEATURE(objc_arc) +#include "base/mac/scoped_block.h" +#endif // ----------------------------------------------------------------------------- // Usage documentation @@ -452,6 +458,25 @@ return internal::IgnoreResultHelper<T>(std::move(data)); } +#if defined(OS_MACOSX) && !HAS_FEATURE(objc_arc) + +// RetainBlock() is used to adapt an Objective-C block when Automated Reference +// Counting (ARC) is disabled. This is unnecessary when ARC is enabled, as the +// BindOnce and BindRepeating already support blocks then. +// +// EXAMPLE OF RetainBlock(): +// +// // Wrap the block and bind it to a callback. +// Callback<void(int)> cb = Bind(RetainBlock(^(int n) { NSLog(@"%d", n); })); +// cb.Run(1); // Logs "1". +template <typename R, typename... Args> +base::mac::ScopedBlock<R (^)(Args...)> RetainBlock(R (^block)(Args...)) { + return base::mac::ScopedBlock<R (^)(Args...)>(block, + base::scoped_policy::RETAIN); +} + +#endif // defined(OS_MACOSX) && !HAS_FEATURE(objc_arc) + } // namespace base #endif // BASE_BIND_H_
diff --git a/base/bind_internal.h b/base/bind_internal.h index d748f89f..4b95f58 100644 --- a/base/bind_internal.h +++ b/base/bind_internal.h
@@ -11,11 +11,16 @@ #include <utility> #include "base/callback_internal.h" +#include "base/compiler_specific.h" #include "base/memory/raw_scoped_refptr_mismatch_checker.h" #include "base/memory/weak_ptr.h" #include "base/template_util.h" #include "build/build_config.h" +#if defined(OS_MACOSX) && !HAS_FEATURE(objc_arc) +#include "base/mac/scoped_block.h" +#endif + // See base/callback.h for user documentation. // // @@ -433,6 +438,61 @@ #endif // defined(OS_WIN) && !defined(ARCH_CPU_X86_64) +#if defined(OS_MACOSX) + +// Support for Objective-C blocks. There are two implementation depending +// on whether Automated Reference Counting (ARC) is enabled. When ARC is +// enabled, then the block itself can be bound as the compiler will ensure +// its lifetime will be correctly managed. Otherwise, require the block to +// be wrapped in a base::mac::ScopedBlock (via base::RetainBlock) that will +// correctly manage the block lifetime. +// +// The two implementation ensure that the One Definition Rule (ODR) is not +// broken (it is not possible to write a template base::RetainBlock that would +// work correctly both with ARC enabled and disabled). + +#if HAS_FEATURE(objc_arc) + +template <typename R, typename... Args> +struct FunctorTraits<R (^)(Args...)> { + using RunType = R(Args...); + static constexpr bool is_method = false; + static constexpr bool is_nullable = true; + + template <typename BlockType, typename... RunArgs> + static R Invoke(BlockType&& block, RunArgs&&... args) { + // According to LLVM documentation (§ 6.3), "local variables of automatic + // storage duration do not have precise lifetime." Use objc_precise_lifetime + // to ensure that the Objective-C block is not deallocated until it has + // finished executing even if the Callback<> is destroyed during the block + // execution. + // https://clang.llvm.org/docs/AutomaticReferenceCounting.html#precise-lifetime-semantics + __attribute__((objc_precise_lifetime)) R (^scoped_block)(Args...) = block; + return scoped_block(std::forward<RunArgs>(args)...); + } +}; + +#else // HAS_FEATURE(objc_arc) + +template <typename R, typename... Args> +struct FunctorTraits<base::mac::ScopedBlock<R (^)(Args...)>> { + using RunType = R(Args...); + static constexpr bool is_method = false; + static constexpr bool is_nullable = true; + + template <typename BlockType, typename... RunArgs> + static R Invoke(BlockType&& block, RunArgs&&... args) { + // Copy the block to ensure that the Objective-C block is not deallocated + // until it has finished executing even if the Callback<> is destroyed + // during the block execution. + base::mac::ScopedBlock<R (^)(Args...)> scoped_block(block); + return scoped_block.get()(std::forward<RunArgs>(args)...); + } +}; + +#endif // HAS_FEATURE(objc_arc) +#endif // defined(OS_MACOSX) + // For methods. template <typename R, typename Receiver, typename... Args> struct FunctorTraits<R (Receiver::*)(Args...)> {
diff --git a/base/mac/bind_objc_block.h b/base/mac/bind_objc_block.h index 9a481ed..c12ed7de 100644 --- a/base/mac/bind_objc_block.h +++ b/base/mac/bind_objc_block.h
@@ -12,64 +12,55 @@ #include "base/compiler_specific.h" #include "base/mac/scoped_block.h" -// BindBlock builds a callback from an Objective-C block. Example usages: -// -// Closure closure = BindBlock(^{DoSomething();}); -// -// Callback<int(void)> callback = BindBlock(^{return 42;}); -// -// Callback<void(const std::string&, const std::string&)> callback = -// BindBlock(^(const std::string& arg0, const std::string& arg1) { -// ... -// }); -// -// These variadic templates will accommodate any number of arguments, however -// the underlying templates in bind_internal.h and callback.h are limited to -// seven total arguments, and the bound block itself is used as one of these -// arguments, so functionally the templates are limited to binding blocks with -// zero through six arguments. -// -// For code compiled with ARC (automatic reference counting), use BindBlockArc. -// This is because the method has a different implementation (to avoid over- -// retaining the block) and need to have a different name not to break the ODR -// (one definition rule). Another subtle difference is that the implementation -// will call a different version of ScopedBlock constructor thus the linker must -// not merge both functions. - namespace base { -namespace internal { +#if !HAS_FEATURE(objc_arc) -// Helper function to run the block contained in the parameter. -template<typename R, typename... Args> -R RunBlock(base::mac::ScopedBlock<R(^)(Args...)> block, Args... args) { - R(^extracted_block)(Args...) = block.get(); - return extracted_block(args...); -} - -} // namespace internal - -#if !defined(__has_feature) || !__has_feature(objc_arc) - -// Construct a callback from an objective-C block with up to six arguments (see -// note above). -template<typename R, typename... Args> -base::Callback<R(Args...)> BindBlock(R(^block)(Args...)) { - return base::Bind( - &base::internal::RunBlock<R, Args...>, - base::mac::ScopedBlock<R (^)(Args...)>( - base::mac::internal::ScopedBlockTraits<R (^)(Args...)>::Retain( - block))); +// Construct a callback from an Objective-C block when ARC is disabled. +// Deprecated, instead use base::RetainBlock() and use base::BindOnce or +// base::BindRepeating with the wrapped block. +// +// For example, the following are equivalent: +// +// // Deprecated. +// base::RepeatingClosure closure = +// base::BindRepeating( +// base::BindBlock(^(int n) { NSLog(@"%d"); }), +// 1); +// +// // Recommended. +// base::RepeatingClosure closure = +// base::BindRepeating( +// base::RetainBlock(^(int n) { NSLog(@"%d"); }), +// 1); +template <typename R, typename... Args, typename... BoundArgs> +base::RepeatingCallback< + MakeUnboundRunType<base::mac::ScopedBlock<R (^)(Args...)>, BoundArgs...>> +BindBlock(R (^block)(Args...), BoundArgs&&... args) { + return base::BindRepeating(base::RetainBlock(block), + std::forward<BoundArgs>(args)...); } #else -// Construct a callback from an objective-C block with up to six arguments (see -// note above). -template <typename R, typename... Args> -base::Callback<R(Args...)> BindBlockArc(R (^block)(Args...)) { - return base::Bind(&base::internal::RunBlock<R, Args...>, - base::mac::ScopedBlock<R (^)(Args...)>(block)); +// Construct a callback from an Objective-C block when ARC is enabled. +// Deprecated, instead use base::BindOnce or base::BindRepeating directly. +// +// For example, the following are equivalent: +// +// // Deprecated. +// base::RepeatingClosure closure = +// base::BindRepeating( +// base::BindBlockArc(^(int n) { NSLog(@"%d"); }), +// 1); +// +// // Recommended. +// base::RepeatingClosure closure = +// base::BindRepeating(^(int n) { NSLog(@"%d"); }, 1); +template <typename R, typename... Args, typename... BoundArgs> +base::RepeatingCallback<MakeUnboundRunType<R (^)(Args...), BoundArgs...>> +BindBlockArc(R (^block)(Args...), BoundArgs&&... args) { + return base::BindRepeating(block, std::forward<BoundArgs>(args)...); } #endif
diff --git a/base/mac/bind_objc_block_unittest.mm b/base/mac/bind_objc_block_unittest.mm index 2b18672..4a30369 100644 --- a/base/mac/bind_objc_block_unittest.mm +++ b/base/mac/bind_objc_block_unittest.mm
@@ -9,13 +9,13 @@ #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" +#include "base/mac/scoped_nsautorelease_pool.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" #if defined(OS_IOS) #include "base/ios/weak_nsobject.h" -#include "base/mac/scoped_nsautorelease_pool.h" #endif namespace { @@ -103,6 +103,36 @@ EXPECT_EQ(result2, 6); } +TEST(BindObjcBlockTest, TestBlockMoveable) { + base::OnceClosure c; + __block BOOL invoked_block = NO; + { + base::mac::ScopedNSAutoreleasePool autorelease_pool; + c = base::BindOnce(base::RetainBlock(^(std::unique_ptr<BOOL> v) { + invoked_block = *v; + }), + std::make_unique<BOOL>(YES)); + }; + std::move(c).Run(); + EXPECT_TRUE(invoked_block); +} + +// Tests that the bound block is retained until the end of its execution, +// even if the callback itself is destroyed during the invocation. It was +// found that some code depends on this behaviour (see crbug.com/845687). +TEST(BindObjcBlockTest, TestBlockDeallocation) { + base::RepeatingClosure closure; + __block BOOL invoked_block = NO; + closure = base::BindRepeating( + base::RetainBlock(^(base::RepeatingClosure* this_closure) { + *this_closure = base::RepeatingClosure(); + invoked_block = YES; + }), + &closure); + closure.Run(); + EXPECT_TRUE(invoked_block); +} + #if defined(OS_IOS) TEST(BindObjcBlockTest, TestBlockReleased) {
diff --git a/base/mac/bind_objc_block_unittest_arc.mm b/base/mac/bind_objc_block_unittest_arc.mm index 24ec9748..61d4b00 100644 --- a/base/mac/bind_objc_block_unittest_arc.mm +++ b/base/mac/bind_objc_block_unittest_arc.mm
@@ -105,6 +105,36 @@ EXPECT_EQ(result2, 6); } +TEST(BindObjcBlockTestARC, TestBlockMoveable) { + base::OnceClosure c; + __block BOOL invoked_block = NO; + @autoreleasepool { + c = base::BindOnce( + ^(std::unique_ptr<BOOL> v) { + invoked_block = *v; + }, + std::make_unique<BOOL>(YES)); + }; + std::move(c).Run(); + EXPECT_TRUE(invoked_block); +} + +// Tests that the bound block is retained until the end of its execution, +// even if the callback itself is destroyed during the invocation. It was +// found that some code depends on this behaviour (see crbug.com/845687). +TEST(BindObjcBlockTestARC, TestBlockDeallocation) { + base::RepeatingClosure closure; + __block BOOL invoked_block = NO; + closure = base::BindRepeating( + ^(base::RepeatingClosure* this_closure) { + *this_closure = base::RepeatingClosure(); + invoked_block = YES; + }, + &closure); + closure.Run(); + EXPECT_TRUE(invoked_block); +} + #if defined(OS_IOS) TEST(BindObjcBlockTestARC, TestBlockReleased) {
diff --git a/build/android/gradle/root.jinja b/build/android/gradle/root.jinja index d5c5e56..76ffa8f6 100644 --- a/build/android/gradle/root.jinja +++ b/build/android/gradle/root.jinja
@@ -10,7 +10,7 @@ } dependencies { {% if channel == 'canary' %} - classpath "com.android.tools.build:gradle:3.2.0-alpha14" + classpath "com.android.tools.build:gradle:3.2.0-alpha16" {% elif channel == 'beta' %} classpath "com.android.tools.build:gradle:3.1.0-beta4" {% else %}
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index d292793b..5ffd2dc3 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -1059,11 +1059,7 @@ if (enable_widevine_cdm_host_verification) { widevine_sign_file("sign_chrome_framework_for_widevine") { - file = "$root_out_dir/$chrome_framework_name.framework/" - if (defined(chrome_framework_version)) { - file += "Versions/$chrome_framework_version/" - } - file += "$chrome_framework_name" + file = "$root_out_dir/$chrome_framework_name.framework/Versions/$chrome_framework_version/$chrome_framework_name" flags = 1 signature_file = "$root_out_dir/$chrome_framework_name.sig" deps = [ @@ -1122,11 +1118,7 @@ script = "//chrome/tools/build/mac/copy_keystone_framework.py" framework_path = "//third_party/googlemac/Releases/Keystone/KeystoneRegistration.framework" - output_path = "$root_out_dir/$chrome_framework_name.framework/" - if (defined(chrome_framework_version)) { - output_path += "/Versions/$chrome_framework_version/" - } - output_path += "Frameworks/" + output_path = "$root_out_dir/$chrome_framework_name.framework/Versions/$chrome_framework_version/Frameworks/" sources = [ framework_path, @@ -1220,24 +1212,22 @@ mac_framework_bundle("chrome_framework") { output_name = chrome_framework_name - if (defined(chrome_framework_version)) { - framework_version = chrome_framework_version - framework_contents = [ - "Helpers", - "Resources", - "XPCServices", - ] + framework_version = chrome_framework_version + framework_contents = [ + "Helpers", + "Libraries", + "Resources", + "XPCServices", + ] - if (is_chrome_branded) { - framework_contents += [ - "Default Apps", - "Frameworks", # For KeystoneRegistration.framework. - ] - } - if (enable_nacl) { - framework_contents += [ "Internet Plug-Ins" ] - } - framework_contents += [ "Libraries" ] + if (is_chrome_branded) { + framework_contents += [ + "Default Apps", + "Frameworks", # For KeystoneRegistration.framework. + ] + } + if (enable_nacl) { + framework_contents += [ "Internet Plug-Ins" ] } configs += [ "//build/config/compiler:wexit_time_destructors" ] @@ -1291,13 +1281,7 @@ } } - _framework_binary_path = "$root_out_dir/$chrome_framework_name.framework/" - if (defined(chrome_framework_version)) { - _framework_binary_path += - "Versions/$chrome_framework_version/$chrome_framework_name" - } else { - _framework_binary_path += "$chrome_framework_name" - } + _framework_binary_path = "$root_out_dir/$chrome_framework_name.framework/Versions/$chrome_framework_version/$chrome_framework_name" assert(_framework_binary_path != "", "Ignore configuration-dependent unused variable warning")
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/NonOverlappingStack.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/NonOverlappingStack.java index 123a52d2..2646b2d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/NonOverlappingStack.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/stack/NonOverlappingStack.java
@@ -67,6 +67,8 @@ } private int getNonDyingTabCount() { + if (mStackTabs == null) return 0; + int dyingCount = 0; for (int i = 0; i < mStackTabs.length; i++) { if (mStackTabs[i].isDying()) dyingCount++;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java index 65b9ed8..091c077 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
@@ -290,7 +290,13 @@ mNonVrViews = new EmptySniffingVrViewContainer(mActivity, this); parent.removeView(content); parent.addView(mNonVrViews); - mNonVrViews.addView(content); + // Some views in Clank are just added next to the content view, like the 2D tab switcher. + // We need to create a parent to contain the content view and all of its siblings so that + // the VrViewContainer can inject input into the parent and not care about how to do its own + // input targeting. + FrameLayout childHolder = new FrameLayout(mActivity); + mNonVrViews.addView(childHolder); + childHolder.addView(content); } private void injectVrHostedUiView() { @@ -312,12 +318,18 @@ } private void removeVrRootView() { - ViewGroup parent = (ViewGroup) mNonVrViews.getParent(); + ViewGroup contentViewParent = (ViewGroup) mNonVrViews.getParent(); assert mNonVrViews.getChildCount() == 1; - ViewGroup child = (ViewGroup) mNonVrViews.getChildAt(0); + ViewGroup childHolder = (ViewGroup) mNonVrViews.getChildAt(0); mNonVrViews.removeAllViews(); - parent.removeView(mNonVrViews); - parent.addView(child); + contentViewParent.removeView(mNonVrViews); + int children = childHolder.getChildCount(); + assert children >= 1; + for (int i = 0; i < children; ++i) { + View child = childHolder.getChildAt(0); + childHolder.removeView(child); + contentViewParent.addView(child); + } // Ensure the omnibox doesn't get initial focus (as it would when re-attaching the views // to a window), and immediately bring up the keyboard. if (mActivity.getCompositorViewHolder() != null) { @@ -1055,6 +1067,7 @@ @CalledByNative public void closeAllIncognitoTabs() { mTabModelSelector.getModel(true).closeAllTabs(); + if (mTabModelSelector.getTotalTabCount() == 0) openNewTab(false); } @CalledByNative
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 9cc01fd2..9cdc579 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3052,6 +3052,8 @@ "conflicts/module_blacklist_cache_util_win.h", "conflicts/module_list_filter_win.cc", "conflicts/module_list_filter_win.h", + "conflicts/module_load_attempt_log_listener_win.cc", + "conflicts/module_load_attempt_log_listener_win.h", "conflicts/msi_util_win.cc", "conflicts/msi_util_win.h", "conflicts/registry_key_watcher_win.cc",
diff --git a/chrome/browser/android/vr/vr_controller.cc b/chrome/browser/android/vr/vr_controller.cc index dee158c..e84e28e 100644 --- a/chrome/browser/android/vr/vr_controller.cc +++ b/chrome/browser/android/vr/vr_controller.cc
@@ -19,29 +19,8 @@ namespace { -constexpr float kDisplacementScaleFactor = 300.0f; - -// A slop represents a small rectangular region around the first touch point of -// a gesture. -// If the user does not move outside of the slop, no gesture is detected. -// Gestures start to be detected when the user moves outside of the slop. -// Vertical distance from the border to the center of slop. -constexpr float kSlopVertical = 0.185f; - -// Horizontal distance from the border to the center of slop. -constexpr float kSlopHorizontal = 0.17f; - -// Minimum distance needed in at least one direction to call two vectors -// not equal. Also, minimum time distance needed to call two timestamps -// not equal. -constexpr float kDelta = 1.0e-7f; - -constexpr float kCutoffHz = 10.0f; -constexpr float kRC = 1.0f / (2.0f * base::kPiFloat * kCutoffHz); constexpr float kNanoSecondsPerSecond = 1.0e9f; -constexpr int kMaxNumOfExtrapolations = 2; - // Distance from the center of the controller to start rendering the laser. constexpr float kLaserStartDisplacement = 0.045; @@ -96,7 +75,7 @@ handedness_ = gvr_api_->GetUserPrefs().GetControllerHandedness(); - Reset(); + gesture_detector_ = std::make_unique<GestureDetector>(); last_timestamp_nanos_ = gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos; } @@ -342,231 +321,34 @@ controller_state_->GetConnectionState()); } UpdateAlpha(); -} - -void VrController::UpdateTouchInfo() { - CHECK(touch_info_ != nullptr) << "touch_info_ not initialized properly."; - const bool effectively_scrolling = - (IsTouching() && state_ == SCROLLING) || state_ == POST_SCROLL; - if (effectively_scrolling && - (controller_state_->GetLastTouchTimestamp() == last_touch_timestamp_ || - (cur_touch_point_->position == prev_touch_point_->position && - extrapolated_touch_ < kMaxNumOfExtrapolations))) { - extrapolated_touch_++; - touch_position_changed_ = true; - // Fill the touch_info - float duration = DeltaTimeSeconds(last_timestamp_nanos_); - touch_info_->touch_point.position.set_x(cur_touch_point_->position.x() + - overall_velocity_.x() * duration); - touch_info_->touch_point.position.set_y(cur_touch_point_->position.y() + - overall_velocity_.y() * duration); - } else { - if (extrapolated_touch_ == kMaxNumOfExtrapolations) { - overall_velocity_ = {0, 0}; - } - extrapolated_touch_ = 0; - } - last_touch_timestamp_ = controller_state_->GetLastTouchTimestamp(); last_timestamp_nanos_ = gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos; } std::unique_ptr<GestureList> VrController::DetectGestures() { - auto gesture_list = std::make_unique<GestureList>(); - auto gesture = std::make_unique<blink::WebGestureEvent>(); - if (controller_state_->GetConnectionState() != gvr::kControllerConnected) { - gesture_list->push_back(std::move(gesture)); - return gesture_list; + return std::make_unique<GestureList>(); } - touch_position_changed_ = UpdateCurrentTouchpoint(); - UpdateTouchInfo(); - if (touch_position_changed_) - UpdateOverallVelocity(); + UpdateCurrentTouchInfo(); + return gesture_detector_->DetectGestures( + touch_info_, ButtonState(gvr::kControllerButtonClick)); +} - UpdateGestureFromTouchInfo(gesture.get()); - gesture->SetSourceDevice(blink::kWebGestureDeviceTouchpad); - gesture_list->push_back(std::move(gesture)); - - if (gesture_list->back()->GetType() == - blink::WebInputEvent::kGestureScrollEnd) { - Reset(); +void VrController::UpdateCurrentTouchInfo() { + touch_info_.touch_up = TouchUpHappened(); + touch_info_.touch_down = TouchDownHappened(); + touch_info_.is_touching = IsTouching(); + touch_info_.touch_point.position.set_x(TouchPosX()); + touch_info_.touch_point.position.set_y(TouchPosY()); + ClampTouchpadPosition(&touch_info_.touch_point.position); + if (touch_info_.is_touching) { + touch_info_.touch_point.timestamp = + base::TimeTicks() + + base::TimeDelta::FromNanoseconds( + gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos); } - return gesture_list; -} - -void VrController::UpdateGestureFromTouchInfo(blink::WebGestureEvent* gesture) { - gesture->SetTimeStamp(GetLastTouchTimestamp()); - switch (state_) { - // User has not put finger on touch pad. - case WAITING: - HandleWaitingState(gesture); - break; - // User has not started a gesture (by moving out of slop). - case TOUCHING: - HandleDetectingState(gesture); - break; - // User is scrolling on touchpad - case SCROLLING: - HandleScrollingState(gesture); - break; - // The user has finished scrolling, but we'll hallucinate a few points - // before really finishing. - case POST_SCROLL: - HandlePostScrollingState(gesture); - break; - default: - NOTREACHED(); - break; - } -} - -void VrController::UpdateGestureWithScrollDelta( - blink::WebGestureEvent* gesture) { - gesture->data.scroll_update.delta_x = - displacement_.x() * kDisplacementScaleFactor; - gesture->data.scroll_update.delta_y = - displacement_.y() * kDisplacementScaleFactor; -} - -void VrController::HandleWaitingState(blink::WebGestureEvent* gesture) { - // User puts finger on touch pad (or when the touch down for current gesture - // is missed, initiate gesture from current touch point). - if (touch_info_->touch_down || touch_info_->is_touching) { - // update initial touchpoint - *init_touch_point_ = touch_info_->touch_point; - // update current touchpoint - *cur_touch_point_ = touch_info_->touch_point; - state_ = TOUCHING; - - gesture->SetType(blink::WebInputEvent::kGestureFlingCancel); - gesture->data.fling_cancel.prevent_boosting = false; - } -} - -void VrController::HandleDetectingState(blink::WebGestureEvent* gesture) { - // User lifts up finger from touch pad. - if (touch_info_->touch_up || !(touch_info_->is_touching)) { - Reset(); - return; - } - - // Touch position is changed, the touch point moves outside of slop, - // and the Controller's button is not down. - if (touch_position_changed_ && touch_info_->is_touching && - !InSlop(touch_info_->touch_point.position) && - !ButtonState(gvr::kControllerButtonClick)) { - state_ = SCROLLING; - gesture->SetType(blink::WebInputEvent::kGestureScrollBegin); - UpdateGestureParameters(); - gesture->data.scroll_begin.delta_x_hint = - displacement_.x() * kDisplacementScaleFactor; - gesture->data.scroll_begin.delta_y_hint = - displacement_.y() * kDisplacementScaleFactor; - gesture->data.scroll_begin.delta_hint_units = - blink::WebGestureEvent::ScrollUnits::kPrecisePixels; - } -} - -void VrController::HandlePostScrollingState(blink::WebGestureEvent* gesture) { - if (extrapolated_touch_ > kMaxNumOfExtrapolations || - ButtonDownHappened(gvr::kControllerButtonClick)) { - gesture->SetType(blink::WebInputEvent::kGestureScrollEnd); - UpdateGestureParameters(); - if (touch_info_->touch_down || touch_info_->is_touching) { - HandleWaitingState(gesture); - } - } else { - gesture->SetType(blink::WebInputEvent::kGestureScrollUpdate); - UpdateGestureParameters(); - UpdateGestureWithScrollDelta(gesture); - } -} - -void VrController::HandleScrollingState(blink::WebGestureEvent* gesture) { - if (touch_info_->touch_up || !(touch_info_->is_touching)) { - state_ = POST_SCROLL; - } else if (ButtonDownHappened(gvr::kControllerButtonClick)) { - // Gesture ends. - gesture->SetType(blink::WebInputEvent::kGestureScrollEnd); - UpdateGestureParameters(); - } else if (touch_position_changed_) { - // User continues scrolling and there is a change in touch position. - gesture->SetType(blink::WebInputEvent::kGestureScrollUpdate); - UpdateGestureParameters(); - UpdateGestureWithScrollDelta(gesture); - last_velocity_ = overall_velocity_; - } -} - -bool VrController::InSlop(const gfx::Vector2dF touch_position) { - return (std::abs(touch_position.x() - init_touch_point_->position.x()) < - kSlopHorizontal) && - (std::abs(touch_position.y() - init_touch_point_->position.y()) < - kSlopVertical); -} - -void VrController::Reset() { - // Reset state. - state_ = WAITING; - - // Reset the pointers. - prev_touch_point_.reset(new TouchPoint); - cur_touch_point_.reset(new TouchPoint); - init_touch_point_.reset(new TouchPoint); - touch_info_.reset(new TouchInfo); - overall_velocity_ = {0, 0}; - last_velocity_ = {0, 0}; -} - -void VrController::UpdateGestureParameters() { - displacement_ = - touch_info_->touch_point.position - prev_touch_point_->position; -} - -bool VrController::UpdateCurrentTouchpoint() { - touch_info_->touch_up = TouchUpHappened(); - touch_info_->touch_down = TouchDownHappened(); - touch_info_->is_touching = IsTouching(); - touch_info_->touch_point.position.set_x(TouchPosX()); - touch_info_->touch_point.position.set_y(TouchPosY()); - ClampTouchpadPosition(&touch_info_->touch_point.position); - touch_info_->touch_point.timestamp = - gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos; - - if (IsTouching() || TouchUpHappened()) { - // Update the touch point when the touch position has changed. - if (cur_touch_point_->position != touch_info_->touch_point.position) { - prev_touch_point_.swap(cur_touch_point_); - cur_touch_point_.reset(new TouchPoint); - cur_touch_point_->position = touch_info_->touch_point.position; - cur_touch_point_->timestamp = touch_info_->touch_point.timestamp; - return true; - } - } - return false; -} - -void VrController::UpdateOverallVelocity() { - float duration = - (touch_info_->touch_point.timestamp - prev_touch_point_->timestamp) / - kNanoSecondsPerSecond; - - // If the timestamp does not change, do not update velocity. - if (duration < kDelta) - return; - - const gfx::Vector2dF& displacement = - touch_info_->touch_point.position - prev_touch_point_->position; - - const gfx::Vector2dF& velocity = ScaleVector2d(displacement, (1 / duration)); - - float weight = duration / (kRC + duration); - - overall_velocity_ = ScaleVector2d(overall_velocity_, (1 - weight)) + - ScaleVector2d(velocity, weight); } void VrController::UpdateAlpha() {
diff --git a/chrome/browser/android/vr/vr_controller.h b/chrome/browser/android/vr/vr_controller.h index 542f1c5c..7ee3bd9 100644 --- a/chrome/browser/android/vr/vr_controller.h +++ b/chrome/browser/android/vr/vr_controller.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/time/time.h" #include "chrome/browser/android/vr/gvr_util.h" +#include "chrome/browser/vr/gesture_detector.h" #include "chrome/browser/vr/platform_controller.h" #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" #include "device/vr/public/mojom/vr_service.mojom.h" @@ -93,24 +94,6 @@ bool GetRecentered() const override; private: - enum GestureDetectorState { - WAITING, // waiting for user to touch down - TOUCHING, // touching the touch pad but not scrolling - SCROLLING, // scrolling on the touch pad - POST_SCROLL // scroll has finished and we are hallucinating events - }; - - struct TouchPoint { - gfx::Vector2dF position; - int64_t timestamp; - }; - - struct TouchInfo { - TouchPoint touch_point; - bool touch_up; - bool touch_down; - bool is_touching; - }; struct ButtonInfo { gvr::ControllerButton button; @@ -120,40 +103,16 @@ int64_t timestamp; }; - void UpdateGestureFromTouchInfo(blink::WebGestureEvent* gesture); - void UpdateGestureWithScrollDelta(blink::WebGestureEvent* gesture); - bool GetButtonLongPressFromButtonInfo(); - void HandleWaitingState(blink::WebGestureEvent* gesture); - void HandleDetectingState(blink::WebGestureEvent* gesture); - void HandleScrollingState(blink::WebGestureEvent* gesture); - void HandlePostScrollingState(blink::WebGestureEvent* gesture); - void UpdateTouchInfo(); - // Returns true if the touch position is within the slop of the initial touch - // point, false otherwise. - bool InSlop(const gfx::Vector2dF touch_position); - - // Returns true if the gesture is in horizontal direction. - bool IsHorizontalGesture(); - - void Reset(); - - void UpdateGestureParameters(); - - // If the user is touching the touch pad and the touch point is different from - // before, update the touch point and return true. Otherwise, return false. - bool UpdateCurrentTouchpoint(); + void UpdateCurrentTouchInfo(); void UpdateOverallVelocity(); void UpdateAlpha(); - // State of gesture detector. - GestureDetectorState state_; - std::unique_ptr<gvr::ControllerApi> controller_api_; // The last controller state (updated once per frame). @@ -161,10 +120,10 @@ std::unique_ptr<gvr::GvrApi> gvr_api_; + std::unique_ptr<GestureDetector> gesture_detector_; + float last_qx_; bool pinch_started_; - bool zoom_in_progress_ = false; - bool touch_position_changed_ = false; // TODO(https://crbug.com/824194): Remove this and associated logic once the // GVR-side bug is fixed and we don't need to keep track of click states // ourselves. @@ -173,36 +132,14 @@ // Handedness from user prefs. gvr::ControllerHandedness handedness_; - // Current touch info after the extrapolation. - std::unique_ptr<TouchInfo> touch_info_; - - // A pointer storing the touch point from previous frame. - std::unique_ptr<TouchPoint> prev_touch_point_; - - // A pointer storing the touch point from current frame. - std::unique_ptr<TouchPoint> cur_touch_point_; - - // Initial touch point. - std::unique_ptr<TouchPoint> init_touch_point_; - - // Overall velocity - gfx::Vector2dF overall_velocity_; - - // Last velocity that is used for direction detection - gfx::Vector2dF last_velocity_; - - // Displacement of the touch point from the previews to the current touch - gfx::Vector2dF displacement_; + // Current touch info from GVR. + TouchInfo touch_info_; // Head offset. Keeps the controller at the user's side with 6DoF headsets. gfx::Point3F head_offset_; - int64_t last_touch_timestamp_ = 0; int64_t last_timestamp_nanos_ = 0; - // Number of consecutively extrapolated touch points - int extrapolated_touch_ = 0; - float alpha_value_ = 1.0f; DISALLOW_COPY_AND_ASSIGN(VrController);
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_api.cc b/chrome/browser/chromeos/extensions/users_private/users_private_api.cc index b6a5cedd..1c2a4d5 100644 --- a/chrome/browser/chromeos/extensions/users_private/users_private_api.cc +++ b/chrome/browser/chromeos/extensions/users_private/users_private_api.cc
@@ -24,6 +24,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/users_private.h" #include "chromeos/settings/cros_settings_names.h" +#include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" #include "extensions/browser/extension_function_registry.h" @@ -31,6 +32,61 @@ namespace extensions { +namespace { + +bool IsEnterpriseManaged() { + return g_browser_process->platform_part() + ->browser_policy_connector_chromeos() + ->IsEnterpriseManaged(); +} + +bool IsChild(Profile* profile) { + const user_manager::User* user = + chromeos::ProfileHelper::Get()->GetUserByProfile(profile); + if (!user) + return false; + + return user->GetType() == user_manager::UserType::USER_TYPE_CHILD; +} + +bool IsOwnerProfile(Profile* profile) { + return chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( + profile) + ->IsOwner(); +} + +bool CanModifyWhitelistedUsers(Profile* profile) { + return !IsEnterpriseManaged() && IsOwnerProfile(profile) && !IsChild(profile); +} + +// Creates User object for the exising user_manager::User . +api::users_private::User CreateApiUser(const std::string& email, + const user_manager::User& user) { + api::users_private::User api_user; + api_user.email = email; + api_user.display_email = user.GetDisplayEmail(); + api_user.name = base::UTF16ToUTF8(user.GetDisplayName()); + api_user.is_owner = + IsOwnerProfile(chromeos::ProfileHelper::Get()->GetProfileByUser(&user)); + api_user.is_supervised = user.IsSupervised(); + api_user.is_child = user.IsChild(); + return api_user; +} + +// Creates User object for the unknown user (i.e. not on device). +api::users_private::User CreateUnknownApiUser(const std::string& email) { + api::users_private::User api_user; + api_user.email = email; + api_user.display_email = email; + api_user.name = email; + api_user.is_owner = false; + api_user.is_supervised = false; + api_user.is_child = false; + return api_user; +} + +} // anonymous namespace + //////////////////////////////////////////////////////////////////////////////// // UsersPrivateGetWhitelistedUsersFunction @@ -48,8 +104,7 @@ Profile* profile = chrome_details_.GetProfile(); std::unique_ptr<base::ListValue> user_list(new base::ListValue); - // Non-owners should not be able to see the list of users. - if (!chromeos::ProfileHelper::IsOwnerProfile(profile)) + if (!CanModifyWhitelistedUsers(profile)) return RespondNow(OneArgument(std::move(user_list))); // Create one list to set. This is needed because user white list update is @@ -105,23 +160,9 @@ email_list->GetString(i, &email); AccountId account_id = AccountId::FromUserEmail(email); const user_manager::User* user = user_manager->FindUser(account_id); - api::users_private::User api_user; - if (user) { - api_user.email = email; - api_user.display_email = user->GetDisplayEmail(); - api_user.name = base::UTF16ToUTF8(user->GetDisplayName()); - api_user.is_owner = - user->GetAccountId() == user_manager->GetOwnerAccountId(); - api_user.is_supervised = user->IsSupervised(); - } else { - // User is unknown (i.e. not on device). - api_user.email = email; - api_user.display_email = email; - api_user.name = email; - api_user.is_owner = false; - api_user.is_supervised = false; - } - user_list->Append(api_user.ToValue()); + user_list->Append( + (user ? CreateApiUser(email, *user) : CreateUnknownApiUser(email)) + .ToValue()); } return RespondNow(OneArgument(std::move(user_list))); @@ -145,7 +186,7 @@ EXTENSION_FUNCTION_VALIDATE(parameters.get()); // Non-owners should not be able to add users. - if (!chromeos::ProfileHelper::IsOwnerProfile(chrome_details_.GetProfile())) { + if (!CanModifyWhitelistedUsers(chrome_details_.GetProfile())) { return RespondNow(OneArgument(std::make_unique<base::Value>(false))); } @@ -185,7 +226,7 @@ EXTENSION_FUNCTION_VALIDATE(parameters.get()); // Non-owners should not be able to remove users. - if (!chromeos::ProfileHelper::IsOwnerProfile(chrome_details_.GetProfile())) { + if (!CanModifyWhitelistedUsers(chrome_details_.GetProfile())) { return RespondNow(OneArgument(std::make_unique<base::Value>(false))); } @@ -202,30 +243,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// UsersPrivateIsCurrentUserOwnerFunction - -UsersPrivateIsCurrentUserOwnerFunction::UsersPrivateIsCurrentUserOwnerFunction() - : chrome_details_(this) { -} - -UsersPrivateIsCurrentUserOwnerFunction:: - ~UsersPrivateIsCurrentUserOwnerFunction() { -} - -ExtensionFunction::ResponseAction -UsersPrivateIsCurrentUserOwnerFunction::Run() { - chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( - browser_context()) - ->IsOwnerAsync(base::Bind( - &UsersPrivateIsCurrentUserOwnerFunction::IsOwnerCallback, this)); - return RespondLater(); -} - -void UsersPrivateIsCurrentUserOwnerFunction::IsOwnerCallback(bool is_owner) { - Respond(OneArgument(std::make_unique<base::Value>(is_owner))); -} - -//////////////////////////////////////////////////////////////////////////////// // UsersPrivateIsWhitelistManagedFunction UsersPrivateIsWhitelistManagedFunction:: @@ -238,10 +255,26 @@ ExtensionFunction::ResponseAction UsersPrivateIsWhitelistManagedFunction::Run() { - bool is_managed = g_browser_process->platform_part() - ->browser_policy_connector_chromeos() - ->IsEnterpriseManaged(); - return RespondNow(OneArgument(std::make_unique<base::Value>(is_managed))); + return RespondNow( + OneArgument(std::make_unique<base::Value>(IsEnterpriseManaged()))); +} + +//////////////////////////////////////////////////////////////////////////////// +// UsersPrivateGetCurrentUserFunction + +UsersPrivateGetCurrentUserFunction::UsersPrivateGetCurrentUserFunction() + : chrome_details_(this) {} + +UsersPrivateGetCurrentUserFunction::~UsersPrivateGetCurrentUserFunction() {} + +ExtensionFunction::ResponseAction UsersPrivateGetCurrentUserFunction::Run() { + const user_manager::User* user = + chromeos::ProfileHelper::Get()->GetUserByProfile( + chrome_details_.GetProfile()); + return user ? RespondNow(OneArgument( + CreateApiUser(user->GetAccountId().GetUserEmail(), *user) + .ToValue())) + : RespondNow(Error("No Current User")); } } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_api.h b/chrome/browser/chromeos/extensions/users_private/users_private_api.h index 155eda5..94df784 100644 --- a/chrome/browser/chromeos/extensions/users_private/users_private_api.h +++ b/chrome/browser/chromeos/extensions/users_private/users_private_api.h
@@ -74,28 +74,6 @@ DISALLOW_COPY_AND_ASSIGN(UsersPrivateRemoveWhitelistedUserFunction); }; -// Implements the chrome.usersPrivate.isCurrentUserOwner method. -class UsersPrivateIsCurrentUserOwnerFunction - : public UIThreadExtensionFunction { - public: - UsersPrivateIsCurrentUserOwnerFunction(); - DECLARE_EXTENSION_FUNCTION("usersPrivate.isCurrentUserOwner", - USERSPRIVATE_ISCURRENTUSEROWNER); - - protected: - ~UsersPrivateIsCurrentUserOwnerFunction() override; - - // ExtensionFunction overrides. - ResponseAction Run() override; - - private: - void IsOwnerCallback(bool is_owner); - - ChromeExtensionFunctionDetails chrome_details_; - - DISALLOW_COPY_AND_ASSIGN(UsersPrivateIsCurrentUserOwnerFunction); -}; - // Implements the chrome.usersPrivate.isWhitelistManaged method. class UsersPrivateIsWhitelistManagedFunction : public UIThreadExtensionFunction { @@ -114,6 +92,24 @@ DISALLOW_COPY_AND_ASSIGN(UsersPrivateIsWhitelistManagedFunction); }; +// Implements the chrome.usersPrivate.getCurrentUser method. +class UsersPrivateGetCurrentUserFunction : public UIThreadExtensionFunction { + public: + UsersPrivateGetCurrentUserFunction(); + DECLARE_EXTENSION_FUNCTION("usersPrivate.getCurrentUser", + USERSPRIVATE_GETCURRENTUSER); + + protected: + ~UsersPrivateGetCurrentUserFunction() override; + + // ExtensionFunction overrides. + ResponseAction Run() override; + + private: + ChromeExtensionFunctionDetails chrome_details_; + DISALLOW_COPY_AND_ASSIGN(UsersPrivateGetCurrentUserFunction); +}; + } // namespace extensions #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_USERS_PRIVATE_USERS_PRIVATE_API_H_
diff --git a/chrome/browser/chromeos/smb_client/smb_url.cc b/chrome/browser/chromeos/smb_client/smb_url.cc index 802bb855..72d7de5 100644 --- a/chrome/browser/chromeos/smb_client/smb_url.cc +++ b/chrome/browser/chromeos/smb_client/smb_url.cc
@@ -6,6 +6,7 @@ #include "base/strings/string_util.h" #include "chrome/browser/chromeos/smb_client/smb_constants.h" +#include "url/url_canon_stdstring.h" namespace chromeos { namespace smb_client { @@ -34,43 +35,107 @@ return std::string(kSmbSchemePrefix) + url; } +// Returns true if |parsed| contains a username, password, port, query, or ref. +bool ContainsUnnecessaryComponents(const url::Parsed& parsed) { + return parsed.username.is_nonempty() || parsed.password.is_nonempty() || + parsed.port.is_nonempty() || parsed.query.is_nonempty() || + parsed.ref.is_nonempty(); +} + +// Parses |url| into |parsed|. Returns true if the URL does not contain +// unnecessary components. +bool ParseAndValidateUrl(const std::string& url, url::Parsed* parsed) { + DCHECK(parsed); + DCHECK(ShouldProcessUrl(url)); + + url::ParseStandardURL(url.c_str(), url.size(), parsed); + return !ContainsUnnecessaryComponents(*parsed); +} + } // namespace -SmbUrl::SmbUrl() = default; -SmbUrl::~SmbUrl() = default; - -bool SmbUrl::InitializeWithUrl(const std::string& url) { +SmbUrl::SmbUrl(const std::string& raw_url) { // Only process |url| if it starts with "smb://" or "\\". - if (ShouldProcessUrl(url)) { - // Add "smb://" if |url| starts with "\\". - url_ = GURL(AddSmbSchemeIfMissing(url)); + if (ShouldProcessUrl(raw_url)) { + // Add "smb://" if |url| starts with "\\" and canonicalize the URL. + CanonicalizeSmbUrl(AddSmbSchemeIfMissing(raw_url)); } - - return IsValid(); } +SmbUrl::~SmbUrl() = default; + std::string SmbUrl::GetHost() const { DCHECK(IsValid()); - return url_.host(); + return url_.substr(host_.begin, host_.len); } const std::string& SmbUrl::ToString() const { DCHECK(IsValid()); - return url_.spec(); + return url_; } std::string SmbUrl::ReplaceHost(const std::string& new_host) const { DCHECK(IsValid()); - GURL::Replacements replace_host; - replace_host.SetHostStr(new_host); - return url_.ReplaceComponents(replace_host).spec(); + std::string temp = url_; + temp.replace(host_.begin, host_.len, new_host); + return temp; } bool SmbUrl::IsValid() const { - return url_.is_valid(); + return !url_.empty() && host_.is_valid(); +} + +void SmbUrl::CanonicalizeSmbUrl(const std::string& url) { + DCHECK(!IsValid()); + DCHECK(ShouldProcessUrl(url)); + + // Get the initial parse of |url| and ensure that it does not contain + // unnecessary components. + url::Parsed initial_parsed; + if (!ParseAndValidateUrl(url, &initial_parsed)) { + return; + } + + url::StdStringCanonOutput canonical_output(&url_); + + url::Component scheme; + if (!url::CanonicalizeScheme(url.c_str(), initial_parsed.scheme, + &canonical_output, &scheme)) { + Reset(); + return; + } + + canonical_output.push_back('/'); + canonical_output.push_back('/'); + + url::Component unused_path; + if (!(url::CanonicalizeHost(url.c_str(), initial_parsed.host, + &canonical_output, &host_) && + url::CanonicalizePath(url.c_str(), initial_parsed.path, + &canonical_output, &unused_path))) { + Reset(); + return; + } + + // Check IsValid here since url::Canonicalize* may return true even if it did + // not actually parse the component. + if (!IsValid()) { + Reset(); + return; + } + + canonical_output.Complete(); + + DCHECK(host_.is_nonempty()); + DCHECK_EQ(url_.substr(scheme.begin, scheme.len), kSmbScheme); +} + +void SmbUrl::Reset() { + host_.reset(); + url_.clear(); } } // namespace smb_client
diff --git a/chrome/browser/chromeos/smb_client/smb_url.h b/chrome/browser/chromeos/smb_client/smb_url.h index a8a96a3..34b8d27f 100644 --- a/chrome/browser/chromeos/smb_client/smb_url.h +++ b/chrome/browser/chromeos/smb_client/smb_url.h
@@ -8,26 +8,21 @@ #include <string> #include "base/macros.h" -#include "url/gurl.h" +#include "url/third_party/mozilla/url_parse.h" namespace chromeos { namespace smb_client { // Represents an SMB URL. -// This class stores a URL using GURL to a share and can contain either an +// This class stores a URL using url::Component and can contain either a // resolved or unresolved host. The host can be replaced when the address is // resolved by using ReplaceHost(). The passed URL must start with either -// "smb://" or "\\" when initializing with InitializeWithUrl. +// "smb://" or "\\" when constructed. class SmbUrl { public: - // Initializes an empty and invalid SmbUrl. - SmbUrl(); + explicit SmbUrl(const std::string& url); ~SmbUrl(); - // Initializes SmbUrl and saves |url|. |url| must start with - // either "smb://" or "\\". Returns true if |url| is valid. - bool InitializeWithUrl(const std::string& url) WARN_UNUSED_RESULT; - // Returns the host of the URL which can be resolved or unresolved. std::string GetHost() const; @@ -38,11 +33,22 @@ // change the original URL. std::string ReplaceHost(const std::string& new_host) const; - // Returns true if the passed URL is valid and was properly parsed. + // Returns true if the passed URL is valid and was properly parsed. This + // should be called after the constructor. bool IsValid() const; private: - GURL url_; + // Canonicalize |url| and saves the output as url_ and host_ if successful. + void CanonicalizeSmbUrl(const std::string& url); + + // Resets url_ and parsed_. + void Reset(); + + // String form of the canonical url. + std::string url_; + + // Holds the identified host of the URL. This does not store the host itself. + url::Component host_; DISALLOW_COPY_AND_ASSIGN(SmbUrl); };
diff --git a/chrome/browser/chromeos/smb_client/smb_url_unittest.cc b/chrome/browser/chromeos/smb_client/smb_url_unittest.cc index e9655d41..7bbca31 100644 --- a/chrome/browser/chromeos/smb_client/smb_url_unittest.cc +++ b/chrome/browser/chromeos/smb_client/smb_url_unittest.cc
@@ -8,205 +8,94 @@ #include "chrome/browser/chromeos/smb_client/smb_constants.h" #include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" -#include "url/url_util.h" namespace chromeos { namespace smb_client { class SmbUrlTest : public testing::Test { public: - SmbUrlTest() { - // Add the scheme to the "standard" list for url_util. This enables GURL to - // properly process the domain from the url. - url::AddStandardScheme(kSmbScheme, url::SCHEME_WITH_HOST); + SmbUrlTest() = default; + ~SmbUrlTest() override = default; + + void ExpectInvalidUrl(const std::string& url) { + SmbUrl smb_url(url); + EXPECT_FALSE(smb_url.IsValid()); } - ~SmbUrlTest() override = default; + void ExpectValidUrl(const std::string& url, + const std::string& expected_url, + const std::string& expected_host) { + SmbUrl smb_url(url); + EXPECT_TRUE(smb_url.IsValid()); + EXPECT_EQ(expected_url, smb_url.ToString()); + EXPECT_EQ(expected_host, smb_url.GetHost()); + } private: DISALLOW_COPY_AND_ASSIGN(SmbUrlTest); }; -TEST_F(SmbUrlTest, NotValidWhenInitialized) { - SmbUrl smb_url; - - EXPECT_FALSE(smb_url.IsValid()); -} - TEST_F(SmbUrlTest, EmptyUrlIsInvalid) { - const std::string empty_url = ""; - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl(empty_url)); - - EXPECT_FALSE(smb_url.IsValid()); + ExpectInvalidUrl(""); } TEST_F(SmbUrlTest, InvalidUrls) { - { - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl("smb")); - } - { - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl("smb://")); - } - { - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl("\\")); - } - { - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl("\\\\")); - } - { - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl("smb:///")); - } + ExpectInvalidUrl("smb"); + ExpectInvalidUrl("smb://"); + ExpectInvalidUrl("\\"); + ExpectInvalidUrl("\\\\"); + ExpectInvalidUrl("smb:///"); + ExpectInvalidUrl("://host/path"); + ExpectInvalidUrl("\\://host/path"); + ExpectInvalidUrl("\\:/host/path"); } TEST_F(SmbUrlTest, ValidUrls) { - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("smb://x")); - - const std::string expected_url = "smb://x/"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "x"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("smb:///x")); - - const std::string expected_url = "smb://x/"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "x"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("smb://server/share/long/folder")); - - const std::string expected_url = "smb://server/share/long/folder"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE( - smb_url.InitializeWithUrl("smb://server/share/folder.with.dots")); - - const std::string expected_url = "smb://server/share/folder.with.dots"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE( - smb_url.InitializeWithUrl("smb://server\\share/mixed\\slashes")); - - const std::string expected_url = "smb://server/share/mixed/slashes"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("\\\\server/share")); - - const std::string expected_url = "smb://server/share"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("\\\\server\\share/mixed//slashes")); - - const std::string expected_url = "smb://server/share/mixed//slashes"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } - { - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl("smb://192.168.0.1/share")); - - const std::string expected_url = "smb://192.168.0.1/share"; - EXPECT_EQ(expected_url, smb_url.ToString()); - - const std::string expected_host = "192.168.0.1"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - } + ExpectValidUrl("smb://x", "smb://x/", "x"); + ExpectValidUrl("smb:///x", "smb://x/", "x"); + ExpectValidUrl("smb://server/share/long/folder", + "smb://server/share/long/folder", "server"); + ExpectValidUrl("smb://server/share/folder.with.dots", + "smb://server/share/folder.with.dots", "server"); + ExpectValidUrl("smb://server\\share/mixed\\slashes", + "smb://server/share/mixed/slashes", "server"); + ExpectValidUrl("\\\\server/share", "smb://server/share", "server"); + ExpectValidUrl("\\\\server\\share/mixed//slashes", + "smb://server/share/mixed//slashes", "server"); + ExpectValidUrl("smb://192.168.0.1/share", "smb://192.168.0.1/share", + "192.168.0.1"); } TEST_F(SmbUrlTest, NotValidIfStartsWithoutSchemeOrDoubleBackslash) { - const std::string url = "192.168.0.1/share"; - SmbUrl smb_url; - EXPECT_FALSE(smb_url.InitializeWithUrl(url)); - - EXPECT_FALSE(smb_url.IsValid()); + ExpectInvalidUrl("192.168.0.1/share"); } TEST_F(SmbUrlTest, StartsWithBackslashRemovesBackslashAndAddsScheme) { - const std::string url = "\\\\192.168.0.1\\share"; - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl(url)); - - const std::string expected_url = "smb://192.168.0.1/share"; - EXPECT_TRUE(smb_url.IsValid()); - EXPECT_EQ(expected_url, smb_url.ToString()); + ExpectValidUrl("\\\\192.168.0.1\\share", "smb://192.168.0.1/share", + "192.168.0.1"); } TEST_F(SmbUrlTest, GetHostWithIp) { - const std::string url = "smb://192.168.0.1/share"; - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl(url)); - - const std::string expected_host = "192.168.0.1"; - EXPECT_EQ(expected_host, smb_url.GetHost()); + ExpectValidUrl("smb://192.168.0.1/share", "smb://192.168.0.1/share", + "192.168.0.1"); } TEST_F(SmbUrlTest, GetHostWithDomain) { - const std::string url = "smb://server/share"; - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl(url)); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); + ExpectValidUrl("smb://server/share", "smb://server/share", "server"); } TEST_F(SmbUrlTest, HostBecomesLowerCase) { - const std::string url = "smb://SERVER/share"; - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl(url)); - - const std::string expected_host = "server"; - EXPECT_EQ(expected_host, smb_url.GetHost()); - - const std::string expected_url = "smb://server/share"; - EXPECT_EQ(expected_url, smb_url.ToString()); + ExpectValidUrl("smb://SERVER/share", "smb://server/share", "server"); } TEST_F(SmbUrlTest, ReplacesHost) { - const std::string url = "smb://server/share"; - const std::string new_host = "192.168.0.1"; - SmbUrl smb_url; - EXPECT_TRUE(smb_url.InitializeWithUrl(url)); + SmbUrl smb_url("smb://server/share"); + EXPECT_TRUE(smb_url.IsValid()); const std::string expected_host = "server"; EXPECT_EQ(expected_host, smb_url.GetHost()); + const std::string new_host = "192.168.0.1"; const std::string expected_url = "smb://192.168.0.1/share"; EXPECT_EQ(expected_url, smb_url.ReplaceHost(new_host));
diff --git a/chrome/browser/conflicts/DEPS b/chrome/browser/conflicts/DEPS index 83e9cba..acd5f432 100644 --- a/chrome/browser/conflicts/DEPS +++ b/chrome/browser/conflicts/DEPS
@@ -1,3 +1,4 @@ include_rules = [ + "+chrome_elf/sha1/sha1.h", "+chrome_elf/third_party_dlls", ]
diff --git a/chrome/browser/conflicts/module_blacklist_cache_util_win.cc b/chrome/browser/conflicts/module_blacklist_cache_util_win.cc index d188f66..4cbc7bd 100644 --- a/chrome/browser/conflicts/module_blacklist_cache_util_win.cc +++ b/chrome/browser/conflicts/module_blacklist_cache_util_win.cc
@@ -17,6 +17,7 @@ #include "base/logging.h" #include "base/md5.h" #include "base/stl_util.h" +#include "base/time/time.h" #include "chrome/browser/conflicts/module_list_filter_win.h" #include "chrome_elf/third_party_dlls/packed_list_format.h" @@ -69,6 +70,11 @@ } // namespace +uint32_t CalculateTimeDateStamp(base::Time time) { + const auto delta = time.ToDeltaSinceWindowsEpoch(); + return delta < base::TimeDelta() ? 0 : static_cast<uint32_t>(delta.InHours()); +} + bool ReadModuleBlacklistCache( const base::FilePath& module_blacklist_cache_path, third_party_dlls::PackedListMetadata* metadata,
diff --git a/chrome/browser/conflicts/module_blacklist_cache_util_win.h b/chrome/browser/conflicts/module_blacklist_cache_util_win.h index 07bc340a..9523fcd 100644 --- a/chrome/browser/conflicts/module_blacklist_cache_util_win.h +++ b/chrome/browser/conflicts/module_blacklist_cache_util_win.h
@@ -12,6 +12,7 @@ namespace base { class FilePath; +class Time; struct MD5Digest; } // namespace base @@ -22,6 +23,11 @@ class ModuleListFilter; +// Returns the time date stamp to be used in the module blacklist cache. +// Represents the number of hours between |time| and the Windows epoch +// (1601-01-01 00:00:00 UTC). +uint32_t CalculateTimeDateStamp(base::Time time); + // Reads an existing module blacklist cache at |module_blacklist_cache_path| // into |metadata| and |blacklisted_modules|. Returns false on failure or if // the md5 digest doesn't match. Failures also does not modify the out
diff --git a/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc b/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc index 6c5d0bd..82a589f 100644 --- a/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc +++ b/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc
@@ -16,6 +16,7 @@ #include "base/macros.h" #include "base/md5.h" #include "base/stl_util.h" +#include "base/time/time.h" #include "chrome/browser/conflicts/module_list_filter_win.h" #include "chrome_elf/third_party_dlls/packed_list_format.h" #include "testing/gtest/include/gtest/gtest.h" @@ -96,6 +97,22 @@ DISALLOW_COPY_AND_ASSIGN(ModuleBlacklistCacheUtilTest); }; +TEST_F(ModuleBlacklistCacheUtilTest, CalculateTimeDateStamp) { + base::Time::Exploded chrome_birthday = {}; + chrome_birthday.year = 2008; + chrome_birthday.month = 9; // September. + chrome_birthday.day_of_week = 2; // Tuesday. + chrome_birthday.day_of_month = 2; + + base::Time time; + ASSERT_TRUE(chrome_birthday.HasValidValues()); + ASSERT_TRUE(base::Time::FromUTCExploded(chrome_birthday, &time)); + + // Ensure that CalculateTimeDateStamp() will always return the number of + // hours between |time| and the Windows epoch. + EXPECT_EQ(3573552u, CalculateTimeDateStamp(time)); +} + TEST_F(ModuleBlacklistCacheUtilTest, WriteEmptyCache) { third_party_dlls::PackedListMetadata metadata = { third_party_dlls::PackedListVersion::kCurrent, 0};
diff --git a/chrome/browser/conflicts/module_load_attempt_log_listener_win.cc b/chrome/browser/conflicts/module_load_attempt_log_listener_win.cc new file mode 100644 index 0000000..9adbce7 --- /dev/null +++ b/chrome/browser/conflicts/module_load_attempt_log_listener_win.cc
@@ -0,0 +1,102 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/conflicts/module_load_attempt_log_listener_win.h" + +#include <algorithm> +#include <memory> +#include <utility> +#include <vector> + +#include "base/bind.h" +#include "base/logging.h" +#include "base/task_runner_util.h" +#include "base/task_scheduler/post_task.h" +#include "chrome/browser/conflicts/module_blacklist_cache_util_win.h" +#include "chrome_elf/third_party_dlls/logging_api.h" + +namespace { + +std::vector<third_party_dlls::PackedListModule> DrainLogOnBackgroundTask() { + // Query the number of bytes needed. + uint32_t bytes_needed = 0; + DrainLog(nullptr, 0, &bytes_needed); + + // Drain the log. + auto buffer = std::make_unique<uint8_t[]>(bytes_needed); + uint32_t bytes_written = DrainLog(buffer.get(), bytes_needed, nullptr); + DCHECK_EQ(bytes_needed, bytes_written); + + auto now_time_date_stamp = CalculateTimeDateStamp(base::Time::Now()); + + // Parse the data using the recommanded pattern for iterating over the log. + std::vector<third_party_dlls::PackedListModule> blocked_modules; + uint8_t* tracker = buffer.get(); + uint8_t* buffer_end = buffer.get() + bytes_written; + while (tracker < buffer_end) { + third_party_dlls::LogEntry* entry = + reinterpret_cast<third_party_dlls::LogEntry*>(tracker); + DCHECK_LE(tracker + third_party_dlls::GetLogEntrySize(entry->path_len), + buffer_end); + + // Only consider blocked modules. + // TODO(pmonette): Wire-up loaded modules to ModuleDatabase::OnModuleLoad to + // get better visibility into all modules that loads into the browser + // process. + if (entry->type == third_party_dlls::LogType::kBlocked) { + blocked_modules.emplace_back(); + third_party_dlls::PackedListModule& module = blocked_modules.back(); + std::copy(std::begin(entry->basename_hash), + std::end(entry->basename_hash), + std::begin(module.basename_hash)); + std::copy(std::begin(entry->code_id_hash), std::end(entry->code_id_hash), + std::begin(module.code_id_hash)); + module.time_date_stamp = now_time_date_stamp; + } + + tracker += third_party_dlls::GetLogEntrySize(entry->path_len); + } + + return blocked_modules; +} + +} // namespace + +ModuleLoadAttemptLogListener::ModuleLoadAttemptLogListener( + OnNewModulesBlockedCallback on_new_modules_blocked_callback) + : on_new_modules_blocked_callback_( + std::move(on_new_modules_blocked_callback)), + background_task_runner_(base::CreateSequencedTaskRunnerWithTraits( + {base::TaskPriority::BACKGROUND, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, + base::MayBlock()})), + // The event starts signaled so that the logs are drained once when the + // |object_watcher_| starts waiting on the newly registered event. + waitable_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, + base::WaitableEvent::InitialState::SIGNALED), + weak_ptr_factory_(this) { + if (!RegisterLogNotification(waitable_event_.handle())) + return; + + object_watcher_.StartWatchingMultipleTimes(waitable_event_.handle(), this); +} + +ModuleLoadAttemptLogListener::~ModuleLoadAttemptLogListener() = default; + +void ModuleLoadAttemptLogListener::OnObjectSignaled(HANDLE object) { + StartDrainingLogs(); +} + +void ModuleLoadAttemptLogListener::StartDrainingLogs() { + base::PostTaskAndReplyWithResult( + background_task_runner_.get(), FROM_HERE, + base::BindOnce(&DrainLogOnBackgroundTask), + base::BindOnce(&ModuleLoadAttemptLogListener::OnLogDrained, + weak_ptr_factory_.GetWeakPtr())); +} + +void ModuleLoadAttemptLogListener::OnLogDrained( + std::vector<third_party_dlls::PackedListModule>&& blocked_modules) { + on_new_modules_blocked_callback_.Run(std::move(blocked_modules)); +}
diff --git a/chrome/browser/conflicts/module_load_attempt_log_listener_win.h b/chrome/browser/conflicts/module_load_attempt_log_listener_win.h new file mode 100644 index 0000000..468d8588 --- /dev/null +++ b/chrome/browser/conflicts/module_load_attempt_log_listener_win.h
@@ -0,0 +1,59 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CONFLICTS_MODULE_LOAD_ATTEMPT_LOG_LISTENER_WIN_H_ +#define CHROME_BROWSER_CONFLICTS_MODULE_LOAD_ATTEMPT_LOG_LISTENER_WIN_H_ + +#include <vector> + +#include "base/callback.h" +#include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" +#include "base/synchronization/waitable_event.h" +#include "base/win/object_watcher.h" +#include "base/win/windows_types.h" +#include "chrome_elf/third_party_dlls/packed_list_format.h" + +namespace base { +class SequencedTaskRunner; +} + +// This class drains the log of module load attempt from Chrome ELF, and +// notifies its delegate for all modules that were blocked. +class ModuleLoadAttemptLogListener : public base::win::ObjectWatcher::Delegate { + public: + using OnNewModulesBlockedCallback = base::RepeatingCallback<void( + std::vector<third_party_dlls::PackedListModule>&& blocked_modules)>; + + explicit ModuleLoadAttemptLogListener( + OnNewModulesBlockedCallback on_new_modules_blocked_callback); + ~ModuleLoadAttemptLogListener() override; + + // base::win::ObjectWatcher::Delegate: + void OnObjectSignaled(HANDLE object) override; + + private: + void StartDrainingLogs(); + + void OnLogDrained( + std::vector<third_party_dlls::PackedListModule>&& blocked_modules); + + // Invoked everytime the log is drained with the new blocked entries. + OnNewModulesBlockedCallback on_new_modules_blocked_callback_; + + // The sequence in which the log is drained. + scoped_refptr<base::SequencedTaskRunner> background_task_runner_; + + // Must be before |object_watcher_|. + base::WaitableEvent waitable_event_; + + // Watches |waitable_event_|. + base::win::ObjectWatcher object_watcher_; + + base::WeakPtrFactory<ModuleLoadAttemptLogListener> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(ModuleLoadAttemptLogListener); +}; + +#endif // CHROME_BROWSER_CONFLICTS_MODULE_LOAD_ATTEMPT_LOG_LISTENER_WIN_H_
diff --git a/chrome/browser/conflicts/module_load_attempt_log_listener_win_unittest.cc b/chrome/browser/conflicts/module_load_attempt_log_listener_win_unittest.cc new file mode 100644 index 0000000..40337cd --- /dev/null +++ b/chrome/browser/conflicts/module_load_attempt_log_listener_win_unittest.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/conflicts/module_load_attempt_log_listener_win.h" + +#include <memory> +#include <utility> + +#include "base/bind.h" +#include "base/macros.h" +#include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" +#include "chrome_elf/sha1/sha1.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +class ModuleLoadAttemptLogListenerTest : public testing::Test { + protected: + ModuleLoadAttemptLogListenerTest() = default; + ~ModuleLoadAttemptLogListenerTest() override = default; + + std::unique_ptr<ModuleLoadAttemptLogListener> + CreateModuleLoadAttemptLogListener() { + return std::make_unique<ModuleLoadAttemptLogListener>(base::BindRepeating( + &ModuleLoadAttemptLogListenerTest::OnNewModulesBlocked, + base::Unretained(this))); + } + + // ModuleLoadAttemptLogListener::Delegate: + void OnNewModulesBlocked( + std::vector<third_party_dlls::PackedListModule>&& blocked_modules) { + blocked_modules_ = std::move(blocked_modules); + + notified_ = true; + + if (quit_closure_) + std::move(quit_closure_).Run(); + } + + void WaitForNotification() { + if (notified_) + return; + + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); + run_loop.Run(); + } + + const std::vector<third_party_dlls::PackedListModule>& blocked_modules() { + return blocked_modules_; + } + + private: + base::test::ScopedTaskEnvironment scoped_task_environment_; + + bool notified_ = false; + + base::Closure quit_closure_; + + std::vector<third_party_dlls::PackedListModule> blocked_modules_; + + DISALLOW_COPY_AND_ASSIGN(ModuleLoadAttemptLogListenerTest); +}; + +} // namespace + +TEST_F(ModuleLoadAttemptLogListenerTest, DrainLog) { + auto module_load_attempt_log_listener = CreateModuleLoadAttemptLogListener(); + + WaitForNotification(); + + // Only the blocked entry is returned. + ASSERT_EQ(1u, blocked_modules().size()); +}
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index b6135fc..153c5de 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -857,7 +857,8 @@ const char kViewsCastDialogName[] = "Views Cast dialog"; const char kViewsCastDialogDescription[] = "Replace the WebUI Cast dialog with a Views toolkit dialog. This requires " - "#views-browser-windows on Mac."; + "#views-browser-windows on Mac. This feature is activated if either this " + "flag or #uifood is enabled"; const char kHideActiveAppsFromShelfName[] = "Hide running apps (that are not pinned) from the shelf";
diff --git a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc index 80ec88c..d750102 100644 --- a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc +++ b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc
@@ -13,13 +13,13 @@ #include "base/location.h" #include "base/macros.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "base/task_scheduler/task_traits.h" #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" -#include "content/public/test/test_utils.h" #include "storage/browser/fileapi/copy_or_move_file_validator.h" #include "storage/browser/fileapi/file_system_backend.h" #include "storage/browser/fileapi/file_system_context.h" @@ -81,26 +81,28 @@ // it into a media file system. The result is compared to |expected_result|. void MoveTest(const std::string& filename, const std::string& content, bool expected_result) { + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, base::BindOnce(&MediaFileValidatorTest::SetupBlocking, base::Unretained(this), filename, content, expected_result)); - loop_runner_ = new content::MessageLoopRunner; - loop_runner_->Run(); + run_loop.Run(); } // Write |source| into |filename| in a test file system and try to move it // into a media file system. The result is compared to |expected_result|. void MoveTestFromFile(const std::string& filename, const base::FilePath& source, bool expected_result) { + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); base::PostTaskWithTraits( FROM_HERE, {base::MayBlock()}, base::BindOnce(&MediaFileValidatorTest::SetupFromFileBlocking, base::Unretained(this), filename, source, expected_result)); - loop_runner_ = new content::MessageLoopRunner; - loop_runner_->Run(); + run_loop.Run(); } private: @@ -232,12 +234,11 @@ base::Unretained(this))); } - // Check that the correct test file exists and then post the result back - // to the UI thread. + // Check that the correct test file exists and then allow the main-thread + // RunLoop to quit. void OnTestFilesCheckResult(bool result) { EXPECT_TRUE(result); - content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, - loop_runner_->QuitClosure()); + std::move(quit_closure_).Run(); } storage::FileSystemOperationRunner* operation_runner() { @@ -253,19 +254,13 @@ storage::FileSystemURL move_src_; storage::FileSystemURL move_dest_; - scoped_refptr<content::MessageLoopRunner> loop_runner_; + base::OnceClosure quit_closure_; scoped_refptr<base::SequencedTaskRunner> file_system_runner_; DISALLOW_COPY_AND_ASSIGN(MediaFileValidatorTest); }; -// Flaky on linux_chromium_rel_ng. https://crbug.com/704614. -#if defined(OS_LINUX) -#define MAYBE_UnsupportedExtension DISABLED_UnsupportedExtension -#else -#define MAYBE_UnsupportedExtension UnsupportedExtension -#endif -IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, MAYBE_UnsupportedExtension) { +IN_PROC_BROWSER_TEST_F(MediaFileValidatorTest, UnsupportedExtension) { MoveTest("a.txt", std::string(kValidImage, arraysize(kValidImage)), false); }
diff --git a/chrome/browser/notifications/win/notification_helper_launches_chrome_unittest.cc b/chrome/browser/notifications/win/notification_helper_launches_chrome_unittest.cc index 2cfdcd6..6ef593e 100644 --- a/chrome/browser/notifications/win/notification_helper_launches_chrome_unittest.cc +++ b/chrome/browser/notifications/win/notification_helper_launches_chrome_unittest.cc
@@ -9,7 +9,7 @@ // also tests if chrome.exe can be successfully launched by // notification_helper.exe via the NotificationActivator::Activate function. // -// This test is compiled into unit_tests.exe under chrome rather than +// This test is compiled into unit_tests.exe rather than // notification_helper_unittests.exe. This is because unit_tests.exe has data // dependency on chrome.exe which is required by this test, and it's undesired // to make notification_helper_unittests.exe have data dependency on chrome.exe.
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html index af1243ee..e2e2d68b 100644 --- a/chrome/browser/resources/settings/people_page/people_page.html +++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -298,7 +298,8 @@ </if> <div id="manage-other-people-subpage-trigger" - class="settings-box" on-click="onManageOtherPeople_" actionable> + class="settings-box" on-click="onManageOtherPeople_" actionable + hidden="[[isChild_]]"> <div class="start">$i18n{manageOtherPeople}</div> <paper-icon-button-light class="subpage-arrow"> <button aria-label="$i18n{manageOtherPeople}"></button>
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js index f0460311..5dae899 100644 --- a/chrome/browser/resources/settings/people_page/people_page.js +++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -158,12 +158,26 @@ return map; }, }, + + /** + * True if current user is child user. + */ + isChild_: Boolean, }, /** @private {?settings.SyncBrowserProxy} */ syncBrowserProxy_: null, /** @override */ + created: function() { + // <if expr="chromeos"> + chrome.usersPrivate.getCurrentUser(user => { + this.isChild_ = user.isChild; + }); + // </if> + }, + + /** @override */ attached: function() { const profileInfoProxy = settings.ProfileInfoBrowserProxyImpl.getInstance(); profileInfoProxy.getProfileInfo().then(this.handleProfileInfo_.bind(this));
diff --git a/chrome/browser/resources/settings/people_page/users_page.js b/chrome/browser/resources/settings/people_page/users_page.js index f0d58476..f8f19f3 100644 --- a/chrome/browser/resources/settings/people_page/users_page.js +++ b/chrome/browser/resources/settings/people_page/users_page.js
@@ -34,8 +34,8 @@ /** @override */ created: function() { - chrome.usersPrivate.isCurrentUserOwner(isOwner => { - this.isOwner_ = isOwner; + chrome.usersPrivate.getCurrentUser(user => { + this.isOwner_ = user.isOwner; }); chrome.usersPrivate.isWhitelistManaged(isWhitelistManaged => {
diff --git a/chrome/browser/signin/identity_manager_factory.cc b/chrome/browser/signin/identity_manager_factory.cc index 67a5e385..7e3e9b6 100644 --- a/chrome/browser/signin/identity_manager_factory.cc +++ b/chrome/browser/signin/identity_manager_factory.cc
@@ -6,6 +6,7 @@ #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/signin/account_tracker_service_factory.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" @@ -22,7 +23,8 @@ explicit IdentityManagerHolder(Profile* profile) : identity_manager_( SigninManagerFactory::GetForProfile(profile), - ProfileOAuth2TokenServiceFactory::GetForProfile(profile)) {} + ProfileOAuth2TokenServiceFactory::GetForProfile(profile), + AccountTrackerServiceFactory::GetForProfile(profile)) {} identity::IdentityManager* identity_manager() { return &identity_manager_; } @@ -34,6 +36,7 @@ : BrowserContextKeyedServiceFactory( "IdentityManager", BrowserContextDependencyManager::GetInstance()) { + DependsOn(AccountTrackerServiceFactory::GetInstance()); DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); DependsOn(SigninManagerFactory::GetInstance()); }
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc index c512d93..8fd19fb 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
@@ -260,7 +260,7 @@ } // Load the component extension into this profile. - ExtensionService* extension_service = + extensions::ExtensionService* extension_service = extensions::ExtensionSystem::Get(profile)->extension_service(); DCHECK(extension_service); extension_service->component_loader()
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc index 650f5b1..8af41404 100644 --- a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc +++ b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
@@ -305,6 +305,7 @@ } google_apis::CancelCallback DriveServiceOnWorker::GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) { NOTREACHED(); return google_apis::CancelCallback();
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h index f735628..43e1710 100644 --- a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h +++ b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.h
@@ -119,6 +119,7 @@ google_apis::CancelCallback GetAllTeamDriveList( const google_apis::TeamDriveListCallback& callback) override; google_apis::CancelCallback GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) override; google_apis::CancelCallback Search( const std::string& search_query,
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc index fefeebe..a27e46e 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -25,6 +25,7 @@ #include "ui/views/animation/ink_drop_ripple.h" #include "ui/views/border.h" #include "ui/views/controls/image_view.h" +#include "ui/views/style/platform_style.h" #include "ui/views/widget/widget.h" namespace { @@ -296,7 +297,7 @@ return std::make_unique<views::FloodFillInkDropRipple>( ink_drop_container_->size(), center_point, GetInkDropBaseColor(), - ink_drop_visible_opacity()); + views::PlatformStyle::kUseRipples ? ink_drop_visible_opacity() : 0); } std::unique_ptr<views::InkDropHighlight>
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc index 65ceedb..d9c3ac4 100644 --- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc +++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -28,13 +28,16 @@ bool ShouldUseViewsDialog() { #if defined(OS_MACOSX) #if BUILDFLAG(MAC_VIEWS_BROWSER) - return base::FeatureList::IsEnabled(features::kViewsCastDialog) && - !features::IsViewsBrowserCocoa(); + // Cocoa browser is disabled if kUiFood is enabled. + return (base::FeatureList::IsEnabled(features::kViewsCastDialog) && + !features::IsViewsBrowserCocoa()) || + base::FeatureList::IsEnabled(features::kUiFood); #else // !BUILDFLAG(MAC_VIEWS_BROWSER) return false; #endif #else // !defined(OS_MACOSX) - return base::FeatureList::IsEnabled(features::kViewsCastDialog); + return base::FeatureList::IsEnabled(features::kViewsCastDialog) || + base::FeatureList::IsEnabled(features::kUiFood); #endif }
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_view.cc b/chrome/browser/ui/views/page_action/page_action_icon_view.cc index 4f795bd..9697638 100644 --- a/chrome/browser/ui/views/page_action/page_action_icon_view.cc +++ b/chrome/browser/ui/views/page_action/page_action_icon_view.cc
@@ -211,7 +211,7 @@ const { return std::make_unique<views::FloodFillInkDropRipple>( size(), GetInkDropCenterBasedOnLastEvent(), GetInkDropBaseColor(), - ink_drop_visible_opacity()); + views::PlatformStyle::kUseRipples ? ink_drop_visible_opacity() : 0); } std::unique_ptr<views::InkDropHighlight>
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.cc b/chrome/browser/ui/views/tabs/new_tab_button.cc index 855badb..c505748 100644 --- a/chrome/browser/ui/views/tabs/new_tab_button.cc +++ b/chrome/browser/ui/views/tabs/new_tab_button.cc
@@ -101,6 +101,9 @@ SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER); set_ink_drop_visible_opacity(0.14f); + + SetFocusPainter(nullptr); + focus_ring_ = views::FocusRing::Install(this); } } @@ -321,6 +324,10 @@ const gfx::Rect ink_drop_bounds(gfx::Point(0, GetTopOffset()), GetVisibleBounds().size()); ink_drop_container_->SetBoundsRect(ink_drop_bounds); + + SkPath path; + path.addOval(gfx::RectToSkRect(ink_drop_bounds)); + focus_ring_->SetPath(path); } }
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.h b/chrome/browser/ui/views/tabs/new_tab_button.h index e318f2b..e898fdc 100644 --- a/chrome/browser/ui/views/tabs/new_tab_button.h +++ b/chrome/browser/ui/views/tabs/new_tab_button.h
@@ -9,6 +9,7 @@ #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "ui/views/controls/button/image_button.h" +#include "ui/views/controls/focus_ring.h" #include "ui/views/view.h" #include "ui/views/widget/widget_observer.h" @@ -164,6 +165,9 @@ // open and get called back when it closes. ScopedObserver<views::Widget, WidgetObserver> new_tab_promo_observer_{this}; + // The FocusRing for this new tab button. + std::unique_ptr<views::FocusRing> focus_ring_; + DISALLOW_COPY_AND_ASSIGN(NewTabButton); };
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn index b5c72542..26a85bc 100644 --- a/chrome/browser/vr/BUILD.gn +++ b/chrome/browser/vr/BUILD.gn
@@ -134,6 +134,8 @@ "frame_lifecycle.h", "ganesh_surface_provider.cc", "ganesh_surface_provider.h", + "gesture_detector.cc", + "gesture_detector.h", "keyboard_delegate.h", "keyboard_ui_interface.h", "macros.h", @@ -304,6 +306,7 @@ "elements/vector_icon_unittest.cc", "elements/viewport_aware_root_unittest.cc", "fps_meter_unittest.cc", + "gesture_detector_unittest.cc", "model/text_input_info_unittest.cc", "pose_util_unittest.cc", "service/vr_device_manager_unittest.cc",
diff --git a/chrome/browser/vr/gesture_detector.cc b/chrome/browser/vr/gesture_detector.cc new file mode 100644 index 0000000..6c317985 --- /dev/null +++ b/chrome/browser/vr/gesture_detector.cc
@@ -0,0 +1,251 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/vr/gesture_detector.h" + +#include "base/numerics/math_constants.h" +#include "third_party/blink/public/platform/web_gesture_event.h" + +namespace vr { + +namespace { + +constexpr float kDisplacementScaleFactor = 300.0f; + +constexpr int kMaxNumOfExtrapolations = 2; + +// Minimum time distance needed to call two timestamps +// not equal. +constexpr float kDelta = 1.0e-7f; + +constexpr float kCutoffHz = 10.0f; +constexpr float kRC = 1.0f / (2.0f * base::kPiFloat * kCutoffHz); + +// A slop represents a small rectangular region around the first touch point of +// a gesture. +// If the user does not move outside of the slop, no gesture is detected. +// Gestures start to be detected when the user moves outside of the slop. +// Vertical distance from the border to the center of slop. +constexpr float kSlopVertical = 0.165f; + +// Horizontal distance from the border to the center of slop. +constexpr float kSlopHorizontal = 0.15f; + +} // namespace + +GestureDetector::GestureDetector() { + Reset(); +} +GestureDetector::~GestureDetector() = default; + +std::unique_ptr<GestureList> GestureDetector::DetectGestures( + const TouchInfo& input_touch_info, + bool force_cancel) { + touch_position_changed_ = UpdateCurrentTouchPoint(input_touch_info); + TouchInfo touch_info = input_touch_info; + ExtrapolateTouchInfo(&touch_info); + if (touch_position_changed_) + UpdateOverallVelocity(touch_info); + + auto gesture_list = std::make_unique<GestureList>(); + auto gesture = GetGestureFromTouchInfo(touch_info, force_cancel); + gesture->SetSourceDevice(blink::kWebGestureDeviceTouchpad); + + if (gesture->GetType() == blink::WebInputEvent::kGestureScrollEnd) + Reset(); + + if (gesture->GetType() != blink::WebInputEvent::kUndefined) + gesture_list->push_back(std::move(gesture)); + return gesture_list; +} + +std::unique_ptr<blink::WebGestureEvent> +GestureDetector::GetGestureFromTouchInfo(const TouchInfo& touch_info, + bool force_cancel) { + auto gesture = std::make_unique<blink::WebGestureEvent>(); + gesture->SetTimeStamp(touch_info.touch_point.timestamp); + + switch (state_->label) { + // User has not put finger on touch pad. + case WAITING: + HandleWaitingState(touch_info, gesture.get()); + break; + // User has not started a gesture (by moving out of slop). + case TOUCHING: + HandleDetectingState(touch_info, force_cancel, gesture.get()); + break; + // User is scrolling on touchpad + case SCROLLING: + HandleScrollingState(touch_info, force_cancel, gesture.get()); + break; + // The user has finished scrolling, but we'll hallucinate a few points + // before really finishing. + case POST_SCROLL: + HandlePostScrollingState(touch_info, force_cancel, gesture.get()); + break; + default: + NOTREACHED(); + break; + } + return gesture; +} + +void GestureDetector::HandleWaitingState(const TouchInfo& touch_info, + blink::WebGestureEvent* gesture) { + // User puts finger on touch pad (or when the touch down for current gesture + // is missed, initiate gesture from current touch point). + if (touch_info.touch_down || touch_info.is_touching) { + // update initial touchpoint + state_->initial_touch_point = touch_info.touch_point; + // update current touchpoint + state_->cur_touch_point = touch_info.touch_point; + state_->label = TOUCHING; + + gesture->SetType(blink::WebInputEvent::kGestureFlingCancel); + gesture->data.fling_cancel.prevent_boosting = false; + } +} + +void GestureDetector::HandleDetectingState(const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture) { + // User lifts up finger from touch pad. + if (touch_info.touch_up || !touch_info.is_touching) { + Reset(); + return; + } + + // Touch position is changed, the touch point moves outside of slop, + // and the Controller's button is not down. + if (touch_position_changed_ && touch_info.is_touching && + !InSlop(touch_info.touch_point.position) && !force_cancel) { + state_->label = SCROLLING; + gesture->SetType(blink::WebInputEvent::kGestureScrollBegin); + UpdateGestureParameters(touch_info); + gesture->data.scroll_begin.delta_x_hint = + state_->displacement.x() * kDisplacementScaleFactor; + gesture->data.scroll_begin.delta_y_hint = + state_->displacement.y() * kDisplacementScaleFactor; + gesture->data.scroll_begin.delta_hint_units = + blink::WebGestureEvent::ScrollUnits::kPrecisePixels; + } +} + +void GestureDetector::HandleScrollingState(const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture) { + if (force_cancel) { + gesture->SetType(blink::WebInputEvent::kGestureScrollEnd); + UpdateGestureParameters(touch_info); + return; + } + if (touch_info.touch_up || !(touch_info.is_touching)) { + state_->label = POST_SCROLL; + } + if (touch_position_changed_) { + gesture->SetType(blink::WebInputEvent::kGestureScrollUpdate); + UpdateGestureParameters(touch_info); + UpdateGestureWithScrollDelta(gesture); + } +} + +void GestureDetector::HandlePostScrollingState( + const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture) { + if (extrapolated_touch_ == 0 || force_cancel) { + gesture->SetType(blink::WebInputEvent::kGestureScrollEnd); + UpdateGestureParameters(touch_info); + } else { + gesture->SetType(blink::WebInputEvent::kGestureScrollUpdate); + UpdateGestureParameters(touch_info); + UpdateGestureWithScrollDelta(gesture); + } +} + +void GestureDetector::UpdateGestureWithScrollDelta( + blink::WebGestureEvent* gesture) { + gesture->data.scroll_update.delta_x = + state_->displacement.x() * kDisplacementScaleFactor; + gesture->data.scroll_update.delta_y = + state_->displacement.y() * kDisplacementScaleFactor; +} + +bool GestureDetector::UpdateCurrentTouchPoint(const TouchInfo& touch_info) { + if (touch_info.is_touching || touch_info.touch_up) { + // Update the touch point when the touch position has changed. + if (state_->cur_touch_point.position != touch_info.touch_point.position) { + state_->prev_touch_point = state_->cur_touch_point; + state_->cur_touch_point = touch_info.touch_point; + return true; + } + } + return false; +} + +void GestureDetector::ExtrapolateTouchInfo(TouchInfo* touch_info) { + base::TimeTicks current_timestamp = base::TimeTicks::Now(); + const bool effectively_scrolling = + state_->label == SCROLLING || state_->label == POST_SCROLL; + if (effectively_scrolling && extrapolated_touch_ < kMaxNumOfExtrapolations && + (touch_info->touch_point.timestamp == last_touch_timestamp_ || + state_->cur_touch_point.position == state_->prev_touch_point.position)) { + extrapolated_touch_++; + touch_position_changed_ = true; + // Fill the touch_info + float duration = (current_timestamp - last_timestamp_).InSecondsF(); + touch_info->touch_point.position.set_x( + state_->cur_touch_point.position.x() + + state_->overall_velocity.x() * duration); + touch_info->touch_point.position.set_y( + state_->cur_touch_point.position.y() + + state_->overall_velocity.y() * duration); + } else { + if (extrapolated_touch_ == kMaxNumOfExtrapolations) { + state_->overall_velocity = {0, 0}; + } + extrapolated_touch_ = 0; + } + last_touch_timestamp_ = touch_info->touch_point.timestamp; + last_timestamp_ = current_timestamp; +} + +void GestureDetector::UpdateOverallVelocity(const TouchInfo& touch_info) { + float duration = + (touch_info.touch_point.timestamp - state_->prev_touch_point.timestamp) + .InSecondsF(); + // If the timestamp does not change, do not update velocity. + if (duration < kDelta) + return; + + const gfx::Vector2dF& displacement = + touch_info.touch_point.position - state_->prev_touch_point.position; + + const gfx::Vector2dF& velocity = ScaleVector2d(displacement, (1 / duration)); + + float weight = duration / (kRC + duration); + + state_->overall_velocity = + ScaleVector2d(state_->overall_velocity, (1 - weight)) + + ScaleVector2d(velocity, weight); +} + +void GestureDetector::UpdateGestureParameters(const TouchInfo& touch_info) { + state_->displacement = + touch_info.touch_point.position - state_->prev_touch_point.position; +} + +bool GestureDetector::InSlop(const gfx::Vector2dF touch_position) const { + return (std::abs(touch_position.x() - + state_->initial_touch_point.position.x()) < + kSlopHorizontal) && + (std::abs(touch_position.y() - + state_->initial_touch_point.position.y()) < kSlopVertical); +} + +void GestureDetector::Reset() { + state_ = std::make_unique<GestureDetectorState>(); +} + +} // namespace vr
diff --git a/chrome/browser/vr/gesture_detector.h b/chrome/browser/vr/gesture_detector.h new file mode 100644 index 0000000..b9a00f8 --- /dev/null +++ b/chrome/browser/vr/gesture_detector.h
@@ -0,0 +1,107 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_VR_GESTURE_DETECTOR_H_ +#define CHROME_BROWSER_VR_GESTURE_DETECTOR_H_ + +#include "base/macros.h" +#include "base/time/time.h" +#include "chrome/browser/vr/vr_export.h" +#include "ui/gfx/geometry/vector2d_f.h" + +namespace blink { +class WebGestureEvent; +} + +namespace vr { + +using GestureList = std::vector<std::unique_ptr<blink::WebGestureEvent>>; + +struct TouchPoint { + gfx::Vector2dF position; + base::TimeTicks timestamp; +}; + +struct TouchInfo { + TouchPoint touch_point; + bool touch_up; + bool touch_down; + bool is_touching; +}; + +class VR_EXPORT GestureDetector { + public: + GestureDetector(); + virtual ~GestureDetector(); + + std::unique_ptr<GestureList> DetectGestures(const TouchInfo& touch_info, + bool force_cancel); + + private: + enum GestureDetectorStateLabel { + WAITING, // waiting for user to touch down + TOUCHING, // touching the touch pad but not scrolling + SCROLLING, // scrolling on the touch pad + POST_SCROLL // scroll has finished and we are hallucinating events + }; + + struct GestureDetectorState { + GestureDetectorStateLabel label = WAITING; + TouchPoint prev_touch_point; + TouchPoint cur_touch_point; + TouchPoint initial_touch_point; + gfx::Vector2dF overall_velocity; + + // Displacement of the touch point from the previews to the current touch + gfx::Vector2dF displacement; + }; + + std::unique_ptr<blink::WebGestureEvent> GetGestureFromTouchInfo( + const TouchInfo& input_touch_info, + bool force_cancel); + + void HandleWaitingState(const TouchInfo& touch_info, + blink::WebGestureEvent* gesture); + void HandleDetectingState(const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture); + void HandleScrollingState(const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture); + void HandlePostScrollingState(const TouchInfo& touch_info, + bool force_cancel, + blink::WebGestureEvent* gesture); + + void UpdateGestureWithScrollDelta(blink::WebGestureEvent* gesture); + + // If the user is touching the touch pad and the touch point is different from + // before, update the touch point and return true. Otherwise, return false. + bool UpdateCurrentTouchPoint(const TouchInfo& touch_info); + + void ExtrapolateTouchInfo(TouchInfo* touch_info); + + void UpdateOverallVelocity(const TouchInfo& touch_info); + + void UpdateGestureParameters(const TouchInfo& touch_info); + + bool InSlop(const gfx::Vector2dF touch_position) const; + + void Reset(); + + std::unique_ptr<GestureDetectorState> state_; + + // Number of consecutively extrapolated touch points + int extrapolated_touch_ = 0; + + base::TimeTicks last_touch_timestamp_; + base::TimeTicks last_timestamp_; + + bool touch_position_changed_; + + DISALLOW_COPY_AND_ASSIGN(GestureDetector); +}; + +} // namespace vr + +#endif // CHROME_BROWSER_VR_GESTURE_DETECTOR_H_
diff --git a/chrome/browser/vr/gesture_detector_unittest.cc b/chrome/browser/vr/gesture_detector_unittest.cc new file mode 100644 index 0000000..fdecc92f --- /dev/null +++ b/chrome/browser/vr/gesture_detector_unittest.cc
@@ -0,0 +1,220 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/vr/gesture_detector.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/platform/web_gesture_event.h" + +namespace { +constexpr float kDelta = 0.001f; +} + +namespace vr { + +TEST(GestureDetector, NotTouching) { + GestureDetector detector; + + TouchInfo touch_info{ + .touch_up = false, .touch_down = false, .is_touching = false}; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_TRUE(gestures->empty()); +} + +TEST(GestureDetector, StartTouchWithoutMoving) { + GestureDetector detector; + + base::TimeTicks timestamp; + + TouchInfo touch_info{ + .touch_point = {.position = {0, 0}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureFlingCancel); + + // A small move doesn't trigger scrolling yet. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {kDelta, kDelta}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_TRUE(gestures->empty()); +} + +TEST(GestureDetector, StartTouchMoveAndRelease) { + GestureDetector detector; + base::TimeTicks timestamp; + + TouchInfo touch_info{ + .touch_point = {.position = {0.0f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + detector.DetectGestures(touch_info, false); + + // Move to the right. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {0.3f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = false, + .is_touching = true, + }; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollBegin); + auto* gesture = gestures->front().get(); + EXPECT_GT(gesture->data.scroll_update.delta_x, 0.0f); + EXPECT_EQ(gesture->data.scroll_update.delta_y, 0.0f); + + // Move slightly up. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {0.3f, 0.01f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = false, + .is_touching = true, + }; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollUpdate); + gesture = gestures->front().get(); + EXPECT_EQ(gesture->data.scroll_update.delta_x, 0.0f); + EXPECT_GT(gesture->data.scroll_update.delta_y, 0.0f); + + // Release touch. Scroll is extrapolated for 2 frames. + touch_info.touch_up = true; + touch_info.is_touching = false; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollUpdate); + gesture = gestures->front().get(); + EXPECT_GT(gesture->data.scroll_update.delta_x, 0.0f); + EXPECT_GT(gesture->data.scroll_update.delta_y, 0.0f); + touch_info.touch_up = false; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollUpdate); + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollEnd); +} + +TEST(GestureDetector, CancelDuringScrolling) { + GestureDetector detector; + base::TimeTicks timestamp; + + TouchInfo touch_info{ + .touch_point = {.position = {0.0f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + detector.DetectGestures(touch_info, false); + + // Move to the right. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {0.3f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = false, + .is_touching = true, + }; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollBegin); + + // Cancel. + gestures = detector.DetectGestures(touch_info, true); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollEnd); +} + +TEST(GestureDetector, CancelDuringPostScrolling) { + GestureDetector detector; + base::TimeTicks timestamp; + + TouchInfo touch_info{ + .touch_point = {.position = {0.0f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + detector.DetectGestures(touch_info, false); + + // Move to the right. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {0.3f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = false, + .is_touching = true, + }; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollBegin); + + // Release touch. We should see extrapolated scrolling. + touch_info.touch_up = true; + touch_info.is_touching = false; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollUpdate); + + // Cancel. + touch_info.touch_up = false; + gestures = detector.DetectGestures(touch_info, true); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollEnd); +} + +TEST(GestureDetector, CancelAndTouchDuringPostScrolling) { + GestureDetector detector; + base::TimeTicks timestamp; + + TouchInfo touch_info{ + .touch_point = {.position = {0.0f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = true, + .is_touching = true, + }; + detector.DetectGestures(touch_info, false); + + // Move to the right. + timestamp += base::TimeDelta::FromMilliseconds(1); + touch_info = TouchInfo{ + .touch_point = {.position = {0.3f, 0.0f}, .timestamp = timestamp}, + .touch_up = false, + .touch_down = false, + .is_touching = true, + }; + auto gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollBegin); + + // Release touch. We should see extrapolated scrolling. + touch_info.touch_up = true; + touch_info.is_touching = false; + gestures = detector.DetectGestures(touch_info, false); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollUpdate); + + // Cancel and touch. + touch_info.touch_up = false; + touch_info.touch_down = true; + touch_info.is_touching = true; + gestures = detector.DetectGestures(touch_info, true); + EXPECT_EQ(gestures->front()->GetType(), + blink::WebInputEvent::kGestureScrollEnd); +} + +} // namespace vr
diff --git a/chrome/common/extensions/api/users_private.idl b/chrome/common/extensions/api/users_private.idl index 702cf53..6ab65a2 100644 --- a/chrome/common/extensions/api/users_private.idl +++ b/chrome/common/extensions/api/users_private.idl
@@ -22,13 +22,16 @@ // Whether this user is supervised. boolean isSupervised; + + // Whether this user is Child. + boolean isChild; }; callback UsersCallback = void (User[] users); callback UserAddedCallback = void (boolean success); callback UserRemovedCallback = void (boolean success); - callback IsOwnerCallback = void (boolean isOwner); callback ManagedCallback = void (boolean managed); + callback UserCallback = void (User user); interface Functions { // Gets a list of the currently whitelisted users. @@ -46,10 +49,10 @@ // the current user isn't the owner). static void removeWhitelistedUser(DOMString email, UserRemovedCallback callback); - // Whether the current user is the owner of the device. - static void isCurrentUserOwner(IsOwnerCallback callback); - // Whether the whitelist is managed by enterprise. static void isWhitelistManaged(ManagedCallback callback); + + // Returns the current user. + static void getCurrentUser(UserCallback callback); }; };
diff --git a/chrome/notification_helper/notification_helper_process_unittest.cc b/chrome/notification_helper/notification_helper_process_unittest.cc index abf82c9..d9adb6e 100644 --- a/chrome/notification_helper/notification_helper_process_unittest.cc +++ b/chrome/notification_helper/notification_helper_process_unittest.cc
@@ -3,10 +3,17 @@ // found in the LICENSE file. // This file tests launching notification_helper.exe by the OS via the registry. -// An advanced version of this test is in -// chrome/browser/notifications/notification_helper_launches_chrome_unittest.cc, +// +// An advanced version of this test is +// chrome/browser/notifications/win/notification_helper_launches_chrome_unittest.cc, // which additionally tests if chrome.exe can be successfully launched by // notification_helper.exe via the NotificationActivator::Activate function. +// +// Different from this test being compiled into +// notification_helper_unittests.exe, the advanced test is compiled into +// unit_tests.exe. This is because the advanced test requires data dependency on +// chrome.exe which unit_tests.exe already has, and it's undesired to make +// notification_helper_unittests.exe have data dependency on chrome.exe. #include <memory>
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 8b475f8..eca6c03 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4251,6 +4251,7 @@ "../browser/conflicts/installed_applications_win_unittest.cc", "../browser/conflicts/module_blacklist_cache_util_win_unittest.cc", "../browser/conflicts/module_list_filter_win_unittest.cc", + "../browser/conflicts/module_load_attempt_log_listener_win_unittest.cc", "../browser/conflicts/registry_key_watcher_win_unittest.cc", "../browser/google/google_update_win_unittest.cc", ]
diff --git a/chrome/test/data/extensions/api_test/users_private/test.js b/chrome/test/data/extensions/api_test/users_private/test.js index 843fc08..cb15ab87 100644 --- a/chrome/test/data/extensions/api_test/users_private/test.js +++ b/chrome/test/data/extensions/api_test/users_private/test.js
@@ -68,9 +68,9 @@ }, function isOwner() { - chrome.usersPrivate.isCurrentUserOwner(function(isOwner) { + chrome.usersPrivate.getCurrentUser(function(user) { // Since we are testing with --stub-cros-settings this should be true. - chrome.test.assertTrue(isOwner); + chrome.test.assertTrue(user.isOwner); chrome.test.succeed(); }); },
diff --git a/chrome/test/data/webui/print_preview/destination_item_test.js b/chrome/test/data/webui/print_preview/destination_item_test.js new file mode 100644 index 0000000..782c192 --- /dev/null +++ b/chrome/test/data/webui/print_preview/destination_item_test.js
@@ -0,0 +1,156 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('destination_item_test', function() { + /** @enum {string} */ + const TestNames = { + Online: 'online', + Offline: 'offline', + BadCertificate: 'bad certificate', + QueryName: 'query name', + QueryDescription: 'query description', + }; + + const suiteName = 'DestinationItemTest'; + suite(suiteName, function() { + /** @type {?PrintPreviewDestinationListItemElement} */ + let item = null; + + /** @type {string} */ + const printerId = 'FooDevice'; + + /** @type {string} */ + const printerName = 'FooName'; + + /** @override */ + setup(function() { + PolymerTest.clearBody(); + item = document.createElement('print-preview-destination-list-item'); + + // Create destination + item.destination = new print_preview.Destination( + printerId, print_preview.DestinationType.GOOGLE, + print_preview.DestinationOrigin.COOKIES, printerName, + true /* isRecent */, + print_preview.DestinationConnectionStatus.ONLINE); + item.searchQuery = null; + document.body.appendChild(item); + }); + + // Test that the destination is displayed correctly for the basic case of an + // online destination with no search query. + test(assert(TestNames.Online), function() { + item.update(); + + const name = item.$$('.name'); + assertEquals(printerName, name.textContent); + assertEquals('1', window.getComputedStyle(name).opacity); + assertEquals('', item.$$('.search-hint').textContent.trim()); + assertEquals('', item.$$('.connection-status').textContent.trim()); + assertTrue(item.$$('.learn-more-link').hidden); + assertTrue(item.$$('.extension-controlled-indicator').hidden); + }); + + // Test that the destination is opaque and the correct status shows up if + // the destination is stale. + test(assert(TestNames.Offline), function() { + const now = new Date(); + let twoMonthsAgo = new Date(now.getTime()); + const month = twoMonthsAgo.getMonth() - 2; + if (month < 0) { + month = month + 12; + twoMonthsAgo.setFullYear(now.getFullYear() - 1); + } + twoMonthsAgo.setMonth(month); + item.destination = new print_preview.Destination( + printerId, print_preview.DestinationType.GOOGLE, + print_preview.DestinationOrigin.COOKIES, printerName, + true /* isRecent */, + print_preview.DestinationConnectionStatus.OFFLINE, + {lastAccessTime: twoMonthsAgo.getTime()}); + item.update(); + + const name = item.$$('.name'); + assertEquals(printerName, name.textContent); + assertEquals('0.4', window.getComputedStyle(name).opacity); + assertEquals('', item.$$('.search-hint').textContent.trim()); + assertEquals( + loadTimeData.getString('offlineForMonth'), + item.$$('.connection-status').textContent.trim()); + assertTrue(item.$$('.learn-more-link').hidden); + assertTrue(item.$$('.extension-controlled-indicator').hidden); + }); + + // Test that the destination is opaque and the correct status shows up if + // the destination has a bad cloud print certificate. + test(assert(TestNames.BadCertificate), function() { + item.destination = + print_preview_test_utils.createDestinationWithCertificateStatus( + printerId, printerName, true); + item.update(); + + const name = item.$$('.name'); + assertEquals(printerName, name.textContent); + assertEquals('0.4', window.getComputedStyle(name).opacity); + assertEquals('', item.$$('.search-hint').textContent.trim()); + assertEquals( + loadTimeData.getString('noLongerSupported'), + item.$$('.connection-status').textContent.trim()); + assertFalse(item.$$('.learn-more-link').hidden); + assertTrue(item.$$('.extension-controlled-indicator').hidden); + }); + + // Test that the destination is displayed correctly when the search query + // matches its display name. + test(assert(TestNames.QueryName), function() { + item.searchQuery = /(Foo)/i; + item.update(); + + const name = item.$$('.name'); + assertEquals(printerName + printerName, name.textContent); + + // Name should be highlighted. + const searchHits = name.querySelectorAll('.search-highlight-hit'); + assertEquals(1, searchHits.length); + assertEquals('Foo', searchHits[0].textContent); + + // No hints. + assertEquals('', item.$$('.search-hint').textContent.trim()); + }); + + // Test that the destination is displayed correctly when the search query + // matches its description. + test(assert(TestNames.QueryDescription), function() { + const params = { + description: 'ABCPrinterBrand Model 123', + location: 'Building 789 Floor 6', + }; + item.destination = new print_preview.Destination( + printerId, print_preview.DestinationType.GOOGLE, + print_preview.DestinationOrigin.COOKIES, printerName, + true /* isRecent */, print_preview.DestinationConnectionStatus.ONLINE, + params); + item.searchQuery = /(ABC)/i; + item.update(); + + // No highlighting on name. + const name = item.$$('.name'); + assertEquals(printerName, name.textContent); + assertEquals(0, name.querySelectorAll('.search-highlight-hit').length); + + // Search hint should be have the description and be highlighted. + const hint = item.$$('.search-hint'); + assertEquals( + params.description + params.description, hint.textContent.trim()); + const searchHits = hint.querySelectorAll('.search-highlight-hit'); + assertEquals(1, searchHits.length); + assertEquals('ABC', searchHits[0].textContent); + }); + }); + + return { + suiteName: suiteName, + TestNames: TestNames, + }; +});
diff --git a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js index 507a2276..d8d46753 100644 --- a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js +++ b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js
@@ -711,3 +711,44 @@ TEST_F('PrintPreviewHeaderTest', 'HeaderChangesForState', function() { this.runMochaTest(header_test.TestNames.HeaderChangesForState); }); + +PrintPreviewDestinationItemTest = class extends NewPrintPreviewTest { + /** @override */ + get browsePreload() { + return 'chrome://print/new/destination_list_item.html'; + } + + /** @override */ + get extraLibraries() { + return super.extraLibraries.concat([ + 'print_preview_test_utils.js', + 'destination_item_test.js', + ]); + } + + /** @override */ + get suiteName() { + return destination_item_test.suiteName; + } +}; + +TEST_F('PrintPreviewDestinationItemTest', 'Online', function() { + this.runMochaTest(destination_item_test.TestNames.Online); +}); + +TEST_F('PrintPreviewDestinationItemTest', 'Offline', function() { + this.runMochaTest(destination_item_test.TestNames.Offline); +}); + +TEST_F('PrintPreviewDestinationItemTest', 'BadCertificate', function() { + loadTimeData.overrideValues({isEnterpriseManaged: false}); + this.runMochaTest(destination_item_test.TestNames.BadCertificate); +}); + +TEST_F('PrintPreviewDestinationItemTest', 'QueryName', function() { + this.runMochaTest(destination_item_test.TestNames.QueryName); +}); + +TEST_F('PrintPreviewDestinationItemTest', 'QueryDescription', function() { + this.runMochaTest(destination_item_test.TestNames.QueryDescription); +});
diff --git a/chrome/test/vr/auto_bisect.py b/chrome/test/vr/auto_bisect.py index 7a541350..991ec5a9 100755 --- a/chrome/test/vr/auto_bisect.py +++ b/chrome/test/vr/auto_bisect.py
@@ -177,6 +177,13 @@ 'Assumes that gn args have already been generated ' 'for the provided directory. Must be relative to ' 'the Chromium src/ directory, e.g. out/Release.') + parser.add_argument('--regenerate-args-after-sync', action='store_true', + default=False, + help='Causes the build output directory to be deleted ' + 'and re-created using the same gn args after each ' + 'sync. Normally not necessary, but can work around ' + 'weird issues like the build target not being ' + 'available unless the directory is re-created.') parser.add_argument('--build-target', required=True, help='The target to build for testing') @@ -264,6 +271,8 @@ args.build_output_dir) print '%d parallel jobs will be used with a load limit of %d' % ( args.parallel_jobs, args.load_limit) + if args.regenerate_args_after_sync: + print 'The build output directory will be recreated after each sync' print '======' print 'The target %s will be isolated and uploaded to %s' % ( args.isolate_target, args.isolate_server) @@ -471,6 +480,17 @@ '-l', str(args.load_limit), args.build_target]) +def RegenerateGnArgs(args): + """Recreates the build output directory using existing GN args.""" + with open(os.path.join(args.build_output_dir, 'args.gn'), 'r') as args_file: + gn_args = args_file.read() + shutil.rmtree(args.build_output_dir) + os.mkdir(args.build_output_dir) + with open(os.path.join(args.build_output_dir, 'args.gn'), 'w') as args_file: + args_file.write(gn_args) + subprocess.check_output(['gn', 'gen', args.build_output_dir]) + + def SyncAndBuild(args, unknown_args, revision): """Syncs to the given revision and builds the test target. @@ -525,6 +545,8 @@ os.chdir(repo) subprocess.check_output(['git', 'checkout', rev]) os.chdir(cwd) + if args.regenerate_args_after_sync: + RegenerateGnArgs(args) BuildTarget(args)
diff --git a/chrome_elf/BUILD.gn b/chrome_elf/BUILD.gn index 2451bb4..c4744fb 100644 --- a/chrome_elf/BUILD.gn +++ b/chrome_elf/BUILD.gn
@@ -92,6 +92,8 @@ ] deps = [ + ":sha1", + ":third_party_shared_defines", "//base", "//chrome/common:constants", ]
diff --git a/chrome_elf/chrome_elf_test_stubs.cc b/chrome_elf/chrome_elf_test_stubs.cc index 240c6b229..12dba81b 100644 --- a/chrome_elf/chrome_elf_test_stubs.cc +++ b/chrome_elf/chrome_elf_test_stubs.cc
@@ -5,8 +5,12 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/path_service.h" +#include "base/stl_util.h" +#include "base/win/windows_types.h" #include "chrome/common/chrome_switches.h" #include "chrome_elf/chrome_elf_main.h" +#include "chrome_elf/sha1/sha1.h" +#include "chrome_elf/third_party_dlls/logging_api.h" // This function is a temporary workaround for https://crbug.com/655788. We // need to come up with a better way to initialize crash reporting that can @@ -35,3 +39,67 @@ } void SetMetricsClientId(const char* client_id) {} + +struct TestLogEntry { + third_party_dlls::LogType log_type; + uint8_t basename_hash[elf_sha1::kSHA1Length]; + uint8_t code_id_hash[elf_sha1::kSHA1Length]; +}; + +// This test stub always writes 2 hardcoded entries into the buffer, if the +// buffer size is large enough. +uint32_t DrainLog(uint8_t* buffer, + uint32_t buffer_size, + uint32_t* log_remaining) { + // Alternate between log types. + TestLogEntry kTestLogEntries[] = { + { + third_party_dlls::LogType::kAllowed, + {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}, + {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49}, + }, + { + third_party_dlls::LogType::kBlocked, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB}, + {0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD}, + }, + }; + + // Each entry shares the module path for convenience. + static constexpr char kModulePath[] = "C:\\foo\\bar\\module.dll"; + static constexpr uint32_t kModulePathLength = base::size(kModulePath) - 1; + + if (log_remaining) { + *log_remaining = third_party_dlls::GetLogEntrySize(kModulePathLength) * + base::size(kTestLogEntries); + } + + uint8_t* tracker = buffer; + for (const auto& test_entry : kTestLogEntries) { + uint32_t entry_size = third_party_dlls::GetLogEntrySize(kModulePathLength); + if (tracker + entry_size > buffer + buffer_size) + break; + + third_party_dlls::LogEntry* log_entry = + reinterpret_cast<third_party_dlls::LogEntry*>(tracker); + + log_entry->type = test_entry.log_type; + ::memcpy(log_entry->basename_hash, test_entry.basename_hash, + sizeof(test_entry.basename_hash)); + ::memcpy(log_entry->code_id_hash, test_entry.code_id_hash, + sizeof(test_entry.code_id_hash)); + log_entry->path_len = kModulePathLength; + ::memcpy(log_entry->path, kModulePath, log_entry->path_len + 1); + + tracker += entry_size; + } + return tracker - buffer; +} + +bool RegisterLogNotification(HANDLE event_handle) { + return true; +}
diff --git a/chromecast/base/chromecast_switches.cc b/chromecast/base/chromecast_switches.cc index 2220f7eb..462c6e5 100644 --- a/chromecast/base/chromecast_switches.cc +++ b/chromecast/base/chromecast_switches.cc
@@ -151,6 +151,11 @@ const char kBackGestureHorizontalThreshold[] = "back-gesture-horizontal-threshold"; +extern const char kCastMemoryPressureCriticalFraction[] = + "memory-pressure-critical-fraction"; +extern const char kCastMemoryPressureModerateFraction[] = + "memory-pressure-moderate-fraction"; + } // namespace switches namespace chromecast {
diff --git a/chromecast/base/chromecast_switches.h b/chromecast/base/chromecast_switches.h index 8e346c1..dd9e003 100644 --- a/chromecast/base/chromecast_switches.h +++ b/chromecast/base/chromecast_switches.h
@@ -79,6 +79,9 @@ // Background color used when Chromium hasn't rendered anything yet. extern const char kCastAppBackgroundColor[]; +extern const char kCastMemoryPressureCriticalFraction[]; +extern const char kCastMemoryPressureModerateFraction[]; + } // namespace switches namespace chromecast {
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index 1c8686f..2b8da746 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -90,6 +90,7 @@ // header, but is exported to allow injecting the overlay-composited // callback. #include "chromecast/browser/cast_display_configurator.h" +#include "chromecast/graphics/accessibility/accessibility_manager.h" #include "chromecast/graphics/cast_screen.h" #include "components/viz/service/display/overlay_strategy_underlay_cast.h" // nogncheck #include "ui/display/screen.h" @@ -524,9 +525,18 @@ base::Unretained(video_plane_controller_.get()))); #endif +#if defined(USE_AURA) + cast_browser_process_->SetAccessibilityManager( + std::make_unique<AccessibilityManager>()); + window_manager_ = CastWindowManager::Create( + CAST_IS_DEBUG_BUILD() || + GetSwitchValueBoolean(switches::kEnableInput, false), + cast_browser_process_->accessibility_manager()); +#else window_manager_ = CastWindowManager::Create( CAST_IS_DEBUG_BUILD() || GetSwitchValueBoolean(switches::kEnableInput, false)); +#endif cast_browser_process_->SetCastService( cast_browser_process_->browser_client()->CreateCastService(
diff --git a/chromecast/browser/cast_browser_process.cc b/chromecast/browser/cast_browser_process.cc index e31f2802..dc3ff57 100644 --- a/chromecast/browser/cast_browser_process.cc +++ b/chromecast/browser/cast_browser_process.cc
@@ -16,6 +16,7 @@ #include "components/prefs/pref_service.h" #if defined(USE_AURA) +#include "chromecast/graphics/accessibility/accessibility_manager.h" #include "chromecast/graphics/cast_screen.h" #endif // defined(USE_AURA) @@ -70,6 +71,12 @@ DCHECK(!cast_screen_); cast_screen_ = std::move(cast_screen); } + +void CastBrowserProcess::SetAccessibilityManager( + std::unique_ptr<AccessibilityManager> accessibility_manager) { + DCHECK(!accessibility_manager_); + accessibility_manager_ = std::move(accessibility_manager); +} #endif // defined(USE_AURA) void CastBrowserProcess::SetMetricsServiceClient(
diff --git a/chromecast/browser/cast_browser_process.h b/chromecast/browser/cast_browser_process.h index 2cc93b1e..a72d87b 100644 --- a/chromecast/browser/cast_browser_process.h +++ b/chromecast/browser/cast_browser_process.h
@@ -18,6 +18,9 @@ } // namespace net namespace chromecast { +#if defined(USE_AURA) +class AccessibilityManager; +#endif // defined(USE_AURA) class CastService; class CastScreen; class ConnectivityChecker; @@ -43,7 +46,10 @@ void SetBrowserContext(std::unique_ptr<CastBrowserContext> browser_context); void SetCastContentBrowserClient(CastContentBrowserClient* browser_client); void SetCastService(std::unique_ptr<CastService> cast_service); + #if defined(USE_AURA) + void SetAccessibilityManager( + std::unique_ptr<AccessibilityManager> accessibility_manager); void SetCastScreen(std::unique_ptr<CastScreen> cast_screen); #endif // defined(USE_AURA) void SetMetricsServiceClient( @@ -63,6 +69,9 @@ CastService* cast_service() const { return cast_service_.get(); } #if defined(USE_AURA) CastScreen* cast_screen() const { return cast_screen_.get(); } + AccessibilityManager* accessibility_manager() const { + return accessibility_manager_.get(); + } #endif // defined(USE_AURA) metrics::CastMetricsServiceClient* metrics_service_client() const { return metrics_service_client_.get(); @@ -81,6 +90,7 @@ // CastBrowserMainParts. #if defined(USE_AURA) std::unique_ptr<CastScreen> cast_screen_; + std::unique_ptr<AccessibilityManager> accessibility_manager_; #endif // defined(USE_AURA) std::unique_ptr<PrefService> pref_service_; scoped_refptr<ConnectivityChecker> connectivity_checker_;
diff --git a/chromecast/browser/cast_memory_pressure_monitor.cc b/chromecast/browser/cast_memory_pressure_monitor.cc index 572df14..f548d7f 100644 --- a/chromecast/browser/cast_memory_pressure_monitor.cc +++ b/chromecast/browser/cast_memory_pressure_monitor.cc
@@ -44,7 +44,13 @@ } // namespace CastMemoryPressureMonitor::CastMemoryPressureMonitor() - : current_level_(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE), + : critical_memory_fraction_( + GetSwitchValueDouble(switches::kCastMemoryPressureCriticalFraction, + kCriticalMemoryFraction)), + moderate_memory_fraction_( + GetSwitchValueDouble(switches::kCastMemoryPressureModerateFraction, + kModerateMemoryFraction)), + current_level_(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE), system_reserved_kb_(GetSystemReservedKb()), dispatch_callback_( base::Bind(&base::MemoryPressureListener::NotifyMemoryPressure)), @@ -80,9 +86,9 @@ DCHECK_GT(total, 0); const float ratio = available / static_cast<float>(total); - if (ratio < kCriticalMemoryFraction) + if (ratio < critical_memory_fraction_) level = base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; - else if (ratio < kModerateMemoryFraction) + else if (ratio < moderate_memory_fraction_) level = base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE; } else { // Backup method purely using 'free' memory. It may generate more
diff --git a/chromecast/browser/cast_memory_pressure_monitor.h b/chromecast/browser/cast_memory_pressure_monitor.h index 6271e5f..3b44c81 100644 --- a/chromecast/browser/cast_memory_pressure_monitor.h +++ b/chromecast/browser/cast_memory_pressure_monitor.h
@@ -26,6 +26,9 @@ void PollPressureLevel(); void UpdateMemoryPressureLevel(MemoryPressureLevel new_level); + const float critical_memory_fraction_; + const float moderate_memory_fraction_; + MemoryPressureLevel current_level_; const int system_reserved_kb_; DispatchCallback dispatch_callback_;
diff --git a/chromecast/browser/extension_request_protocol_handler.cc b/chromecast/browser/extension_request_protocol_handler.cc index 6872a0e..c4f533b 100644 --- a/chromecast/browser/extension_request_protocol_handler.cc +++ b/chromecast/browser/extension_request_protocol_handler.cc
@@ -4,6 +4,7 @@ #include "chromecast/browser/extension_request_protocol_handler.h" +#include "chromecast/common/cast_redirect_manifest_handler.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/info_map.h" @@ -278,14 +279,25 @@ return nullptr; } + const GURL& url = request->url(); std::string cast_url; - if (!extension->manifest()->GetString("cast_url", &cast_url)) { + // See if we are being redirected to an extension-specific URL. + if (!CastRedirectHandler::ParseUrl(&cast_url, extension, url)) { // Defer to the default handler to load from disk. return default_handler_->MaybeCreateJob(request, network_delegate); } - // Replace chrome-extension://<id> with whatever the extension wants to go to. - cast_url.append(request->url().path()); + // The above only handles the scheme, host & path, any query or fragment needs + // to be copied separately. + if (url.has_query()) { + cast_url.push_back('?'); + url.query_piece().AppendToString(&cast_url); + } + + if (url.has_ref()) { + cast_url.push_back('#'); + url.ref_piece().AppendToString(&cast_url); + } // Force a redirect to the new URL but without changing where the webpage // thinks it is.
diff --git a/chromecast/browser/extensions/api/accessibility_private/accessibility_extension_api.cc b/chromecast/browser/extensions/api/accessibility_private/accessibility_extension_api.cc index 65cc16bc..1e33255 100644 --- a/chromecast/browser/extensions/api/accessibility_private/accessibility_extension_api.cc +++ b/chromecast/browser/extensions/api/accessibility_private/accessibility_extension_api.cc
@@ -4,8 +4,15 @@ #include "chromecast/browser/extensions/api/accessibility_private/accessibility_extension_api.h" +#include "chromecast/browser/cast_browser_process.h" #include "chromecast/common/extensions_api/accessibility_private.h" +#include "chromecast/graphics/accessibility/accessibility_manager.h" #include "content/public/browser/browser_accessibility_state.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/common/service_manager_connection.h" +#include "extensions/common/image_util.h" +#include "services/service_manager/public/cpp/connector.h" +#include "services/service_manager/public/cpp/interface_provider.h" namespace { @@ -31,14 +38,65 @@ ExtensionFunction::ResponseAction AccessibilityPrivateSetFocusRingFunction::Run() { - LOG(ERROR) << "AccessibilityPrivateSetFocusRingFunction"; - return RespondNow(Error(kErrorNotSupported)); + auto* accessibility_manager = + chromecast::shell::CastBrowserProcess::GetInstance() + ->accessibility_manager(); + + std::unique_ptr<accessibility_private::SetFocusRing::Params> params( + accessibility_private::SetFocusRing::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params); + + std::vector<gfx::Rect> rects; + for (const accessibility_private::ScreenRect& rect : params->rects) { + rects.push_back(gfx::Rect(rect.left, rect.top, rect.width, rect.height)); + } + + if (params->color) { + SkColor color; + if (!extensions::image_util::ParseHexColorString(*(params->color), &color)) + return RespondNow(Error("Could not parse hex color")); + accessibility_manager->SetFocusRingColor(color); + } else { + accessibility_manager->ResetFocusRingColor(); + } + + // Move the visible focus ring to cover all of these rects. + accessibility_manager->SetFocusRing( + rects, chromecast::FocusRingBehavior::PERSIST_FOCUS_RING); + + // Also update the touch exploration controller so that synthesized + // touch events are anchored within the focused object. + if (!rects.empty()) { + accessibility_manager->SetTouchAccessibilityAnchorPoint( + rects[0].CenterPoint()); + } + + return RespondNow(NoArguments()); } ExtensionFunction::ResponseAction AccessibilityPrivateSetHighlightsFunction::Run() { - LOG(ERROR) << "AccessibilityPrivateSetHighlightsFunction"; - return RespondNow(Error(kErrorNotSupported)); + auto* accessibility_manager = + chromecast::shell::CastBrowserProcess::GetInstance() + ->accessibility_manager(); + + std::unique_ptr<accessibility_private::SetHighlights::Params> params( + accessibility_private::SetHighlights::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params); + + std::vector<gfx::Rect> rects; + for (const accessibility_private::ScreenRect& rect : params->rects) { + rects.push_back(gfx::Rect(rect.left, rect.top, rect.width, rect.height)); + } + + SkColor color; + if (!extensions::image_util::ParseHexColorString(params->color, &color)) + return RespondNow(Error("Could not parse hex color")); + + // Set the highlights to cover all of these rects. + accessibility_manager->SetHighlights(rects, color); + + return RespondNow(NoArguments()); } ExtensionFunction::ResponseAction
diff --git a/chromecast/common/BUILD.gn b/chromecast/common/BUILD.gn index e949919f..41b71dc 100644 --- a/chromecast/common/BUILD.gn +++ b/chromecast/common/BUILD.gn
@@ -35,6 +35,8 @@ sources += [ "cast_extensions_client.cc", "cast_extensions_client.h", + "cast_redirect_manifest_handler.cc", + "cast_redirect_manifest_handler.h", "extensions_api/cast_aliases.cc", "extensions_api/cast_aliases.h", "extensions_api/cast_api_permissions.cc",
diff --git a/chromecast/common/cast_extensions_client.cc b/chromecast/common/cast_extensions_client.cc index 25013f81..98630f3 100644 --- a/chromecast/common/cast_extensions_client.cc +++ b/chromecast/common/cast_extensions_client.cc
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/no_destructor.h" +#include "chromecast/common/cast_redirect_manifest_handler.h" #include "chromecast/common/extensions_api/cast_aliases.h" #include "chromecast/common/extensions_api/cast_api_features.h" #include "chromecast/common/extensions_api/cast_api_permissions.h" @@ -44,6 +45,7 @@ void RegisterCastManifestHandlers() { DCHECK(!ManifestHandler::IsRegistrationFinalized()); (new AutomationHandler)->Register(); // TODO(crbug/837773) De-dupe later. + (new chromecast::CastRedirectHandler)->Register(); (new ContentScriptsHandler)->Register(); (new TtsEngineManifestHandler)->Register(); }
diff --git a/chromecast/common/cast_redirect_manifest_handler.cc b/chromecast/common/cast_redirect_manifest_handler.cc new file mode 100644 index 0000000..a0885a1 --- /dev/null +++ b/chromecast/common/cast_redirect_manifest_handler.cc
@@ -0,0 +1,94 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/common/cast_redirect_manifest_handler.h" + +#include <vector> + +#include "base/strings/utf_string_conversions.h" + +namespace chromecast { + +namespace { + +const char kCastRedirect[] = "cast_redirect"; +const char kCastUrl[] = "cast_url"; + +class Data : public extensions::Extension::ManifestData { + public: + ~Data() override {} + + std::string cast_url; + std::vector<std::pair<std::string, std::string>> redirects; +}; + +} // namespace + +CastRedirectHandler::CastRedirectHandler() {} +CastRedirectHandler::~CastRedirectHandler() {} + +bool CastRedirectHandler::Parse(extensions::Extension* extension, + base::string16* error) { + std::unique_ptr<Data> info(new Data); + const base::DictionaryValue* dict; + if (extension->manifest()->GetDictionary(kCastRedirect, &dict)) { + for (const auto& kv : *dict) { + std::string path; + if (kv.second->GetAsString(&path)) { + info->redirects.emplace_back(kv.first, path); + } + } + } + + std::string url; + if (extension->manifest()->GetString(kCastUrl, &url)) { + info->cast_url = url; + } + + if (!info->redirects.empty() || !info->cast_url.empty()) { + extension->SetManifestData(kCastRedirect, std::move(info)); + } + return true; +} + +bool CastRedirectHandler::Validate( + const extensions::Extension* extension, + std::string* error, + std::vector<extensions::InstallWarning>* warnings) const { + return true; +} + +bool CastRedirectHandler::ParseUrl(std::string* out_url, + const extensions::Extension* extension, + const GURL& url) { + Data* info = static_cast<Data*>(extension->GetManifestData(kCastRedirect)); + if (!info) + return false; + + std::string path = url.path(); + for (const auto& redirect : info->redirects) { + const std::string& prefix = redirect.first; + if (!path.compare(0, prefix.size(), prefix)) { + std::string s = redirect.second; + *out_url = redirect.second; + out_url->append(path, prefix.size(), path.size()); + return true; + } + } + + if (!info->cast_url.empty()) { + *out_url = info->cast_url; + out_url->append(url.path()); + return true; + } + + return false; +} + +base::span<const char* const> CastRedirectHandler::Keys() const { + static constexpr const char* kKeys[] = {kCastRedirect, kCastUrl}; + return kKeys; +} + +} // namespace chromecast
diff --git a/chromecast/common/cast_redirect_manifest_handler.h b/chromecast/common/cast_redirect_manifest_handler.h new file mode 100644 index 0000000..69f8655 --- /dev/null +++ b/chromecast/common/cast_redirect_manifest_handler.h
@@ -0,0 +1,42 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMECAST_COMMON_CAST_REDIRECT_MANIFEST_HANDLER_H_ +#define CHROMECAST_COMMON_CAST_REDIRECT_MANIFEST_HANDLER_H_ + +#include <string> + +#include "base/macros.h" +#include "extensions/common/extension.h" +#include "extensions/common/manifest_handler.h" +#include "extensions/common/user_script.h" +#include "url/gurl.h" + +namespace chromecast { + +// Parses the "cast_redirect" and "cast_url" manifest keys. +class CastRedirectHandler : public extensions::ManifestHandler { + public: + CastRedirectHandler(); + ~CastRedirectHandler() override; + + bool Parse(extensions::Extension* extension, base::string16* error) override; + bool Validate( + const extensions::Extension* extension, + std::string* error, + std::vector<extensions::InstallWarning>* warnings) const override; + + static bool ParseUrl(std::string* out_url, + const extensions::Extension* extension, + const GURL& url); + + private: + base::span<const char* const> Keys() const override; + + DISALLOW_COPY_AND_ASSIGN(CastRedirectHandler); +}; + +} // namespace chromecast + +#endif // CHROMECAST_COMMON_CAST_REDIRECT_MANIFEST_HANDLER_H_
diff --git a/chromecast/common/extensions_api/_manifest_features.json b/chromecast/common/extensions_api/_manifest_features.json index 6ce9486c..5e025ab 100644 --- a/chromecast/common/extensions_api/_manifest_features.json +++ b/chromecast/common/extensions_api/_manifest_features.json
@@ -12,6 +12,10 @@ "extension_types": ["extension", "legacy_packaged_app"], "whitelist": [ "2FCBCE08B34CCA1728A85F1EFBD9A34DD2558B2E" ] }], + "cast_redirect": { + "channel": "stable", + "extension_types": ["platform_app"] + }, "cast_url": { "channel": "stable", "extension_types": ["platform_app"]
diff --git a/chromecast/graphics/BUILD.gn b/chromecast/graphics/BUILD.gn index 405a322..a0cbcc4 100644 --- a/chromecast/graphics/BUILD.gn +++ b/chromecast/graphics/BUILD.gn
@@ -20,6 +20,25 @@ if (use_aura) { sources += [ + "accessibility/accessibility_cursor_ring_layer.cc", + "accessibility/accessibility_cursor_ring_layer.h", + "accessibility/accessibility_focus_ring.cc", + "accessibility/accessibility_focus_ring.h", + "accessibility/accessibility_focus_ring_controller.cc", + "accessibility/accessibility_focus_ring_controller.h", + "accessibility/accessibility_focus_ring_layer.cc", + "accessibility/accessibility_focus_ring_layer.h", + "accessibility/accessibility_highlight_layer.cc", + "accessibility/accessibility_highlight_layer.h", + "accessibility/accessibility_layer.cc", + "accessibility/accessibility_layer.h", + "accessibility/accessibility_manager.cc", + "accessibility/accessibility_manager.h", + "accessibility/accessibility_observer.h", + "accessibility/focus_ring_controller.cc", + "accessibility/focus_ring_controller.h", + "accessibility/focus_ring_layer.cc", + "accessibility/focus_ring_layer.h", "cast_focus_client_aura.cc", "cast_focus_client_aura.h", "cast_system_gesture_event_handler.cc", @@ -51,7 +70,9 @@ ":libcast_graphics_1.0", "//chromecast/base", "//chromecast/public", + "//skia", "//ui/aura", + "//ui/compositor", "//ui/display", "//ui/gfx/geometry", ] @@ -79,6 +100,7 @@ if (use_aura && !is_cast_audio_only) { test("cast_graphics_unittests") { sources = [ + "accessibility/accessibility_focus_ring_controller_unittest.cc", "cast_focus_client_aura_test.cc", "cast_system_gesture_event_handler_test.cc", "cast_views_test.cc",
diff --git a/chromecast/graphics/DEPS b/chromecast/graphics/DEPS index e88b8a0e..1ef86f00 100644 --- a/chromecast/graphics/DEPS +++ b/chromecast/graphics/DEPS
@@ -2,6 +2,7 @@ "+ui/aura", "+ui/base", "+ui/base/ime", + "+ui/compositor", "+ui/display", "+ui/events", "+ui/events/test", @@ -10,6 +11,7 @@ "+ui/views", "+ui/wm/core", "+ui/wm/public", + "+third_party/skia", ] specific_include_rules = {
diff --git a/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.cc b/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.cc new file mode 100644 index 0000000..61f4a64 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.cc
@@ -0,0 +1,84 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h" + +#include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkPath.h" +#include "ui/aura/window.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/canvas.h" +#include "ui/wm/core/coordinate_conversion.h" + +namespace chromecast { + +namespace { + +// The number of pixels in the color gradient that fades to transparent. +const int kGradientWidth = 8; + +// The radius of the ring in pixels. +const int kCursorRingRadius = 24; + +// Extra margin to add to the layer in pixels. +const int kLayerMargin = 8; + +} // namespace + +AccessibilityCursorRingLayer::AccessibilityCursorRingLayer( + aura::Window* root_window, + AccessibilityLayerDelegate* delegate, + int red, + int green, + int blue) + : FocusRingLayer(root_window, delegate), + red_(red), + green_(green), + blue_(blue) {} + +AccessibilityCursorRingLayer::~AccessibilityCursorRingLayer() = default; + +void AccessibilityCursorRingLayer::Set(const gfx::Point& location) { + location_ = location; + + gfx::Rect bounds = gfx::Rect(location.x(), location.y(), 0, 0); + int inset = kGradientWidth + kCursorRingRadius + kLayerMargin; + bounds.Inset(-inset, -inset, -inset, -inset); + + DCHECK(root_window()); + display::Display display = + display::Screen::GetScreen()->GetDisplayMatching(bounds); + ::wm::ConvertRectFromScreen(root_window(), &bounds); + CreateOrUpdateLayer(root_window(), "AccessibilityCursorRing", bounds); +} + +void AccessibilityCursorRingLayer::OnPaintLayer( + const ui::PaintContext& context) { + ui::PaintRecorder recorder(context, layer()->size()); + + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setStyle(cc::PaintFlags::kStroke_Style); + flags.setStrokeWidth(2); + + gfx::Rect r = layer()->bounds(); + r.Offset(-r.OffsetFromOrigin()); + r.Inset(kLayerMargin, kLayerMargin, kLayerMargin, kLayerMargin); + const int w = kGradientWidth; + for (int i = 0; i < w; ++i) { + flags.setColor(SkColorSetARGB(255 * i * i / (w * w), red_, green_, blue_)); + SkPath path; + path.addOval(SkRect::MakeXYWH(r.x(), r.y(), r.width(), r.height())); + r.Inset(1, 1, 1, 1); + recorder.canvas()->DrawPath(path, flags); + } +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h b/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h new file mode 100644 index 0000000..299f13b --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h
@@ -0,0 +1,46 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_CURSOR_RING_LAYER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_CURSOR_RING_LAYER_H_ + +#include "chromecast/graphics/accessibility/accessibility_focus_ring.h" +#include "chromecast/graphics/accessibility/focus_ring_layer.h" + +namespace chromecast { + +// A subclass of FocusRingLayer that highlights the mouse cursor while it's +// moving, to make it easier to find visually. +class AccessibilityCursorRingLayer : public FocusRingLayer { + public: + AccessibilityCursorRingLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate, + int red, + int green, + int blue); + ~AccessibilityCursorRingLayer() override; + + // Create the layer and update its bounds and position in the hierarchy. + void Set(const gfx::Point& location); + + private: + // ui::LayerDelegate overrides: + void OnPaintLayer(const ui::PaintContext& context) override; + + // The current location. + gfx::Point location_; + + int red_; + int green_; + int blue_; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityCursorRingLayer); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_CURSOR_RING_LAYER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring.cc b/chromecast/graphics/accessibility/accessibility_focus_ring.cc new file mode 100644 index 0000000..12f3da1 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring.cc
@@ -0,0 +1,147 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_focus_ring.h" + +#include <stddef.h> + +#include "base/logging.h" + +namespace chromecast { + +// static +AccessibilityFocusRing AccessibilityFocusRing::CreateWithRect( + const gfx::Rect& bounds, + int margin) { + // Compute the height of the top and bottom cap. + int cap_height = std::min(bounds.height() / 2, margin * 2); + + gfx::Rect top(bounds.x(), bounds.y(), bounds.width(), cap_height); + gfx::Rect bottom(bounds.x(), bounds.bottom() - cap_height, bounds.width(), + cap_height); + gfx::Rect body(bounds.x(), top.bottom(), bounds.width(), + bottom.y() - top.bottom()); + + return CreateWithParagraphShape(top, body, bottom, margin); +} + +// static +AccessibilityFocusRing AccessibilityFocusRing::Interpolate( + const AccessibilityFocusRing& r1, + const AccessibilityFocusRing& r2, + double fraction) { + AccessibilityFocusRing dst; + for (int i = 0; i < 36; ++i) { + dst.points[i] = gfx::Point( + r1.points[i].x() * (1 - fraction) + r2.points[i].x() * fraction, + r1.points[i].y() * (1 - fraction) + r2.points[i].y() * fraction); + } + return dst; +} + +// static +AccessibilityFocusRing AccessibilityFocusRing::CreateWithParagraphShape( + const gfx::Rect& orig_top_line, + const gfx::Rect& orig_body, + const gfx::Rect& orig_bottom_line, + int margin) { + gfx::Rect top = orig_top_line; + gfx::Rect middle = orig_body; + gfx::Rect bottom = orig_bottom_line; + + int min_height = std::min(top.height(), bottom.height()); + margin = std::min(margin, min_height / 2); + + if (top.x() <= middle.x() + 2 * margin) { + top.set_width(top.width() + top.x() - middle.x()); + top.set_x(middle.x()); + } + if (top.right() >= middle.right() - 2 * margin) { + top.set_width(middle.right() - top.x()); + } + + if (bottom.x() <= middle.x() + 2 * margin) { + bottom.set_width(bottom.width() + bottom.x() - middle.x()); + bottom.set_x(middle.x()); + } + if (bottom.right() >= middle.right() - 2 * margin) { + bottom.set_width(middle.right() - bottom.x()); + } + + AccessibilityFocusRing ring; + ring.points[0] = gfx::Point(top.x(), top.bottom() - margin); + ring.points[1] = gfx::Point(top.x(), top.y() + margin); + ring.points[2] = gfx::Point(top.x(), top.y()); + ring.points[3] = gfx::Point(top.x() + margin, top.y()); + ring.points[4] = gfx::Point(top.right() - margin, top.y()); + ring.points[5] = gfx::Point(top.right(), top.y()); + ring.points[6] = gfx::Point(top.right(), top.y() + margin); + ring.points[7] = gfx::Point(top.right(), top.bottom() - margin); + ring.points[8] = gfx::Point(top.right(), top.bottom()); + if (top.right() < middle.right()) { + ring.points[9] = gfx::Point(top.right() + margin, middle.y()); + ring.points[10] = gfx::Point(middle.right() - margin, middle.y()); + } else { + ring.points[9] = gfx::Point(top.right(), middle.y()); + ring.points[10] = gfx::Point(middle.right(), middle.y()); + } + ring.points[11] = gfx::Point(middle.right(), middle.y()); + ring.points[12] = gfx::Point(middle.right(), middle.y() + margin); + ring.points[13] = gfx::Point(middle.right(), middle.bottom() - margin); + ring.points[14] = gfx::Point(middle.right(), middle.bottom()); + if (bottom.right() < middle.right()) { + ring.points[15] = gfx::Point(middle.right() - margin, bottom.y()); + ring.points[16] = gfx::Point(bottom.right() + margin, bottom.y()); + } else { + ring.points[15] = gfx::Point(middle.right(), bottom.y()); + ring.points[16] = gfx::Point(bottom.right(), bottom.y()); + } + ring.points[17] = gfx::Point(bottom.right(), bottom.y()); + ring.points[18] = gfx::Point(bottom.right(), bottom.y() + margin); + ring.points[19] = gfx::Point(bottom.right(), bottom.bottom() - margin); + ring.points[20] = gfx::Point(bottom.right(), bottom.bottom()); + ring.points[21] = gfx::Point(bottom.right() - margin, bottom.bottom()); + ring.points[22] = gfx::Point(bottom.x() + margin, bottom.bottom()); + ring.points[23] = gfx::Point(bottom.x(), bottom.bottom()); + ring.points[24] = gfx::Point(bottom.x(), bottom.bottom() - margin); + ring.points[25] = gfx::Point(bottom.x(), bottom.y() + margin); + ring.points[26] = gfx::Point(bottom.x(), bottom.y()); + if (bottom.x() > middle.x()) { + ring.points[27] = gfx::Point(bottom.x() - margin, bottom.y()); + ring.points[28] = gfx::Point(middle.x() + margin, middle.bottom()); + } else { + ring.points[27] = gfx::Point(bottom.x(), bottom.y()); + ring.points[28] = gfx::Point(middle.x(), middle.bottom()); + } + ring.points[29] = gfx::Point(middle.x(), middle.bottom()); + ring.points[30] = gfx::Point(middle.x(), middle.bottom() - margin); + ring.points[31] = gfx::Point(middle.x(), middle.y() + margin); + ring.points[32] = gfx::Point(middle.x(), middle.y()); + if (top.x() > middle.x()) { + ring.points[33] = gfx::Point(middle.x() + margin, middle.y()); + ring.points[34] = gfx::Point(top.x() - margin, top.bottom()); + } else { + ring.points[33] = gfx::Point(middle.x(), middle.y()); + ring.points[34] = gfx::Point(top.x(), top.bottom()); + } + ring.points[35] = gfx::Point(top.x(), top.bottom()); + + return ring; +} + +gfx::Rect AccessibilityFocusRing::GetBounds() const { + gfx::Point top_left = points[0]; + gfx::Point bottom_right = points[0]; + for (size_t i = 1; i < 36; ++i) { + top_left.SetToMin(points[i]); + bottom_right.SetToMax(points[i]); + } + return gfx::Rect(top_left, gfx::Size(bottom_right.x() - top_left.x(), + bottom_right.y() - top_left.y())); +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring.h b/chromecast/graphics/accessibility/accessibility_focus_ring.h new file mode 100644 index 0000000..c22173c --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring.h
@@ -0,0 +1,102 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_H_ + +#include "ui/gfx/geometry/point.h" +#include "ui/gfx/geometry/rect.h" + +namespace chromecast { + +enum class FocusRingBehavior { FADE_OUT_FOCUS_RING, PERSIST_FOCUS_RING }; + +// An AccessibilityFocusRing is a special type of shape designed to +// outline the focused object on the screen for users with visual +// impairments. It's specifically designed to outline text ranges that +// span multiple lines (we'll call this a "paragraph" shape from here on, +// but it works for any text range), so it can outline a shape defined by a +// few words from the first line, the complete contents of more lines, +// followed by a few words from the last line. See the figure below. +// When highlighting any other object, it outlines a rectangular shape. +// +// The outline is outset from the object it's highlighting by a few pixels; +// this margin distance also determines its border radius for rounded +// corners. +// +// An AccessibilityFocusRing can be initialized with either a rectangle +// defining the bounds of an object, or a paragraph-shape with three +// rectangles defining a top line, a body, and a bottom line, which are +// assumed to be adjacent to one another. +// +// Initializing an AccessibilityFocusRing computes the following 36 points +// that completely define the shape's outline. This shape can be traced +// using Skia or any other drawing utility just by drawing alternating +// straight lines and quadratic curves (e.g. a line from 0 to 1, a curve +// from 1 to 3 with 2 as a control point, then a line from 3 to 4, and so on. +// +// The same path should be used even if the focus ring was initialized with +// a rectangle and not a paragraph shape - this makes it possible to +// smoothly animate between one object and the next simply by interpolating +// points. +// +// Noncontiguous shapes should be handled by drawing multiple focus rings. +// +// The 36 points are defined as follows: +// +// 2 3------------------------------4 5 +// / | +// 1 6 +// | First line of paragraph | +// 0 7 +// / | +// 32 33-34 35 8 9---------------10 11 +// / | +// 31 Middle line of paragraph.......................... 12 +// | | +// | | +// | Middle line of paragraph.......................... | +// | | +// | | +// 30 Middle line of paragraph.......................... 13 +// | | +// 29 28---------27 26 17 16---------15 14 +// | | +// 25 18 +// | Last line of paragraph | +// 24 19 +// | | +// 23 22-----------------------21 20 +// +// Exported for tests. +struct AccessibilityFocusRing { + // Construct an AccessibilityFocusRing that outlines a rectangular object. + static AccessibilityFocusRing CreateWithRect(const gfx::Rect& bounds, + int margin); + + // Returns a ring where 0.0 returns r1, 1.0 returns r2, and any number + // in-between interpolates linearly between them. + static AccessibilityFocusRing Interpolate(const AccessibilityFocusRing& r1, + const AccessibilityFocusRing& r2, + double fraction); + + // Construct an AccessibilityFocusRing that outlines a paragraph-shaped + // object. + static AccessibilityFocusRing CreateWithParagraphShape( + const gfx::Rect& top_line, + const gfx::Rect& body, + const gfx::Rect& bottom_line, + int margin); + + gfx::Rect GetBounds() const; + + gfx::Point points[36]; +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_H_
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring_controller.cc b/chromecast/graphics/accessibility/accessibility_focus_ring_controller.cc new file mode 100644 index 0000000..d969614f --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring_controller.cc
@@ -0,0 +1,501 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_focus_ring_controller.h" + +#include <cstddef> + +#include <algorithm> +#include <memory> +#include <set> +#include <utility> +#include <vector> + +#include "base/logging.h" +#include "chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h" +#include "chromecast/graphics/accessibility/accessibility_focus_ring_layer.h" +#include "chromecast/graphics/accessibility/accessibility_highlight_layer.h" +#include "chromecast/graphics/accessibility/focus_ring_layer.h" + +namespace chromecast { + +namespace { + +// The number of pixels the focus ring is outset from the object it outlines, +// which also determines the border radius of the rounded corners. +// TODO(dmazzoni): take display resolution into account. +constexpr int kAccessibilityFocusRingMargin = 7; + +// Time to transition between one location and the next. +constexpr int kTransitionTimeMilliseconds = 300; + +// Focus constants. +constexpr int kFocusFadeInTimeMilliseconds = 100; +constexpr int kFocusFadeOutTimeMilliseconds = 1600; + +// Caret constants. +constexpr int kCaretFadeInTimeMilliseconds = 100; +constexpr int kCaretFadeOutTimeMilliseconds = 1600; +constexpr int kCaretRingColorRed = 51; +constexpr int kCaretRingColorGreen = 51; +constexpr int kCaretRingColorBlue = 255; + +// Highlight constants. +constexpr float kHighlightOpacity = 0.3f; + +// A Region is an unordered collection of Rects that maintains its +// bounding box. Used in the middle of an algorithm that groups +// adjacent and overlapping rects. +struct Region { + explicit Region(gfx::Rect initial_rect) { + bounds = initial_rect; + rects.push_back(initial_rect); + } + gfx::Rect bounds; + std::vector<gfx::Rect> rects; +}; + +} // namespace + +AccessibilityFocusRingController::AccessibilityFocusRingController( + aura::Window* root_window) + : root_window_(root_window) { + DCHECK(root_window); + focus_animation_info_.fade_in_time = + base::TimeDelta::FromMilliseconds(kFocusFadeInTimeMilliseconds); + focus_animation_info_.fade_out_time = + base::TimeDelta::FromMilliseconds(kFocusFadeOutTimeMilliseconds); + caret_animation_info_.fade_in_time = + base::TimeDelta::FromMilliseconds(kCaretFadeInTimeMilliseconds); + caret_animation_info_.fade_out_time = + base::TimeDelta::FromMilliseconds(kCaretFadeOutTimeMilliseconds); +} + +AccessibilityFocusRingController::~AccessibilityFocusRingController() = default; + +void AccessibilityFocusRingController::SetFocusRingColor(SkColor color) { + focus_ring_color_ = color; + UpdateFocusRingsFromFocusRects(); +} + +void AccessibilityFocusRingController::ResetFocusRingColor() { + focus_ring_color_.reset(); + UpdateFocusRingsFromFocusRects(); +} + +void AccessibilityFocusRingController::SetFocusRing( + const std::vector<gfx::Rect>& rects, + FocusRingBehavior focus_ring_behavior) { + std::vector<gfx::Rect> clean_rects(rects); + // Remove duplicates + if (rects.size() > 1) { + std::set<gfx::Rect> rects_set(rects.begin(), rects.end()); + clean_rects.assign(rects_set.begin(), rects_set.end()); + } + // If there is no change, don't do any work. + if (focus_ring_behavior_ == focus_ring_behavior && + clean_rects == focus_rects_) + return; + focus_ring_behavior_ = focus_ring_behavior; + OnLayerChange(&focus_animation_info_); + focus_rects_ = clean_rects; + UpdateFocusRingsFromFocusRects(); +} + +void AccessibilityFocusRingController::HideFocusRing() { + focus_rects_.clear(); + UpdateFocusRingsFromFocusRects(); +} + +void AccessibilityFocusRingController::SetHighlights( + const std::vector<gfx::Rect>& rects, + SkColor color) { + highlight_rects_ = rects; + GetColorAndOpacityFromColor(color, kHighlightOpacity, &highlight_color_, + &highlight_opacity_); + UpdateHighlightFromHighlightRects(); +} + +void AccessibilityFocusRingController::HideHighlights() { + highlight_rects_.clear(); + UpdateHighlightFromHighlightRects(); +} + +void AccessibilityFocusRingController::UpdateFocusRingsFromFocusRects() { + previous_focus_rings_.swap(focus_rings_); + focus_rings_.clear(); + RectsToRings(focus_rects_, &focus_rings_); + focus_layers_.resize(focus_rings_.size()); + if (focus_rings_.empty()) + return; + + for (size_t i = 0; i < focus_rings_.size(); ++i) { + if (!focus_layers_[i]) + focus_layers_[i] = + std::make_unique<AccessibilityFocusRingLayer>(root_window_, this); + } + + if (focus_ring_behavior_ == FocusRingBehavior::PERSIST_FOCUS_RING && + focus_layers_[0]->CanAnimate()) { + // In PERSIST mode, animate the first ring to its destination + // location, then set the rest of the rings directly. + for (size_t i = 1; i < focus_rings_.size(); ++i) + focus_layers_[i]->Set(focus_rings_[i]); + } else { + // In FADE mode, set all focus rings to their destination location. + for (size_t i = 0; i < focus_rings_.size(); ++i) + focus_layers_[i]->Set(focus_rings_[i]); + } + + for (size_t i = 0; i < focus_rings_.size(); ++i) { + if (focus_ring_color_) + focus_layers_[i]->SetColor(*focus_ring_color_); + else + focus_layers_[i]->ResetColor(); + } +} + +void AccessibilityFocusRingController::UpdateHighlightFromHighlightRects() { + if (!highlight_layer_) + highlight_layer_ = + std::make_unique<AccessibilityHighlightLayer>(root_window_, this); + highlight_layer_->Set(highlight_rects_, highlight_color_); + highlight_layer_->SetOpacity(highlight_opacity_); +} + +void AccessibilityFocusRingController::OnLayerChange( + AccessibilityFocusRingController::LayerAnimationInfo* animation_info) { + animation_info->change_time = base::TimeTicks::Now(); + if (animation_info->opacity == 0) + animation_info->start_time = animation_info->change_time; +} + +void AccessibilityFocusRingController::SetCaretRing( + const gfx::Point& location) { + caret_location_ = location; + + if (!caret_layer_) { + caret_layer_.reset(new AccessibilityCursorRingLayer( + root_window_, this, kCaretRingColorRed, kCaretRingColorGreen, + kCaretRingColorBlue)); + } + + caret_layer_->Set(location); + OnLayerChange(&caret_animation_info_); +} + +void AccessibilityFocusRingController::HideCaretRing() { + caret_layer_.reset(); +} + +void AccessibilityFocusRingController::SetNoFadeForTesting() { + focus_animation_info_.fade_in_time = base::TimeDelta(); + focus_animation_info_.fade_out_time = base::TimeDelta::FromHours(1); + caret_animation_info_.fade_in_time = base::TimeDelta(); + caret_animation_info_.fade_out_time = base::TimeDelta::FromHours(1); +} + +void AccessibilityFocusRingController::RectsToRings( + const std::vector<gfx::Rect>& src_rects, + std::vector<AccessibilityFocusRing>* rings) const { + if (src_rects.empty()) + return; + + // Give all of the rects a margin. + std::vector<gfx::Rect> rects; + rects.resize(src_rects.size()); + for (size_t i = 0; i < src_rects.size(); ++i) { + rects[i] = src_rects[i]; + rects[i].Inset(-GetMargin(), -GetMargin()); + } + + // Split the rects into contiguous regions. + std::vector<Region> regions; + regions.push_back(Region(rects[0])); + for (size_t i = 1; i < rects.size(); ++i) { + bool found = false; + for (size_t j = 0; j < regions.size(); ++j) { + if (Intersects(rects[i], regions[j].bounds)) { + regions[j].rects.push_back(rects[i]); + regions[j].bounds.Union(rects[i]); + found = true; + } + } + if (!found) { + regions.push_back(Region(rects[i])); + } + } + + // Keep merging regions that intersect. + // TODO(dmazzoni): reduce the worst-case complexity! This appears like + // it could be O(n^3), make sure it's not in practice. + bool merged; + do { + merged = false; + for (size_t i = 0; i < regions.size() - 1 && !merged; ++i) { + for (size_t j = i + 1; j < regions.size() && !merged; ++j) { + if (Intersects(regions[i].bounds, regions[j].bounds)) { + regions[i].rects.insert(regions[i].rects.end(), + regions[j].rects.begin(), + regions[j].rects.end()); + regions[i].bounds.Union(regions[j].bounds); + regions.erase(regions.begin() + j); + merged = true; + } + } + } + } while (merged); + + for (size_t i = 0; i < regions.size(); ++i) { + std::sort(regions[i].rects.begin(), regions[i].rects.end()); + rings->push_back(RingFromSortedRects(regions[i].rects)); + } +} + +int AccessibilityFocusRingController::GetMargin() const { + return kAccessibilityFocusRingMargin; +} + +void AccessibilityFocusRingController::GetColorAndOpacityFromColor( + SkColor color, + float default_opacity, + SkColor* result_color, + float* result_opacity) { + int alpha = SkColorGetA(color); + if (alpha == 0xFF) { + *result_opacity = default_opacity; + } else { + *result_opacity = SkColor4f::FromColor(color).fA; + } + *result_color = SkColorSetA(color, 0xFF); +} + +// Given a vector of rects that all overlap, already sorted from top to bottom +// and left to right, split them into three shapes covering the top, middle, +// and bottom of a "paragraph shape". +// +// Input: +// +// +---+---+ +// | 1 | 2 | +// +---------------------+---+---+ +// | 3 | +// +--------+---------------+----+ +// | 4 | 5 | +// +--------+---------------+--+ +// | 6 | +// +---------+-----------------+ +// | 7 | +// +---------+ +// +// Output: +// +// +-------+ +// | Top | +// +---------------------+-------+ +// | | +// | | +// | Middle | +// | | +// | | +// +---------+-------------------+ +// | Bottom | +// +---------+ +// +// When there's no clear "top" or "bottom" segment, split the overall rect +// evenly so that some of the area still fits into the "top" and "bottom" +// segments. +void AccessibilityFocusRingController::SplitIntoParagraphShape( + const std::vector<gfx::Rect>& rects, + gfx::Rect* top, + gfx::Rect* middle, + gfx::Rect* bottom) const { + size_t n = rects.size(); + + // Figure out how many rects belong in the top portion. + gfx::Rect top_rect = rects[0]; + int top_middle = (top_rect.y() + top_rect.bottom()) / 2; + size_t top_count = 1; + while (top_count < n && rects[top_count].y() < top_middle) { + top_rect.Union(rects[top_count]); + top_middle = (top_rect.y() + top_rect.bottom()) / 2; + top_count++; + } + + // Figure out how many rects belong in the bottom portion. + gfx::Rect bottom_rect = rects[n - 1]; + int bottom_middle = (bottom_rect.y() + bottom_rect.bottom()) / 2; + size_t bottom_count = std::min(static_cast<size_t>(1), n - top_count); + while (bottom_count + top_count < n && + rects[n - bottom_count - 1].bottom() > bottom_middle) { + bottom_rect.Union(rects[n - bottom_count - 1]); + bottom_middle = (bottom_rect.y() + bottom_rect.bottom()) / 2; + bottom_count++; + } + + // Whatever's left goes to the middle rect, but if there's no middle or + // bottom rect, split the existing rects evenly to make one. + gfx::Rect middle_rect; + if (top_count + bottom_count < n) { + middle_rect = rects[top_count]; + for (size_t i = top_count + 1; i < n - bottom_count; i++) + middle_rect.Union(rects[i]); + } else if (bottom_count > 0) { + gfx::Rect enclosing_rect = top_rect; + enclosing_rect.Union(bottom_rect); + int middle_top = (top_rect.y() + top_rect.bottom() * 2) / 3; + int middle_bottom = (bottom_rect.y() * 2 + bottom_rect.bottom()) / 3; + top_rect.set_height(middle_top - top_rect.y()); + bottom_rect.set_height(bottom_rect.bottom() - middle_bottom); + bottom_rect.set_y(middle_bottom); + middle_rect = gfx::Rect(enclosing_rect.x(), middle_top, + enclosing_rect.width(), middle_bottom - middle_top); + } else { + int middle_top = (top_rect.y() * 2 + top_rect.bottom()) / 3; + int middle_bottom = (top_rect.y() + top_rect.bottom() * 2) / 3; + middle_rect = gfx::Rect(top_rect.x(), middle_top, top_rect.width(), + middle_bottom - middle_top); + bottom_rect = gfx::Rect(top_rect.x(), middle_bottom, top_rect.width(), + top_rect.bottom() - middle_bottom); + top_rect.set_height(middle_top - top_rect.y()); + } + + if (middle_rect.y() > top_rect.bottom()) { + middle_rect.set_height(middle_rect.height() + middle_rect.y() - + top_rect.bottom()); + middle_rect.set_y(top_rect.bottom()); + } + + if (middle_rect.bottom() < bottom_rect.y()) { + middle_rect.set_height(bottom_rect.y() - middle_rect.y()); + } + + *top = top_rect; + *middle = middle_rect; + *bottom = bottom_rect; +} + +AccessibilityFocusRing AccessibilityFocusRingController::RingFromSortedRects( + const std::vector<gfx::Rect>& rects) const { + if (rects.size() == 1) + return AccessibilityFocusRing::CreateWithRect(rects[0], GetMargin()); + + gfx::Rect top; + gfx::Rect middle; + gfx::Rect bottom; + SplitIntoParagraphShape(rects, &top, &middle, &bottom); + + return AccessibilityFocusRing::CreateWithParagraphShape(top, middle, bottom, + GetMargin()); +} + +bool AccessibilityFocusRingController::Intersects(const gfx::Rect& r1, + const gfx::Rect& r2) const { + int slop = GetMargin(); + return (r2.x() <= r1.right() + slop && r2.right() >= r1.x() - slop && + r2.y() <= r1.bottom() + slop && r2.bottom() >= r1.y() - slop); +} + +void AccessibilityFocusRingController::OnDeviceScaleFactorChanged() { + UpdateFocusRingsFromFocusRects(); +} + +void AccessibilityFocusRingController::OnAnimationStep( + base::TimeTicks timestamp) { + if (!focus_rings_.empty() && focus_layers_[0]->CanAnimate()) + AnimateFocusRings(timestamp); + + if (caret_layer_ && caret_layer_->CanAnimate()) + AnimateCaretRing(timestamp); +} + +void AccessibilityFocusRingController::AnimateFocusRings( + base::TimeTicks timestamp) { + CHECK(!focus_rings_.empty()); + CHECK(!focus_layers_.empty()); + CHECK(focus_layers_[0]); + + // It's quite possible for the first 1 or 2 animation frames to be + // for a timestamp that's earlier than the time we received the + // focus change, so we just treat those as a delta of zero. + if (timestamp < focus_animation_info_.change_time) + timestamp = focus_animation_info_.change_time; + + if (focus_ring_behavior_ == FocusRingBehavior::PERSIST_FOCUS_RING) { + base::TimeDelta delta = timestamp - focus_animation_info_.change_time; + base::TimeDelta transition_time = + base::TimeDelta::FromMilliseconds(kTransitionTimeMilliseconds); + if (delta >= transition_time) { + focus_layers_[0]->Set(focus_rings_[0]); + return; + } + + double fraction = delta.InSecondsF() / transition_time.InSecondsF(); + + // Ease-in effect. + fraction = pow(fraction, 0.3); + + // Handle corner case where we're animating but we don't have previous + // rings. + if (previous_focus_rings_.empty()) + previous_focus_rings_ = focus_rings_; + + focus_layers_[0]->Set(AccessibilityFocusRing::Interpolate( + previous_focus_rings_[0], focus_rings_[0], fraction)); + } else { + ComputeOpacity(&focus_animation_info_, timestamp); + for (size_t i = 0; i < focus_layers_.size(); ++i) + focus_layers_[i]->SetOpacity(focus_animation_info_.opacity); + } +} + +void AccessibilityFocusRingController::ComputeOpacity( + AccessibilityFocusRingController::LayerAnimationInfo* animation_info, + base::TimeTicks timestamp) { + // It's quite possible for the first 1 or 2 animation frames to be + // for a timestamp that's earlier than the time we received the + // mouse movement, so we just treat those as a delta of zero. + if (timestamp < animation_info->start_time) + timestamp = animation_info->start_time; + + base::TimeDelta start_delta = timestamp - animation_info->start_time; + base::TimeDelta change_delta = timestamp - animation_info->change_time; + base::TimeDelta fade_in_time = animation_info->fade_in_time; + base::TimeDelta fade_out_time = animation_info->fade_out_time; + + if (change_delta > fade_in_time + fade_out_time) { + animation_info->opacity = 0.0; + return; + } + + float opacity; + if (start_delta < fade_in_time) { + opacity = start_delta.InSecondsF() / fade_in_time.InSecondsF(); + } else { + opacity = 1.0 - (change_delta.InSecondsF() / + (fade_in_time + fade_out_time).InSecondsF()); + } + + // Layer::SetOpacity will throw an error if we're not within 0...1. + opacity = std::min(std::max(opacity, 0.0f), 1.0f); + + animation_info->opacity = opacity; +} + +void AccessibilityFocusRingController::AnimateCaretRing( + base::TimeTicks timestamp) { + CHECK(caret_layer_); + + ComputeOpacity(&caret_animation_info_, timestamp); + if (caret_animation_info_.opacity == 0.0) { + caret_layer_.reset(); + return; + } + caret_layer_->SetOpacity(caret_animation_info_.opacity); +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring_controller.h b/chromecast/graphics/accessibility/accessibility_focus_ring_controller.h new file mode 100644 index 0000000..30459d08 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring_controller.h
@@ -0,0 +1,137 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_ + +#include <memory> +#include <vector> + +#include "base/bind.h" +#include "base/macros.h" +#include "base/optional.h" +#include "base/time/time.h" +#include "chromecast/graphics/accessibility/accessibility_focus_ring.h" +#include "chromecast/graphics/accessibility/accessibility_layer.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/gfx/geometry/rect.h" + +namespace aura { +class Window; +} // namespace aura + +namespace chromecast { + +class AccessibilityCursorRingLayer; +class AccessibilityFocusRingLayer; +class AccessibilityHighlightLayer; + +// AccessibilityFocusRingController handles drawing custom rings around +// the focused object, cursor, and/or caret for accessibility. +class AccessibilityFocusRingController : public AccessibilityLayerDelegate { + public: + explicit AccessibilityFocusRingController(aura::Window* root_window); + ~AccessibilityFocusRingController() override; + + void SetFocusRingColor(SkColor color); + void ResetFocusRingColor(); + void SetFocusRing(const std::vector<gfx::Rect>& rects, + FocusRingBehavior focus_ring_behavior); + void HideFocusRing(); + void SetHighlights(const std::vector<gfx::Rect>& rects, SkColor color); + void HideHighlights(); + + // Draw a ring around the text caret. It fades out automatically. + void SetCaretRing(const gfx::Point& location); + void HideCaretRing(); + + // Don't fade in / out, for testing. + void SetNoFadeForTesting(); + + AccessibilityCursorRingLayer* caret_layer_for_testing() { + return caret_layer_.get(); + } + const std::vector<std::unique_ptr<AccessibilityFocusRingLayer>>& + focus_ring_layers_for_testing() { + return focus_layers_; + } + + protected: + // Given an unordered vector of bounding rectangles that cover everything + // that currently has focus, populate a vector of one or more + // AccessibilityFocusRings that surround the rectangles. Adjacent or + // overlapping rectangles are combined first. This function is protected + // so it can be unit-tested. + void RectsToRings(const std::vector<gfx::Rect>& rects, + std::vector<AccessibilityFocusRing>* rings) const; + + virtual int GetMargin() const; + + // Breaks an SkColor into its opacity and color. If the opacity is + // not set (or is 0xFF), uses the |default_opacity| instead. + // Visible for testing. + static void GetColorAndOpacityFromColor(SkColor color, + float default_opacity, + SkColor* result_color, + float* result_opacity); + + private: + // AccessibilityLayerDelegate overrides. + void OnDeviceScaleFactorChanged() override; + void OnAnimationStep(base::TimeTicks timestamp) override; + + void UpdateFocusRingsFromFocusRects(); + void UpdateHighlightFromHighlightRects(); + + void AnimateFocusRings(base::TimeTicks timestamp); + void AnimateCaretRing(base::TimeTicks timestamp); + + AccessibilityFocusRing RingFromSortedRects( + const std::vector<gfx::Rect>& rects) const; + void SplitIntoParagraphShape(const std::vector<gfx::Rect>& rects, + gfx::Rect* top, + gfx::Rect* middle, + gfx::Rect* bottom) const; + bool Intersects(const gfx::Rect& r1, const gfx::Rect& r2) const; + + struct LayerAnimationInfo { + base::TimeTicks start_time; + base::TimeTicks change_time; + base::TimeDelta fade_in_time; + base::TimeDelta fade_out_time; + float opacity = 0; + bool smooth = false; + }; + void OnLayerChange(LayerAnimationInfo* animation_info); + void ComputeOpacity(LayerAnimationInfo* animation_info, + base::TimeTicks timestamp); + + aura::Window* root_window_; + LayerAnimationInfo focus_animation_info_; + std::vector<gfx::Rect> focus_rects_; + std::vector<AccessibilityFocusRing> previous_focus_rings_; + std::vector<AccessibilityFocusRing> focus_rings_; + std::vector<std::unique_ptr<AccessibilityFocusRingLayer>> focus_layers_; + FocusRingBehavior focus_ring_behavior_ = + FocusRingBehavior::FADE_OUT_FOCUS_RING; + base::Optional<SkColor> focus_ring_color_; + + LayerAnimationInfo caret_animation_info_; + gfx::Point caret_location_; + std::unique_ptr<AccessibilityCursorRingLayer> caret_layer_; + + std::vector<gfx::Rect> highlight_rects_; + std::unique_ptr<AccessibilityHighlightLayer> highlight_layer_; + SkColor highlight_color_ = SK_ColorBLACK; + float highlight_opacity_ = 0.f; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityFocusRingController); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring_controller_unittest.cc b/chromecast/graphics/accessibility/accessibility_focus_ring_controller_unittest.cc new file mode 100644 index 0000000..10c25838 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring_controller_unittest.cc
@@ -0,0 +1,196 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_focus_ring_controller.h" +#include "chromecast/graphics/accessibility/accessibility_cursor_ring_layer.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/aura/test/aura_test_base.h" +#include "ui/aura/test/test_window_delegate.h" +#include "ui/aura/window.h" +#include "ui/base/ime/dummy_text_input_client.h" +#include "ui/events/event.h" +#include "ui/events/event_utils.h" + +namespace chromecast { + +namespace test { + +class CastTestWindowDelegate : public aura::test::TestWindowDelegate { + public: + CastTestWindowDelegate() : key_code_(ui::VKEY_UNKNOWN) {} + ~CastTestWindowDelegate() override {} + + // Overridden from TestWindowDelegate: + void OnKeyEvent(ui::KeyEvent* event) override { + key_code_ = event->key_code(); + } + + ui::KeyboardCode key_code() { return key_code_; } + + private: + ui::KeyboardCode key_code_; + + DISALLOW_COPY_AND_ASSIGN(CastTestWindowDelegate); +}; + +class TestableAccessibilityFocusRingController + : public AccessibilityFocusRingController { + public: + explicit TestableAccessibilityFocusRingController(aura::Window* root_window) + : AccessibilityFocusRingController(root_window) { + // By default use an easy round number for testing. + margin_ = 10; + } + ~TestableAccessibilityFocusRingController() override = default; + + void RectsToRings(const std::vector<gfx::Rect>& rects, + std::vector<AccessibilityFocusRing>* rings) const { + AccessibilityFocusRingController::RectsToRings(rects, rings); + } + + int GetMargin() const override { return margin_; } + + static void GetColorAndOpacityFromColor(SkColor color, + float default_opacity, + SkColor* result_color, + float* result_opacity) { + AccessibilityFocusRingController::GetColorAndOpacityFromColor( + color, default_opacity, result_color, result_opacity); + } + + private: + int margin_; +}; + +class AccessibilityFocusRingControllerTest : public aura::test::AuraTestBase { + public: + AccessibilityFocusRingControllerTest() + : root_window_(&test_window_delegate_) { + root_window_.Init(ui::LAYER_NOT_DRAWN); + controller_ = std::make_unique<TestableAccessibilityFocusRingController>( + &root_window_); + } + + ~AccessibilityFocusRingControllerTest() override = default; + + protected: + gfx::Rect AddMargin(gfx::Rect r) { + r.Inset(-controller_->GetMargin(), -controller_->GetMargin()); + return r; + } + + CastTestWindowDelegate test_window_delegate_; + aura::Window root_window_; + + std::unique_ptr<TestableAccessibilityFocusRingController> controller_; +}; + +TEST_F(AccessibilityFocusRingControllerTest, RectsToRingsSimpleBoundsCheck) { + // Easy sanity check. Given a single rectangle, make sure we get back + // a focus ring with the same bounds. + std::vector<gfx::Rect> rects; + rects.push_back(gfx::Rect(10, 30, 70, 150)); + std::vector<AccessibilityFocusRing> rings; + controller_->RectsToRings(rects, &rings); + ASSERT_EQ(1U, rings.size()); + ASSERT_EQ(AddMargin(rects[0]), rings[0].GetBounds()); +} + +TEST_F(AccessibilityFocusRingControllerTest, RectsToRingsVerticalStack) { + // Given two rects, one on top of each other, we should get back a + // focus ring that surrounds them both. + std::vector<gfx::Rect> rects; + rects.push_back(gfx::Rect(10, 10, 60, 30)); + rects.push_back(gfx::Rect(10, 40, 60, 30)); + std::vector<AccessibilityFocusRing> rings; + controller_->RectsToRings(rects, &rings); + ASSERT_EQ(1U, rings.size()); + ASSERT_EQ(AddMargin(gfx::Rect(10, 10, 60, 60)), rings[0].GetBounds()); +} + +TEST_F(AccessibilityFocusRingControllerTest, RectsToRingsHorizontalStack) { + // Given two rects, one next to the other horizontally, we should get back a + // focus ring that surrounds them both. + std::vector<gfx::Rect> rects; + rects.push_back(gfx::Rect(10, 10, 60, 30)); + rects.push_back(gfx::Rect(70, 10, 60, 30)); + std::vector<AccessibilityFocusRing> rings; + controller_->RectsToRings(rects, &rings); + ASSERT_EQ(1U, rings.size()); + ASSERT_EQ(AddMargin(gfx::Rect(10, 10, 120, 30)), rings[0].GetBounds()); +} + +TEST_F(AccessibilityFocusRingControllerTest, RectsToRingsParagraphShape) { + // Given a simple paragraph shape, make sure we get something that + // outlines it correctly. + std::vector<gfx::Rect> rects; + rects.push_back(gfx::Rect(10, 10, 180, 80)); + rects.push_back(gfx::Rect(10, 110, 580, 280)); + rects.push_back(gfx::Rect(410, 410, 180, 80)); + std::vector<AccessibilityFocusRing> rings; + controller_->RectsToRings(rects, &rings); + ASSERT_EQ(1U, rings.size()); + EXPECT_EQ(gfx::Rect(0, 0, 600, 500), rings[0].GetBounds()); + + const gfx::Point* points = rings[0].points; + EXPECT_EQ(gfx::Point(0, 90), points[0]); + EXPECT_EQ(gfx::Point(0, 10), points[1]); + EXPECT_EQ(gfx::Point(0, 0), points[2]); + EXPECT_EQ(gfx::Point(10, 0), points[3]); + EXPECT_EQ(gfx::Point(190, 0), points[4]); + EXPECT_EQ(gfx::Point(200, 0), points[5]); + EXPECT_EQ(gfx::Point(200, 10), points[6]); + EXPECT_EQ(gfx::Point(200, 90), points[7]); + EXPECT_EQ(gfx::Point(200, 100), points[8]); + EXPECT_EQ(gfx::Point(210, 100), points[9]); + EXPECT_EQ(gfx::Point(590, 100), points[10]); + EXPECT_EQ(gfx::Point(600, 100), points[11]); + EXPECT_EQ(gfx::Point(600, 110), points[12]); + EXPECT_EQ(gfx::Point(600, 390), points[13]); + EXPECT_EQ(gfx::Point(600, 400), points[14]); + EXPECT_EQ(gfx::Point(600, 400), points[15]); + EXPECT_EQ(gfx::Point(600, 400), points[16]); + EXPECT_EQ(gfx::Point(600, 400), points[17]); + EXPECT_EQ(gfx::Point(600, 410), points[18]); + EXPECT_EQ(gfx::Point(600, 490), points[19]); + EXPECT_EQ(gfx::Point(600, 500), points[20]); + EXPECT_EQ(gfx::Point(590, 500), points[21]); + EXPECT_EQ(gfx::Point(410, 500), points[22]); + EXPECT_EQ(gfx::Point(400, 500), points[23]); + EXPECT_EQ(gfx::Point(400, 490), points[24]); + EXPECT_EQ(gfx::Point(400, 410), points[25]); + EXPECT_EQ(gfx::Point(400, 400), points[26]); + EXPECT_EQ(gfx::Point(390, 400), points[27]); + EXPECT_EQ(gfx::Point(10, 400), points[28]); + EXPECT_EQ(gfx::Point(0, 400), points[29]); + EXPECT_EQ(gfx::Point(0, 390), points[30]); + EXPECT_EQ(gfx::Point(0, 110), points[31]); + EXPECT_EQ(gfx::Point(0, 100), points[32]); + EXPECT_EQ(gfx::Point(0, 100), points[33]); + EXPECT_EQ(gfx::Point(0, 100), points[34]); + EXPECT_EQ(gfx::Point(0, 100), points[35]); +} + +TEST_F(AccessibilityFocusRingControllerTest, HighlightColorCalculation) { + SkColor without_alpha = SkColorSetARGB(0xFF, 0x42, 0x42, 0x42); + SkColor with_alpha = SkColorSetARGB(0x3D, 0x14, 0x15, 0x92); + + float default_opacity = 0.3f; + SkColor result_color = SK_ColorWHITE; + float result_opacity = 0.0f; + + TestableAccessibilityFocusRingController::GetColorAndOpacityFromColor( + without_alpha, default_opacity, &result_color, &result_opacity); + EXPECT_EQ(default_opacity, result_opacity); + + TestableAccessibilityFocusRingController::GetColorAndOpacityFromColor( + with_alpha, default_opacity, &result_color, &result_opacity); + EXPECT_NEAR(0.239f, result_opacity, .001); +} + +} // namespace test +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring_layer.cc b/chromecast/graphics/accessibility/accessibility_focus_ring_layer.cc new file mode 100644 index 0000000..413fbeda --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring_layer.cc
@@ -0,0 +1,141 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_focus_ring_layer.h" + +#include "base/bind.h" +#include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkPath.h" +#include "ui/aura/window.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/canvas.h" +#include "ui/wm/core/coordinate_conversion.h" + +namespace chromecast { + +namespace { + +// The number of pixels in the color gradient that fades to transparent. +const int kGradientWidth = 6; + +// The color of the focus ring. In the future this might be a parameter. +const int kFocusRingColorRed = 247; +const int kFocusRingColorGreen = 152; +const int kFocusRingColorBlue = 58; + +int sign(int x) { + return ((x > 0) ? 1 : (x == 0) ? 0 : -1); +} + +SkPath MakePath(const AccessibilityFocusRing& input_ring, + int outset, + const gfx::Vector2d& offset) { + AccessibilityFocusRing ring = input_ring; + + for (int i = 0; i < 36; i++) { + gfx::Point p = input_ring.points[i]; + gfx::Point prev; + gfx::Point next; + + int prev_index = i; + do { + prev_index = (prev_index + 35) % 36; + prev = input_ring.points[prev_index]; + } while (prev.x() == p.x() && prev.y() == p.y() && prev_index != i); + + int next_index = i; + do { + next_index = (next_index + 1) % 36; + next = input_ring.points[next_index]; + } while (next.x() == p.x() && next.y() == p.y() && next_index != i); + + gfx::Point delta0 = + gfx::Point(sign(p.x() - prev.x()), sign(p.y() - prev.y())); + gfx::Point delta1 = + gfx::Point(sign(next.x() - p.x()), sign(next.y() - p.y())); + + if (delta0.x() == delta1.x() && delta0.y() == delta1.y()) { + ring.points[i] = + gfx::Point(input_ring.points[i].x() + outset * delta0.y(), + input_ring.points[i].y() - outset * delta0.x()); + } else { + ring.points[i] = gfx::Point( + input_ring.points[i].x() + ((i + 13) % 36 >= 18 ? outset : -outset), + input_ring.points[i].y() + ((i + 4) % 36 >= 18 ? outset : -outset)); + } + } + + SkPath path; + gfx::Point p0 = ring.points[0] - offset; + path.moveTo(SkIntToScalar(p0.x()), SkIntToScalar(p0.y())); + for (int i = 0; i < 12; i++) { + int index0 = ((3 * i) + 1) % 36; + int index1 = ((3 * i) + 2) % 36; + int index2 = ((3 * i) + 3) % 36; + gfx::Point p0 = ring.points[index0] - offset; + gfx::Point p1 = ring.points[index1] - offset; + gfx::Point p2 = ring.points[index2] - offset; + path.lineTo(SkIntToScalar(p0.x()), SkIntToScalar(p0.y())); + path.quadTo(SkIntToScalar(p1.x()), SkIntToScalar(p1.y()), + SkIntToScalar(p2.x()), SkIntToScalar(p2.y())); + } + + return path; +} + +} // namespace + +AccessibilityFocusRingLayer::AccessibilityFocusRingLayer( + aura::Window* root_window, + AccessibilityLayerDelegate* delegate) + : FocusRingLayer(root_window, delegate) {} + +AccessibilityFocusRingLayer::~AccessibilityFocusRingLayer() = default; + +void AccessibilityFocusRingLayer::Set(const AccessibilityFocusRing& ring) { + ring_ = ring; + + gfx::Rect bounds = ring.GetBounds(); + int inset = kGradientWidth; + bounds.Inset(-inset, -inset, -inset, -inset); + + DCHECK(root_window()); + display::Display display = + display::Screen::GetScreen()->GetDisplayMatching(bounds); + ::wm::ConvertRectFromScreen(root_window(), &bounds); + CreateOrUpdateLayer(root_window(), "AccessibilityFocusRing", bounds); +} + +void AccessibilityFocusRingLayer::OnPaintLayer( + const ui::PaintContext& context) { + ui::PaintRecorder recorder(context, layer()->size()); + + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setStyle(cc::PaintFlags::kStroke_Style); + flags.setStrokeWidth(2); + + SkColor base_color = + has_custom_color() + ? custom_color() + : SkColorSetARGB(255, kFocusRingColorRed, kFocusRingColorGreen, + kFocusRingColorBlue); + + SkPath path; + gfx::Vector2d offset = layer()->bounds().OffsetFromOrigin(); + const int w = kGradientWidth; + for (int i = 0; i < w; ++i) { + flags.setColor(SkColorSetA(base_color, 255 * (w - i) * (w - i) / (w * w))); + path = MakePath(ring_, i, offset); + recorder.canvas()->DrawPath(path, flags); + } +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_focus_ring_layer.h b/chromecast/graphics/accessibility/accessibility_focus_ring_layer.h new file mode 100644 index 0000000..44c0142c --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_focus_ring_layer.h
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_LAYER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_LAYER_H_ + +#include "chromecast/graphics/accessibility/accessibility_focus_ring.h" +#include "chromecast/graphics/accessibility/focus_ring_layer.h" + +#include "base/macros.h" + +namespace chromecast { + +// A subclass of FocusRingLayer intended for use by ChromeVox; it supports +// nonrectangular focus rings in order to highlight groups of elements or +// a range of text on a page. +class AccessibilityFocusRingLayer : public FocusRingLayer { + public: + AccessibilityFocusRingLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate); + ~AccessibilityFocusRingLayer() override; + + // Create the layer and update its bounds and position in the hierarchy. + void Set(const AccessibilityFocusRing& ring); + + private: + // ui::LayerDelegate overrides: + void OnPaintLayer(const ui::PaintContext& context) override; + + // The outline of the current focus ring. + AccessibilityFocusRing ring_; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityFocusRingLayer); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_FOCUS_RING_LAYER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_highlight_layer.cc b/chromecast/graphics/accessibility/accessibility_highlight_layer.cc new file mode 100644 index 0000000..7583af9e --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_highlight_layer.cc
@@ -0,0 +1,86 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_highlight_layer.h" + +#include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkPath.h" +#include "ui/aura/window.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/wm/core/coordinate_conversion.h" + +namespace chromecast { + +namespace { + +// Extra margin to add to the layer in DIP. +const int kLayerMargin = 1; + +} // namespace + +AccessibilityHighlightLayer::AccessibilityHighlightLayer( + aura::Window* root_window, + AccessibilityLayerDelegate* delegate) + : AccessibilityLayer(root_window, delegate) {} + +AccessibilityHighlightLayer::~AccessibilityHighlightLayer() = default; + +void AccessibilityHighlightLayer::Set(const std::vector<gfx::Rect>& rects, + SkColor color) { + rects_ = rects; + highlight_color_ = color; + + // Calculate the bounds of all the rects together, that represents + // the bounds of the full layer. + gfx::Rect bounds; + for (const gfx::Rect rect : rects_) { + bounds.Union(rect); + } + + int inset = kLayerMargin; + bounds.Inset(-inset, -inset, -inset, -inset); + + display::Display display = + display::Screen::GetScreen()->GetDisplayMatching(bounds); + ::wm::ConvertRectFromScreen(root_window(), &bounds); + CreateOrUpdateLayer(root_window(), "AccessibilityHighlight", bounds); +} + +bool AccessibilityHighlightLayer::CanAnimate() const { + return false; +} + +int AccessibilityHighlightLayer::GetInset() const { + return kLayerMargin; +} + +void AccessibilityHighlightLayer::OnPaintLayer( + const ui::PaintContext& context) { + ui::PaintRecorder recorder(context, layer_->size()); + + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setStyle(cc::PaintFlags::kFill_Style); + flags.setColor(highlight_color_); + + gfx::Rect r = layer_->bounds(); + + for (gfx::Rect rect : rects_) { + // Offset the rect based on where the layer is on the screen. + rect.Offset(-r.OffsetFromOrigin()); + // Add a little bit of margin to the drawn box. + rect.Inset(-kLayerMargin, -kLayerMargin, -kLayerMargin, -kLayerMargin); + recorder.canvas()->DrawRect(rect, flags); + } +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_highlight_layer.h b/chromecast/graphics/accessibility/accessibility_highlight_layer.h new file mode 100644 index 0000000..a3d4b53 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_highlight_layer.h
@@ -0,0 +1,50 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_HIGHLIGHT_LAYER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_HIGHLIGHT_LAYER_H_ + +#include <vector> + +#include "chromecast/graphics/accessibility/accessibility_layer.h" + +#include "base/macros.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/gfx/geometry/rect.h" + +namespace chromecast { + +// A subclass of LayerDelegate that can highlight regions on the screen. +class AccessibilityHighlightLayer : public AccessibilityLayer { + public: + explicit AccessibilityHighlightLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate); + ~AccessibilityHighlightLayer() override; + + // Create the layer and update its bounds and position in the hierarchy. + void Set(const std::vector<gfx::Rect>& rects, SkColor color); + + // AccessibilityLayer overrides: + bool CanAnimate() const override; + int GetInset() const override; + + private: + // ui::LayerDelegate overrides: + void OnPaintLayer(const ui::PaintContext& context) override; + + // The current rects to be highlighted. + std::vector<gfx::Rect> rects_; + + // The highlight color. + SkColor highlight_color_; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityHighlightLayer); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_HIGHLIGHT_LAYER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_layer.cc b/chromecast/graphics/accessibility/accessibility_layer.cc new file mode 100644 index 0000000..d0991a0 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_layer.cc
@@ -0,0 +1,106 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/accessibility_layer.h" + +#include "ui/aura/window.h" +#include "ui/compositor/compositor_animation_observer.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/canvas.h" + +namespace ui { +class Compositor; +} + +namespace chromecast { + +AccessibilityLayer::AccessibilityLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate) + : root_window_(root_window), delegate_(delegate) { + DCHECK(root_window); + DCHECK(delegate); +} + +AccessibilityLayer::~AccessibilityLayer() { + if (compositor_ && compositor_->HasAnimationObserver(this)) + compositor_->RemoveAnimationObserver(this); +} + +void AccessibilityLayer::Set(aura::Window* root_window, + const gfx::Rect& bounds) { + DCHECK(root_window); + layer_rect_ = bounds; + gfx::Rect layer_bounds = bounds; + int inset = -(GetInset()); + layer_bounds.Inset(inset, inset, inset, inset); + CreateOrUpdateLayer(root_window, "AccessibilityLayer", layer_bounds); +} + +void AccessibilityLayer::SetOpacity(float opacity) { + // Clamp to 0. It's possible for floating-point math to produce opacity + // slightly less than 0. + layer_->SetOpacity(std::max(0.f, opacity)); +} + +void AccessibilityLayer::CreateOrUpdateLayer(aura::Window* root_window, + const char* layer_name, + const gfx::Rect& bounds) { + if (!layer_ || root_window != root_window_) { + root_window_ = root_window; + ui::Layer* root_layer = root_window->layer(); + layer_ = std::make_unique<ui::Layer>(ui::LAYER_TEXTURED); + layer_->set_name(layer_name); + layer_->set_delegate(this); + layer_->SetFillsBoundsOpaquely(false); + root_layer->Add(layer_.get()); + } + + // Keep moving it to the top in case new layers have been added + // since we created this layer. + layer_->parent()->StackAtTop(layer_.get()); + + layer_->SetBounds(bounds); + gfx::Rect layer_bounds(0, 0, bounds.width(), bounds.height()); + layer_->SchedulePaint(layer_bounds); + + if (CanAnimate()) { + // Update the animation observer. + display::Display display = + display::Screen::GetScreen()->GetDisplayMatching(bounds); + ui::Compositor* compositor = root_window->layer()->GetCompositor(); + if (compositor != compositor_) { + if (compositor_ && compositor_->HasAnimationObserver(this)) + compositor_->RemoveAnimationObserver(this); + compositor_ = compositor; + if (compositor_ && !compositor_->HasAnimationObserver(this)) + compositor_->AddAnimationObserver(this); + } + } +} + +void AccessibilityLayer::OnDeviceScaleFactorChanged( + float old_device_scale_factor, + float new_device_scale_factor) { + if (delegate_) + delegate_->OnDeviceScaleFactorChanged(); +} + +void AccessibilityLayer::OnAnimationStep(base::TimeTicks timestamp) { + delegate_->OnAnimationStep(timestamp); +} + +void AccessibilityLayer::OnCompositingShuttingDown(ui::Compositor* compositor) { + if (compositor == compositor_) { + compositor->RemoveAnimationObserver(this); + compositor_ = nullptr; + } +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_layer.h b/chromecast/graphics/accessibility/accessibility_layer.h new file mode 100644 index 0000000..c8348d4 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_layer.h
@@ -0,0 +1,105 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_LAYER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_LAYER_H_ + +#include <memory> + +#include "base/macros.h" +#include "base/time/time.h" +#include "ui/compositor/compositor_animation_observer.h" +#include "ui/compositor/layer_delegate.h" +#include "ui/gfx/geometry/rect.h" + +namespace aura { +class Window; +} + +namespace ui { +class Compositor; +class Layer; +} // namespace ui + +namespace chromecast { + +// A delegate interface implemented by the object that owns an +// AccessibilityLayer. +class AccessibilityLayerDelegate { + public: + virtual void OnDeviceScaleFactorChanged() = 0; + virtual void OnAnimationStep(base::TimeTicks timestamp) = 0; + + protected: + virtual ~AccessibilityLayerDelegate(){}; +}; + +// AccessibilityLayer manages a global always-on-top layer used to +// highlight or annotate UI elements for accessibility. +class AccessibilityLayer : public ui::LayerDelegate, + public ui::CompositorAnimationObserver { + public: + AccessibilityLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate); + ~AccessibilityLayer() override; + + // Move the accessibility layer to the given bounds in the coordinates of + // the given root window. + void Set(aura::Window* root_window, const gfx::Rect& bounds); + + // Set the layer's opacity. + void SetOpacity(float opacity); + + // Returns true if this layer is in a composited window with an + // animation observer. + virtual bool CanAnimate() const = 0; + + // Gets the inset for this layer in DIPs. This is used to increase + // the bounding box to provide space for any margins or padding. + virtual int GetInset() const = 0; + + ui::Layer* layer() { return layer_.get(); } + aura::Window* root_window() { return root_window_; } + + protected: + // Updates |root_window_| and creates |layer_| if it doesn't exist, + // or if the root window has changed. Moves the layer to the top if + // it wasn't there already. + void CreateOrUpdateLayer(aura::Window* root_window, + const char* layer_name, + const gfx::Rect& bounds); + + aura::Window* root_window_ = nullptr; + + // The current layer. + std::unique_ptr<ui::Layer> layer_; + + // The compositor associated with this layer. + ui::Compositor* compositor_ = nullptr; + + // The bounding rectangle of the focused object, in |root_window_| + // coordinates. + gfx::Rect layer_rect_; + + private: + // ui::LayerDelegate overrides: + void OnDeviceScaleFactorChanged(float old_device_scale_factor, + float new_device_scale_factor) override; + + // CompositorAnimationObserver overrides: + void OnAnimationStep(base::TimeTicks timestamp) override; + void OnCompositingShuttingDown(ui::Compositor* compositor) override; + + // The object that owns this layer. + AccessibilityLayerDelegate* delegate_; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityLayer); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_LAYER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_manager.cc b/chromecast/graphics/accessibility/accessibility_manager.cc new file mode 100644 index 0000000..215827a --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_manager.cc
@@ -0,0 +1,62 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/graphics/accessibility/accessibility_manager.h" + +#include "chromecast/graphics/accessibility/focus_ring_controller.h" + +namespace chromecast { + +AccessibilityManager::AccessibilityManager() {} +AccessibilityManager::~AccessibilityManager() {} + +void AccessibilityManager::Setup(aura::Window* root_window, + wm::ActivationClient* activation_client) { + focus_ring_controller_ = + std::make_unique<FocusRingController>(root_window, activation_client); + accessibility_focus_ring_controller_ = + std::make_unique<AccessibilityFocusRingController>(root_window); +} + +void AccessibilityManager::SetFocusRingColor(SkColor color) { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->SetFocusRingColor(color); +} + +void AccessibilityManager::ResetFocusRingColor() { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->ResetFocusRingColor(); +} + +void AccessibilityManager::SetFocusRing( + const std::vector<gfx::Rect>& rects_in_screen, + FocusRingBehavior focus_ring_behavior) { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->SetFocusRing(rects_in_screen, + focus_ring_behavior); +} + +void AccessibilityManager::HideFocusRing() { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->HideFocusRing(); +} + +void AccessibilityManager::SetHighlights( + const std::vector<gfx::Rect>& rects_in_screen, + SkColor color) { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->SetHighlights(rects_in_screen, color); +} + +void AccessibilityManager::HideHighlights() { + if (accessibility_focus_ring_controller_) + accessibility_focus_ring_controller_->HideHighlights(); +} + +void AccessibilityManager::SetTouchAccessibilityAnchorPoint( + const gfx::Point& anchor_point) { + // TODO(rdaum): Implement +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/accessibility_manager.h b/chromecast/graphics/accessibility/accessibility_manager.h new file mode 100644 index 0000000..4029f7f --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_manager.h
@@ -0,0 +1,71 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H_ + +#include <memory> +#include <vector> + +#include "chromecast/graphics/accessibility/accessibility_focus_ring_controller.h" + +namespace aura { +class Window; +} // namespace aura +namespace wm { +class ActivationClient; +} // namespace wm + +namespace chromecast { + +class FocusRingController; + +// Responsible for delegating chromecast browser process accessibility functions +// to the responsible party. +class AccessibilityManager { + public: + AccessibilityManager(); + ~AccessibilityManager(); + + void Setup(aura::Window* root_window, + wm::ActivationClient* activation_client); + + // Sets the focus ring color. + void SetFocusRingColor(SkColor color); + + // Resets the focus ring color back to the default. + void ResetFocusRingColor(); + + // Draws a focus ring around the given set of rects in screen coordinates. Use + // |focus_ring_behavior| to specify whether the focus ring should persist or + // fade out. + void SetFocusRing(const std::vector<gfx::Rect>& rects_in_screen, + FocusRingBehavior focus_ring_behavior); + + // Hides focus ring on screen. + void HideFocusRing(); + + // Draws a highlight at the given rects in screen coordinates. Rects may be + // overlapping and will be merged into one layer. This looks similar to + // selecting a region with the cursor, except it is drawn in the foreground + // rather than behind a text layer. + void SetHighlights(const std::vector<gfx::Rect>& rects_in_screen, + SkColor color); + + // Hides highlight on screen. + void HideHighlights(); + + // Update the touch exploration controller so that synthesized + // touch events are anchored at this point. + void SetTouchAccessibilityAnchorPoint(const gfx::Point& anchor_point); + + private: + std::unique_ptr<FocusRingController> focus_ring_controller_; + std::unique_ptr<AccessibilityFocusRingController> + accessibility_focus_ring_controller_; +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H_
diff --git a/chromecast/graphics/accessibility/accessibility_observer.h b/chromecast/graphics/accessibility/accessibility_observer.h new file mode 100644 index 0000000..f52a4c2 --- /dev/null +++ b/chromecast/graphics/accessibility/accessibility_observer.h
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_OBSERVER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_OBSERVER_H_ + +namespace chromecast { + +class AccessibilityObserver { + public: + virtual ~AccessibilityObserver() = default; + + // Called when any accessibility status changes. + virtual void OnAccessibilityStatusChanged() = 0; +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_ACCESSIBILITY_OBSERVER_H_
diff --git a/chromecast/graphics/accessibility/focus_ring_controller.cc b/chromecast/graphics/accessibility/focus_ring_controller.cc new file mode 100644 index 0000000..d0e965b --- /dev/null +++ b/chromecast/graphics/accessibility/focus_ring_controller.cc
@@ -0,0 +1,139 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/focus_ring_controller.h" + +#include "chromecast/graphics/accessibility/focus_ring_layer.h" +#include "ui/aura/window.h" +#include "ui/views/controls/button/label_button.h" +#include "ui/views/view.h" +#include "ui/views/widget/widget.h" +#include "ui/wm/public/activation_client.h" + +namespace chromecast { + +FocusRingController::FocusRingController( + aura::Window* root_window, + wm::ActivationClient* activation_client) + : root_window_(root_window), + activation_client_(activation_client), + visible_(false), + widget_(nullptr) { + DCHECK(root_window_); + DCHECK(activation_client); +} + +FocusRingController::~FocusRingController() { + SetVisible(false); +} + +void FocusRingController::SetVisible(bool visible) { + if (visible_ == visible) + return; + + visible_ = visible; + + if (visible_) { + views::WidgetFocusManager::GetInstance()->AddFocusChangeListener(this); + aura::Window* active_window = activation_client_->GetActiveWindow(); + if (active_window) + SetWidget(views::Widget::GetWidgetForNativeWindow(active_window)); + } else { + views::WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this); + SetWidget(NULL); + } +} + +void FocusRingController::UpdateFocusRing() { + views::View* view = NULL; + if (widget_ && widget_->GetFocusManager()) + view = widget_->GetFocusManager()->GetFocusedView(); + + // No focus ring if no focused view or the focused view covers the whole + // widget content area (such as RenderWidgetHostWidgetAura). + if (!view || view->ConvertRectToWidget(view->bounds()) == + widget_->GetContentsView()->bounds()) { + focus_ring_layer_.reset(); + return; + } + + gfx::Rect view_bounds = view->GetContentsBounds(); + + // Workarounds that attempts to pick a better bounds. + if (view->GetClassName() == views::LabelButton::kViewClassName) { + view_bounds = view->GetLocalBounds(); + view_bounds.Inset(2, 2, 2, 2); + } + + // Convert view bounds to widget/window coordinates. + view_bounds = view->ConvertRectToWidget(view_bounds); + + // Translate window coordinates to root window coordinates. + DCHECK(view->GetWidget()); + aura::Window* window = view->GetWidget()->GetNativeWindow(); + aura::Window* root_window = window->GetRootWindow(); + gfx::Point origin = view_bounds.origin(); + aura::Window::ConvertPointToTarget(window, root_window, &origin); + view_bounds.set_origin(origin); + + // Update the focus ring layer. + if (!focus_ring_layer_) + focus_ring_layer_.reset(new FocusRingLayer(root_window_, this)); + focus_ring_layer_->Set(root_window, view_bounds); +} + +void FocusRingController::OnDeviceScaleFactorChanged() { + UpdateFocusRing(); +} + +void FocusRingController::OnAnimationStep(base::TimeTicks timestamp) {} + +void FocusRingController::SetWidget(views::Widget* widget) { + if (widget_) { + widget_->RemoveObserver(this); + if (widget_->GetFocusManager()) + widget_->GetFocusManager()->RemoveFocusChangeListener(this); + } + + widget_ = widget; + + if (widget_) { + widget_->AddObserver(this); + if (widget_->GetFocusManager()) + widget_->GetFocusManager()->AddFocusChangeListener(this); + } + + UpdateFocusRing(); +} + +void FocusRingController::OnWidgetDestroying(views::Widget* widget) { + DCHECK_EQ(widget_, widget); + SetWidget(NULL); +} + +void FocusRingController::OnWidgetBoundsChanged(views::Widget* widget, + const gfx::Rect& new_bounds) { + DCHECK_EQ(widget_, widget); + UpdateFocusRing(); +} + +void FocusRingController::OnNativeFocusChanged(gfx::NativeView focused_now) { + views::Widget* widget = + focused_now ? views::Widget::GetWidgetForNativeWindow(focused_now) : NULL; + SetWidget(widget); +} + +void FocusRingController::OnWillChangeFocus(views::View* focused_before, + views::View* focused_now) {} + +void FocusRingController::OnDidChangeFocus(views::View* focused_before, + views::View* focused_now) { + DCHECK_EQ(focused_now, widget_->GetFocusManager()->GetFocusedView()); + UpdateFocusRing(); +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/focus_ring_controller.h b/chromecast/graphics/accessibility/focus_ring_controller.h new file mode 100644 index 0000000..cae253e4 --- /dev/null +++ b/chromecast/graphics/accessibility/focus_ring_controller.h
@@ -0,0 +1,83 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_ + +#include <memory> + +#include "base/macros.h" +#include "chromecast/graphics/accessibility/focus_ring_layer.h" +#include "ui/views/focus/focus_manager.h" +#include "ui/views/focus/widget_focus_manager.h" +#include "ui/views/widget/widget_observer.h" + +namespace wm { +class ActivationClient; +} // namespace wm + +namespace views { +class View; +class Widget; +} // namespace views + +namespace chromecast { + +// FocusRingController manages the focus ring around the focused view. It +// follows widget focus change and update the focus ring layer when the focused +// view of the widget changes. +class FocusRingController : public AccessibilityLayerDelegate, + public views::WidgetObserver, + public views::WidgetFocusChangeListener, + public views::FocusChangeListener { + public: + explicit FocusRingController(aura::Window* root_window, + wm::ActivationClient* activation_client); + ~FocusRingController() override; + + // Turns on/off the focus ring. + void SetVisible(bool visible); + + private: + // AccessibilityLayerDelegate. + void OnDeviceScaleFactorChanged() override; + void OnAnimationStep(base::TimeTicks timestamp) override; + + // Sets the focused |widget|. + void SetWidget(views::Widget* widget); + + // Updates the focus ring to the focused view of |widget_|. If |widget_| is + // NULL or has no focused view, removes the focus ring. Otherwise, draws it. + void UpdateFocusRing(); + + // views::WidgetObserver overrides: + void OnWidgetDestroying(views::Widget* widget) override; + void OnWidgetBoundsChanged(views::Widget* widget, + const gfx::Rect& new_bounds) override; + + // views::WidgetFocusChangeListener overrides: + void OnNativeFocusChanged(gfx::NativeView focused_now) override; + + // views::FocusChangeListener overrides: + void OnWillChangeFocus(views::View* focused_before, + views::View* focused_now) override; + void OnDidChangeFocus(views::View* focused_before, + views::View* focused_now) override; + + aura::Window* root_window_; + wm::ActivationClient* activation_client_; + + bool visible_; + views::Widget* widget_; + std::unique_ptr<FocusRingLayer> focus_ring_layer_; + + DISALLOW_COPY_AND_ASSIGN(FocusRingController); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_CONTROLLER_H_
diff --git a/chromecast/graphics/accessibility/focus_ring_layer.cc b/chromecast/graphics/accessibility/focus_ring_layer.cc new file mode 100644 index 0000000..e149e73de --- /dev/null +++ b/chromecast/graphics/accessibility/focus_ring_layer.cc
@@ -0,0 +1,81 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#include "chromecast/graphics/accessibility/focus_ring_layer.h" +#include "chromecast/graphics/accessibility/accessibility_layer.h" + +#include "ui/aura/window.h" +#include "ui/compositor/compositor_animation_observer.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/canvas.h" + +namespace ui { +class Compositor; +} + +namespace chromecast { + +namespace { + +const int kShadowRadius = 10; +const int kShadowAlpha = 90; +const SkColor kShadowColor = SkColorSetRGB(77, 144, 254); + +} // namespace + +FocusRingLayer::FocusRingLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate) + : AccessibilityLayer(root_window, delegate) {} + +FocusRingLayer::~FocusRingLayer() { + if (compositor_ && compositor_->HasAnimationObserver(this)) + compositor_->RemoveAnimationObserver(this); +} + +void FocusRingLayer::SetColor(SkColor color) { + custom_color_ = color; +} + +void FocusRingLayer::ResetColor() { + custom_color_.reset(); +} + +bool FocusRingLayer::CanAnimate() const { + return compositor_ && compositor_->HasAnimationObserver(this); +} + +int FocusRingLayer::GetInset() const { + return kShadowRadius + 2; +} + +void FocusRingLayer::OnPaintLayer(const ui::PaintContext& context) { + if (!root_window_ || layer_rect_.IsEmpty()) + return; + + ui::PaintRecorder recorder(context, layer_->size()); + + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setColor(custom_color_ ? *custom_color_ : kShadowColor); + flags.setStyle(cc::PaintFlags::kStroke_Style); + flags.setStrokeWidth(2); + + gfx::Rect bounds = layer_rect_ - layer_->bounds().OffsetFromOrigin(); + int r = kShadowRadius; + for (int i = 0; i < r; i++) { + // Fade out alpha quadratically. + flags.setAlpha((kShadowAlpha * (r - i) * (r - i)) / (r * r)); + gfx::Rect outsetRect = bounds; + outsetRect.Inset(-i, -i, -i, -i); + recorder.canvas()->DrawRect(outsetRect, flags); + } +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/focus_ring_layer.h b/chromecast/graphics/accessibility/focus_ring_layer.h new file mode 100644 index 0000000..06a5da7 --- /dev/null +++ b/chromecast/graphics/accessibility/focus_ring_layer.h
@@ -0,0 +1,54 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Copied with modifications from ash/accessibility, refactored for use in +// chromecast. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_LAYER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_LAYER_H_ + +#include <memory> + +#include "base/macros.h" +#include "base/optional.h" +#include "base/time/time.h" +#include "chromecast/graphics/accessibility/accessibility_layer.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/compositor/compositor_animation_observer.h" +#include "ui/compositor/layer_delegate.h" +#include "ui/gfx/geometry/rect.h" + +namespace chromecast { + +// FocusRingLayer draws a focus ring at a given global rectangle. +class FocusRingLayer : public AccessibilityLayer { + public: + explicit FocusRingLayer(aura::Window* root_window, + AccessibilityLayerDelegate* delegate); + ~FocusRingLayer() override; + + // AccessibilityLayer overrides: + bool CanAnimate() const override; + int GetInset() const override; + + // Set a custom color, or reset to the default. + void SetColor(SkColor color); + void ResetColor(); + + protected: + bool has_custom_color() { return custom_color_.has_value(); } + SkColor custom_color() { return *custom_color_; } + + private: + // ui::LayerDelegate overrides: + void OnPaintLayer(const ui::PaintContext& context) override; + + base::Optional<SkColor> custom_color_; + + DISALLOW_COPY_AND_ASSIGN(FocusRingLayer); +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_FOCUS_RING_LAYER_H_
diff --git a/chromecast/graphics/cast_views_test.cc b/chromecast/graphics/cast_views_test.cc index d833117..8c52ba59 100644 --- a/chromecast/graphics/cast_views_test.cc +++ b/chromecast/graphics/cast_views_test.cc
@@ -14,8 +14,8 @@ using CastViewsTest = aura::test::AuraTestBase; TEST_F(CastViewsTest, ProgressBar) { - std::unique_ptr<CastWindowManager> window_manager( - CastWindowManager::Create(true /* enable input */)); + std::unique_ptr<CastWindowManager> window_manager(CastWindowManager::Create( + true /* enable input */, nullptr /* accessibility manager */)); gfx::Rect bounds = window_manager->GetRootWindow()->bounds(); views::ProgressBar* progress_bar = new views::ProgressBar(bounds.height());
diff --git a/chromecast/graphics/cast_window_manager.h b/chromecast/graphics/cast_window_manager.h index 9dc03839..55ac649 100644 --- a/chromecast/graphics/cast_window_manager.h +++ b/chromecast/graphics/cast_window_manager.h
@@ -16,6 +16,10 @@ namespace chromecast { +#if defined(USE_AURA) +class AccessibilityManager; +#endif + class CastSideSwipeGestureHandlerInterface; // Chromecast's window-manager interface. @@ -37,8 +41,15 @@ TOP = MEDIA_INFO }; - // Creates the platform-specific CastWindowManager. +#if defined(USE_AURA) + // Creates the platform-specific CastWindowManager, configuring the given + // AccessibilityManager, if any. + static std::unique_ptr<CastWindowManager> Create( + bool enable_input, + AccessibilityManager* accessibility_manager); +#else static std::unique_ptr<CastWindowManager> Create(bool enable_input); +#endif virtual ~CastWindowManager() {}
diff --git a/chromecast/graphics/cast_window_manager_aura.cc b/chromecast/graphics/cast_window_manager_aura.cc index e06ed8c0..f401c2b89 100644 --- a/chromecast/graphics/cast_window_manager_aura.cc +++ b/chromecast/graphics/cast_window_manager_aura.cc
@@ -5,6 +5,7 @@ #include "chromecast/graphics/cast_window_manager_aura.h" #include "base/memory/ptr_util.h" +#include "chromecast/graphics/accessibility/accessibility_manager.h" #include "chromecast/graphics/cast_focus_client_aura.h" #include "chromecast/graphics/cast_system_gesture_event_handler.h" #include "ui/aura/client/default_capture_client.h" @@ -222,12 +223,17 @@ // static std::unique_ptr<CastWindowManager> CastWindowManager::Create( - bool enable_input) { - return base::WrapUnique(new CastWindowManagerAura(enable_input)); + bool enable_input, + AccessibilityManager* accessibility_manager) { + return base::WrapUnique( + new CastWindowManagerAura(enable_input, accessibility_manager)); } -CastWindowManagerAura::CastWindowManagerAura(bool enable_input) - : enable_input_(enable_input) {} +CastWindowManagerAura::CastWindowManagerAura( + bool enable_input, + AccessibilityManager* accessibility_manager) + : enable_input_(enable_input), + accessibility_manager_(accessibility_manager) {} CastWindowManagerAura::~CastWindowManagerAura() { TearDown(); @@ -262,14 +268,19 @@ new aura::client::DefaultCaptureClient(window_tree_host_->window())); screen_position_client_.reset(new wm::DefaultScreenPositionClient()); - aura::client::SetScreenPositionClient( - window_tree_host_->window()->GetRootWindow(), - screen_position_client_.get()); + + aura::Window* root_window = window_tree_host_->window()->GetRootWindow(); + aura::client::SetScreenPositionClient(root_window, + screen_position_client_.get()); window_tree_host_->Show(); system_gesture_event_handler_ = - std::make_unique<CastSystemGestureEventHandler>( - window_tree_host_->window()->GetRootWindow()); + std::make_unique<CastSystemGestureEventHandler>(root_window); + + // Set up the accessibility manager (if we have one) with our state. + if (accessibility_manager_) { + accessibility_manager_->Setup(root_window, focus_client_.get()); + } } void CastWindowManagerAura::TearDown() {
diff --git a/chromecast/graphics/cast_window_manager_aura.h b/chromecast/graphics/cast_window_manager_aura.h index 5add4bc0..e22a1541 100644 --- a/chromecast/graphics/cast_window_manager_aura.h +++ b/chromecast/graphics/cast_window_manager_aura.h
@@ -52,11 +52,13 @@ friend class CastWindowManager; // This class should only be instantiated by CastWindowManager::Create. - explicit CastWindowManagerAura(bool enable_input); + explicit CastWindowManagerAura(bool enable_input, + AccessibilityManager* accessibility_manager); void Setup(); const bool enable_input_; + AccessibilityManager* accessibility_manager_; std::unique_ptr<CastWindowTreeHost> window_tree_host_; std::unique_ptr<aura::client::DefaultCaptureClient> capture_client_; std::unique_ptr<CastFocusClientAura> focus_client_;
diff --git a/chromecast/graphics/cast_window_manager_aura_test.cc b/chromecast/graphics/cast_window_manager_aura_test.cc index ac2ed68..184f560 100644 --- a/chromecast/graphics/cast_window_manager_aura_test.cc +++ b/chromecast/graphics/cast_window_manager_aura_test.cc
@@ -46,8 +46,8 @@ } TEST_F(CastWindowManagerAuraTest, WindowInput) { - std::unique_ptr<CastWindowManager> window_manager( - CastWindowManager::Create(true /* enable input */)); + std::unique_ptr<CastWindowManager> window_manager(CastWindowManager::Create( + true /* enable input */, nullptr /* accessibility manager */)); CastTestWindowDelegate window_delegate; aura::Window window(&window_delegate); @@ -74,8 +74,8 @@ } TEST_F(CastWindowManagerAuraTest, WindowInputDisabled) { - std::unique_ptr<CastWindowManager> window_manager( - CastWindowManager::Create(false /* enable input */)); + std::unique_ptr<CastWindowManager> window_manager(CastWindowManager::Create( + false /* enable input */, nullptr /* accessibility manager */)); CastTestWindowDelegate window_delegate; aura::Window window(&window_delegate);
diff --git a/chromecast/graphics/cast_window_manager_default.cc b/chromecast/graphics/cast_window_manager_default.cc index b6ab477..1000972 100644 --- a/chromecast/graphics/cast_window_manager_default.cc +++ b/chromecast/graphics/cast_window_manager_default.cc
@@ -8,11 +8,20 @@ namespace chromecast { +#if defined(USE_AURA) +// static +std::unique_ptr<CastWindowManager> CastWindowManager::Create( + bool enable_input, + AccessibilityManager* accessibility_manager) { + return base::WrapUnique(new CastWindowManagerDefault()); +} +#else // static std::unique_ptr<CastWindowManager> CastWindowManager::Create( bool enable_input) { return base::WrapUnique(new CastWindowManagerDefault()); } +#endif CastWindowManagerDefault::CastWindowManagerDefault() {}
diff --git a/components/arc/arc_session_impl.cc b/components/arc/arc_session_impl.cc index 783ec846..a43198aa 100644 --- a/components/arc/arc_session_impl.cc +++ b/components/arc/arc_session_impl.cc
@@ -180,7 +180,9 @@ mojo::PlatformChannel channel; mojo::OutgoingInvitation invitation; - std::string token = base::NumberToString(base::RandUint64()); + // Generate an arbitrary 32-byte string. ARC uses this length as a protocol + // version identifier. + std::string token = mojo::edk::GenerateRandomToken(); mojo::ScopedMessagePipeHandle pipe = invitation.AttachMessagePipe(token); mojo::OutgoingInvitation::Send(std::move(invitation), base::kNullProcessHandle,
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index e77341b70..280b22e 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -4557,16 +4557,9 @@ } // Tests that DeleteDisusedCreditCards deletes desired credit cards only. -// Disabled on Android, see crbug.com/848227 -#if defined(OS_ANDROID) -#define MAYBE_DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards \ - DISABLED_DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards -#else -#define MAYBE_DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards \ - DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards -#endif +// Disabled see crbug.com/848227 TEST_F(PersonalDataManagerTest, - MAYBE_DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards) { + DISABLED_DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards) { // Enable the feature. base::test::ScopedFeatureList scoped_features; scoped_features.InitAndEnableFeature(kAutofillDeleteDisusedCreditCards);
diff --git a/components/browser_sync/profile_sync_service.cc b/components/browser_sync/profile_sync_service.cc index 01e57d4..4d503359 100644 --- a/components/browser_sync/profile_sync_service.cc +++ b/components/browser_sync/profile_sync_service.cc
@@ -1565,7 +1565,9 @@ // previous configuration left off). // TODO(sync): consider detecting configuration recovery and setting // the reason here appropriately. - reason = syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; + reason = is_first_time_sync_configure_ + ? syncer::CONFIGURE_REASON_NEW_CLIENT + : syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; } else { // The user initiated a reconfiguration (either to add or remove types). reason = syncer::CONFIGURE_REASON_RECONFIGURATION;
diff --git a/components/browser_sync/profile_sync_service_unittest.cc b/components/browser_sync/profile_sync_service_unittest.cc index f956e12..989b8b7c 100644 --- a/components/browser_sync/profile_sync_service_unittest.cc +++ b/components/browser_sync/profile_sync_service_unittest.cc
@@ -1191,5 +1191,48 @@ EXPECT_NE(nullptr, service()->GetOpenTabsUIDelegate()); } +// Test ConfigureDataTypeManagerReason on First and Nth start. +TEST_F(ProfileSyncServiceTest, ConfigureDataTypeManagerReason) { + const syncer::DataTypeManager::ConfigureResult configure_result( + syncer::DataTypeManager::OK, syncer::ModelTypeSet()); + syncer::ConfigureReason configure_reason = syncer::CONFIGURE_REASON_UNKNOWN; + + IssueTestTokens(); + + // First sync. + CreateService(ProfileSyncService::AUTO_START); + EXPECT_CALL(*component_factory(), CreateDataTypeManager(_, _, _, _, _, _)) + .WillOnce(ReturnNewDataTypeManager( + GetRecordingConfigureCalledCallback(&configure_reason))); + InitializeForFirstSync(); + ASSERT_TRUE(service()->IsSyncActive()); + ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(component_factory())); + EXPECT_EQ(syncer::CONFIGURE_REASON_NEW_CLIENT, configure_reason); + service()->OnConfigureDone(configure_result); + + // Reconfiguration. + service()->ReconfigureDatatypeManager(); + EXPECT_EQ(syncer::CONFIGURE_REASON_RECONFIGURATION, configure_reason); + service()->OnConfigureDone(configure_result); + ShutdownAndDeleteService(); + + // Nth sync. + CreateService(ProfileSyncService::AUTO_START); + EXPECT_CALL(*component_factory(), CreateDataTypeManager(_, _, _, _, _, _)) + .WillOnce(ReturnNewDataTypeManager( + GetRecordingConfigureCalledCallback(&configure_reason))); + InitializeForNthSync(); + ASSERT_TRUE(service()->IsSyncActive()); + ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(component_factory())); + EXPECT_EQ(syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE, configure_reason); + service()->OnConfigureDone(configure_result); + + // Reconfiguration. + service()->ReconfigureDatatypeManager(); + EXPECT_EQ(syncer::CONFIGURE_REASON_RECONFIGURATION, configure_reason); + service()->OnConfigureDone(configure_result); + ShutdownAndDeleteService(); +} + } // namespace } // namespace browser_sync
diff --git a/components/browser_sync/profile_sync_test_util.cc b/components/browser_sync/profile_sync_test_util.cc index b2b6123..71746783 100644 --- a/components/browser_sync/profile_sync_test_util.cc +++ b/components/browser_sync/profile_sync_test_util.cc
@@ -233,7 +233,7 @@ &account_tracker_, nullptr), #endif - identity_manager_(&signin_manager_, &auth_service_), + identity_manager_(&signin_manager_, &auth_service_, &account_tracker_), url_request_context_(new net::TestURLRequestContextGetter( base::ThreadTaskRunnerHandle::Get())) { RegisterPrefsForProfileSyncService(pref_service_.registry());
diff --git a/components/drive/chromeos/change_list_loader.cc b/components/drive/chromeos/change_list_loader.cc index 3ccda8d..db93b5e 100644 --- a/components/drive/chromeos/change_list_loader.cc +++ b/components/drive/chromeos/change_list_loader.cc
@@ -49,8 +49,10 @@ // Fetches all the (currently available) resource entries from the server. class FullFeedFetcher : public ChangeListLoader::FeedFetcher { public: - FullFeedFetcher(JobScheduler* scheduler) - : scheduler_(scheduler), weak_ptr_factory_(this) {} + FullFeedFetcher(JobScheduler* scheduler, const std::string& team_drive_id) + : scheduler_(scheduler), + team_drive_id_(team_drive_id), + weak_ptr_factory_(this) {} ~FullFeedFetcher() override = default; @@ -65,8 +67,8 @@ // NOTE: Because we already know the largest change ID, here we can use // files.list instead of changes.list for speed. crbug.com/287602 scheduler_->GetAllFileList( - base::Bind(&FullFeedFetcher::OnFileListFetched, - weak_ptr_factory_.GetWeakPtr(), callback)); + team_drive_id_, base::Bind(&FullFeedFetcher::OnFileListFetched, + weak_ptr_factory_.GetWeakPtr(), callback)); } private: @@ -104,6 +106,7 @@ } JobScheduler* scheduler_; + const std::string team_drive_id_; std::vector<std::unique_ptr<ChangeList>> change_lists_; base::TimeTicks start_time_; THREAD_CHECKER(thread_checker_); @@ -403,11 +406,10 @@ // Set up feed fetcher. bool is_delta_update = !local_start_page_token.empty(); if (is_delta_update) { - change_feed_fetcher_.reset( - new DeltaFeedFetcher(scheduler_, drive::util::kTeamDriveIdDefaultCorpus, - local_start_page_token)); + change_feed_fetcher_.reset(new DeltaFeedFetcher(scheduler_, team_drive_id_, + local_start_page_token)); } else { - change_feed_fetcher_.reset(new FullFeedFetcher(scheduler_)); + change_feed_fetcher_.reset(new FullFeedFetcher(scheduler_, team_drive_id_)); } change_feed_fetcher_->Run(
diff --git a/components/drive/job_scheduler.cc b/components/drive/job_scheduler.cc index d1313da..5991f9f 100644 --- a/components/drive/job_scheduler.cc +++ b/components/drive/job_scheduler.cc
@@ -319,18 +319,17 @@ } void JobScheduler::GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(!callback.is_null()); JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); - new_job->task = base::Bind( - &DriveServiceInterface::GetAllFileList, - base::Unretained(drive_service_), - base::Bind(&JobScheduler::OnGetFileListJobDone, - weak_ptr_factory_.GetWeakPtr(), - new_job->job_info.job_id, - callback)); + new_job->task = base::Bind(&DriveServiceInterface::GetAllFileList, + base::Unretained(drive_service_), team_drive_id, + base::Bind(&JobScheduler::OnGetFileListJobDone, + weak_ptr_factory_.GetWeakPtr(), + new_job->job_info.job_id, callback)); new_job->abort_callback = CreateErrorRunCallback(callback); StartJob(new_job); }
diff --git a/components/drive/job_scheduler.h b/components/drive/job_scheduler.h index e2b71c6..dc8003b 100644 --- a/components/drive/job_scheduler.h +++ b/components/drive/job_scheduler.h
@@ -98,8 +98,12 @@ void GetAllTeamDriveList(const google_apis::TeamDriveListCallback& callback); // Adds a GetAllFileList operation to the queue. + // If |team_drive_id| is empty then it will return the file list for the + // users default corpus, otherwise will return the file list for the + // specified team drive. // |callback| must not be null. - void GetAllFileList(const google_apis::FileListCallback& callback); + void GetAllFileList(const std::string& team_drive_id, + const google_apis::FileListCallback& callback); // Adds a GetFileListInDirectory operation to the queue. // |callback| must not be null.
diff --git a/components/drive/job_scheduler_unittest.cc b/components/drive/job_scheduler_unittest.cc index 1fb1475..f5af2ff 100644 --- a/components/drive/job_scheduler_unittest.cc +++ b/components/drive/job_scheduler_unittest.cc
@@ -262,6 +262,7 @@ std::unique_ptr<google_apis::FileList> file_list; scheduler_->GetAllFileList( + util::kTeamDriveIdDefaultCorpus, google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); base::RunLoop().RunUntilIdle();
diff --git a/components/drive/service/drive_api_service.cc b/components/drive/service/drive_api_service.cc index 6d6b6c4..ad71357 100644 --- a/components/drive/service/drive_api_service.cc +++ b/components/drive/service/drive_api_service.cc
@@ -342,6 +342,7 @@ } CancelCallback DriveAPIService::GetAllFileList( + const std::string& team_drive_id, const FileListCallback& callback) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(!callback.is_null()); @@ -352,9 +353,10 @@ request->set_max_results(kMaxNumFilesResourcePerRequest); request->set_q("trashed = false"); // Exclude trashed files. request->set_fields(kFileListFields); - if (google_apis::GetTeamDrivesIntegrationSwitch() == - google_apis::TEAM_DRIVES_INTEGRATION_ENABLED) { - request->set_corpora(google_apis::FilesListCorpora::ALL_TEAM_DRIVES); + if (team_drive_id.empty()) { + request->set_corpora(google_apis::FilesListCorpora::DEFAULT); + } else { + request->set_corpora(google_apis::FilesListCorpora::TEAM_DRIVE); } return sender_->StartRequestWithAuthRetry(std::move(request)); }
diff --git a/components/drive/service/drive_api_service.h b/components/drive/service/drive_api_service.h index ff1f2a8..6a63be3 100644 --- a/components/drive/service/drive_api_service.h +++ b/components/drive/service/drive_api_service.h
@@ -127,6 +127,7 @@ google_apis::CancelCallback GetAllTeamDriveList( const google_apis::TeamDriveListCallback& callback) override; google_apis::CancelCallback GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) override; google_apis::CancelCallback GetFileListInDirectory( const std::string& directory_resource_id,
diff --git a/components/drive/service/drive_service_interface.h b/components/drive/service/drive_service_interface.h index 6c21596..d5cfdcf 100644 --- a/components/drive/service/drive_service_interface.h +++ b/components/drive/service/drive_service_interface.h
@@ -213,8 +213,12 @@ // remaining results will be included in the returned result. See also // GetRemainingFileList. // + // If |team_drive_id| is empty will retrieve the file list for the users + // default corpus, otherwise will fetch the file list for the specified + // team drive. // |callback| must not be null. virtual google_apis::CancelCallback GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) = 0; // Fetches a file list in the directory with |directory_resource_id|.
diff --git a/components/drive/service/dummy_drive_service.cc b/components/drive/service/dummy_drive_service.cc index cf74ebd..1742acc 100644 --- a/components/drive/service/dummy_drive_service.cc +++ b/components/drive/service/dummy_drive_service.cc
@@ -61,7 +61,10 @@ } CancelCallback DummyDriveService::GetAllFileList( - const FileListCallback& callback) { return CancelCallback(); } + const std::string& team_drive_id, + const FileListCallback& callback) { + return CancelCallback(); +} CancelCallback DummyDriveService::GetFileListInDirectory( const std::string& directory_resource_id,
diff --git a/components/drive/service/dummy_drive_service.h b/components/drive/service/dummy_drive_service.h index 79a4225..271ffe13 100644 --- a/components/drive/service/dummy_drive_service.h +++ b/components/drive/service/dummy_drive_service.h
@@ -37,6 +37,7 @@ google_apis::CancelCallback GetAllTeamDriveList( const google_apis::TeamDriveListCallback& callback) override; google_apis::CancelCallback GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) override; google_apis::CancelCallback GetFileListInDirectory( const std::string& directory_resource_id,
diff --git a/components/drive/service/fake_drive_service.cc b/components/drive/service/fake_drive_service.cc index 58989a7..a3206cf 100644 --- a/components/drive/service/fake_drive_service.cc +++ b/components/drive/service/fake_drive_service.cc
@@ -453,6 +453,7 @@ } CancelCallback FakeDriveService::GetAllFileList( + const std::string& team_drive_id, const FileListCallback& callback) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(!callback.is_null());
diff --git a/components/drive/service/fake_drive_service.h b/components/drive/service/fake_drive_service.h index e70c5901..dd251d3 100644 --- a/components/drive/service/fake_drive_service.h +++ b/components/drive/service/fake_drive_service.h
@@ -174,6 +174,7 @@ google_apis::CancelCallback GetAllTeamDriveList( const google_apis::TeamDriveListCallback& callback) override; google_apis::CancelCallback GetAllFileList( + const std::string& team_drive_id, const google_apis::FileListCallback& callback) override; google_apis::CancelCallback GetFileListInDirectory( const std::string& directory_resource_id,
diff --git a/components/drive/service/fake_drive_service_unittest.cc b/components/drive/service/fake_drive_service_unittest.cc index d614d6d3..cf29447 100644 --- a/components/drive/service/fake_drive_service_unittest.cc +++ b/components/drive/service/fake_drive_service_unittest.cc
@@ -131,6 +131,7 @@ DriveApiErrorCode error = DRIVE_OTHER_ERROR; std::unique_ptr<FileList> file_list; fake_service_.GetAllFileList( + util::kTeamDriveIdDefaultCorpus, test_util::CreateCopyResultCallback(&error, &file_list)); base::RunLoop().RunUntilIdle(); @@ -148,6 +149,7 @@ DriveApiErrorCode error = DRIVE_OTHER_ERROR; std::unique_ptr<FileList> file_list; fake_service_.GetAllFileList( + util::kTeamDriveIdDefaultCorpus, test_util::CreateCopyResultCallback(&error, &file_list)); base::RunLoop().RunUntilIdle(); @@ -557,6 +559,7 @@ DriveApiErrorCode error = DRIVE_OTHER_ERROR; std::unique_ptr<FileList> file_list; fake_service_.GetAllFileList( + util::kTeamDriveIdDefaultCorpus, test_util::CreateCopyResultCallback(&error, &file_list)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(HTTP_SUCCESS, error);
diff --git a/components/exo/client_controlled_shell_surface.cc b/components/exo/client_controlled_shell_surface.cc index b3bb0ae0..5c63e673 100644 --- a/components/exo/client_controlled_shell_surface.cc +++ b/components/exo/client_controlled_shell_surface.cc
@@ -472,10 +472,12 @@ const base::string16& extra_title) { TRACE_EVENT1("exo", "ClientControlledShellSurface::SetExtraTitle", "extra_title", base::UTF16ToUTF8(extra_title)); - // The extra title is used in the window frame. - extra_title_ = extra_title; - if (widget_) - widget_->UpdateWindowTitle(); + + if (!widget_) + return; + + GetFrameView()->GetHeaderView()->GetFrameHeader()->SetFrameTextOverride( + extra_title); } void ClientControlledShellSurface::SetOrientationLock(
diff --git a/components/exo/client_controlled_shell_surface_unittest.cc b/components/exo/client_controlled_shell_surface_unittest.cc index f5075de..0a88961 100644 --- a/components/exo/client_controlled_shell_surface_unittest.cc +++ b/components/exo/client_controlled_shell_surface_unittest.cc
@@ -23,6 +23,7 @@ #include "ash/wm/wm_event.h" #include "ash/wm/workspace_controller_test_api.h" #include "base/strings/utf_string_conversions.h" +#include "cc/paint/display_item_list.h" #include "components/exo/buffer.h" #include "components/exo/display.h" #include "components/exo/pointer.h" @@ -31,6 +32,7 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "components/exo/wm_helper.h" +#include "third_party/skia/include/utils/SkNoDrawCanvas.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" @@ -41,6 +43,7 @@ #include "ui/events/base_event_utils.h" #include "ui/events/event_targeter.h" #include "ui/events/test/event_generator.h" +#include "ui/views/paint_info.h" #include "ui/views/widget/widget.h" #include "ui/wm/core/shadow_controller.h" #include "ui/wm/core/shadow_types.h" @@ -71,6 +74,27 @@ enable); } +// A canvas that just logs when a text blob is drawn. +class TestCanvas : public SkNoDrawCanvas { + public: + TestCanvas() : SkNoDrawCanvas(100, 100) {} + ~TestCanvas() override {} + + void onDrawTextBlob(const SkTextBlob*, + SkScalar, + SkScalar, + const SkPaint&) override { + text_was_drawn_ = true; + } + + bool text_was_drawn() const { return text_was_drawn_; } + + private: + bool text_was_drawn_ = false; + + DISALLOW_COPY_AND_ASSIGN(TestCanvas); +}; + } // namespace TEST_F(ClientControlledShellSurfaceTest, SetPinned) { @@ -1053,33 +1077,57 @@ EXPECT_TRUE(container->model()->InZoomMode()); } +// Makes sure that the "extra title" is respected by the window frame. When not +// set, there should be no text in the window frame, but the window's name +// should still be set (for overview mode, accessibility, etc.). When the debug +// text is set, the window frame should paint it. TEST_F(ClientControlledShellSurfaceTest, SetExtraTitle) { std::unique_ptr<Buffer> buffer( - new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(64, 64)))); + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(640, 64)))); std::unique_ptr<Surface> surface(new Surface); auto shell_surface = exo_test_helper()->CreateClientControlledShellSurface(surface.get()); surface->Attach(buffer.get()); surface->Commit(); + shell_surface->GetWidget()->Show(); - // The window title should include the debugging info, if any, and should only - // be shown (in the frame) when there is debugging info. See - // https://crbug.com/831383. + const base::string16 window_title(base::ASCIIToUTF16("title")); + shell_surface->SetTitle(window_title); const aura::Window* window = shell_surface->GetWidget()->GetNativeWindow(); - const views::WidgetDelegate* widget_delegate = - shell_surface->GetWidget()->widget_delegate(); + EXPECT_EQ(window_title, window->GetTitle()); + EXPECT_FALSE( + shell_surface->GetWidget()->widget_delegate()->ShouldShowWindowTitle()); + // Paints the frame and returns whether text was drawn. Unforunately the text + // is a blob so its actual value can't be detected. + auto paint_does_draw_text = [&shell_surface]() { + TestCanvas canvas; + shell_surface->OnSetFrame(SurfaceFrameType::NORMAL); + ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( + shell_surface->GetWidget()->non_client_view()->frame_view()); + frame_view->SetVisible(true); + // Paint to a layer so we can pass a root PaintInfo. + frame_view->GetHeaderView()->SetPaintToLayer(); + gfx::Rect bounds(100, 100); + auto list = base::MakeRefCounted<cc::DisplayItemList>(); + frame_view->GetHeaderView()->Paint(views::PaintInfo::CreateRootPaintInfo( + ui::PaintContext(list.get(), 1.f, bounds, false), bounds.size())); + list->Finalize(); + list->Raster(&canvas); + return canvas.text_was_drawn(); + }; + + EXPECT_FALSE(paint_does_draw_text()); + EXPECT_FALSE( + shell_surface->GetWidget()->widget_delegate()->ShouldShowWindowTitle()); + + // Setting the extra title/debug text won't change the window's title, but it + // will be drawn by the frame header. shell_surface->SetExtraTitle(base::ASCIIToUTF16("extra")); - EXPECT_EQ(base::ASCIIToUTF16(" (extra)"), window->GetTitle()); - EXPECT_TRUE(widget_delegate->ShouldShowWindowTitle()); - - shell_surface->SetTitle(base::ASCIIToUTF16("title")); - EXPECT_EQ(base::ASCIIToUTF16("title (extra)"), window->GetTitle()); - EXPECT_TRUE(widget_delegate->ShouldShowWindowTitle()); - - shell_surface->SetExtraTitle(base::string16()); - EXPECT_EQ(base::ASCIIToUTF16("title"), window->GetTitle()); - EXPECT_FALSE(widget_delegate->ShouldShowWindowTitle()); + EXPECT_EQ(window_title, window->GetTitle()); + EXPECT_TRUE(paint_does_draw_text()); + EXPECT_FALSE( + shell_surface->GetWidget()->widget_delegate()->ShouldShowWindowTitle()); } TEST_F(ClientControlledShellSurfaceTest, WideFrame) {
diff --git a/components/exo/shell_surface_base.cc b/components/exo/shell_surface_base.cc index e3d8a7e..1ff4bcc4 100644 --- a/components/exo/shell_surface_base.cc +++ b/components/exo/shell_surface_base.cc
@@ -908,17 +908,11 @@ } base::string16 ShellSurfaceBase::GetWindowTitle() const { - if (extra_title_.empty()) - return title_; - - // TODO(estade): revisit how the extra title is shown in the window frame and - // other surfaces like overview mode. - return title_ + base::ASCIIToUTF16(" (") + extra_title_ + - base::ASCIIToUTF16(")"); + return title_; } bool ShellSurfaceBase::ShouldShowWindowTitle() const { - return !extra_title_.empty(); + return false; } gfx::ImageSkia ShellSurfaceBase::GetWindowIcon() {
diff --git a/components/exo/shell_surface_base.h b/components/exo/shell_surface_base.h index 64b6489..c10988b 100644 --- a/components/exo/shell_surface_base.h +++ b/components/exo/shell_surface_base.h
@@ -310,8 +310,6 @@ bool shadow_bounds_changed_ = false; std::unique_ptr<ash::WindowResizer> resizer_; base::string16 title_; - // The debug title string shown in the window frame (title bar). - base::string16 extra_title_; std::unique_ptr<ui::CompositorLock> configure_compositor_lock_; ConfigureCallback configure_callback_; // TODO(oshima): Remove this once the transition to new drag/resize
diff --git a/components/history/core/browser/history_backend_db_unittest.cc b/components/history/core/browser/history_backend_db_unittest.cc index efc18d7..9f3ac0fa 100644 --- a/components/history/core/browser/history_backend_db_unittest.cc +++ b/components/history/core/browser/history_backend_db_unittest.cc
@@ -1650,6 +1650,54 @@ EXPECT_TRUE(visit_row2.incremented_omnibox_typed_score); } +// Tests that the migration code correctly handles rows in the visit database +// that may be in an invalid state where visit_id == referring_visit. Regression +// test for https://crbug.com/847246. +TEST_F(HistoryBackendDBTest, + MigrateVisitsWithoutIncrementedOmniboxTypedScore_BadRow) { + ASSERT_NO_FATAL_FAILURE(CreateDBVersion(39)); + + const VisitID visit_id = 1; + const URLID url_id = 2; + const base::Time visit_time(base::Time::Now()); + // visit_id == referring_visit will trigger DCHECK_NE in UpdateVisitRow. + const VisitID referring_visit = 1; + const ui::PageTransition transition = ui::PAGE_TRANSITION_TYPED; + const SegmentID segment_id = 8; + const base::TimeDelta visit_duration(base::TimeDelta::FromSeconds(45)); + + const char kInsertStatement[] = + "INSERT INTO visits " + "(id, url, visit_time, from_visit, transition, segment_id, " + "visit_duration) VALUES (?, ?, ?, ?, ?, ?, ?)"; + + { + // Open the db for manual manipulation. + sql::Connection db; + ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename))); + + // Add entry to visits. + sql::Statement s(db.GetUniqueStatement(kInsertStatement)); + s.BindInt64(0, visit_id); + s.BindInt64(1, url_id); + s.BindInt64(2, visit_time.ToDeltaSinceWindowsEpoch().InMicroseconds()); + s.BindInt64(3, referring_visit); + s.BindInt64(4, transition); + s.BindInt64(5, segment_id); + s.BindInt64(6, visit_duration.InMicroseconds()); + ASSERT_TRUE(s.Run()); + } + + // Re-open the db, triggering migration. + CreateBackendAndDatabase(); + + // Field should be false since the migration won't update it from the default + // due to the invalid state of the row. + VisitRow visit_row; + db_->GetRowForVisit(visit_id, &visit_row); + EXPECT_FALSE(visit_row.incremented_omnibox_typed_score); +} + bool FilterURL(const GURL& url) { return url.SchemeIsHTTPOrHTTPS(); }
diff --git a/components/history/core/browser/visit_database.cc b/components/history/core/browser/visit_database.cc index 17872c1..3429c5a4 100644 --- a/components/history/core/browser/visit_database.cc +++ b/components/history/core/browser/visit_database.cc
@@ -664,6 +664,10 @@ while (read.is_valid() && read.Step()) { VisitRow row; FillVisitRow(read, &row); + // Check if the visit row is in an invalid state and if it is then + // leave the new field as the default value. + if (row.visit_id == row.referring_visit) + continue; row.incremented_omnibox_typed_score = HistoryBackend::IsTypedIncrement(row.transition); if (!UpdateVisitRow(row))
diff --git a/components/safe_browsing/browser/threat_details.cc b/components/safe_browsing/browser/threat_details.cc index 7842af3..af28a05 100644 --- a/components/safe_browsing/browser/threat_details.cc +++ b/components/safe_browsing/browser/threat_details.cc
@@ -775,14 +775,6 @@ return; } - // For measuring performance impact of ad sampling reports, we may want to - // do all the heavy lifting of creating the report but not actually send it. - if (report_->type() == ClientSafeBrowsingReportRequest::AD_SAMPLE && - base::FeatureList::IsEnabled(kAdSamplerCollectButDontSendFeature)) { - AllDone(); - return; - } - BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, base::BindOnce(&WebUIInfoSingleton::AddToReportsSent,
diff --git a/components/safe_browsing/features.cc b/components/safe_browsing/features.cc index 605f52b..eccfa86 100644 --- a/components/safe_browsing/features.cc +++ b/components/safe_browsing/features.cc
@@ -17,12 +17,6 @@ // them to the ExperimentalFeaturesList below to start displaying their status // on the chrome://safe-browsing page. -// Allows an ad sample report to be created but not sent. Used to measure -// performance impact of report generation. -const base::Feature kAdSamplerCollectButDontSendFeature{ - "SafeBrowsingAdSamplerCollectButDontSend", - base::FEATURE_DISABLED_BY_DEFAULT}; - // Controls various parameters related to occasionally collecting ad samples, // for example to control how often collection should occur. const base::Feature kAdSamplerTriggerFeature{"SafeBrowsingAdSamplerTrigger", @@ -67,7 +61,6 @@ // True if the feature is running at a probability other than 1 or 0. bool probabilistically_enabled; } kExperimentalFeatures[]{ - {&kAdSamplerCollectButDontSendFeature, false}, {&kAdSamplerTriggerFeature, false}, {&kCheckByURLLoaderThrottle, true}, {&kEnterprisePasswordProtectionV1, true},
diff --git a/components/safe_browsing/features.h b/components/safe_browsing/features.h index dd913aa..c1a1213 100644 --- a/components/safe_browsing/features.h +++ b/components/safe_browsing/features.h
@@ -19,7 +19,6 @@ namespace safe_browsing { // Features list -extern const base::Feature kAdSamplerCollectButDontSendFeature; extern const base::Feature kAdSamplerTriggerFeature; extern const base::Feature kCheckByURLLoaderThrottle;
diff --git a/components/safe_browsing/triggers/trigger_manager.cc b/components/safe_browsing/triggers/trigger_manager.cc index 46fc4d07..30b6ade3 100644 --- a/components/safe_browsing/triggers/trigger_manager.cc +++ b/components/safe_browsing/triggers/trigger_manager.cc
@@ -67,15 +67,6 @@ bool CanSendReport(const SBErrorOptions& error_display_options, const TriggerType trigger_type) { - // If the |kAdSamplerCollectButDontSendFeature| feature is enabled then we - // will overlook other checks to force the report to be created (which is safe - // because we ensure it will be discarded downstream). - // TODO(crbug.com/776893): Remove the feature and this logic. - if (trigger_type == TriggerType::AD_SAMPLE && - base::FeatureList::IsEnabled(kAdSamplerCollectButDontSendFeature)) { - return true; - } - // Some triggers require that users are eligible for elevated Scout data // collection in order to run. bool scout_check_ok = !TriggerNeedsScout(trigger_type) || @@ -136,14 +127,6 @@ const TriggerType trigger_type, TriggerManagerReason* out_reason) { *out_reason = TriggerManagerReason::NO_REASON; - // If the |kAdSamplerCollectButDontSendFeature| feature is enabled then we - // will overlook other checks to force the report to be created (which is safe - // because we ensure it will be discarded downstream). - // TODO(crbug.com/776893): Remote the feature and this logic. - if (trigger_type == TriggerType::AD_SAMPLE && - base::FeatureList::IsEnabled(kAdSamplerCollectButDontSendFeature)) { - return true; - } // Some triggers require that the user be opted-in to extended reporting in // order to run, while others can run without opt-in (eg: because users are
diff --git a/components/safe_browsing/triggers/trigger_manager_unittest.cc b/components/safe_browsing/triggers/trigger_manager_unittest.cc index 77230ae..34aeeb2 100644 --- a/components/safe_browsing/triggers/trigger_manager_unittest.cc +++ b/components/safe_browsing/triggers/trigger_manager_unittest.cc
@@ -146,14 +146,6 @@ return trigger_manager_.data_collectors_map_; } - void SetCollectDontSendFeature(bool enabled) { - feature_list_.reset(new base::test::ScopedFeatureList); - if (enabled) - feature_list_->InitAndEnableFeature(kAdSamplerCollectButDontSendFeature); - else - feature_list_->InitAndDisableFeature(kAdSamplerCollectButDontSendFeature); - } - private: TriggerManager trigger_manager_; MockThreatDetailsFactory mock_threat_details_factory_; @@ -379,13 +371,7 @@ SetPref(prefs::kSafeBrowsingExtendedReportingOptInAllowed, false); EXPECT_FALSE( StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - // It can be forced on via a finch feature. - SetCollectDontSendFeature(true); - EXPECT_TRUE( - StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - EXPECT_TRUE(FinishCollectingThreatDetails(TriggerType::AD_SAMPLE, - web_contents, true)); - SetCollectDontSendFeature(false); + // Confirm it can fire when we re-enable SBEROptInAllowed SetPref(prefs::kSafeBrowsingExtendedReportingOptInAllowed, true); EXPECT_TRUE( @@ -398,13 +384,7 @@ SetPref(prefs::kSafeBrowsingExtendedReportingEnabled, true); EXPECT_FALSE( StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - // It can be forced on via a finch feature. - SetCollectDontSendFeature(true); - EXPECT_TRUE( - StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - EXPECT_TRUE(FinishCollectingThreatDetails(TriggerType::AD_SAMPLE, - web_contents, true)); - SetCollectDontSendFeature(false); + // Confirm it can fire when we re-enable Scout and disable legacy SBER. SetPref(prefs::kSafeBrowsingScoutReportingEnabled, true); SetPref(prefs::kSafeBrowsingExtendedReportingEnabled, false); @@ -417,13 +397,7 @@ SetTriggerHasQuota(TriggerType::AD_SAMPLE, false); EXPECT_FALSE( StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - // It can be forced on via a finch feature. - SetCollectDontSendFeature(true); - EXPECT_TRUE( - StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - EXPECT_TRUE(FinishCollectingThreatDetails(TriggerType::AD_SAMPLE, - web_contents, true)); - SetCollectDontSendFeature(false); + // Confirm it can fire again when quota is available. SetTriggerHasQuota(TriggerType::AD_SAMPLE, true); EXPECT_TRUE( @@ -442,13 +416,5 @@ // all triggers have quota), but the incognito window prevents it from firing. EXPECT_FALSE( StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - - // The Finch feature makes the trigger fire even in incognito (which is safe - // because data is discarded and not sent to Google downstream). - SetCollectDontSendFeature(true); - EXPECT_TRUE( - StartCollectingThreatDetails(TriggerType::AD_SAMPLE, web_contents)); - EXPECT_TRUE(FinishCollectingThreatDetails(TriggerType::AD_SAMPLE, - web_contents, true)); } } // namespace safe_browsing
diff --git a/components/signin/core/browser/profile_oauth2_token_service.cc b/components/signin/core/browser/profile_oauth2_token_service.cc index 8332460..5a95713 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.cc +++ b/components/signin/core/browser/profile_oauth2_token_service.cc
@@ -12,7 +12,9 @@ ProfileOAuth2TokenService::ProfileOAuth2TokenService( std::unique_ptr<OAuth2TokenServiceDelegate> delegate) - : OAuth2TokenService(std::move(delegate)), all_credentials_loaded_(false) { + : OAuth2TokenService(std::move(delegate)), + all_credentials_loaded_(false), + diagnostics_client_(nullptr) { AddObserver(this); } @@ -61,12 +63,38 @@ void ProfileOAuth2TokenService::OnRefreshTokenAvailable( const std::string& account_id) { + // Check if the newly-updated token is valid (invalid tokens are inserted when + // the user signs out on the web with DICE enabled). + bool is_valid = true; + GoogleServiceAuthError token_error = GetAuthError(account_id); + if (token_error == GoogleServiceAuthError::FromInvalidGaiaCredentialsReason( + GoogleServiceAuthError::InvalidGaiaCredentialsReason:: + CREDENTIALS_REJECTED_BY_CLIENT)) { + is_valid = false; + } + + // NOTE: The code executed in the rest of this method does not affect the + // state of the accounts in this object, so it doesn't matter whether the + // callout to |diagnostics_client_| is made before or after. If that fact ever + // changes, it will be necessary to reason about what the ordering should be. + if (diagnostics_client_) { + diagnostics_client_->WillFireOnRefreshTokenAvailable(account_id, is_valid); + } + CancelRequestsForAccount(account_id); ClearCacheForAccount(account_id); } void ProfileOAuth2TokenService::OnRefreshTokenRevoked( const std::string& account_id) { + // NOTE: The code executed in the rest of this method does not affect the + // state of the accounts in this object, so it doesn't matter whether the + // callout to |diagnostics_client_| is made before or after. If that fact ever + // changes, it will be necessary to reason about what the ordering should be. + if (diagnostics_client_) { + diagnostics_client_->WillFireOnRefreshTokenRevoked(account_id); + } + CancelRequestsForAccount(account_id); ClearCacheForAccount(account_id); }
diff --git a/components/signin/core/browser/profile_oauth2_token_service.h b/components/signin/core/browser/profile_oauth2_token_service.h index a86b764..1a07745 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.h +++ b/components/signin/core/browser/profile_oauth2_token_service.h
@@ -14,6 +14,10 @@ #include "google_apis/gaia/oauth2_token_service_delegate.h" #include "net/base/backoff_entry.h" +namespace identity { +class IdentityManager; +} + namespace user_prefs { class PrefRegistrySyncable; } @@ -73,13 +77,45 @@ } private: + friend class identity::IdentityManager; + + // Interface that gives information on internal TokenService operations. Only + // for use by IdentityManager during the conversion of the codebase to use + // //services/identity/public/cpp. + // NOTE: This interface is defined on ProfileOAuth2TokenService rather than + // on the OAuth2TokenService base class for multiple reasons: + // (1) The base class already has a DiagnosticsObserver interface, from + // which this interface differs because there can be only one instance. + // (2) PO2TS itself observes O2TS and for correctness must receive observer + // callbacks before any other O2TS observer. Hence, these DiagnosticsClient + // callouts must go *inside* PO2TS's implementations of the O2TS observer + // methods. + class DiagnosticsClient { + public: + // Sent just before OnRefreshTokenAvailable() is fired on observers. + // |is_valid| indicates whether the token is valid. + virtual void WillFireOnRefreshTokenAvailable(const std::string& account_id, + bool is_valid) = 0; + // Sent just before OnRefreshTokenRevoked() is fired on observers. + virtual void WillFireOnRefreshTokenRevoked( + const std::string& account_id) = 0; + }; + void OnRefreshTokenAvailable(const std::string& account_id) override; void OnRefreshTokenRevoked(const std::string& account_id) override; void OnRefreshTokensLoaded() override; + void set_diagnostics_client(DiagnosticsClient* diagnostics_client) { + DCHECK(!diagnostics_client_ || !diagnostics_client); + diagnostics_client_ = diagnostics_client; + } + // Whether all credentials have been loaded. bool all_credentials_loaded_; + // The DiagnosticsClient object associated with this object. May be null. + DiagnosticsClient* diagnostics_client_; + DISALLOW_COPY_AND_ASSIGN(ProfileOAuth2TokenService); };
diff --git a/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc b/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc index b2fc071..d3adf58 100644 --- a/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc +++ b/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc
@@ -11,7 +11,9 @@ #include "base/strings/string_piece.h" #include "base/test/fuzzed_data_provider.h" #include "components/subresource_filter/core/common/first_party_origin.h" +#include "components/subresource_filter/core/common/unindexed_ruleset.h" #include "components/url_pattern_index/url_pattern_index.h" +#include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h" #include "url/gurl.h" #include "url/origin.h" @@ -36,15 +38,32 @@ return 0; const std::string remaining_bytes = fuzzed_data.ConsumeRemainingBytes(); - const uint8_t* remaining_data = - reinterpret_cast<const uint8_t*>(remaining_bytes.data()); - if (!subresource_filter::IndexedRulesetMatcher::Verify( - remaining_data, remaining_bytes.size())) { - return 0; - } - subresource_filter::IndexedRulesetMatcher matcher(remaining_data, - remaining_bytes.size()); + // First, interpret the remaining fuzzed data as an unindexed ruleset. + google::protobuf::io::ArrayInputStream input_stream(remaining_bytes.data(), + remaining_bytes.size()); + url_pattern_index::UnindexedRulesetReader reader(&input_stream); + + // Use the unindexed ruleset to build a flat indexed ruleset. + subresource_filter::RulesetIndexer indexer; + url_pattern_index::proto::FilteringRules ruleset_chunk; + while (reader.ReadNextChunk(&ruleset_chunk)) { + for (const auto& rule : ruleset_chunk.url_rules()) + indexer.AddUrlRule(rule); + } + indexer.Finish(); + + // Error out if we were unable to fully read the unindexed version. + if (reader.num_bytes_read() != static_cast<int64_t>(remaining_bytes.size())) + return 0; + + CHECK(subresource_filter::IndexedRulesetMatcher::Verify(indexer.data(), + indexer.size())); + + // Lastly, read into the indexed ruleset by matching the URL from the + // beginning of the fuzzed data. + subresource_filter::IndexedRulesetMatcher matcher(indexer.data(), + indexer.size()); // TODO(csharrison): Consider fuzzing things like the parent origin, the // activation type, and the element type. matcher.ShouldDisableFilteringForDocument(
diff --git a/components/user_manager/user.cc b/components/user_manager/user.cc index 2359fd8..90530ae 100644 --- a/components/user_manager/user.cc +++ b/components/user_manager/user.cc
@@ -202,6 +202,10 @@ type == USER_TYPE_CHILD; } +bool User::IsChild() const { + return GetType() == USER_TYPE_CHILD; +} + std::string User::GetAccountName(bool use_display_email) const { if (use_display_email && !display_email_.empty()) return GetUserName(display_email_);
diff --git a/components/user_manager/user.h b/components/user_manager/user.h index ab1adeb..10cafc73 100644 --- a/components/user_manager/user.h +++ b/components/user_manager/user.h
@@ -100,6 +100,9 @@ // Returns true if user is supervised. virtual bool IsSupervised() const; + // Returns true if user is child. + virtual bool IsChild() const; + // True if user image can be synced. virtual bool CanSyncImage() const;
diff --git a/components/viz/DEPS b/components/viz/DEPS index eba179ee..ce3033f 100644 --- a/components/viz/DEPS +++ b/components/viz/DEPS
@@ -6,3 +6,9 @@ "+ui/base", "+ui/gfx", ] + +specific_include_rules = { + ".*_(unittest|perftest|fuzzer)\.cc": [ + "+components/viz", + ], +}
diff --git a/components/viz/client/DEPS b/components/viz/client/DEPS index f701df5..d3e0208 100644 --- a/components/viz/client/DEPS +++ b/components/viz/client/DEPS
@@ -18,7 +18,6 @@ specific_include_rules = { ".*unittest\.cc": [ - "+components/viz/test", "+mojo/public/cpp", ], }
diff --git a/components/viz/common/DEPS b/components/viz/common/DEPS index 7ccd5e03..8c356af9 100644 --- a/components/viz/common/DEPS +++ b/components/viz/common/DEPS
@@ -24,7 +24,6 @@ ], ".*_unittest\.cc": [ "+cc/test", - "+components/viz/test", "+gpu/ipc/gl_in_process_context.h", "+media/base", "+ui/gl",
diff --git a/components/viz/host/DEPS b/components/viz/host/DEPS index 83389e0..b9d508f1 100644 --- a/components/viz/host/DEPS +++ b/components/viz/host/DEPS
@@ -24,7 +24,4 @@ "+components/viz/service/frame_sinks/frame_sink_manager_impl.h", "+components/viz/service/surfaces/surface_manager.h", ], - ".*_unittest\.cc": [ - "+components/viz/test", - ] }
diff --git a/components/viz/host/host_frame_sink_manager_unittest.cc b/components/viz/host/host_frame_sink_manager_unittest.cc index f957e38..0f91e106 100644 --- a/components/viz/host/host_frame_sink_manager_unittest.cc +++ b/components/viz/host/host_frame_sink_manager_unittest.cc
@@ -13,6 +13,7 @@ #include "components/viz/common/surfaces/frame_sink_id.h" #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_info.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface_manager.h" @@ -69,7 +70,8 @@ // A mock implementation of mojom::FrameSinkManager. class MockFrameSinkManagerImpl : public FrameSinkManagerImpl { public: - MockFrameSinkManagerImpl() = default; + explicit MockFrameSinkManagerImpl(SharedBitmapManager* shared_bitmap_manager) + : FrameSinkManagerImpl(shared_bitmap_manager) {} ~MockFrameSinkManagerImpl() override = default; // mojom::FrameSinkManager: @@ -148,6 +150,7 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; std::unique_ptr<HostFrameSinkManager> host_manager_; std::unique_ptr<testing::NiceMock<MockFrameSinkManagerImpl>> manager_impl_; @@ -171,7 +174,8 @@ // testing::Test: void SetUp() override { manager_impl_ = - std::make_unique<testing::NiceMock<MockFrameSinkManagerImpl>>(); + std::make_unique<testing::NiceMock<MockFrameSinkManagerImpl>>( + &shared_bitmap_manager_); host_manager_ = std::make_unique<HostFrameSinkManager>(); manager_impl_->SetLocalClient(host_manager_.get()); @@ -195,7 +199,8 @@ DCHECK(!manager_impl_); manager_impl_ = - std::make_unique<testing::NiceMock<MockFrameSinkManagerImpl>>(); + std::make_unique<testing::NiceMock<MockFrameSinkManagerImpl>>( + &shared_bitmap_manager_); mojom::FrameSinkManagerPtr frame_sink_manager; mojom::FrameSinkManagerRequest frame_sink_manager_request =
diff --git a/components/viz/service/DEPS b/components/viz/service/DEPS index 4ec64970..0f76030d 100644 --- a/components/viz/service/DEPS +++ b/components/viz/service/DEPS
@@ -12,9 +12,3 @@ "+ui/latency", "+ui/ozone/public", ] - -specific_include_rules = { - ".*_unittest\.cc": [ - "+components/viz/test", - ] -}
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc index e079045..d71831e 100644 --- a/components/viz/service/display/display_unittest.cc +++ b/components/viz/service/display/display_unittest.cc
@@ -18,11 +18,11 @@ #include "components/viz/common/quads/render_pass_draw_quad.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "components/viz/common/quads/surface_draw_quad.h" -#include "components/viz/common/resources/shared_bitmap_manager.h" #include "components/viz/common/surfaces/frame_sink_id.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/service/display/display_client.h" #include "components/viz/service/display/display_scheduler.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" @@ -31,7 +31,6 @@ #include "components/viz/test/fake_output_surface.h" #include "components/viz/test/mock_compositor_frame_sink_client.h" #include "components/viz/test/test_gles2_interface.h" -#include "components/viz/test/test_shared_bitmap_manager.h" #include "gpu/GLES2/gl2extchromium.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -97,7 +96,8 @@ class DisplayTest : public testing::Test { public: DisplayTest() - : support_(std::make_unique<CompositorFrameSinkSupport>( + : manager_(&shared_bitmap_manager_), + support_(std::make_unique<CompositorFrameSinkSupport>( nullptr, &manager_, kArbitraryFrameSinkId, @@ -186,11 +186,11 @@ void LatencyInfoCapTest(bool over_capacity); + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; std::unique_ptr<CompositorFrameSinkSupport> support_; ParentLocalSurfaceIdAllocator id_allocator_; scoped_refptr<base::NullTaskRunner> task_runner_; - TestSharedBitmapManager shared_bitmap_manager_; std::unique_ptr<BeginFrameSource> begin_frame_source_; std::unique_ptr<Display> display_; TestSoftwareOutputDevice* software_output_device_ = nullptr;
diff --git a/components/viz/service/display/surface_aggregator_perftest.cc b/components/viz/service/display/surface_aggregator_perftest.cc index 3244d5d..52098a1 100644 --- a/components/viz/service/display/surface_aggregator_perftest.cc +++ b/components/viz/service/display/surface_aggregator_perftest.cc
@@ -10,12 +10,12 @@ #include "components/viz/common/quads/texture_draw_quad.h" #include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/display/surface_aggregator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface_manager.h" #include "components/viz/test/compositor_frame_helpers.h" #include "components/viz/test/test_context_provider.h" -#include "components/viz/test/test_shared_bitmap_manager.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/perf/perf_test.h" @@ -30,13 +30,12 @@ class SurfaceAggregatorPerfTest : public testing::Test { public: - SurfaceAggregatorPerfTest() { + SurfaceAggregatorPerfTest() : manager_(&shared_bitmap_manager_) { context_provider_ = TestContextProvider::Create(); context_provider_->BindToCurrentThread(); - shared_bitmap_manager_ = std::make_unique<TestSharedBitmapManager>(); resource_provider_ = std::make_unique<DisplayResourceProvider>( - context_provider_.get(), shared_bitmap_manager_.get()); + context_provider_.get(), &shared_bitmap_manager_); } void RunTest(int num_surfaces, @@ -145,9 +144,9 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; scoped_refptr<TestContextProvider> context_provider_; - std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; std::unique_ptr<DisplayResourceProvider> resource_provider_; std::unique_ptr<SurfaceAggregator> aggregator_; cc::LapTimer timer_;
diff --git a/components/viz/service/display/surface_aggregator_pixeltest.cc b/components/viz/service/display/surface_aggregator_pixeltest.cc index 5491915..493ba49 100644 --- a/components/viz/service/display/surface_aggregator_pixeltest.cc +++ b/components/viz/service/display/surface_aggregator_pixeltest.cc
@@ -13,6 +13,7 @@ #include "components/viz/common/quads/surface_draw_quad.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/service/display/surface_aggregator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" @@ -36,7 +37,8 @@ class SurfaceAggregatorPixelTest : public cc::RendererPixelTest<GLRenderer> { public: SurfaceAggregatorPixelTest() - : support_(std::make_unique<CompositorFrameSinkSupport>( + : manager_(&shared_bitmap_manager_), + support_(std::make_unique<CompositorFrameSinkSupport>( nullptr, &manager_, kArbitraryRootFrameSinkId, @@ -51,6 +53,7 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; ParentLocalSurfaceIdAllocator allocator_; std::unique_ptr<CompositorFrameSinkSupport> support_;
diff --git a/components/viz/service/display/surface_aggregator_unittest.cc b/components/viz/service/display/surface_aggregator_unittest.cc index 0fde3f47..35e590c 100644 --- a/components/viz/service/display/surface_aggregator_unittest.cc +++ b/components/viz/service/display/surface_aggregator_unittest.cc
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/stl_util.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" #include "cc/test/render_pass_test_utils.h" @@ -23,9 +24,9 @@ #include "components/viz/common/quads/solid_color_draw_quad.h" #include "components/viz/common/quads/surface_draw_quad.h" #include "components/viz/common/quads/texture_draw_quad.h" -#include "components/viz/common/resources/shared_bitmap_manager.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/service/display/display_resource_provider.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" @@ -33,7 +34,6 @@ #include "components/viz/test/compositor_frame_helpers.h" #include "components/viz/test/fake_compositor_frame_sink_client.h" #include "components/viz/test/fake_surface_observer.h" -#include "components/viz/test/test_shared_bitmap_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkColor.h" @@ -109,7 +109,8 @@ class SurfaceAggregatorTest : public testing::Test, public DisplayTimeSource { public: explicit SurfaceAggregatorTest(bool use_damage_rect) - : observer_(false), + : manager_(&shared_bitmap_manager_), + observer_(false), support_(std::make_unique<CompositorFrameSinkSupport>( &fake_client_, &manager_, @@ -352,6 +353,7 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; FakeSurfaceObserver observer_; FakeCompositorFrameSinkClient fake_client_; @@ -488,7 +490,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { Quad quads[] = {Quad::SolidColorQuad(SK_ColorRED, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; // Add a callback for when the surface is damaged. MockAggregatedDamageCallback aggregated_damage_callback; @@ -496,7 +498,7 @@ aggregated_damage_callback.GetCallback()); constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -508,7 +510,7 @@ OnAggregatedDamage(root_local_surface_id_, SurfaceSize(), gfx::Rect(SurfaceSize()), next_display_time())); - AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); + AggregateAndVerify(passes, base::size(passes), ids, base::size(ids)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); } @@ -526,20 +528,20 @@ Quad embedded_quads[] = {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); { Quad quads[] = {Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), .5f, gfx::Transform(), false)}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); CompositorFrame aggregated_frame = aggregator_.Aggregate( @@ -559,9 +561,9 @@ Quad quads[] = {Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), .9999f, gfx::Transform(), false)}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); CompositorFrame aggregated_frame = aggregator_.Aggregate( @@ -585,20 +587,20 @@ Quad embedded_quads[] = {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); gfx::Transform rotate; rotate.Rotate(30); Quad quads[] = {Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), 1.f, rotate, false)}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -618,18 +620,18 @@ Quad::SolidColorQuad(SK_ColorLTGRAY, gfx::Rect(5, 5))}, {Quad::SolidColorQuad(SK_ColorGRAY, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorDKGRAY, gfx::Rect(5, 5))}}; - Pass passes[] = {Pass(quads[0], arraysize(quads[0]), 1, SurfaceSize()), - Pass(quads[1], arraysize(quads[1]), 2, SurfaceSize())}; + Pass passes[] = {Pass(quads[0], base::size(quads[0]), 1, SurfaceSize()), + Pass(quads[1], base::size(quads[1]), 2, SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id}; - AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); + AggregateAndVerify(passes, base::size(passes), ids, base::size(ids)); } // Ensure that the render pass ID map properly keeps and deletes entries. @@ -638,11 +640,11 @@ Quad::SolidColorQuad(SK_ColorLTGRAY, gfx::Rect(5, 5))}, {Quad::SolidColorQuad(SK_ColorGRAY, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorDKGRAY, gfx::Rect(5, 5))}}; - Pass passes[] = {Pass(quads[0], arraysize(quads[0]), 2, SurfaceSize()), - Pass(quads[1], arraysize(quads[1]), 1, SurfaceSize())}; + Pass passes[] = {Pass(quads[0], base::size(quads[0]), 2, SurfaceSize()), + Pass(quads[1], base::size(quads[1]), 1, SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); SurfaceId surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -660,10 +662,10 @@ EXPECT_EQ(id0, aggregated_frame.render_pass_list[0]->id); EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); - Pass passes2[] = {Pass(quads[0], arraysize(quads[0]), 3, SurfaceSize()), - Pass(quads[1], arraysize(quads[1]), 1, SurfaceSize())}; + Pass passes2[] = {Pass(quads[0], base::size(quads[0]), 3, SurfaceSize()), + Pass(quads[1], base::size(quads[1]), 1, SurfaceSize())}; - SubmitCompositorFrame(support_.get(), passes2, arraysize(passes2), + SubmitCompositorFrame(support_.get(), passes2, base::size(passes2), root_local_surface_id_, device_scale_factor); // The RenderPass that still exists should keep the same ID. @@ -674,7 +676,7 @@ EXPECT_NE(id2, id0); EXPECT_EQ(id1, aggregated_frame.render_pass_list[1]->id); - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); // |id1| didn't exist in the previous frame, so it should be @@ -703,11 +705,11 @@ Quad embedded_quads[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); Quad root_quads[] = { @@ -715,9 +717,10 @@ Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, device_scale_factor); Quad expected_quads[] = { @@ -725,11 +728,11 @@ Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id, embedded_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // This test verifies that in the absence of a primary Surface, @@ -754,14 +757,14 @@ Quad fallback_child_quads[] = { Quad::SolidColorQuad(SK_ColorRED, gfx::Rect(fallback_size))}; Pass fallback_child_passes[] = {Pass( - fallback_child_quads, arraysize(fallback_child_quads), fallback_size)}; + fallback_child_quads, base::size(fallback_child_quads), fallback_size)}; // Submit a CompositorFrame to the fallback Surface containing a red // SolidColorDrawQuad. constexpr float device_scale_factor_1 = 1.0f; constexpr float device_scale_factor_2 = 2.0f; SubmitCompositorFrame(fallback_child_support.get(), fallback_child_passes, - arraysize(fallback_child_passes), + base::size(fallback_child_passes), fallback_child_local_surface_id, device_scale_factor_2); // Try to embed |primary_child_surface_id| and if unavailable, embed @@ -770,7 +773,8 @@ Quad root_quads[] = { Quad::SurfaceQuad(primary_child_surface_id, fallback_child_surface_id, SK_ColorWHITE, surface_quad_rect, false)}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; MockAggregatedDamageCallback aggregated_damage_callback; @@ -781,7 +785,7 @@ fallback_child_support->SetAggregatedDamageCallbackForTesting( aggregated_damage_callback.GetCallback()); - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, device_scale_factor_1); // There is no CompositorFrame submitted to |primary_child_surface_id| and @@ -795,7 +799,7 @@ Quad::SolidColorQuad(SK_ColorRED, gfx::Rect(5, 5)), }; Pass expected_passes1[] = { - Pass(expected_quads1, arraysize(expected_quads1), SurfaceSize())}; + Pass(expected_quads1, base::size(expected_quads1), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id, fallback_child_surface_id}; @@ -816,15 +820,15 @@ .Times(1); // The primary_surface will not be listed in previously contained surfaces. - AggregateAndVerify(expected_passes1, arraysize(expected_passes1), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes1, base::size(expected_passes1), ids, + base::size(ids)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); // Submit the fallback again to create some damage then aggregate again. fallback_child_local_surface_id = allocator_.GenerateId(); SubmitCompositorFrame(fallback_child_support.get(), fallback_child_passes, - arraysize(fallback_child_passes), + base::size(fallback_child_passes), fallback_child_local_surface_id, device_scale_factor_1); // The damage should be equal to whole size of the primary SurfaceDrawQuad. @@ -833,8 +837,8 @@ surface_quad_rect, next_display_time())) .Times(1); - AggregateAndVerify(expected_passes1, arraysize(expected_passes1), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes1, base::size(expected_passes1), ids, + base::size(ids)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); @@ -842,13 +846,13 @@ Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; constexpr gfx::Size primary_surface_size(5, 5); Pass primary_child_passes[] = {Pass(primary_child_quads, - arraysize(primary_child_quads), + base::size(primary_child_quads), primary_surface_size)}; // Submit a CompositorFrame to the primary Surface containing a green // SolidColorDrawQuad. SubmitCompositorFrame(primary_child_support.get(), primary_child_passes, - arraysize(primary_child_passes), + base::size(primary_child_passes), primary_child_local_surface_id, device_scale_factor_2); // Now that the primary Surface has a CompositorFrame, we expect @@ -857,7 +861,7 @@ Quad expected_quads2[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass expected_passes2[] = { - Pass(expected_quads2, arraysize(expected_quads2), SurfaceSize())}; + Pass(expected_quads2, base::size(expected_quads2), SurfaceSize())}; SurfaceId ids2[] = {root_surface_id, primary_child_surface_id}; @@ -878,8 +882,8 @@ gfx::Rect(primary_surface_size), next_display_time())) .Times(1); - AggregateAndVerify(expected_passes2, arraysize(expected_passes2), ids2, - arraysize(ids2)); + AggregateAndVerify(expected_passes2, base::size(expected_passes2), ids2, + base::size(ids2)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); } @@ -916,14 +920,15 @@ Quad root_quads[] = { Quad::SurfaceQuad(primary_child_surface_id, primary_child_surface_id, SK_ColorWHITE, surface_quad_rect, true)}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; MockAggregatedDamageCallback aggregated_damage_callback; support_->SetAggregatedDamageCallbackForTesting( aggregated_damage_callback.GetCallback()); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, 1.0f); EXPECT_CALL( @@ -984,14 +989,15 @@ Quad root_quads[] = { Quad::SurfaceQuad(primary_child_surface_id, primary_child_surface_id, SK_ColorWHITE, surface_quad_rect, true)}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; MockAggregatedDamageCallback aggregated_damage_callback; support_->SetAggregatedDamageCallbackForTesting( aggregated_damage_callback.GetCallback()); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, 2.0f); EXPECT_CALL( @@ -1053,14 +1059,15 @@ Quad root_quads[] = { Quad::SurfaceQuad(primary_child_surface_id, primary_child_surface_id, SK_ColorWHITE, surface_quad_rect, true)}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; MockAggregatedDamageCallback aggregated_damage_callback; support_->SetAggregatedDamageCallbackForTesting( aggregated_damage_callback.GetCallback()); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, 0.5f); EXPECT_CALL( @@ -1101,13 +1108,13 @@ Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; constexpr gfx::Size primary_size(50, 50); Pass primary_child_passes[] = { - Pass(primary_child_quads, arraysize(primary_child_quads), primary_size)}; + Pass(primary_child_quads, base::size(primary_child_quads), primary_size)}; // Submit a CompositorFrame to the primary Surface containing a green // SolidColorDrawQuad. constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(primary_child_support.get(), primary_child_passes, - arraysize(primary_child_passes), + base::size(primary_child_passes), primary_child_local_surface_id, device_scale_factor); auto fallback_child_support = std::make_unique<CompositorFrameSinkSupport>( @@ -1120,12 +1127,12 @@ Quad fallback_child_quads[] = { Quad::SolidColorQuad(SK_ColorRED, gfx::Rect(5, 5))}; Pass fallback_child_passes[] = {Pass( - fallback_child_quads, arraysize(fallback_child_quads), SurfaceSize())}; + fallback_child_quads, base::size(fallback_child_quads), SurfaceSize())}; // Submit a CompositorFrame to the fallback Surface containing a red // SolidColorDrawQuad. SubmitCompositorFrame(fallback_child_support.get(), fallback_child_passes, - arraysize(fallback_child_passes), + base::size(fallback_child_passes), fallback_child_local_surface_id, device_scale_factor); // Try to embed |primary_child_surface_id| and if unavailabe, embed @@ -1135,13 +1142,13 @@ SK_ColorWHITE, gfx::Rect(5, 5), false)}; constexpr gfx::Size root_size(75, 75); Pass root_passes[] = { - Pass(root_quads, arraysize(root_quads), root_size, NoDamage())}; + Pass(root_quads, base::size(root_quads), root_size, NoDamage())}; MockAggregatedDamageCallback aggregated_damage_callback; support_->SetAggregatedDamageCallbackForTesting( aggregated_damage_callback.GetCallback()); - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, device_scale_factor); // The CompositorFrame is submitted to |primary_child_surface_id|, so @@ -1150,7 +1157,7 @@ Quad expected_quads1[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass expected_passes1[] = { - Pass(expected_quads1, arraysize(expected_quads1), SurfaceSize())}; + Pass(expected_quads1, base::size(expected_quads1), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id, primary_child_surface_id}; @@ -1160,14 +1167,14 @@ gfx::Rect(root_size), next_display_time())); // The fallback will not be contained within the aggregated frame. - AggregateAndVerify(expected_passes1, arraysize(expected_passes1), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes1, base::size(expected_passes1), ids, + base::size(ids)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); // Submit a new frame to the primary surface to cause some damage. SubmitCompositorFrame(primary_child_support.get(), primary_child_passes, - arraysize(primary_child_passes), + base::size(primary_child_passes), primary_child_local_surface_id, device_scale_factor); // The size of the damage should be equal to the size of the primary surface. @@ -1176,8 +1183,8 @@ gfx::Rect(primary_size), next_display_time())); // Generate a new aggregated frame. - AggregateAndVerify(expected_passes1, arraysize(expected_passes1), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes1, base::size(expected_passes1), ids, + base::size(ids)); testing::Mock::VerifyAndClearExpectations(&aggregated_damage_callback); } @@ -1193,11 +1200,11 @@ Quad embedded_quads[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); auto copy_request = CopyOutputRequest::CreateStubForTesting(); auto* copy_request_ptr = copy_request.get(); @@ -1209,9 +1216,10 @@ Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -1223,9 +1231,9 @@ Quad::RenderPassQuad(aggregated_frame.render_pass_list[0]->id), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize()), - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; - TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize()), + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; + TestPassesMatchExpectations(expected_passes, base::size(expected_passes), &aggregated_frame.render_pass_list); ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); @@ -1233,9 +1241,9 @@ aggregated_frame.render_pass_list[0]->copy_requests[0].get()); SurfaceId surface_ids[] = {root_surface_id, embedded_surface_id}; - EXPECT_EQ(arraysize(surface_ids), + EXPECT_EQ(base::size(surface_ids), aggregator_.previous_contained_surfaces().size()); - for (size_t i = 0; i < arraysize(surface_ids); i++) { + for (size_t i = 0; i < base::size(surface_ids); i++) { EXPECT_TRUE( aggregator_.previous_contained_surfaces().find(surface_ids[i]) != aggregator_.previous_contained_surfaces().end()); @@ -1254,11 +1262,11 @@ Quad embedded_quads[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); auto copy_request(CopyOutputRequest::CreateStubForTesting()); auto* copy_request_ptr = copy_request.get(); @@ -1272,11 +1280,11 @@ Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; Quad root_quads2[] = {Quad::SolidColorQuad(SK_ColorRED, gfx::Rect(5, 5))}; Pass root_passes[] = { - Pass(root_quads, arraysize(root_quads), 1, SurfaceSize()), - Pass(root_quads2, arraysize(root_quads2), 2, SurfaceSize())}; + Pass(root_quads, base::size(root_quads), 1, SurfaceSize()), + Pass(root_quads2, base::size(root_quads2), 2, SurfaceSize())}; { CompositorFrame frame = MakeEmptyCompositorFrame(); - AddPasses(&frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&frame.render_pass_list, root_passes, base::size(root_passes)); frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); frame.render_pass_list[1]->copy_requests.push_back( std::move(copy_request2)); @@ -1293,9 +1301,9 @@ Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize()), - Pass(root_quads2, arraysize(root_quads2), SurfaceSize())}; - TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), + Pass(expected_quads, base::size(expected_quads), SurfaceSize()), + Pass(root_quads2, base::size(root_quads2), SurfaceSize())}; + TestPassesMatchExpectations(expected_passes, base::size(expected_passes), &aggregated_frame.render_pass_list); ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); @@ -1306,9 +1314,9 @@ aggregated_frame.render_pass_list[1]->copy_requests[0].get()); SurfaceId surface_ids[] = {root_surface_id, embedded_surface_id}; - EXPECT_EQ(arraysize(surface_ids), + EXPECT_EQ(base::size(surface_ids), aggregator_.previous_contained_surfaces().size()); - for (size_t i = 0; i < arraysize(surface_ids); i++) { + for (size_t i = 0; i < base::size(surface_ids); i++) { EXPECT_TRUE( aggregator_.previous_contained_surfaces().find(surface_ids[i]) != aggregator_.previous_contained_surfaces().end()); @@ -1340,11 +1348,11 @@ Quad embedded_quads[] = { Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}; Pass embedded_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize())}; + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(embedded_support.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); auto copy_request(CopyOutputRequest::CreateStubForTesting()); auto* copy_request_ptr = copy_request.get(); @@ -1361,12 +1369,13 @@ gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorLTGRAY, gfx::Rect(5, 5))}; Pass parent_passes[] = { - Pass(parent_quads, arraysize(parent_quads), SurfaceSize())}; + Pass(parent_quads, base::size(parent_quads), SurfaceSize())}; { CompositorFrame frame = MakeEmptyCompositorFrame(); - AddPasses(&frame.render_pass_list, parent_passes, arraysize(parent_passes)); + AddPasses(&frame.render_pass_list, parent_passes, + base::size(parent_passes)); frame.metadata.referenced_surfaces.push_back(embedded_surface_id); @@ -1376,11 +1385,12 @@ Quad root_quads[] = {Quad::SolidColorQuad(SK_ColorWHITE, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLACK, gfx::Rect(5, 5))}; - Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass root_passes[] = { + Pass(root_quads, base::size(root_quads), SurfaceSize())}; { CompositorFrame frame = MakeEmptyCompositorFrame(); - AddPasses(&frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&frame.render_pass_list, root_passes, base::size(root_passes)); frame.metadata.referenced_surfaces.push_back(parent_surface_id); // Reference to Surface ID of a Surface that doesn't exist should be @@ -1399,9 +1409,9 @@ // parent_quad should be ignored because it is neither referenced through a // SurfaceDrawQuad nor has a copy request on it. Pass expected_passes[] = { - Pass(embedded_quads, arraysize(embedded_quads), SurfaceSize()), - Pass(root_quads, arraysize(root_quads), SurfaceSize())}; - TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), + Pass(embedded_quads, base::size(embedded_quads), SurfaceSize()), + Pass(root_quads, base::size(root_quads), SurfaceSize())}; + TestPassesMatchExpectations(expected_passes, base::size(expected_passes), &aggregated_frame.render_pass_list); ASSERT_EQ(2u, aggregated_frame.render_pass_list.size()); ASSERT_EQ(1u, aggregated_frame.render_pass_list[0]->copy_requests.size()); @@ -1411,9 +1421,9 @@ SurfaceId surface_ids[] = { SurfaceId(support_->frame_sink_id(), root_local_surface_id_), parent_surface_id, embedded_surface_id}; - EXPECT_EQ(arraysize(surface_ids), + EXPECT_EQ(base::size(surface_ids), aggregator_.previous_contained_surfaces().size()); - for (size_t i = 0; i < arraysize(surface_ids); i++) { + for (size_t i = 0; i < base::size(surface_ids); i++) { EXPECT_TRUE( aggregator_.previous_contained_surfaces().find(surface_ids[i]) != aggregator_.previous_contained_surfaces().end()); @@ -1435,16 +1445,16 @@ {Quad::SolidColorQuad(4, gfx::Rect(5, 5)), Quad::RenderPassQuad(pass_ids[1])}}; Pass embedded_passes[] = { - Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0], + Pass(embedded_quads[0], base::size(embedded_quads[0]), pass_ids[0], SurfaceSize()), - Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1], + Pass(embedded_quads[1], base::size(embedded_quads[1]), pass_ids[1], SurfaceSize()), - Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2], + Pass(embedded_quads[2], base::size(embedded_quads[2]), pass_ids[2], SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(child_support_.get(), embedded_passes, - arraysize(embedded_passes), embedded_local_surface_id, + base::size(embedded_passes), embedded_local_surface_id, device_scale_factor); Quad root_quads[][2] = { @@ -1455,13 +1465,14 @@ Quad::RenderPassQuad(pass_ids[0])}, {Quad::SolidColorQuad(7, gfx::Rect(5, 5)), Quad::RenderPassQuad(pass_ids[1])}}; - Pass root_passes[] = { - Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0], SurfaceSize()), - Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1], SurfaceSize()), - Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2], - SurfaceSize())}; + Pass root_passes[] = {Pass(root_quads[0], base::size(root_quads[0]), + pass_ids[0], SurfaceSize()), + Pass(root_quads[1], base::size(root_quads[1]), + pass_ids[1], SurfaceSize()), + Pass(root_quads[2], base::size(root_quads[2]), + pass_ids[2], SurfaceSize())}; - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -1574,20 +1585,20 @@ Quad::SurfaceQuad(InvalidSurfaceId(), InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); Quad expected_quads[] = {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // Tests a reference to a valid surface with no submitted frame. A @@ -1602,10 +1613,10 @@ Quad::SurfaceQuad(surface_with_no_frame_id, InvalidSurfaceId(), SK_ColorYELLOW, gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); Quad expected_quads[] = { @@ -1613,11 +1624,11 @@ Quad::SolidColorQuad(SK_ColorYELLOW, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorBLUE, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // Tests a reference to a valid primary surface and a fallback surface @@ -1631,10 +1642,10 @@ Quad quads[] = {Quad::SurfaceQuad(surface_with_no_frame_id, surface_with_no_frame_id, SK_ColorYELLOW, gfx::Rect(5, 5), false)}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); Quad expected_quads[] = { @@ -1645,11 +1656,11 @@ #endif }; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); SurfaceId ids[] = {root_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // Tests a surface quad referencing itself, generating a trivial cycle. @@ -1659,19 +1670,19 @@ Quad quads[] = {Quad::SurfaceQuad(root_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorYELLOW, gfx::Rect(5, 5))}; - Pass passes[] = {Pass(quads, arraysize(quads), SurfaceSize())}; + Pass passes[] = {Pass(quads, base::size(quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); Quad expected_quads[] = { Quad::SolidColorQuad(SK_ColorYELLOW, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId ids[] = {root_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // Tests a more complex cycle with one intermediate surface. @@ -1686,11 +1697,12 @@ gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorCYAN, gfx::Rect(5, 5))}; Pass parent_passes[] = { - Pass(parent_quads, arraysize(parent_quads), SurfaceSize())}; + Pass(parent_quads, base::size(parent_quads), SurfaceSize())}; constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), parent_passes, arraysize(parent_passes), - root_local_surface_id_, device_scale_factor); + SubmitCompositorFrame(support_.get(), parent_passes, + base::size(parent_passes), root_local_surface_id_, + device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); Quad child_quads[] = { @@ -1699,10 +1711,10 @@ gfx::Rect(5, 5), false), Quad::SolidColorQuad(SK_ColorMAGENTA, gfx::Rect(5, 5))}; Pass child_passes[] = { - Pass(child_quads, arraysize(child_quads), SurfaceSize())}; + Pass(child_quads, base::size(child_quads), SurfaceSize())}; SubmitCompositorFrame(child_support_.get(), child_passes, - arraysize(child_passes), child_local_surface_id, + base::size(child_passes), child_local_surface_id, device_scale_factor); // The child surface's reference to the root_surface_ will be dropped, so @@ -1717,10 +1729,10 @@ Quad::SolidColorQuad(SK_ColorMAGENTA, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorCYAN, gfx::Rect(5, 5))}; Pass expected_passes[] = { - Pass(expected_quads, arraysize(expected_quads), SurfaceSize())}; + Pass(expected_quads, base::size(expected_quads), SurfaceSize())}; SurfaceId ids[] = {root_surface_id, child_surface_id}; - AggregateAndVerify(expected_passes, arraysize(expected_passes), ids, - arraysize(ids)); + AggregateAndVerify(expected_passes, base::size(expected_passes), ids, + base::size(ids)); } // Tests that we map render pass IDs from different surfaces into a unified @@ -1734,14 +1746,14 @@ Quad child_quad[][1] = { {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}, {Quad::RenderPassQuad(child_pass_id[0])}}; - Pass surface_passes[] = {Pass(child_quad[0], arraysize(child_quad[0]), + Pass surface_passes[] = {Pass(child_quad[0], base::size(child_quad[0]), child_pass_id[0], SurfaceSize()), - Pass(child_quad[1], arraysize(child_quad[1]), + Pass(child_quad[1], base::size(child_quad[1]), child_pass_id[1], SurfaceSize())}; constexpr float device_scale_factor = 1.0f; SubmitCompositorFrame(child_support_.get(), surface_passes, - arraysize(surface_passes), child_local_surface_id, + base::size(surface_passes), child_local_surface_id, device_scale_factor); // Pass IDs from the parent surface may collide with ones from the child. @@ -1750,13 +1762,14 @@ {Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}, {Quad::RenderPassQuad(parent_pass_id[0])}}; - Pass parent_passes[] = {Pass(parent_quad[0], arraysize(parent_quad[0]), + Pass parent_passes[] = {Pass(parent_quad[0], base::size(parent_quad[0]), parent_pass_id[0], SurfaceSize()), - Pass(parent_quad[1], arraysize(parent_quad[1]), + Pass(parent_quad[1], base::size(parent_quad[1]), parent_pass_id[1], SurfaceSize())}; - SubmitCompositorFrame(support_.get(), parent_passes, arraysize(parent_passes), - root_local_surface_id_, device_scale_factor); + SubmitCompositorFrame(support_.get(), parent_passes, + base::size(parent_passes), root_local_surface_id_, + device_scale_factor); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); CompositorFrame aggregated_frame = @@ -1986,14 +1999,14 @@ {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}, {Quad::RenderPassQuad(child_pass_id[0])}, }; - Pass child_passes[] = {Pass(child_quads[0], arraysize(child_quads[0]), + Pass child_passes[] = {Pass(child_quads[0], base::size(child_quads[0]), child_pass_id[0], SurfaceSize()), - Pass(child_quads[1], arraysize(child_quads[1]), + Pass(child_quads[1], base::size(child_quads[1]), child_pass_id[1], SurfaceSize())}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_nonroot_pass = child_frame.render_pass_list[0].get(); child_nonroot_pass->transform_to_root_target.Translate(8, 0); @@ -2020,12 +2033,12 @@ InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; Pass middle_passes[] = { - Pass(middle_quads, arraysize(middle_quads), SurfaceSize()), + Pass(middle_quads, base::size(middle_quads), SurfaceSize()), }; CompositorFrame middle_frame = MakeEmptyCompositorFrame(); AddPasses(&middle_frame.render_pass_list, middle_passes, - arraysize(middle_passes)); + base::size(middle_passes)); auto* middle_root_pass = middle_frame.render_pass_list[0].get(); DrawQuad* middle_frame_quad = middle_root_pass->quad_list.ElementAt(0); @@ -2046,11 +2059,11 @@ gfx::Rect(5, 5), false)}; Quad root_quads[] = {Quad::SolidColorQuad(1, gfx::Rect(5, 5))}; Pass root_passes[] = { - Pass(secondary_quads, arraysize(secondary_quads), SurfaceSize()), - Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass(secondary_quads, base::size(secondary_quads), SurfaceSize()), + Pass(root_quads, base::size(root_quads), SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); root_frame.render_pass_list[0] ->shared_quad_state_list.front() @@ -2152,11 +2165,11 @@ kNeedsSyncPoints); Quad child_quads[] = {Quad::RenderPassQuad(1)}; Pass child_passes[] = { - Pass(child_quads, arraysize(child_quads), 1, SurfaceSize())}; + Pass(child_quads, base::size(child_quads), 1, SurfaceSize())}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); auto* child_root_pass_sqs = child_root_pass->shared_quad_state_list.front(); @@ -2171,14 +2184,15 @@ Quad parent_surface_quads[] = { Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass parent_surface_passes[] = {Pass( - parent_surface_quads, arraysize(parent_surface_quads), 1, SurfaceSize())}; + Pass parent_surface_passes[] = {Pass(parent_surface_quads, + base::size(parent_surface_quads), 1, + SurfaceSize())}; // Parent surface is only used to test if the transform is applied correctly // to the child surface's damage. CompositorFrame parent_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&parent_surface_frame.render_pass_list, parent_surface_passes, - arraysize(parent_surface_passes)); + base::size(parent_surface_passes)); LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); SurfaceId parent_surface_id(parent_support->frame_sink_id(), @@ -2192,12 +2206,13 @@ Quad root_render_pass_quads[] = {Quad::RenderPassQuad(1)}; Pass root_passes[] = { - Pass(root_surface_quads, arraysize(root_surface_quads), 1, SurfaceSize()), - Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2, + Pass(root_surface_quads, base::size(root_surface_quads), 1, + SurfaceSize()), + Pass(root_render_pass_quads, base::size(root_render_pass_quads), 2, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); root_frame.render_pass_list[0] ->shared_quad_state_list.front() @@ -2226,7 +2241,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); auto* child_root_pass_sqs = child_root_pass->shared_quad_state_list.front(); @@ -2255,7 +2270,7 @@ { CompositorFrame root_frame = MakeEmptyCompositorFrame(); AddPasses(&root_frame.render_pass_list, root_passes, - arraysize(root_passes)); + base::size(root_passes)); root_frame.render_pass_list[0] ->shared_quad_state_list.front() @@ -2269,7 +2284,7 @@ { CompositorFrame root_frame = MakeEmptyCompositorFrame(); AddPasses(&root_frame.render_pass_list, root_passes, - arraysize(root_passes)); + base::size(root_passes)); root_frame.render_pass_list[0] ->shared_quad_state_list.front() @@ -2337,11 +2352,11 @@ kNeedsSyncPoints); Quad child_quads[] = {Quad::RenderPassQuad(1)}; Pass child_passes[] = { - Pass(child_quads, arraysize(child_quads), 1, gfx::Size(100, 100))}; + Pass(child_quads, base::size(child_quads), 1, gfx::Size(100, 100))}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); auto* child_root_pass_sqs = child_root_pass->shared_quad_state_list.front(); @@ -2356,14 +2371,15 @@ Quad parent_surface_quads[] = { Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass parent_surface_passes[] = {Pass( - parent_surface_quads, arraysize(parent_surface_quads), 1, SurfaceSize())}; + Pass parent_surface_passes[] = {Pass(parent_surface_quads, + base::size(parent_surface_quads), 1, + SurfaceSize())}; // Parent surface is only used to test if the transform is applied correctly // to the child surface's damage. CompositorFrame parent_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&parent_surface_frame.render_pass_list, parent_surface_passes, - arraysize(parent_surface_passes)); + base::size(parent_surface_passes)); LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); SurfaceId parent_surface_id(parent_support->frame_sink_id(), @@ -2377,11 +2393,12 @@ Quad root_render_pass_quads[] = {Quad::RenderPassQuad(1)}; Pass root_passes[] = { - Pass(root_surface_quads, arraysize(root_surface_quads), 1, SurfaceSize()), - Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2, + Pass(root_surface_quads, base::size(root_surface_quads), 1, + SurfaceSize()), + Pass(root_render_pass_quads, base::size(root_render_pass_quads), 2, SurfaceSize())}; - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, 1.0f); // Damage rect for first aggregation should be exactly the entire root @@ -2401,7 +2418,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); child_root_pass->damage_rect = gfx::Rect(10, 20, 20, 30); @@ -2441,11 +2458,11 @@ kNeedsSyncPoints); Quad child_quads[] = {Quad::RenderPassQuad(1)}; Pass child_passes[] = { - Pass(child_quads, arraysize(child_quads), 1, gfx::Size(100, 100))}; + Pass(child_quads, base::size(child_quads), 1, gfx::Size(100, 100))}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); auto* child_root_pass_sqs = child_root_pass->shared_quad_state_list.front(); @@ -2460,14 +2477,15 @@ Quad parent_surface_quads[] = { Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass parent_surface_passes[] = {Pass( - parent_surface_quads, arraysize(parent_surface_quads), 1, SurfaceSize())}; + Pass parent_surface_passes[] = {Pass(parent_surface_quads, + base::size(parent_surface_quads), 1, + SurfaceSize())}; // Parent surface is only used to test if the transform is applied correctly // to the child surface's damage. CompositorFrame parent_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&parent_surface_frame.render_pass_list, parent_surface_passes, - arraysize(parent_surface_passes)); + base::size(parent_surface_passes)); LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); SurfaceId parent_surface_id(parent_support->frame_sink_id(), @@ -2481,11 +2499,12 @@ Quad root_render_pass_quads[] = {Quad::RenderPassQuad(1)}; Pass root_passes[] = { - Pass(root_surface_quads, arraysize(root_surface_quads), 1, SurfaceSize()), - Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2, + Pass(root_surface_quads, base::size(root_surface_quads), 1, + SurfaceSize()), + Pass(root_render_pass_quads, base::size(root_render_pass_quads), 2, SurfaceSize())}; - SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes), + SubmitCompositorFrame(support_.get(), root_passes, base::size(root_passes), root_local_surface_id_, 1.0f); // Damage rect for first aggregation should contain entire root surface. The @@ -2506,7 +2525,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_root_pass = child_frame.render_pass_list[0].get(); child_root_pass->damage_rect = gfx::Rect(10, 15, 20, 30); @@ -2538,11 +2557,11 @@ Quad root_render_pass_quads[] = {Quad::SolidColorQuad(1, gfx::Rect(5, 5))}; Pass root_passes[] = {Pass(root_render_pass_quads, - arraysize(root_render_pass_quads), 2, + base::size(root_render_pass_quads), 2, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); @@ -2571,12 +2590,12 @@ Quad root_render_pass_quads[] = {Quad::SolidColorQuad(1, gfx::Rect(5, 5))}; Pass root_passes[] = {Pass(root_render_pass_quads, - arraysize(root_render_pass_quads), 2, + base::size(root_render_pass_quads), 2, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); AddPasses(&root_frame.render_pass_list, root_passes, - arraysize(root_passes)); + base::size(root_passes)); root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); @@ -2628,15 +2647,15 @@ Quad child_quads1[] = {Quad::RenderPassQuad(child_pass_id)}; Quad child_quads2[] = {Quad::RenderPassQuad(child_pass_id)}; Quad child_quads3[] = {Quad::RenderPassQuad(child_pass_id)}; - Pass child_passes[] = {Pass(child_quads1, arraysize(child_quads1), + Pass child_passes[] = {Pass(child_quads1, base::size(child_quads1), child_pass_id, SurfaceSize()), - Pass(child_quads2, arraysize(child_quads2), + Pass(child_quads2, base::size(child_quads2), child_pass_id, SurfaceSize()), - Pass(child_quads3, arraysize(child_quads2), + Pass(child_quads3, base::size(child_quads2), child_pass_id, SurfaceSize())}; RenderPassList child_pass_list; - AddPasses(&child_pass_list, child_passes, arraysize(child_passes)); + AddPasses(&child_pass_list, child_passes, base::size(child_passes)); child_pass_list[0]->quad_list.ElementAt(0)->visible_rect = gfx::Rect(1, 1, 2, 2); @@ -2666,10 +2685,10 @@ false)}; Pass root_passes[] = { - Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass(root_quads, base::size(root_quads), SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* root_pass = root_pass_list[0].get(); root_pass->shared_quad_state_list.front() @@ -2701,10 +2720,10 @@ false)}; Pass root_passes[] = { - Pass(root_quads, arraysize(root_quads), SurfaceSize())}; + Pass(root_quads, base::size(root_quads), SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* root_pass = root_pass_list[0].get(); root_pass->shared_quad_state_list.front() @@ -2738,13 +2757,13 @@ int child_pass_ids[] = {1, 2}; Quad child_quads1[] = {Quad::SolidColorQuad(1, gfx::Rect(5, 5))}; Quad child_quads2[] = {Quad::RenderPassQuad(child_pass_ids[0])}; - Pass child_passes[] = {Pass(child_quads1, arraysize(child_quads1), + Pass child_passes[] = {Pass(child_quads1, base::size(child_quads1), child_pass_ids[0], SurfaceSize()), - Pass(child_quads2, arraysize(child_quads2), + Pass(child_quads2, base::size(child_quads2), child_pass_ids[1], SurfaceSize())}; RenderPassList child_pass_list; - AddPasses(&child_pass_list, child_passes, arraysize(child_passes)); + AddPasses(&child_pass_list, child_passes, base::size(child_passes)); child_pass_list[0]->quad_list.ElementAt(0)->visible_rect = gfx::Rect(1, 1, 2, 2); @@ -2806,15 +2825,15 @@ gfx::Rect(5, 5), false)}; Quad root_quads2[] = {Quad::RenderPassQuad(root_pass_ids[0])}; Quad root_quads3[] = {Quad::RenderPassQuad(root_pass_ids[1])}; - Pass root_passes[] = {Pass(root_quads1, arraysize(root_quads1), + Pass root_passes[] = {Pass(root_quads1, base::size(root_quads1), root_pass_ids[0], SurfaceSize()), - Pass(root_quads2, arraysize(root_quads2), + Pass(root_quads2, base::size(root_quads2), root_pass_ids[1], SurfaceSize()), - Pass(root_quads3, arraysize(root_quads3), + Pass(root_quads3, base::size(root_quads3), root_pass_ids[2], SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* filter_pass = root_pass_list[1].get(); filter_pass->shared_quad_state_list.front() @@ -2857,13 +2876,13 @@ Quad::RenderPassQuad(root_pass_ids[0]), Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass root_passes[] = {Pass(root_quads1, arraysize(root_quads1), + Pass root_passes[] = {Pass(root_quads1, base::size(root_quads1), root_pass_ids[0], SurfaceSize()), - Pass(root_quads2, arraysize(root_quads2), + Pass(root_quads2, base::size(root_quads2), root_pass_ids[1], SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* pass = root_pass_list[0].get(); auto* root_pass = root_pass_list[1].get(); @@ -2909,13 +2928,13 @@ Quad::RenderPassQuad(root_pass_ids[0]), Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass root_passes[] = {Pass(root_quads1, arraysize(root_quads1), + Pass root_passes[] = {Pass(root_quads1, base::size(root_quads1), root_pass_ids[0], SurfaceSize()), - Pass(root_quads2, arraysize(root_quads2), + Pass(root_quads2, base::size(root_quads2), root_pass_ids[1], SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* pass = root_pass_list[0].get(); auto* root_pass = root_pass_list[1].get(); @@ -2952,10 +2971,11 @@ class SurfaceAggregatorWithResourcesTest : public testing::Test, public DisplayTimeSource { public: + SurfaceAggregatorWithResourcesTest() : manager_(&shared_bitmap_manager_) {} + void SetUp() override { - shared_bitmap_manager_ = std::make_unique<TestSharedBitmapManager>(); resource_provider_ = std::make_unique<DisplayResourceProvider>( - nullptr, shared_bitmap_manager_.get()); + nullptr, &shared_bitmap_manager_); aggregator_ = std::make_unique<SurfaceAggregator>( manager_.surface_manager(), resource_provider_.get(), false); @@ -2963,8 +2983,8 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; - std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; std::unique_ptr<DisplayResourceProvider> resource_provider_; std::unique_ptr<SurfaceAggregator> aggregator_; }; @@ -3023,7 +3043,7 @@ SurfaceId surface_id(support->frame_sink_id(), local_surface_id); ResourceId ids[] = {11, 12, 13}; - SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids, base::size(ids), true, SurfaceId(), support.get(), surface_id); CompositorFrame frame = @@ -3060,7 +3080,7 @@ SurfaceId surface_id2(support->frame_sink_id(), local_surface_id2); ResourceId ids[] = {11, 12, 13}; - SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids, base::size(ids), true, SurfaceId(), support.get(), surface_id1); CompositorFrame frame = @@ -3131,10 +3151,10 @@ SurfaceId surface2_id(support2->frame_sink_id(), local_frame2_id); ResourceId ids[] = {11, 12, 13}; - SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids, base::size(ids), true, SurfaceId(), support1.get(), surface1_id); ResourceId ids2[] = {14, 15, 16}; - SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids2, base::size(ids2), true, SurfaceId(), support2.get(), surface2_id); CompositorFrame frame = @@ -3182,16 +3202,16 @@ child_local_surface_id); ResourceId ids[] = {14, 15, 16}; - SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids, base::size(ids), true, SurfaceId(), child_support.get(), child_surface_id); ResourceId ids2[] = {17, 18, 19}; - SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, + SubmitCompositorFrameWithResources(ids2, base::size(ids2), false, child_surface_id, middle_support.get(), middle_surface_id); ResourceId ids3[] = {20, 21, 22}; - SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, + SubmitCompositorFrameWithResources(ids3, base::size(ids3), true, middle_surface_id, root_support.get(), root_surface_id); @@ -3203,7 +3223,7 @@ ASSERT_EQ(1u, pass_list->size()); EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); EXPECT_EQ(3u, pass_list->back()->quad_list.size()); - SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, + SubmitCompositorFrameWithResources(ids2, base::size(ids), true, child_surface_id, middle_support.get(), middle_surface_id); @@ -3229,7 +3249,7 @@ SurfaceId surface2_id(support2->frame_sink_id(), local_frame2_id); ResourceId ids[] = {11, 12, 13}; - SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), + SubmitCompositorFrameWithResources(ids, base::size(ids), true, SurfaceId(), support1.get(), surface1_id); CompositorFrame frame = @@ -3286,14 +3306,14 @@ Quad::SolidColorQuad(SK_ColorLTGRAY, gfx::Rect(5, 5))}, {Quad::SolidColorQuad(SK_ColorGRAY, gfx::Rect(5, 5)), Quad::SolidColorQuad(SK_ColorDKGRAY, gfx::Rect(5, 5))}}; - Pass passes[] = {Pass(quads[0], arraysize(quads[0]), 2, SurfaceSize()), - Pass(quads[1], arraysize(quads[1]), 1, SurfaceSize())}; + Pass passes[] = {Pass(quads[0], base::size(quads[0]), 2, SurfaceSize()), + Pass(quads[1], base::size(quads[1]), 1, SurfaceSize())}; gfx::ColorSpace color_space1 = gfx::ColorSpace::CreateXYZD50(); gfx::ColorSpace color_space2 = gfx::ColorSpace::CreateSRGB(); gfx::ColorSpace color_space3 = gfx::ColorSpace::CreateSCRGBLinear(); constexpr float device_scale_factor = 1.0f; - SubmitCompositorFrame(support_.get(), passes, arraysize(passes), + SubmitCompositorFrame(support_.get(), passes, base::size(passes), root_local_surface_id_, device_scale_factor); SurfaceId surface_id(support_->frame_sink_id(), root_local_surface_id_); @@ -3327,11 +3347,11 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, HasDamageByChangingChildSurface) { Quad child_surface_quads[] = {Quad::RenderPassQuad(1)}; Pass child_surface_passes[] = {Pass( - child_surface_quads, arraysize(child_surface_quads), 1, SurfaceSize())}; + child_surface_quads, base::size(child_surface_quads), 1, SurfaceSize())}; CompositorFrame child_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&child_surface_frame.render_pass_list, child_surface_passes, - arraysize(child_surface_passes)); + base::size(child_surface_passes)); LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); SurfaceId child_surface_id(child_support_->frame_sink_id(), @@ -3342,11 +3362,11 @@ Quad root_surface_quads[] = { Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass root_passes[] = {Pass(root_surface_quads, arraysize(root_surface_quads), + Pass root_passes[] = {Pass(root_surface_quads, base::size(root_surface_quads), 1, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); support_->SubmitCompositorFrame(root_local_surface_id_, @@ -3369,7 +3389,7 @@ { CompositorFrame child_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&child_surface_frame.render_pass_list, child_surface_passes, - arraysize(child_surface_passes)); + base::size(child_surface_passes)); child_support_->SubmitCompositorFrame(child_local_surface_id, std::move(child_surface_frame)); @@ -3384,7 +3404,7 @@ { CompositorFrame child_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&child_surface_frame.render_pass_list, child_surface_passes, - arraysize(child_surface_passes)); + base::size(child_surface_passes)); child_surface_frame.render_pass_list[0]->damage_rect = gfx::Rect(); child_support_->SubmitCompositorFrame(child_local_surface_id, std::move(child_surface_frame)); @@ -3407,11 +3427,11 @@ Quad child_surface_quads[] = {Quad::RenderPassQuad(1)}; Pass child_surface_passes[] = {Pass( - child_surface_quads, arraysize(child_surface_quads), 1, SurfaceSize())}; + child_surface_quads, base::size(child_surface_quads), 1, SurfaceSize())}; CompositorFrame child_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&child_surface_frame.render_pass_list, child_surface_passes, - arraysize(child_surface_passes)); + base::size(child_surface_passes)); LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); SurfaceId child_surface_id(child_support_->frame_sink_id(), @@ -3422,11 +3442,11 @@ Quad root_surface_quads[] = { Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass root_passes[] = {Pass(root_surface_quads, arraysize(root_surface_quads), + Pass root_passes[] = {Pass(root_surface_quads, base::size(root_surface_quads), 1, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); support_->SubmitCompositorFrame(root_local_surface_id_, @@ -3448,14 +3468,14 @@ // Add a grand_child_frame should cause damage. Quad grand_child_quads[] = {Quad::RenderPassQuad(1)}; Pass grand_child_passes[] = { - Pass(grand_child_quads, arraysize(grand_child_quads), 1, SurfaceSize())}; + Pass(grand_child_quads, base::size(grand_child_quads), 1, SurfaceSize())}; LocalSurfaceId grand_child_local_surface_id = allocator_.GenerateId(); SurfaceId grand_child_surface_id(grand_child_support->frame_sink_id(), grand_child_local_surface_id); { CompositorFrame grand_child_frame = MakeEmptyCompositorFrame(); AddPasses(&grand_child_frame.render_pass_list, grand_child_passes, - arraysize(grand_child_passes)); + base::size(grand_child_passes)); grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id, std::move(grand_child_frame)); @@ -3465,11 +3485,11 @@ Quad::SurfaceQuad(grand_child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; Pass new_child_surface_passes[] = {Pass(new_child_surface_quads, - arraysize(new_child_surface_quads), + base::size(new_child_surface_quads), 1, SurfaceSize())}; child_surface_frame = MakeEmptyCompositorFrame(); AddPasses(&child_surface_frame.render_pass_list, new_child_surface_passes, - arraysize(new_child_surface_passes)); + base::size(new_child_surface_passes)); child_support_->SubmitCompositorFrame(child_local_surface_id, std::move(child_surface_frame)); @@ -3492,7 +3512,7 @@ { CompositorFrame grand_child_frame = MakeEmptyCompositorFrame(); AddPasses(&grand_child_frame.render_pass_list, grand_child_passes, - arraysize(grand_child_passes)); + base::size(grand_child_passes)); grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id, std::move(grand_child_frame)); @@ -3507,7 +3527,7 @@ { CompositorFrame grand_child_frame = MakeEmptyCompositorFrame(); AddPasses(&grand_child_frame.render_pass_list, grand_child_passes, - arraysize(grand_child_passes)); + base::size(grand_child_passes)); grand_child_frame.render_pass_list[0]->damage_rect = gfx::Rect(); grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id, std::move(grand_child_frame)); @@ -3525,11 +3545,11 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, HasDamageFromRenderPassQuads) { Quad child_quads[] = {Quad::RenderPassQuad(1)}; Pass child_passes[] = { - Pass(child_quads, arraysize(child_quads), 1, SurfaceSize())}; + Pass(child_quads, base::size(child_quads), 1, SurfaceSize())}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); SurfaceId child_surface_id(child_support_->frame_sink_id(), @@ -3543,12 +3563,13 @@ Quad root_render_pass_quads[] = {Quad::RenderPassQuad(1)}; Pass root_passes[] = { - Pass(root_surface_quads, arraysize(root_surface_quads), 1, SurfaceSize()), - Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2, + Pass(root_surface_quads, base::size(root_surface_quads), 1, + SurfaceSize()), + Pass(root_render_pass_quads, base::size(root_render_pass_quads), 2, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); support_->SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame)); @@ -3577,7 +3598,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); child_support_->SubmitCompositorFrame(child_local_surface_id, std::move(child_frame)); @@ -3600,11 +3621,12 @@ {Quad::RenderPassQuad(pass_id[0])}, }; Pass root_passes[] = { - Pass(root_quads[0], arraysize(root_quads[0]), pass_id[0], SurfaceSize()), - Pass(root_quads[1], arraysize(root_quads[1]), pass_id[1], SurfaceSize())}; + Pass(root_quads[0], base::size(root_quads[0]), pass_id[0], SurfaceSize()), + Pass(root_quads[1], base::size(root_quads[1]), pass_id[1], + SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); support_->SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame)); @@ -3628,7 +3650,7 @@ { CompositorFrame root_frame = MakeEmptyCompositorFrame(); AddPasses(&root_frame.render_pass_list, root_passes, - arraysize(root_passes)); + base::size(root_passes)); auto* nonroot_pass = root_frame.render_pass_list[0].get(); nonroot_pass->transform_to_root_target.Translate(8, 0); @@ -3655,7 +3677,7 @@ { CompositorFrame root_frame = MakeEmptyCompositorFrame(); AddPasses(&root_frame.render_pass_list, root_passes, - arraysize(root_passes)); + base::size(root_passes)); auto* nonroot_pass = root_frame.render_pass_list[0].get(); nonroot_pass->transform_to_root_target.Translate(8, 0); @@ -3689,14 +3711,14 @@ {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}, {Quad::RenderPassQuad(pass_id[0])}, }; - Pass child_passes[] = {Pass(child_quads[0], arraysize(child_quads[0]), + Pass child_passes[] = {Pass(child_quads[0], base::size(child_quads[0]), pass_id[0], SurfaceSize()), - Pass(child_quads[1], arraysize(child_quads[1]), + Pass(child_quads[1], base::size(child_quads[1]), pass_id[1], SurfaceSize())}; CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); SurfaceId child_surface_id(child_support_->frame_sink_id(), @@ -3708,11 +3730,11 @@ Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), SK_ColorWHITE, gfx::Rect(5, 5), false)}; - Pass root_passes[] = {Pass(root_surface_quads, arraysize(root_surface_quads), + Pass root_passes[] = {Pass(root_surface_quads, base::size(root_surface_quads), 1, SurfaceSize())}; CompositorFrame root_frame = MakeEmptyCompositorFrame(); - AddPasses(&root_frame.render_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_frame.render_pass_list, root_passes, base::size(root_passes)); support_->SubmitCompositorFrame(root_local_surface_id_, std::move(root_frame)); @@ -3736,7 +3758,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_nonroot_pass = child_frame.render_pass_list[0].get(); child_nonroot_pass->transform_to_root_target.Translate(8, 0); @@ -3763,7 +3785,7 @@ { CompositorFrame child_frame = MakeEmptyCompositorFrame(); AddPasses(&child_frame.render_pass_list, child_passes, - arraysize(child_passes)); + base::size(child_passes)); auto* child_nonroot_pass = child_frame.render_pass_list[0].get(); child_nonroot_pass->transform_to_root_target.Translate(8, 0); @@ -3804,13 +3826,13 @@ {Quad::SolidColorQuad(SK_ColorGREEN, gfx::Rect(5, 5))}, {Quad::RenderPassQuad(pass_id[0])}, }; - Pass child_passes[] = {Pass(child_quads[0], arraysize(child_quads[0]), + Pass child_passes[] = {Pass(child_quads[0], base::size(child_quads[0]), pass_id[0], SurfaceSize()), - Pass(child_quads[1], arraysize(child_quads[1]), + Pass(child_quads[1], base::size(child_quads[1]), pass_id[1], SurfaceSize())}; RenderPassList child_pass_list; - AddPasses(&child_pass_list, child_passes, arraysize(child_passes)); + AddPasses(&child_pass_list, child_passes, base::size(child_passes)); child_pass_list[0]->quad_list.ElementAt(0)->visible_rect = gfx::Rect(1, 1, 3, 3); @@ -3834,13 +3856,13 @@ gfx::Rect(5, 5), false)}, {Quad::RenderPassQuad(pass_id[0])}, }; - Pass root_passes[] = {Pass(root_quads[0], arraysize(root_quads[0]), + Pass root_passes[] = {Pass(root_quads[0], base::size(root_quads[0]), pass_id[0], SurfaceSize()), - Pass(root_quads[1], arraysize(root_quads[1]), + Pass(root_quads[1], base::size(root_quads[1]), pass_id[1], SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* root_pass = root_pass_list[1].get(); root_pass->shared_quad_state_list.front() @@ -3874,13 +3896,13 @@ gfx::Rect(5, 5), false)}, {Quad::RenderPassQuad(pass_id[0])}, }; - Pass root_passes[] = {Pass(root_quads[0], arraysize(root_quads[0]), + Pass root_passes[] = {Pass(root_quads[0], base::size(root_quads[0]), pass_id[0], SurfaceSize()), - Pass(root_quads[1], arraysize(root_quads[1]), + Pass(root_quads[1], base::size(root_quads[1]), pass_id[1], SurfaceSize())}; RenderPassList root_pass_list; - AddPasses(&root_pass_list, root_passes, arraysize(root_passes)); + AddPasses(&root_pass_list, root_passes, base::size(root_passes)); auto* root_pass = root_pass_list[1].get(); root_pass->shared_quad_state_list.front()
diff --git a/components/viz/service/display_embedder/gpu_display_provider.cc b/components/viz/service/display_embedder/gpu_display_provider.cc index 6f8d1ae..27b6889 100644 --- a/components/viz/service/display_embedder/gpu_display_provider.cc +++ b/components/viz/service/display_embedder/gpu_display_provider.cc
@@ -69,6 +69,7 @@ GpuServiceImpl* gpu_service_impl, scoped_refptr<gpu::InProcessCommandBuffer::Service> gpu_service, gpu::GpuChannelManager* gpu_channel_manager, + ServerSharedBitmapManager* server_shared_bitmap_manager, bool headless, bool wait_for_all_pipeline_stages_before_draw) : restart_id_(restart_id), @@ -79,6 +80,7 @@ std::make_unique<InProcessGpuMemoryBufferManager>( gpu_channel_manager)), image_factory_(GetImageFactory(gpu_channel_manager)), + server_shared_bitmap_manager_(server_shared_bitmap_manager), task_runner_(base::ThreadTaskRunnerHandle::Get()), headless_(headless), wait_for_all_pipeline_stages_before_draw_( @@ -195,7 +197,7 @@ *out_begin_frame_source = std::move(synthetic_begin_frame_source); return std::make_unique<Display>( - ServerSharedBitmapManager::current(), renderer_settings, frame_sink_id, + server_shared_bitmap_manager_, renderer_settings, frame_sink_id, std::move(output_surface), std::move(scheduler), task_runner_, skia_output_surface); }
diff --git a/components/viz/service/display_embedder/gpu_display_provider.h b/components/viz/service/display_embedder/gpu_display_provider.h index f714ee18..69b46536 100644 --- a/components/viz/service/display_embedder/gpu_display_provider.h +++ b/components/viz/service/display_embedder/gpu_display_provider.h
@@ -32,6 +32,7 @@ class Display; class ExternalBeginFrameControllerImpl; class GpuServiceImpl; +class ServerSharedBitmapManager; class SoftwareOutputDevice; // In-process implementation of DisplayProvider. @@ -42,6 +43,7 @@ GpuServiceImpl* gpu_service_impl, scoped_refptr<gpu::InProcessCommandBuffer::Service> gpu_service, gpu::GpuChannelManager* gpu_channel_manager, + ServerSharedBitmapManager* server_shared_bitmap_manager, bool headless, bool wait_for_all_pipeline_stages_before_draw); ~GpuDisplayProvider() override; @@ -68,6 +70,7 @@ gpu::GpuChannelManagerDelegate* const gpu_channel_manager_delegate_; std::unique_ptr<gpu::GpuMemoryBufferManager> gpu_memory_buffer_manager_; gpu::ImageFactory* const image_factory_; + ServerSharedBitmapManager* const server_shared_bitmap_manager_; #if defined(OS_WIN) // Used for software compositing output on Windows.
diff --git a/components/viz/service/display_embedder/server_shared_bitmap_manager.cc b/components/viz/service/display_embedder/server_shared_bitmap_manager.cc index 9d84f91..c989fc4 100644 --- a/components/viz/service/display_embedder/server_shared_bitmap_manager.cc +++ b/components/viz/service/display_embedder/server_shared_bitmap_manager.cc
@@ -57,19 +57,12 @@ } // namespace -base::LazyInstance<ServerSharedBitmapManager>::DestructorAtExit - g_shared_memory_manager = LAZY_INSTANCE_INITIALIZER; - ServerSharedBitmapManager::ServerSharedBitmapManager() = default; ServerSharedBitmapManager::~ServerSharedBitmapManager() { DCHECK(handle_map_.empty()); } -ServerSharedBitmapManager* ServerSharedBitmapManager::current() { - return g_shared_memory_manager.Pointer(); -} - std::unique_ptr<SharedBitmap> ServerSharedBitmapManager::GetSharedBitmapFromId( const gfx::Size& size, ResourceFormat format,
diff --git a/components/viz/service/display_embedder/server_shared_bitmap_manager.h b/components/viz/service/display_embedder/server_shared_bitmap_manager.h index 5781073..6055c387 100644 --- a/components/viz/service/display_embedder/server_shared_bitmap_manager.h +++ b/components/viz/service/display_embedder/server_shared_bitmap_manager.h
@@ -33,8 +33,6 @@ ServerSharedBitmapManager(); ~ServerSharedBitmapManager() override; - static ServerSharedBitmapManager* current(); - // SharedBitmapManager implementation. std::unique_ptr<SharedBitmap> GetSharedBitmapFromId( const gfx::Size& size,
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc index a403822..fae027a 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -9,9 +9,9 @@ #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/quads/compositor_frame.h" +#include "components/viz/common/resources/shared_bitmap_manager.h" #include "components/viz/common/surfaces/surface_info.h" #include "components/viz/service/display/display.h" -#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" #include "components/viz/service/surfaces/surface_reference.h" @@ -65,7 +65,7 @@ // SharedBitmapId that has been reported from the client. Since the client is // gone that memory can be freed. If we don't then it would leak. for (const auto& id : owned_bitmaps_) - ServerSharedBitmapManager::current()->ChildDeletedSharedBitmap(id); + frame_sink_manager_->shared_bitmap_manager()->ChildDeletedSharedBitmap(id); // No video capture clients should remain after calling // UnregisterCompositorFrameSinkSupport(). @@ -254,7 +254,7 @@ bool CompositorFrameSinkSupport::DidAllocateSharedBitmap( mojo::ScopedSharedBufferHandle buffer, const SharedBitmapId& id) { - if (!ServerSharedBitmapManager::current()->ChildAllocatedSharedBitmap( + if (!frame_sink_manager_->shared_bitmap_manager()->ChildAllocatedSharedBitmap( std::move(buffer), id)) return false; @@ -264,7 +264,7 @@ void CompositorFrameSinkSupport::DidDeleteSharedBitmap( const SharedBitmapId& id) { - ServerSharedBitmapManager::current()->ChildDeletedSharedBitmap(id); + frame_sink_manager_->shared_bitmap_manager()->ChildDeletedSharedBitmap(id); owned_bitmaps_.erase(id); }
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc index 9852c9b..c1a68ed 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc
@@ -11,6 +11,7 @@ #include "components/viz/common/surfaces/frame_sink_id.h" #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_info.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/test/begin_frame_args_test.h" #include "components/viz/test/compositor_frame_helpers.h" @@ -81,7 +82,8 @@ class CompositorFrameSinkSupportTest : public testing::Test { public: CompositorFrameSinkSupportTest() - : begin_frame_source_(0.f, false), + : manager_(&shared_bitmap_manager_), + begin_frame_source_(0.f, false), local_surface_id_(3, kArbitraryToken), frame_sync_token_(GenTestSyncToken(4)), consumer_sync_token_(GenTestSyncToken(5)) { @@ -181,6 +183,7 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl manager_; MockFrameSinkManagerClient frame_sink_manager_client_; FakeCompositorFrameSinkClient fake_support_client_;
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc index 26f1c30b4..4b742b4a 100644 --- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc +++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc
@@ -68,6 +68,7 @@ task_runner_(new cc::OrderedSimpleTaskRunner(now_src_.get(), true)), display_size_(1920, 1080), display_rect_(display_size_), + frame_sink_manager_(&bitmap_manager_), support_manager_(&frame_sink_manager_), context_provider_(TestContextProvider::Create()) { auto display_output_surface = FakeOutputSurface::Create3d(); @@ -130,9 +131,9 @@ const gfx::Size display_size_; const gfx::Rect display_rect_; + TestSharedBitmapManager bitmap_manager_; FrameSinkManagerImpl frame_sink_manager_; TestCompositorFrameSinkSupportManager support_manager_; - TestSharedBitmapManager bitmap_manager_; TestGpuMemoryBufferManager gpu_memory_buffer_manager_; scoped_refptr<TestContextProvider> context_provider_;
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc index d01557f..bad389a 100644 --- a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc +++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "base/metrics/histogram_functions.h" +#include "components/viz/common/resources/shared_bitmap_manager.h" #include "components/viz/service/display/display.h" #include "components/viz/service/display_embedder/display_provider.h" #include "components/viz/service/display_embedder/external_begin_frame_controller_impl.h" @@ -39,9 +40,11 @@ FrameSinkSourceMapping&& other) = default; FrameSinkManagerImpl::FrameSinkManagerImpl( + SharedBitmapManager* shared_bitmap_manager, base::Optional<uint32_t> activation_deadline_in_frames, DisplayProvider* display_provider) - : display_provider_(display_provider), + : shared_bitmap_manager_(shared_bitmap_manager), + display_provider_(display_provider), surface_manager_(activation_deadline_in_frames), hit_test_manager_(surface_manager()), binding_(this) {
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.h b/components/viz/service/frame_sinks/frame_sink_manager_impl.h index b12929d6..8bf4e997 100644 --- a/components/viz/service/frame_sinks/frame_sink_manager_impl.h +++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.h
@@ -37,10 +37,10 @@ #include "services/viz/public/interfaces/compositing/video_detector_observer.mojom.h" namespace viz { - class CapturableFrameSink; class CompositorFrameSinkSupport; class DisplayProvider; +class SharedBitmapManager; // FrameSinkManagerImpl manages BeginFrame hierarchy. This is the implementation // detail for FrameSinkManagerImpl. @@ -50,9 +50,11 @@ public mojom::FrameSinkManager, public HitTestAggregatorDelegate { public: - FrameSinkManagerImpl(base::Optional<uint32_t> activation_deadline_in_frames = - kDefaultActivationDeadlineInFrames, - DisplayProvider* display_provider = nullptr); + explicit FrameSinkManagerImpl( + SharedBitmapManager* shared_bitmap_manager, + base::Optional<uint32_t> activation_deadline_in_frames = + kDefaultActivationDeadlineInFrames, + DisplayProvider* display_provider = nullptr); ~FrameSinkManagerImpl() override; // Performs cleanup needed to force shutdown from the GPU process. Stops all @@ -146,8 +148,10 @@ BeginFrameSource* GetPrimaryBeginFrameSource(); SurfaceManager* surface_manager() { return &surface_manager_; } - const HitTestManager* hit_test_manager() { return &hit_test_manager_; } + SharedBitmapManager* shared_bitmap_manager() { + return shared_bitmap_manager_; + } void SubmitHitTestRegionList( const SurfaceId& surface_id, @@ -214,6 +218,9 @@ bool ChildContains(const FrameSinkId& child_frame_sink_id, const FrameSinkId& search_frame_sink_id) const; + // SharedBitmapManager for the viz display service for receiving software + // resources in CompositorFrameSinks. + SharedBitmapManager* const shared_bitmap_manager_; // Provides a Display for CreateRootCompositorFrameSink(). DisplayProvider* const display_provider_;
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_unittest.cc b/components/viz/service/frame_sinks/frame_sink_manager_unittest.cc index 3f17aca..1fdbc3f 100644 --- a/components/viz/service/frame_sinks/frame_sink_manager_unittest.cc +++ b/components/viz/service/frame_sinks/frame_sink_manager_unittest.cc
@@ -12,6 +12,7 @@ #include "components/viz/common/constants.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/test/begin_frame_source_test.h" #include "components/viz/test/compositor_frame_helpers.h" @@ -55,7 +56,9 @@ class FrameSinkManagerTest : public testing::Test { public: FrameSinkManagerTest() - : manager_(kDefaultActivationDeadlineInFrames, &display_provider_) {} + : manager_(&shared_bitmap_manager_, + kDefaultActivationDeadlineInFrames, + &display_provider_) {} ~FrameSinkManagerTest() override = default; std::unique_ptr<CompositorFrameSinkSupport> CreateCompositorFrameSinkSupport( @@ -84,6 +87,7 @@ } protected: + ServerSharedBitmapManager shared_bitmap_manager_; TestDisplayProvider display_provider_; FrameSinkManagerImpl manager_; };
diff --git a/components/viz/service/frame_sinks/surface_references_unittest.cc b/components/viz/service/frame_sinks/surface_references_unittest.cc index eb69755..e5df8b4 100644 --- a/components/viz/service/frame_sinks/surface_references_unittest.cc +++ b/components/viz/service/frame_sinks/surface_references_unittest.cc
@@ -10,6 +10,7 @@ #include "base/containers/flat_set.h" #include "base/test/test_mock_time_task_runner.h" #include "components/viz/common/surfaces/surface_id.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" @@ -126,7 +127,7 @@ // testing::Test: void SetUp() override { // Start each test with a fresh SurfaceManager instance. - manager_ = std::make_unique<FrameSinkManagerImpl>(); + manager_ = std::make_unique<FrameSinkManagerImpl>(&shared_bitmap_manager_); frame_sink_manager_client_ = std::make_unique<TestFrameSinkManagerClient>(manager_.get()); manager_->SetLocalClient(frame_sink_manager_client_.get()); @@ -140,12 +141,13 @@ scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; base::TestMockTimeTaskRunner::ScopedContext scoped_context_; + ServerSharedBitmapManager shared_bitmap_manager_; + std::unique_ptr<FrameSinkManagerImpl> manager_; + std::unique_ptr<TestFrameSinkManagerClient> frame_sink_manager_client_; std::unordered_map<FrameSinkId, std::unique_ptr<CompositorFrameSinkSupport>, FrameSinkIdHash> supports_; - std::unique_ptr<FrameSinkManagerImpl> manager_; - std::unique_ptr<TestFrameSinkManagerClient> frame_sink_manager_client_; }; TEST_F(SurfaceReferencesTest, AddReference) {
diff --git a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc index 8b83cea0..36eb478 100644 --- a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc +++ b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
@@ -5,6 +5,7 @@ #include "base/containers/flat_set.h" #include "base/test/simple_test_tick_clock.h" #include "components/viz/common/surfaces/surface_id.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/test/begin_frame_args_test.h" @@ -87,7 +88,8 @@ class SurfaceSynchronizationTest : public testing::Test { public: SurfaceSynchronizationTest() - : frame_sink_manager_client_(&frame_sink_manager_), + : frame_sink_manager_(&shared_bitmap_manager_), + frame_sink_manager_client_(&frame_sink_manager_), surface_observer_(false) {} ~SurfaceSynchronizationTest() override {} @@ -258,6 +260,7 @@ private: std::unique_ptr<base::SimpleTestTickClock> now_src_; + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl frame_sink_manager_; TestFrameSinkManagerClient frame_sink_manager_client_; FakeSurfaceObserver surface_observer_;
diff --git a/components/viz/service/frame_sinks/video_detector_unittest.cc b/components/viz/service/frame_sinks/video_detector_unittest.cc index c56d8d4..d7f76b72 100644 --- a/components/viz/service/frame_sinks/video_detector_unittest.cc +++ b/components/viz/service/frame_sinks/video_detector_unittest.cc
@@ -13,6 +13,7 @@ #include "components/viz/common/quads/surface_draw_quad.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/service/display/surface_aggregator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/frame_sinks/video_detector.h" @@ -74,7 +75,8 @@ class VideoDetectorTest : public testing::Test { public: VideoDetectorTest() - : surface_aggregator_(frame_sink_manager_.surface_manager(), + : frame_sink_manager_(&shared_bitmap_manager_), + surface_aggregator_(frame_sink_manager_.surface_manager(), nullptr, false) {} @@ -192,6 +194,7 @@ .Build(); } + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl frame_sink_manager_; FakeCompositorFrameSinkClient frame_sink_client_; ParentLocalSurfaceIdAllocator parent_local_surface_id_allocator_;
diff --git a/components/viz/service/hit_test/hit_test_aggregator_unittest.cc b/components/viz/service/hit_test/hit_test_aggregator_unittest.cc index d599852..7e8a9662 100644 --- a/components/viz/service/hit_test/hit_test_aggregator_unittest.cc +++ b/components/viz/service/hit_test/hit_test_aggregator_unittest.cc
@@ -11,6 +11,7 @@ #include "components/viz/common/surfaces/frame_sink_id.h" #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/hit_test/hit_test_aggregator_delegate.h" @@ -59,7 +60,8 @@ class TestFrameSinkManagerImpl : public FrameSinkManagerImpl { public: - TestFrameSinkManagerImpl() = default; + explicit TestFrameSinkManagerImpl(SharedBitmapManager* shared_bitmap_manager) + : FrameSinkManagerImpl(shared_bitmap_manager) {} ~TestFrameSinkManagerImpl() override = default; void SetLocalClient(TestHostFrameSinkManager* client) { @@ -112,7 +114,8 @@ // testing::Test: void SetUp() override { - frame_sink_manager_ = std::make_unique<TestFrameSinkManagerImpl>(); + frame_sink_manager_ = + std::make_unique<TestFrameSinkManagerImpl>(&shared_bitmap_manager_); host_frame_sink_manager_ = std::make_unique<TestHostFrameSinkManager>(); local_surface_id_lookup_delegate_ = std::make_unique<TestLatestLocalSurfaceIdLookupDelegate>(); @@ -208,6 +211,7 @@ } private: + ServerSharedBitmapManager shared_bitmap_manager_; std::unique_ptr<TestHitTestAggregator> hit_test_aggregator_; std::unique_ptr<TestFrameSinkManagerImpl> frame_sink_manager_; std::unique_ptr<TestHostFrameSinkManager> host_frame_sink_manager_;
diff --git a/components/viz/service/hit_test/hit_test_manager_fuzzer.cc b/components/viz/service/hit_test/hit_test_manager_fuzzer.cc index 734d6267..9b60014 100644 --- a/components/viz/service/hit_test/hit_test_manager_fuzzer.cc +++ b/components/viz/service/hit_test/hit_test_manager_fuzzer.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/test/fuzzed_data_provider.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/hit_test/hit_test_aggregator.h" @@ -134,7 +135,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t num_bytes) { base::FuzzedDataProvider fuzz(data, num_bytes); - viz::FrameSinkManagerImpl frame_sink_manager; + viz::ServerSharedBitmapManager shared_bitmap_manager; + viz::FrameSinkManagerImpl frame_sink_manager(&shared_bitmap_manager); viz::TestLatestLocalSurfaceIdLookupDelegate delegate; viz::TestLatestLocalSurfaceIdLookupDelegate* lsi_delegate = fuzz.ConsumeBool() ? &delegate : nullptr;
diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc index ad3e2014..b63806f 100644 --- a/components/viz/service/main/viz_main_impl.cc +++ b/components/viz/service/main/viz_main_impl.cc
@@ -12,9 +12,11 @@ #include "base/power_monitor/power_monitor_device_source.h" #include "base/single_thread_task_runner.h" #include "base/threading/sequenced_task_runner_handle.h" +#include "base/trace_event/memory_dump_manager.h" #include "build/build_config.h" #include "components/viz/common/switches.h" #include "components/viz/service/display_embedder/gpu_display_provider.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/gl/gpu_service_impl.h" #include "gpu/command_buffer/common/activity_flags.h" @@ -304,9 +306,14 @@ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + server_shared_bitmap_manager_ = std::make_unique<ServerSharedBitmapManager>(); + base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( + server_shared_bitmap_manager_.get(), "viz::ServerSharedBitmapManager", + base::ThreadTaskRunnerHandle::Get()); + display_provider_ = std::make_unique<GpuDisplayProvider>( params->restart_id, gpu_service_.get(), gpu_command_service_, - gpu_service_->gpu_channel_manager(), + gpu_service_->gpu_channel_manager(), server_shared_bitmap_manager_.get(), command_line->HasSwitch(switches::kHeadless), command_line->HasSwitch(switches::kRunAllCompositorStagesBeforeDraw)); @@ -316,7 +323,8 @@ if (params->use_activation_deadline) activation_deadline_in_frames = params->activation_deadline_in_frames; frame_sink_manager_ = std::make_unique<FrameSinkManagerImpl>( - activation_deadline_in_frames, display_provider_.get()); + server_shared_bitmap_manager_.get(), activation_deadline_in_frames, + display_provider_.get()); frame_sink_manager_->BindAndSetClient(std::move(params->frame_sink_manager), nullptr, std::move(client)); } @@ -324,8 +332,12 @@ void VizMainImpl::TearDownOnCompositorThread() { DCHECK(compositor_thread_task_runner_->BelongsToCurrentThread()); + base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( + server_shared_bitmap_manager_.get()); + frame_sink_manager_.reset(); display_provider_.reset(); + server_shared_bitmap_manager_.reset(); } void VizMainImpl::CleanupForShutdownOnCompositorThread() {
diff --git a/components/viz/service/main/viz_main_impl.h b/components/viz/service/main/viz_main_impl.h index 8bb8e2b..48e12c6 100644 --- a/components/viz/service/main/viz_main_impl.h +++ b/components/viz/service/main/viz_main_impl.h
@@ -33,6 +33,7 @@ class DisplayProvider; class FrameSinkManagerImpl; class GpuServiceImpl; +class ServerSharedBitmapManager; class VizMainImpl : public gpu::GpuSandboxHelper, public mojom::VizMain { public: @@ -149,8 +150,9 @@ // Provides mojo interfaces for creating and managing FrameSinks. These live // on the compositor thread. - std::unique_ptr<FrameSinkManagerImpl> frame_sink_manager_; + std::unique_ptr<ServerSharedBitmapManager> server_shared_bitmap_manager_; std::unique_ptr<DisplayProvider> display_provider_; + std::unique_ptr<FrameSinkManagerImpl> frame_sink_manager_; const scoped_refptr<base::SingleThreadTaskRunner> gpu_thread_task_runner_;
diff --git a/components/viz/service/surfaces/surface_hittest_unittest.cc b/components/viz/service/surfaces/surface_hittest_unittest.cc index ea2e478..d9cd05c 100644 --- a/components/viz/service/surfaces/surface_hittest_unittest.cc +++ b/components/viz/service/surfaces/surface_hittest_unittest.cc
@@ -6,6 +6,7 @@ #include "components/viz/common/quads/compositor_frame.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface.h" @@ -70,7 +71,7 @@ class SurfaceHittestTest : public testing::Test { public: - SurfaceHittestTest() = default; + SurfaceHittestTest() : frame_sink_manager_(&shared_bitmap_manager_) {} ~SurfaceHittestTest() override = default; CompositorFrameSinkSupport& root_support() { return *supports_[0]; } @@ -96,6 +97,7 @@ void TearDown() override { supports_.clear(); } private: + ServerSharedBitmapManager shared_bitmap_manager_; FrameSinkManagerImpl frame_sink_manager_; std::vector<std::unique_ptr<CompositorFrameSinkSupport>> supports_; FakeCompositorFrameSinkClient client_;
diff --git a/components/viz/service/surfaces/surface_unittest.cc b/components/viz/service/surfaces/surface_unittest.cc index fb4bb3c..c1d55fd 100644 --- a/components/viz/service/surfaces/surface_unittest.cc +++ b/components/viz/service/surfaces/surface_unittest.cc
@@ -6,6 +6,7 @@ #include "cc/test/scheduler_test_common.h" #include "components/viz/common/frame_sinks/copy_output_result.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/surfaces/surface_dependency_tracker.h" @@ -28,7 +29,8 @@ constexpr gfx::Rect kDamageRect(0, 0); const LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); - FrameSinkManagerImpl frame_sink_manager; + ServerSharedBitmapManager shared_bitmap_manager; + FrameSinkManagerImpl frame_sink_manager(&shared_bitmap_manager); MockCompositorFrameSinkClient client; auto support = std::make_unique<CompositorFrameSinkSupport>( &client, &frame_sink_manager, kArbitraryFrameSinkId, kIsRoot, @@ -78,7 +80,8 @@ // Test that CopyOutputRequests can outlive the current frame and be // aggregated on the next frame. TEST(SurfaceTest, CopyRequestLifetime) { - FrameSinkManagerImpl frame_sink_manager; + ServerSharedBitmapManager shared_bitmap_manager; + FrameSinkManagerImpl frame_sink_manager(&shared_bitmap_manager); SurfaceManager* surface_manager = frame_sink_manager.surface_manager(); auto support = std::make_unique<CompositorFrameSinkSupport>( nullptr, &frame_sink_manager, kArbitraryFrameSinkId, kIsRoot,
diff --git a/components/viz/test/test_layer_tree_frame_sink.cc b/components/viz/test/test_layer_tree_frame_sink.cc index 14e1c74a..932cfb4 100644 --- a/components/viz/test/test_layer_tree_frame_sink.cc +++ b/components/viz/test/test_layer_tree_frame_sink.cc
@@ -73,7 +73,8 @@ if (!LayerTreeFrameSink::BindToClient(client)) return false; - frame_sink_manager_ = std::make_unique<FrameSinkManagerImpl>(); + frame_sink_manager_ = + std::make_unique<FrameSinkManagerImpl>(&shared_bitmap_manager_); std::unique_ptr<OutputSurface> display_output_surface = test_client_->CreateDisplayOutputSurface(context_provider());
diff --git a/components/zucchini/fuzzers/raw_gen_fuzzer.cc b/components/zucchini/fuzzers/raw_gen_fuzzer.cc index 176412da..b27042e 100644 --- a/components/zucchini/fuzzers/raw_gen_fuzzer.cc +++ b/components/zucchini/fuzzers/raw_gen_fuzzer.cc
@@ -5,9 +5,11 @@ #include <stdint.h> #include <iostream> +#include <memory> #include "base/environment.h" #include "base/logging.h" +#include "components/zucchini/buffer_sink.h" #include "components/zucchini/buffer_view.h" #include "components/zucchini/fuzzers/file_pair.pb.h" #include "components/zucchini/patch_writer.h" @@ -16,14 +18,14 @@ namespace { -constexpr int kMinImageSize = 16; -constexpr int kMaxImageSize = 1024; +constexpr size_t kMinImageSize = 16; +constexpr size_t kMaxImageSize = 1024; } // namespace struct Environment { Environment() { - logging::SetMinLogLevel(3); // Disable console spamming. + logging::SetMinLogLevel(logging::LOG_FATAL); // Disable console spamming. } }; @@ -55,4 +57,15 @@ // Fuzz Target. zucchini::GenerateRaw(old_image, new_image, &patch_writer); + + // Check that the patch size is sane. Crash the fuzzer if this isn't the case + // as it is a failure in Zucchini's patch performance that is worth + // investigating. + size_t patch_size = patch_writer.SerializedSize(); + CHECK_LE(patch_size, kMaxImageSize * 2); + + // Write to buffer to avoid IO. + std::unique_ptr<uint8_t[]> patch_data(new uint8_t[patch_size]); + zucchini::BufferSink patch(patch_data.get(), patch_size); + patch_writer.SerializeInto(patch); }
diff --git a/components/zucchini/fuzzers/ztf_gen_fuzzer.cc b/components/zucchini/fuzzers/ztf_gen_fuzzer.cc index 413d841f..76ae44f 100644 --- a/components/zucchini/fuzzers/ztf_gen_fuzzer.cc +++ b/components/zucchini/fuzzers/ztf_gen_fuzzer.cc
@@ -5,9 +5,11 @@ #include <stdint.h> #include <iostream> +#include <memory> #include "base/environment.h" #include "base/logging.h" +#include "components/zucchini/buffer_sink.h" #include "components/zucchini/buffer_view.h" #include "components/zucchini/fuzzers/file_pair.pb.h" #include "components/zucchini/patch_writer.h" @@ -16,8 +18,8 @@ namespace { -constexpr int kMinImageSize = 16; -constexpr int kMaxImageSize = 1024; +constexpr size_t kMinImageSize = 16; +constexpr size_t kMaxImageSize = 1024; } // namespace @@ -56,4 +58,15 @@ // Fuzz Target. zucchini::GenerateEnsemble(old_image, new_image, &patch_writer); + + // Check that the patch size is sane. Crash the fuzzer if this isn't the case + // as it is a failure in Zucchini's patch performance that is worth + // investigating. + size_t patch_size = patch_writer.SerializedSize(); + CHECK_LE(patch_size, kMaxImageSize * 2); + + // Write to buffer to avoid IO. + std::unique_ptr<uint8_t[]> patch_data(new uint8_t[patch_size]); + zucchini::BufferSink patch(patch_data.get(), patch_size); + patch_writer.SerializeInto(patch); }
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index c17b467f..6ac229f 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc
@@ -750,9 +750,13 @@ // Enable memory-infra dump providers. InitSkiaEventTracer(); - base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( - viz::ServerSharedBitmapManager::current(), - "viz::ServerSharedBitmapManager", nullptr); +#if !defined(OS_ANDROID) + if (server_shared_bitmap_manager_) { + base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( + server_shared_bitmap_manager_.get(), "viz::ServerSharedBitmapManager", + nullptr); + } +#endif base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( @@ -1055,6 +1059,7 @@ host_frame_sink_manager_.reset(); frame_sink_manager_impl_.reset(); compositing_mode_reporter_impl_.reset(); + server_shared_bitmap_manager_.reset(); #endif // The device monitors are using |system_monitor_| as dependency, so delete @@ -1150,6 +1155,11 @@ viz::FrameSinkManagerImpl* BrowserMainLoop::GetFrameSinkManager() const { return frame_sink_manager_impl_.get(); } + +viz::ServerSharedBitmapManager* BrowserMainLoop::GetServerSharedBitmapManager() + const { + return server_shared_bitmap_manager_.get(); +} #endif void BrowserMainLoop::GetCompositingModeReporter( @@ -1267,17 +1277,20 @@ transport_factory->ConnectHostFrameSinkManager(); ImageTransportFactory::SetFactory(std::move(transport_factory)); } else { + server_shared_bitmap_manager_ = + std::make_unique<viz::ServerSharedBitmapManager>(); frame_sink_manager_impl_ = std::make_unique<viz::FrameSinkManagerImpl>( + server_shared_bitmap_manager_.get(), switches::GetDeadlineToSynchronizeSurfaces()); surface_utils::ConnectWithLocalFrameSinkManager( host_frame_sink_manager_.get(), frame_sink_manager_impl_.get()); - ImageTransportFactory::SetFactory( std::make_unique<GpuProcessTransportFactory>( BrowserGpuChannelHostFactory::instance(), - compositing_mode_reporter_impl_.get(), GetResizeTaskRunner())); + compositing_mode_reporter_impl_.get(), + server_shared_bitmap_manager_.get(), GetResizeTaskRunner())); } }
diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h index f117bf3..572bfdc 100644 --- a/content/browser/browser_main_loop.h +++ b/content/browser/browser_main_loop.h
@@ -91,6 +91,7 @@ class CompositingModeReporterImpl; class FrameSinkManagerImpl; class HostFrameSinkManager; +class ServerSharedBitmapManager; } namespace content { @@ -217,6 +218,9 @@ // TODO(crbug.com/657959): This will be removed once there are no users, as // SurfaceManager is being moved out of process. viz::FrameSinkManagerImpl* GetFrameSinkManager() const; + + // This returns null when the display compositor is out of process. + viz::ServerSharedBitmapManager* GetServerSharedBitmapManager() const; #endif // Fulfills a mojo pointer to the singleton CompositingModeReporter. @@ -384,6 +388,11 @@ scoped_refptr<SaveFileManager> save_file_manager_; std::unique_ptr<content::TracingControllerImpl> tracing_controller_; #if !defined(OS_ANDROID) + // A SharedBitmapManager used to sharing and mapping IDs to shared memory + // between processes for software compositing. When the display compositor is + // in the browser process, then |server_shared_bitmap_manager_| is set, and + // when it is in the viz process, then it is null. + std::unique_ptr<viz::ServerSharedBitmapManager> server_shared_bitmap_manager_; std::unique_ptr<viz::HostFrameSinkManager> host_frame_sink_manager_; // This is owned here so that SurfaceManager will be accessible in process // when display is in the same process. Other than using SurfaceManager,
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc index e393f5d..bdc54c5 100644 --- a/content/browser/compositor/gpu_process_transport_factory.cc +++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -178,6 +178,7 @@ GpuProcessTransportFactory::GpuProcessTransportFactory( gpu::GpuChannelEstablishFactory* gpu_channel_factory, viz::CompositingModeReporterImpl* compositing_mode_reporter, + viz::ServerSharedBitmapManager* server_shared_bitmap_manager, scoped_refptr<base::SingleThreadTaskRunner> resize_task_runner) : frame_sink_id_allocator_(kDefaultClientId), renderer_settings_(viz::CreateRendererSettings()), @@ -185,6 +186,7 @@ task_graph_runner_(new cc::SingleThreadTaskGraphRunner), gpu_channel_factory_(gpu_channel_factory), compositing_mode_reporter_(compositing_mode_reporter), + server_shared_bitmap_manager_(server_shared_bitmap_manager), callback_factory_(this) { DCHECK(gpu_channel_factory_); @@ -630,7 +632,7 @@ // The Display owns and uses the |display_output_surface| created above. data->display = std::make_unique<viz::Display>( - viz::ServerSharedBitmapManager::current(), renderer_settings_, + server_shared_bitmap_manager_, renderer_settings_, compositor->frame_sink_id(), std::move(display_output_surface), std::move(scheduler), compositor->task_runner()); data->display_client =
diff --git a/content/browser/compositor/gpu_process_transport_factory.h b/content/browser/compositor/gpu_process_transport_factory.h index 02c1ec0d..2ea8c9f 100644 --- a/content/browser/compositor/gpu_process_transport_factory.h +++ b/content/browser/compositor/gpu_process_transport_factory.h
@@ -47,6 +47,7 @@ namespace viz { class CompositingModeReporterImpl; class OutputDeviceBacking; +class ServerSharedBitmapManager; class SoftwareOutputDevice; class VulkanInProcessContextProvider; class RasterContextProvider; @@ -62,6 +63,7 @@ GpuProcessTransportFactory( gpu::GpuChannelEstablishFactory* gpu_channel_factory, viz::CompositingModeReporterImpl* compositing_mode_reporter, + viz::ServerSharedBitmapManager* server_shared_bitmap_manager, scoped_refptr<base::SingleThreadTaskRunner> resize_task_runner); ~GpuProcessTransportFactory() override; @@ -180,6 +182,8 @@ // Service-side impl that controls the compositing mode based on what mode the // display compositors are using. viz::CompositingModeReporterImpl* const compositing_mode_reporter_; + // Manages a mapping of SharedBitmapId to shared memory objects. + viz::ServerSharedBitmapManager* const server_shared_bitmap_manager_; base::WeakPtrFactory<GpuProcessTransportFactory> callback_factory_;
diff --git a/content/browser/compositor/test/test_image_transport_factory.cc b/content/browser/compositor/test/test_image_transport_factory.cc index 037a519..cb6f07b 100644 --- a/content/browser/compositor/test/test_image_transport_factory.cc +++ b/content/browser/compositor/test/test_image_transport_factory.cc
@@ -9,6 +9,7 @@ #include "components/viz/common/features.h" #include "components/viz/common/gl_helper.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/test/test_frame_sink_manager.h" #include "content/browser/compositor/surface_utils.h" @@ -61,7 +62,9 @@ std::move(frame_sink_manager_request), std::move(frame_sink_manager_client)); } else { - frame_sink_manager_impl_ = std::make_unique<viz::FrameSinkManagerImpl>(); + shared_bitmap_manager_ = std::make_unique<viz::ServerSharedBitmapManager>(); + frame_sink_manager_impl_ = std::make_unique<viz::FrameSinkManagerImpl>( + shared_bitmap_manager_.get()); surface_utils::ConnectWithLocalFrameSinkManager( &host_frame_sink_manager_, frame_sink_manager_impl_.get()); }
diff --git a/content/browser/compositor/test/test_image_transport_factory.h b/content/browser/compositor/test/test_image_transport_factory.h index 76196cee2..1cd245d 100644 --- a/content/browser/compositor/test/test_image_transport_factory.h +++ b/content/browser/compositor/test/test_image_transport_factory.h
@@ -23,6 +23,7 @@ namespace viz { class GLHelper; class FrameSinkManagerImpl; +class ServerSharedBitmapManager; class TestFrameSinkManagerImpl; } // namespace viz @@ -98,6 +99,7 @@ viz::HostFrameSinkManager host_frame_sink_manager_; // Objects that exist if |enable_viz_| is false. + std::unique_ptr<viz::ServerSharedBitmapManager> shared_bitmap_manager_; std::unique_ptr<viz::FrameSinkManagerImpl> frame_sink_manager_impl_; std::unique_ptr<viz::GLHelper> gl_helper_;
diff --git a/content/browser/media/audio_input_stream_broker.cc b/content/browser/media/audio_input_stream_broker.cc index 69d958c0..e0a2f97 100644 --- a/content/browser/media/audio_input_stream_broker.cc +++ b/content/browser/media/audio_input_stream_broker.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/memory/read_only_shared_memory_region.h" +#include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "content/browser/browser_main_loop.h" #include "content/browser/media/media_internals.h" @@ -108,7 +109,12 @@ TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "CreateStream", this, "success", "failed or cancelled"); } - TRACE_EVENT_NESTABLE_ASYNC_END0("audio", "AudioInputStreamBroker", this); + TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "AudioInputStreamBroker", this, + "disconnect reason", + static_cast<uint32_t>(disconnect_reason_)); + + UMA_HISTOGRAM_ENUMERATION("Media.Audio.Capture.StreamBrokerDisconnectReason", + disconnect_reason_); } void AudioInputStreamBroker::CreateStream( @@ -137,8 +143,8 @@ observer_binding_.Bind(mojo::MakeRequest(&observer_ptr)); // Unretained is safe because |this| owns |observer_binding_|. - observer_binding_.set_connection_error_handler( - base::BindOnce(&AudioInputStreamBroker::Cleanup, base::Unretained(this))); + observer_binding_.set_connection_error_with_reason_handler(base::BindOnce( + &AudioInputStreamBroker::ObserverBindingLost, base::Unretained(this))); // Note that the component id for AudioLog is used to differentiate between // several users of the same audio log. Since this audio log is for a single @@ -173,6 +179,8 @@ !!data_pipe); if (!data_pipe) { + disconnect_reason_ = media::mojom::AudioInputStreamObserver:: + DisconnectReason::kStreamCreationFailed; Cleanup(); return; } @@ -183,6 +191,24 @@ std::move(stream), std::move(client_request_), std::move(data_pipe), initially_muted, stream_id); } +void AudioInputStreamBroker::ObserverBindingLost( + uint32_t reason, + const std::string& description) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + const uint32_t maxValidReason = static_cast<uint32_t>( + media::mojom::AudioInputStreamObserver::DisconnectReason::kMaxValue); + if (reason > maxValidReason) { + DLOG(ERROR) << "Invalid reason: " << reason; + } else if (disconnect_reason_ == media::mojom::AudioInputStreamObserver:: + DisconnectReason::kDocumentDestroyed) { + disconnect_reason_ = + static_cast<media::mojom::AudioInputStreamObserver::DisconnectReason>( + reason); + } + + Cleanup(); +} void AudioInputStreamBroker::Cleanup() { DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/content/browser/media/audio_input_stream_broker.h b/content/browser/media/audio_input_stream_broker.h index b99f3a8..524fb34 100644 --- a/content/browser/media/audio_input_stream_broker.h +++ b/content/browser/media/audio_input_stream_broker.h
@@ -52,6 +52,9 @@ media::mojom::AudioDataPipePtr data_pipe, bool initially_muted, const base::Optional<base::UnguessableToken>& stream_id); + + void ObserverBindingLost(uint32_t reason, const std::string& description); + void Cleanup(); const std::string device_id_; @@ -69,6 +72,10 @@ mojo::Binding<AudioInputStreamObserver> observer_binding_; media::mojom::AudioInputStreamClientRequest client_request_; + media::mojom::AudioInputStreamObserver::DisconnectReason disconnect_reason_ = + media::mojom::AudioInputStreamObserver::DisconnectReason:: + kDocumentDestroyed; + base::WeakPtrFactory<AudioInputStreamBroker> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(AudioInputStreamBroker);
diff --git a/content/browser/media/audio_output_stream_broker.cc b/content/browser/media/audio_output_stream_broker.cc index 5e26147..21cf65e 100644 --- a/content/browser/media/audio_output_stream_broker.cc +++ b/content/browser/media/audio_output_stream_broker.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "content/browser/media/media_internals.h" #include "content/public/browser/content_browser_client.h" @@ -57,7 +58,12 @@ TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "CreateStream", this, "success", "failed or cancelled"); } - TRACE_EVENT_NESTABLE_ASYNC_END0("audio", "AudioOutputStreamBroker", this); + TRACE_EVENT_NESTABLE_ASYNC_END1("audio", "AudioOutputStreamBroker", this, + "disconnect reason", + static_cast<uint32_t>(disconnect_reason_)); + + UMA_HISTOGRAM_ENUMERATION("Media.Audio.Render.StreamBrokerDisconnectReason", + disconnect_reason_); } void AudioOutputStreamBroker::CreateStream( @@ -102,9 +108,12 @@ awaiting_created_ = false; if (!data_pipe) { // Stream creation failed. Signal error. - client_.ResetWithReason(media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, - std::string()); + client_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), + std::string()); + disconnect_reason_ = media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kStreamCreationFailed; Cleanup(); return; } @@ -119,12 +128,23 @@ TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("audio", "ObserverBindingLost", this, "reset reason", reason); + const uint32_t maxValidReason = static_cast<uint32_t>( + media::mojom::AudioOutputStreamObserver::DisconnectReason::kMaxValue); + if (reason > maxValidReason) { + NOTREACHED() << "Invalid reason: " << reason; + } else if (disconnect_reason_ == media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kDocumentDestroyed) { + disconnect_reason_ = + static_cast<media::mojom::AudioOutputStreamObserver::DisconnectReason>( + reason); + } // TODO(https://crbug.com/787806): Don't propagate errors if we can retry // instead. - client_.ResetWithReason(media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, - std::string()); + client_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), + std::string()); Cleanup(); }
diff --git a/content/browser/media/audio_output_stream_broker.h b/content/browser/media/audio_output_stream_broker.h index e32b22fc..d997649f 100644 --- a/content/browser/media/audio_output_stream_broker.h +++ b/content/browser/media/audio_output_stream_broker.h
@@ -65,6 +65,10 @@ mojo::AssociatedBinding<media::mojom::AudioOutputStreamObserver> observer_binding_; + media::mojom::AudioOutputStreamObserver::DisconnectReason disconnect_reason_ = + media::mojom::AudioOutputStreamObserver::DisconnectReason:: + kDocumentDestroyed; + base::WeakPtrFactory<AudioOutputStreamBroker> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(AudioOutputStreamBroker);
diff --git a/content/browser/media/audio_output_stream_broker_unittest.cc b/content/browser/media/audio_output_stream_broker_unittest.cc index 1c9213a..5427db6 100644 --- a/content/browser/media/audio_output_stream_broker_unittest.cc +++ b/content/browser/media/audio_output_stream_broker_unittest.cc
@@ -221,8 +221,9 @@ EXPECT_TRUE(stream_request_data.requested); EXPECT_CALL(env.provider_client, - ConnectionError(media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, + ConnectionError(static_cast<uint32_t>( + media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), std::string())); EXPECT_CALL(env.deleter, Run(env.broker.release())) .WillOnce(testing::DeleteArg<0>()); @@ -244,8 +245,9 @@ EXPECT_TRUE(stream_request_data.requested); EXPECT_CALL(env.provider_client, - ConnectionError(media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, + ConnectionError(static_cast<uint32_t>( + media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), std::string())); EXPECT_CALL(env.deleter, Run(env.broker.release())) .WillOnce(testing::DeleteArg<0>()); @@ -268,8 +270,9 @@ EXPECT_CALL(env.deleter, Run(env.broker.release())) .WillOnce(testing::DeleteArg<0>()); EXPECT_CALL(env.provider_client, - ConnectionError(media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, + ConnectionError(static_cast<uint32_t>( + media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), std::string())); env.RunUntilIdle();
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc index d2f18a56..85e4d4b 100644 --- a/content/browser/renderer_host/compositor_impl_android.cc +++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -174,7 +174,10 @@ bool enable_viz = base::FeatureList::IsEnabled(features::kVizDisplayCompositor); if (!enable_viz) { - frame_sink_manager_impl = std::make_unique<viz::FrameSinkManagerImpl>(); + // The SharedBitmapManager can be null as software compositing is not + // supported or used on Android. + frame_sink_manager_impl = std::make_unique<viz::FrameSinkManagerImpl>( + /*shared_bitmap_manager=*/nullptr); surface_utils::ConnectWithLocalFrameSinkManager( &host_frame_sink_manager, frame_sink_manager_impl.get()); } @@ -1008,9 +1011,8 @@ const bool should_register_begin_frame_source = !display_; display_ = std::make_unique<viz::Display>( - viz::ServerSharedBitmapManager::current(), renderer_settings, - frame_sink_id_, std::move(display_output_surface), std::move(scheduler), - task_runner); + nullptr, renderer_settings, frame_sink_id_, + std::move(display_output_surface), std::move(scheduler), task_runner); auto layer_tree_frame_sink = std::make_unique<viz::DirectLayerTreeFrameSink>( frame_sink_id_, GetHostFrameSinkManager(), manager, display_.get(),
diff --git a/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc b/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc index 0299904..71073a5 100644 --- a/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc +++ b/content/browser/renderer_host/embedded_frame_sink_provider_impl_unittest.cc
@@ -13,6 +13,7 @@ #include "build/build_config.h" #include "components/viz/common/quads/compositor_frame.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/test/compositor_frame_helpers.h" #include "components/viz/test/fake_host_frame_sink_client.h" @@ -119,7 +120,8 @@ host_frame_sink_manager_ = std::make_unique<viz::HostFrameSinkManager>(); // The FrameSinkManagerImpl implementation is in-process here for tests. - frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>(); + frame_sink_manager_ = + std::make_unique<viz::FrameSinkManagerImpl>(&shared_bitmap_manager_); surface_utils::ConnectWithLocalFrameSinkManager( host_frame_sink_manager_.get(), frame_sink_manager_.get()); @@ -140,6 +142,7 @@ // A MessageLoop is required for mojo bindings which are used to // connect to graphics services. base::MessageLoop message_loop_; + viz::ServerSharedBitmapManager shared_bitmap_manager_; viz::FakeHostFrameSinkClient host_frame_sink_client_; std::unique_ptr<viz::HostFrameSinkManager> host_frame_sink_manager_; std::unique_ptr<viz::FrameSinkManagerImpl> frame_sink_manager_;
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc index e09ded9..30b95a5d 100644 --- a/content/browser/renderer_host/legacy_render_widget_host_win.cc +++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -135,6 +135,8 @@ ::SetWindowPos(hwnd(), NULL, bounds_in_pixel.x(), bounds_in_pixel.y(), bounds_in_pixel.width(), bounds_in_pixel.height(), SWP_NOREDRAW); + if (direct_manipulation_helper_) + direct_manipulation_helper_->SetSize(bounds_in_pixel.size()); } void LegacyRenderWidgetHostHWND::MoveCaretTo(const gfx::Rect& bounds) {
diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc index 26a225d..4a948b2 100644 --- a/content/browser/renderer_host/media/video_capture_controller.cc +++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -225,7 +225,8 @@ // report an error immediately and punt. if (!params.IsValid() || !(params.requested_format.pixel_format == media::PIXEL_FORMAT_I420 || - params.requested_format.pixel_format == media::PIXEL_FORMAT_Y16)) { + params.requested_format.pixel_format == media::PIXEL_FORMAT_Y16 || + params.requested_format.pixel_format == media::PIXEL_FORMAT_ARGB)) { // Crash in debug builds since the renderer should not have asked for // invalid or unsupported parameters. LOG(DFATAL) << "Invalid or unsupported video capture parameters requested: "
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index 2efe7a5..856dc18 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -421,6 +421,17 @@ enable_surface_synchronization_ = features::IsSurfaceSynchronizationEnabled(); enable_viz_ = base::FeatureList::IsEnabled(features::kVizDisplayCompositor); + if (!enable_viz_) { +#if !defined(OS_ANDROID) + // Software compositing is not supported or used on Android. + // + // The BrowserMainLoop is null in unit tests, but they do not use + // compositing and report SharedBitmapIds. + if (BrowserMainLoop* main_loop = BrowserMainLoop::GetInstance()) + shared_bitmap_manager_ = main_loop->GetServerSharedBitmapManager(); +#endif + } + delegate_->RenderWidgetCreated(this); render_frame_metadata_provider_.AddObserver(this); } @@ -1991,8 +2002,15 @@ // The display compositor has ownership of shared memory for each // SharedBitmapId that has been reported from the client. Since the client is // gone that memory can be freed. If we don't then it would leak. - for (const auto& id : owned_bitmaps_) - viz::ServerSharedBitmapManager::current()->ChildDeletedSharedBitmap(id); + if (shared_bitmap_manager_) { + for (const auto& id : owned_bitmaps_) + shared_bitmap_manager_->ChildDeletedSharedBitmap(id); + } else { + // If the display compositor is not in the browser process, then the + // |bitmap_manager| is not present in the process either, and no bitmaps + // should have been registered with this class. + DCHECK(owned_bitmaps_.empty()); + } process_->RemoveWidget(this); process_->RemoveRoute(routing_id_); @@ -2150,8 +2168,8 @@ void RenderWidgetHostImpl::DidAllocateSharedBitmap( mojo::ScopedSharedBufferHandle buffer, const viz::SharedBitmapId& id) { - if (!viz::ServerSharedBitmapManager::current()->ChildAllocatedSharedBitmap( - std::move(buffer), id)) { + if (!shared_bitmap_manager_->ChildAllocatedSharedBitmap(std::move(buffer), + id)) { bad_message::ReceivedBadMessage(GetProcess(), bad_message::RWH_SHARED_BITMAP); } @@ -2160,7 +2178,7 @@ void RenderWidgetHostImpl::DidDeleteSharedBitmap( const viz::SharedBitmapId& id) { - viz::ServerSharedBitmapManager::current()->ChildDeletedSharedBitmap(id); + shared_bitmap_manager_->ChildDeletedSharedBitmap(id); owned_bitmaps_.erase(id); }
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h index 7328c61..05f539cd 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -96,6 +96,10 @@ enum class DomCode; } +namespace viz { +class ServerSharedBitmapManager; +} + namespace content { class BrowserAccessibilityManager; @@ -1170,9 +1174,15 @@ base::Optional<uint16_t> screen_orientation_angle_for_testing_; base::Optional<ScreenOrientationValues> screen_orientation_type_for_testing_; + // When the viz display compositor is in the browser process, this is used to + // register and unregister the bitmaps (stored in |owned_bitmaps_| reported to + // this class from the renderer. + viz::ServerSharedBitmapManager* shared_bitmap_manager_ = nullptr; // The set of SharedBitmapIds that have been reported as allocated to this // interface. On closing this interface, the display compositor should drop - // ownership of the bitmaps with these ids to avoid leaking them. + // ownership of the bitmaps with these ids to avoid leaking them. This is only + // used when SharedBitmaps are reported to this class because the display + // compositor is in the browser process. std::set<viz::SharedBitmapId> owned_bitmaps_; bool force_enable_zoom_ = false;
diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js index 76abb93..41a64405 100644 --- a/content/browser/resources/gpu/info_view.js +++ b/content/browser/resources/gpu/info_view.js
@@ -232,6 +232,7 @@ 'rasterization': 'Rasterization', 'multiple_raster_threads': 'Multiple Raster Threads', 'native_gpu_memory_buffers': 'Native GpuMemoryBuffers', + 'protected_video_decode': 'Hardware Protected Video Decode', 'surface_synchronization': 'Surface Synchronization', 'vpx_decode': 'VPx Video Decode', 'webgl2': 'WebGL2',
diff --git a/content/browser/shared_worker/shared_worker_host.cc b/content/browser/shared_worker/shared_worker_host.cc index 17e8a32..4cba76c8 100644 --- a/content/browser/shared_worker/shared_worker_host.cc +++ b/content/browser/shared_worker/shared_worker_host.cc
@@ -171,6 +171,10 @@ // ResourceRequestorInfo. So, just send the bundle and count on the renderer // to clear the default factory upon arrival in that case. factory_bundle->default_factory_info() = std::move(network_factory_info); + + // TODO(falken): We might need to set the default factory to AppCache + // instead, as we do for frames, if requests from this shared worker are + // supposed to go through AppCache. } // Send the CreateSharedWorker message. @@ -200,8 +204,8 @@ service_->storage_partition()->GetNetworkContext()->CreateURLLoaderFactory( std::move(request), std::move(params)); - // TODO(falken): Detect connection error and send a IPC with a new network - // factory like UpdateSubresourceLoaderFactories does for frames. + // TODO(crbug.com/848256): Detect connection error and send a IPC with a new + // network factory like UpdateSubresourceLoaderFactories does for frames. } void SharedWorkerHost::AllowFileSystem(
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 7518751..c09bcb72 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -301,8 +301,8 @@ WebRuntimeFeatures::EnableNetworkService( base::FeatureList::IsEnabled(network::features::kNetworkService)); - WebRuntimeFeatures::EnableMojoBlobURLs( - base::FeatureList::IsEnabled(network::features::kNetworkService)); + if (base::FeatureList::IsEnabled(network::features::kNetworkService)) + WebRuntimeFeatures::EnableMojoBlobURLs(true); if (base::FeatureList::IsEnabled(features::kGamepadExtensions)) WebRuntimeFeatures::EnableGamepadExtensions(true);
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index 8d2fead..ce9348f 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc
@@ -196,6 +196,21 @@ return true; } +bool RenderViewTest::ExecuteJavaScriptAndReturnNumberValue( + const base::string16& script, + double* number_result) { + v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Local<v8::Value> result = GetMainFrame()->ExecuteScriptAndReturnValue( + WebScriptSource(blink::WebString::FromUTF16(script))); + if (result.IsEmpty() || !result->IsNumber()) + return false; + + if (number_result) + *number_result = result->NumberValue(); + + return true; +} + void RenderViewTest::LoadHTML(const char* html) { std::string url_string = "data:text/html;charset=utf-8,"; url_string.append(net::EscapeQueryParamValue(html, false));
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h index e2c5cb6..0480151c 100644 --- a/content/public/test/render_view_test.h +++ b/content/public/test/render_view_test.h
@@ -93,6 +93,13 @@ bool ExecuteJavaScriptAndReturnIntValue(const base::string16& script, int* result); + // Executes the given JavaScript and sets the number value it evaluates to in + // |result|. + // Returns true if the JavaScript was evaluated correctly to an number value, + // false otherwise. + bool ExecuteJavaScriptAndReturnNumberValue(const base::string16& script, + double* result); + // Loads |html| into the main frame as a data: URL and blocks until the // navigation is committed. void LoadHTML(const char* html);
diff --git a/content/renderer/android/synchronous_layer_tree_frame_sink.cc b/content/renderer/android/synchronous_layer_tree_frame_sink.cc index 2b66ba1..f0abe7f 100644 --- a/content/renderer/android/synchronous_layer_tree_frame_sink.cc +++ b/content/renderer/android/synchronous_layer_tree_frame_sink.cc
@@ -154,7 +154,10 @@ if (!cc::LayerTreeFrameSink::BindToClient(sink_client)) return false; - frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>(); + // The SharedBitmapManager is null since software compositing is not supported + // or used on Android. + frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>( + /*shared_bitmap_manager=*/nullptr); client_->SetBeginFrameSource(synthetic_begin_frame_source_ ? synthetic_begin_frame_source_.get()
diff --git a/content/renderer/media/mojo_audio_output_ipc.cc b/content/renderer/media/mojo_audio_output_ipc.cc index 4c098f8..35ead19 100644 --- a/content/renderer/media/mojo_audio_output_ipc.cc +++ b/content/renderer/media/mojo_audio_output_ipc.cc
@@ -130,7 +130,9 @@ const std::string& description) { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); DCHECK(delegate_); - if (disconnect_reason == kPlatformErrorDisconnectReason) { + if (disconnect_reason == + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError)) { delegate_->OnError(); } // Otherwise, disconnection was due to the frame owning |this| being
diff --git a/content/renderer/media/mojo_audio_output_ipc_unittest.cc b/content/renderer/media/mojo_audio_output_ipc_unittest.cc index fc954c3..58be5468 100644 --- a/content/renderer/media/mojo_audio_output_ipc_unittest.cc +++ b/content/renderer/media/mojo_audio_output_ipc_unittest.cc
@@ -76,8 +76,8 @@ void SignalErrorToProviderClient() { provider_client_.ResetWithReason( - media::mojom::AudioOutputStreamProviderClient:: - kPlatformErrorDisconnectReason, + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), std::string()); }
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 0ff1936d..449e2cd 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -2097,7 +2097,7 @@ constexpr bool automatic_flushes = false; constexpr bool support_locking = false; - constexpr bool support_grcontext = false; + constexpr bool support_grcontext = true; scoped_refptr<ui::ContextProviderCommandBuffer> context_provider( new ui::ContextProviderCommandBuffer(
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index d562e20..4db84d1 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -957,9 +957,23 @@ common_params.transition = ui::PAGE_TRANSITION_TYPED; provisional_frame->Navigate(common_params, request_params); + base::RunLoop().RunUntilIdle(); EXPECT_EQ(device_scale, view()->GetDeviceScaleFactor()); EXPECT_EQ(device_scale, view()->webview()->ZoomFactorForDeviceScaleFactor()); + + double device_pixel_ratio; + base::string16 get_dpr = + base::ASCIIToUTF16("Number(window.devicePixelRatio)"); + EXPECT_TRUE( + ExecuteJavaScriptAndReturnNumberValue(get_dpr, &device_pixel_ratio)); + EXPECT_EQ(device_scale, device_pixel_ratio); + + int width; + base::string16 get_width = + base::ASCIIToUTF16("Number(document.documentElement.clientWidth)"); + EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(get_width, &width)); + EXPECT_EQ(view()->webview()->Size().width, width * device_scale); } // Test that when a parent detaches a remote child after the provisional
diff --git a/content/renderer/service_worker/worker_fetch_context_impl.cc b/content/renderer/service_worker/worker_fetch_context_impl.cc index bc16217..82347dd 100644 --- a/content/renderer/service_worker/worker_fetch_context_impl.cc +++ b/content/renderer/service_worker/worker_fetch_context_impl.cc
@@ -12,6 +12,7 @@ #include "content/common/service_worker/service_worker_provider.mojom.h" #include "content/common/service_worker/service_worker_utils.h" #include "content/public/common/content_features.h" +#include "content/public/common/origin_util.h" #include "content/public/common/service_names.mojom.h" #include "content/public/renderer/url_loader_throttle_provider.h" #include "content/public/renderer/websocket_handshake_throttle_provider.h" @@ -102,9 +103,16 @@ if (!service_worker_loader_factory_) return nullptr; - // If it's not for HTTP or HTTPS no need to intercept the request. - if (!GURL(request.Url()).SchemeIsHTTPOrHTTPS()) + // If the URL is not http(s) or otherwise whitelisted, do not intercept the + // request. Schemes like 'blob' and 'file' are not eligible to be + // intercepted by service workers. + // TODO(falken): Let ServiceWorkerSubresourceLoaderFactory handle the + // request and move this check there (i.e., for such URLs, it should use + // its fallback factory). + if (!GURL(request.Url()).SchemeIsHTTPOrHTTPS() && + !OriginCanAccessServiceWorkers(request.Url())) { return nullptr; + } // If GetSkipServiceWorker() returns true, no need to intercept the request. if (request.GetSkipServiceWorker())
diff --git a/content/renderer/shared_worker/embedded_shared_worker_stub.cc b/content/renderer/shared_worker/embedded_shared_worker_stub.cc index 75b304d..5221e1c 100644 --- a/content/renderer/shared_worker/embedded_shared_worker_stub.cc +++ b/content/renderer/shared_worker/embedded_shared_worker_stub.cc
@@ -31,6 +31,7 @@ #include "content/renderer/service_worker/worker_fetch_context_impl.h" #include "ipc/ipc_message_macros.h" #include "services/network/public/cpp/features.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "third_party/blink/public/common/message_port/message_port_channel.h" #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h" @@ -153,10 +154,14 @@ return nullptr; } - // If it's not for HTTP or HTTPS, no need to intercept the request. - // TODO(falken): Allow SubresourceLoaderFactory to handle it in order - // to support chrome-extension://. - if (!GURL(request.Url()).SchemeIsHTTPOrHTTPS()) { + // If the URL is not http(s) or otherwise whitelisted, do not intercept the + // request. Schemes like 'blob' and 'file' are not eligible to be + // intercepted by service workers. + // TODO(falken): Let ServiceWorkerSubresourceLoaderFactory handle the + // request and move this check there (i.e., for such URLs, it should use + // its fallback factory). + if (!GURL(request.Url()).SchemeIsHTTPOrHTTPS() && + !OriginCanAccessServiceWorkers(request.Url())) { return nullptr; } @@ -209,35 +214,45 @@ service_worker_provider_info_ = std::move(service_worker_provider_info); script_loader_factory_info_ = std::move(script_loader_factory_info); - // Make the factory bundle for the shadow page to use for importScripts(). - auto loader_factories = base::MakeRefCounted<HostChildURLLoaderFactoryBundle>( + // Make the factory bundle. + loader_factories_ = base::MakeRefCounted<HostChildURLLoaderFactoryBundle>( impl_->GetTaskRunner(blink::TaskType::kInternalLoading)); // In some tests |render_thread| could be null. - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - if (render_thread) { - loader_factories->Update(render_thread->blink_platform_impl() - ->CreateDefaultURLLoaderFactoryBundle() - ->PassInterface(), - base::nullopt /* subresource_overrides */); + if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) { + loader_factories_->Update(render_thread->blink_platform_impl() + ->CreateDefaultURLLoaderFactoryBundle() + ->PassInterface(), + base::nullopt /* subresource_overrides */); } - if (subresource_loaders) { - // S13nServiceWorker enabled, NetworkService disabled:Clear the default - // factory from |subresource_loaders|, as it's the NetworkService factory. - // We'll continue using the default from CreateDefaultURLLoaderFactoryBundle - // instead. - if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) - subresource_loaders->default_factory_info() = nullptr; - loader_factories->Update(std::make_unique<ChildURLLoaderFactoryBundleInfo>( - std::move(subresource_loaders)), - base::nullopt /* subresource_overrides */); + if (subresource_loaders) { + if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { + // S13nServiceWorker enabled, NetworkService disabled: + // Clear the default factory from |subresource_loaders|, as it's the + // NetworkService factory. + subresource_loaders->default_factory_info() = nullptr; + } + + loader_factories_->Update(std::make_unique<ChildURLLoaderFactoryBundleInfo>( + std::move(subresource_loaders)), + base::nullopt /* subresource_overrides */); } + // It is important to understand the default factory of |loader_factories_|. + // Since |loader_factories_| was made from + // CreateDefaultURLLoaderFactoryBundle, which does not set a default factory, + // and |subresource_loaders|, whose default factory is the restartable + // NetworkService (as SharedWorkerHost sets it that way), the default factory + // either does not exist (when NetworkService is disabled) or is a + // NetworkService-backed factory with auto-reconnect. Therefore, we don't need + // to call CloneWithoutDefault() to bypass features like AppCache, unlike the + // bundle created for a frame. + impl_->StartWorkerContext( url_, blink::WebString::FromUTF8(name_), blink::WebString::FromUTF8(info->content_security_policy), info->content_security_policy_type, info->creation_address_space, - devtools_worker_token, std::move(loader_factories), + devtools_worker_token, loader_factories_, content_settings.PassInterface().PassHandle(), interface_provider.PassInterface().PassHandle()); @@ -309,23 +324,11 @@ std::unique_ptr<blink::WebServiceWorkerNetworkProvider> EmbeddedSharedWorkerStub::CreateServiceWorkerNetworkProvider() { - scoped_refptr<network::SharedURLLoaderFactory> fallback_factory; - // current() may be null in tests. - if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) { - // TODO(crbug.com/839982): Make a bundle using the |factory_bundle| passed - // to the ctor instead, otherwise chrome-extension:// won't work for network - // fallback. - scoped_refptr<ChildURLLoaderFactoryBundle> bundle = - render_thread->blink_platform_impl() - ->CreateDefaultURLLoaderFactoryBundle(); - fallback_factory = network::SharedURLLoaderFactory::Create( - bundle->CloneWithoutDefaultFactory()); - } - std::unique_ptr<ServiceWorkerNetworkProvider> provider = ServiceWorkerNetworkProvider::CreateForSharedWorker( std::move(service_worker_provider_info_), - std::move(script_loader_factory_info_), std::move(fallback_factory)); + std::move(script_loader_factory_info_), loader_factories_); + return std::make_unique<WebServiceWorkerNetworkProviderForSharedWorker>( std::move(provider), IsOriginSecure(url_)); } @@ -354,22 +357,24 @@ context->CreateWorkerClientRequest(); mojom::ServiceWorkerContainerHostPtrInfo container_host_ptr_info; - // TODO(horo): Use this host pointer also when S13nServiceWorker is not - // enabled once we support navigator.serviceWorker on shared workers: - // crbug.com/371690. Currently we use this only to call - // GetControllerServiceWorker() from the worker thread if S13nServiceWorker - // is enabled. if (ServiceWorkerUtils::IsServicificationEnabled()) container_host_ptr_info = context->CloneContainerHostPtrInfo(); - scoped_refptr<ChildURLLoaderFactoryBundle> url_loader_factory_bundle = - RenderThreadImpl::current() - ->blink_platform_impl() - ->CreateDefaultURLLoaderFactoryBundle(); + // We know |loader_factories_|'s default factory is not a feature like + // AppCache, so it's OK to call Clone() and not CloneWithoutDefault() to get + // the fallback factory. We don't want to call CloneWithoutDefault() because + // the default is a NetworkService-backed factory with auto-reconnect + // when NetworkService is enabled (it will support auto-reconnect once + // https://crbug.com/848256 is addressed). See comments in the constructor. + // + // TODO(falken): We might need to set the default factory of + // |loader_factories_| to AppCache if requests from this shared worker are + // supposed to go through AppCache. + std::unique_ptr<network::SharedURLLoaderFactoryInfo> fallback_factory = + loader_factories_->Clone(); auto worker_fetch_context = std::make_unique<WorkerFetchContextImpl>( std::move(request), std::move(container_host_ptr_info), - url_loader_factory_bundle->Clone(), - url_loader_factory_bundle->CloneWithoutDefaultFactory(), + loader_factories_->Clone(), std::move(fallback_factory), GetContentClient()->renderer()->CreateURLLoaderThrottleProvider( URLLoaderThrottleProviderType::kWorker), GetContentClient()
diff --git a/content/renderer/shared_worker/embedded_shared_worker_stub.h b/content/renderer/shared_worker/embedded_shared_worker_stub.h index 9cb81ccd..115aea9 100644 --- a/content/renderer/shared_worker/embedded_shared_worker_stub.h +++ b/content/renderer/shared_worker/embedded_shared_worker_stub.h
@@ -39,6 +39,7 @@ } namespace content { +class HostChildURLLoaderFactoryBundle; class URLLoaderFactoryBundleInfo; class WebApplicationCacheHostImpl; @@ -122,6 +123,10 @@ // script. network::mojom::URLLoaderFactoryAssociatedPtrInfo script_loader_factory_info_; + // S13nServiceWorker: The factory bundle used for loads from this shared + // worker. + scoped_refptr<HostChildURLLoaderFactoryBundle> loader_factories_; + DISALLOW_COPY_AND_ASSIGN(EmbeddedSharedWorkerStub); };
diff --git a/content/shell/test_runner/test_runner.cc b/content/shell/test_runner/test_runner.cc index 2fe6b45..4ff9c3f 100644 --- a/content/shell/test_runner/test_runner.cc +++ b/content/shell/test_runner/test_runner.cc
@@ -319,11 +319,11 @@ // // 1. For normal reftest, we would like to take screenshots after web fonts // are loaded, i.e. replicate the behavior of this injected script: - // https://github.com/w3c/web-platform-tests/blob/master/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js + // https://github.com/web-platform-tests/wpt/blob/master/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js // 2. For reftests with a 'reftest-wait' class on the root element, reference // comparison is delayed until that class attribute is removed. To support // this feature, we use a mutation observer. - // http://web-platform-tests.org/writing-tests/reftests.html#controlling-when-comparison-occurs + // https://web-platform-tests.org/writing-tests/reftests.html#controlling-when-comparison-occurs // // Note that this method may be called multiple times on a frame, so we put // the code behind a flag. The flag is safe to be installed on testRunner
diff --git a/docs/speed/bot_health_sheriffing/how_to_access_test_logs.md b/docs/speed/bot_health_sheriffing/how_to_access_test_logs.md index 5cb817c..89ee025 100644 --- a/docs/speed/bot_health_sheriffing/how_to_access_test_logs.md +++ b/docs/speed/bot_health_sheriffing/how_to_access_test_logs.md
@@ -34,6 +34,30 @@  +### Accessing the log for the new perf recipe + +Currently linux-perf and mac-10_12_laptop_low_end-perf are running the new perf recipe and logs are accessed slightly differently. + +#### Failing Story Logs +Sheriff-o-matic now links to failing story logs when present. Click on the logs +link to download the failing story log. + + + +#### Failing Benchmark Logs +First navigate to the failing build through the Sheriff-o-matic entry by clicking on the builder this step failed on. + + + +This new screen will list out the most recent builds for this builder. To identify which build you are interested in you will have to drill into each build starting with the most recent to identify where the specific failing test is. Ctrl-F for “performance_test_suite” or scroll down to the test entry. The list of failed tests is right on the performance_test_suite step: + + + +Once you have identified the build that has your failing test, click on the “Benchmark logs” link and Ctrl-F for your failing benchmark. This link provides a logdog stream with all of the logs for that particular benchmark. + + + + ## Navigating log files ### Identifying why a story failed
diff --git a/docs/speed/bot_health_sheriffing/images/som_new_recipe_benchmark_logs_link.png b/docs/speed/bot_health_sheriffing/images/som_new_recipe_benchmark_logs_link.png new file mode 100644 index 0000000..a7b0997a --- /dev/null +++ b/docs/speed/bot_health_sheriffing/images/som_new_recipe_benchmark_logs_link.png Binary files differ
diff --git a/docs/speed/bot_health_sheriffing/images/som_new_recipe_choose_builder.png b/docs/speed/bot_health_sheriffing/images/som_new_recipe_choose_builder.png new file mode 100644 index 0000000..f8417c9f --- /dev/null +++ b/docs/speed/bot_health_sheriffing/images/som_new_recipe_choose_builder.png Binary files differ
diff --git a/docs/speed/bot_health_sheriffing/images/som_new_recipe_identify_failed_tests.png b/docs/speed/bot_health_sheriffing/images/som_new_recipe_identify_failed_tests.png new file mode 100644 index 0000000..580e13f --- /dev/null +++ b/docs/speed/bot_health_sheriffing/images/som_new_recipe_identify_failed_tests.png Binary files differ
diff --git a/docs/speed/bot_health_sheriffing/images/som_new_recipe_story_log.png b/docs/speed/bot_health_sheriffing/images/som_new_recipe_story_log.png new file mode 100644 index 0000000..575a426 --- /dev/null +++ b/docs/speed/bot_health_sheriffing/images/som_new_recipe_story_log.png Binary files differ
diff --git a/docs/testing/layout_tests_tips.md b/docs/testing/layout_tests_tips.md index fcda5dd8..69efd16 100644 --- a/docs/testing/layout_tests_tips.md +++ b/docs/testing/layout_tests_tips.md
@@ -20,7 +20,7 @@ ## General Principles This section contains guidelines adopted from -[web-platform-tests documentation](http://web-platform-tests.org/writing-tests/general-guidelines.html) +[web-platform-tests documentation](https://web-platform-tests.org/writing-tests/general-guidelines.html) and [WebKit's Wiki page on Writing good test cases](https://trac.webkit.org/wiki/Writing%20Layout%20Tests%20for%20DumpRenderTree), with Blink-specific flavoring. @@ -93,7 +93,7 @@ `testharness.js` makes a test self-describing when used correctly. Other types of tests, such as reference tests and [tests with manual fallback](./layout_tests_with_manual_fallback.md), -[must be carefully designed](http://web-platform-tests.org/writing-tests/manual.html#requirements-for-a-manual-test) +[must be carefully designed](https://web-platform-tests.org/writing-tests/manual.html#requirements-for-a-manual-test) to be self-describing. ### Minimal @@ -107,7 +107,7 @@ Tests should provide as much relevant information as possible when failing. `testharness.js` tests should prefer -[rich assert_ functions](https://github.com/w3c/web-platform-tests/blob/master/docs/_writing-tests/testharness-api.md#list-of-assertions) +[rich assert_ functions](https://web-platform-tests.org/writing-tests/testharness-api.html#list-of-assertions) to combining `assert_true()` with a boolean operator. Using appropriate `assert_` functions results in better diagnostic output when the assertion fails.
diff --git a/docs/testing/layout_tests_with_manual_fallback.md b/docs/testing/layout_tests_with_manual_fallback.md index 0d8e3a6..74aa2f9 100644 --- a/docs/testing/layout_tests_with_manual_fallback.md +++ b/docs/testing/layout_tests_with_manual_fallback.md
@@ -11,7 +11,7 @@ A popular pattern used in these tests is to rely on the user to perform some manual steps in order to run the test case in a normal browser session. These tests are effectively -[manual tests](http://web-platform-tests.org/writing-tests/manual.html), with +[manual tests](https://web-platform-tests.org/writing-tests/manual.html), with additional JavaScript code that automatically performs the desired manual steps, when loaded in an environment that exposes the needed testing APIs.
diff --git a/docs/testing/web_platform_tests.md b/docs/testing/web_platform_tests.md index d50041d..910962b 100644 --- a/docs/testing/web_platform_tests.md +++ b/docs/testing/web_platform_tests.md
@@ -5,7 +5,7 @@ mission of improving the web. We believe that leveraging and contributing to a shared test suite is one of the most important tools in achieving interoperability between browsers. The [web-platform-tests -repository](https://github.com/w3c/web-platform-tests) is the primary shared +repository](https://github.com/web-platform-tests/wpt) is the primary shared test suite where all browser engines are collaborating. Chromium has a 2-way import/export process with the upstream web-platform-tests @@ -13,7 +13,7 @@ [LayoutTests/external/wpt](../../third_party/WebKit/LayoutTests/external/wpt) and any changes to the imported tests are also exported to web-platform-tests. -See http://web-platform-tests.org/ for general documentation on +See https://web-platform-tests.org/ for general documentation on web-platform-tests, including tips for writing and reviewing tests. [TOC] @@ -68,7 +68,7 @@ If you upload a CL with any changes in [third_party/WebKit/LayoutTests/external/wpt](../../third_party/WebKit/LayoutTests/external/wpt), once you add reviewers the exporter will create a provisional pull request with -those changes in the [upstream WPT GitHub repository](https://github.com/w3c/web-platform-tests/). +those changes in the [upstream WPT GitHub repository](https://github.com/web-platform-tests/wpt/). Once you're ready to land your CL, please check the Travis CI status on the upstream PR (link at the bottom of the page). If it's green, go ahead and land your CL @@ -82,9 +82,9 @@ - CLs that change over 1000 files will not be exported. - All PRs use the - [`chromium-export`](https://github.com/w3c/web-platform-tests/pulls?utf8=%E2%9C%93&q=is%3Apr%20label%3Achromium-export) label. + [`chromium-export`](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr%20label%3Achromium-export) label. - All PRs for CLs that haven't yet been landed in Chromium also use the - [`do not merge yet`](https://github.com/w3c/web-platform-tests/pulls?q=is%3Apr+is%3Aopen+label%3A%22do+not+merge+yet%22) label. + [`do not merge yet`](https://github.com/web-platform-tests/wpt/pulls?q=is%3Apr+is%3Aopen+label%3A%22do+not+merge+yet%22) label. - The exporter cannot create upstream PRs for in-flight CLs with binary files (e.g. webm files). An export PR will still be made after the CL lands. @@ -184,19 +184,19 @@ is and isn't required. When implementation experience is needed to inform the specification work, -[tentative tests](http://web-platform-tests.org/writing-tests/file-names.html) +[tentative tests](https://web-platform-tests.org/writing-tests/file-names.html) can be appropriate. It should be apparent in context why the test is tentative and what needs to be resolved to make it non-tentative. ### Tests that require testing APIs -[testdriver.js](http://web-platform-tests.org/writing-tests/testdriver.html) +[testdriver.js](https://web-platform-tests.org/writing-tests/testdriver.html) provides a means to automate tests that cannot be written purely using web platform APIs, similar to `internals.*` and `eventSender.*` in regular Blink layout tests. If no testdriver.js API exists, check if it's a -[known issue](https://github.com/w3c/web-platform-tests/labels/testdriver.js) +[known issue](https://github.com/web-platform-tests/wpt/labels/testdriver.js) and otherwise consider filing a new issue. An alternative is to write manual tests that are automated with scripts from @@ -240,7 +240,7 @@ ### Direct pull requests It's still possible to make direct pull requests to web-platform-tests, see -http://web-platform-tests.org/appendix/github-intro.html. +https://web-platform-tests.org/appendix/github-intro.html. ## Running tests
diff --git a/docs/testing/writing_layout_tests.md b/docs/testing/writing_layout_tests.md index 7d90642..f71eb3a 100644 --- a/docs/testing/writing_layout_tests.md +++ b/docs/testing/writing_layout_tests.md
@@ -73,7 +73,7 @@ Tests should be written under the assumption that they will be upstreamed to the WPT project. To this end, tests should follow the -[WPT guidelines](http://web-platform-tests.org/writing-tests/). +[WPT guidelines](https://web-platform-tests.org/writing-tests/). There is no style guide that applies to all layout tests. However, some projects @@ -93,18 +93,18 @@ less reliable tests. All new JavaScript tests should be written using the -[testharness.js](https://github.com/w3c/web-platform-tests/tree/master/resources) +[testharness.js](https://github.com/web-platform-tests/wpt/tree/master/resources) testing framework. This framework is used by the tests in the -[web-platform-tests](https://github.com/w3c/web-platform-tests) repository, +[web-platform-tests](https://github.com/web-platform-tests/wpt) repository, which is shared with all the other browser vendors, so `testharness.js` tests are more accessible to browser developers. -See the [API documentation](http://web-platform-tests.org/writing-tests/testharness-api.html) +See the [API documentation](https://web-platform-tests.org/writing-tests/testharness-api.html) for a thorough introduction to `testharness.js`. Layout tests should follow the recommendations of the above documentation. Furthermore, layout tests should include relevant -[metadata](http://web-platform-tests.org/writing-tests/css-metadata.html). The +[metadata](https://web-platform-tests.org/writing-tests/css-metadata.html). The specification URL (in `<link rel="help">`) is almost always relevant, and is incredibly helpful to a developer who needs to understand the test quickly. @@ -190,7 +190,7 @@ This is contrary to the WPT guidelines, which call for absolute paths. This limitation does not apply to the tests in `LayoutTests/http`, which rely on an HTTP server, or to the tests in `LayoutTests/external/wpt`, which are -imported from the [WPT repository](https://github.com/w3c/web-platform-tests). +imported from the [WPT repository](https://github.com/web-platform-tests/wpt). *** ### WPT Supplemental Testing APIs @@ -362,7 +362,7 @@ cannot be covered by JavaScript tests. New reference tests should follow the -[WPT reftests guidelines](http://web-platform-tests.org/writing-tests/reftests.html). +[WPT reftests guidelines](https://web-platform-tests.org/writing-tests/reftests.html). The most important points are summarized below. * 🚧 The test page declares the reference page using a @@ -435,7 +435,7 @@ Pixel tests should still follow the principles laid out above. Pixel tests pose unique challenges to the desire to have *self-describing* and *cross-platform* tests. The -[WPT rendering test guidelines](http://web-platform-tests.org/writing-tests/rendering.html) +[WPT rendering test guidelines](https://web-platform-tests.org/writing-tests/rendering.html) contain useful guidance. The most relevant pieces of advice are below. * Whenever possible, use a green paragraph / page / square to indicate success.
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index dad25fe..c398300e 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1316,6 +1316,7 @@ DEVELOPERPRIVATE_ADDHOSTPERMISSION = 1253, DEVELOPERPRIVATE_REMOVEHOSTPERMISSION = 1254, MEDIAPERCEPTIONPRIVATE_SETCOMPONENTPROCESSSTATE = 1255, + USERSPRIVATE_GETCURRENTUSER = 1256, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/infra/config/global/luci-milo-dev.cfg b/infra/config/global/luci-milo-dev.cfg index a4b8c8b..0ba7180 100644 --- a/infra/config/global/luci-milo-dev.cfg +++ b/infra/config/global/luci-milo-dev.cfg
@@ -1263,11 +1263,6 @@ short_name: "nvi" } builders: { - name: "buildbot/chromium.perf/Mac 10.11 Perf" - category: "perf|mac" - short_name: "11" - } - builders: { name: "buildbot/chromium.perf/Mac 10.12 Perf" category: "perf|mac" short_name: "12"
diff --git a/infra/config/global/luci-milo.cfg b/infra/config/global/luci-milo.cfg index dc0ae818..e90f9a7 100644 --- a/infra/config/global/luci-milo.cfg +++ b/infra/config/global/luci-milo.cfg
@@ -1400,11 +1400,6 @@ short_name: "nvi" } builders { - name: "buildbucket/luci.chromium.ci/Mac 10.11 Perf" - category: "perf|mac" - short_name: "11" - } - builders { name: "buildbot/chromium.perf/Mac 10.12 Perf" name: "buildbucket/luci.chromium.ci/Mac 10.12 Perf" category: "perf|mac" @@ -1434,10 +1429,6 @@ category: "perf" short_name: "lnx" } - builders { - name: "buildbot/chromium.perf/Win 7 Intel GPU Perf" - name: "buildbucket/luci.chromium.ci/Win 7 Intel GPU Perf" - } } consoles {
diff --git a/ios/build/bots/chromium.fyi/ios11-beta-simulator.json b/ios/build/bots/chromium.fyi/ios11-beta-simulator.json index a2320038..f254aa2d 100644 --- a/ios/build/bots/chromium.fyi/ios11-beta-simulator.json +++ b/ios/build/bots/chromium.fyi/ios11-beta-simulator.json
@@ -2,7 +2,7 @@ "comments": [ "Run tests on iOS11beta track on 64-bit iOS 11 simulators." ], - "xcode build version": "9q1019a", + "xcode build version": "9C40b", "gn_args": [ "goma_dir=\"$(goma_dir)\"", "additional_target_cpus=[\"x86\"]",
diff --git a/ios/build/bots/chromium.mac/UIRefresh-simulator.json b/ios/build/bots/chromium.mac/UIRefresh-simulator.json new file mode 100644 index 0000000..3b697d9 --- /dev/null +++ b/ios/build/bots/chromium.mac/UIRefresh-simulator.json
@@ -0,0 +1,90 @@ +{ + "comments": [ + "UIRefresh tests for iPhone device." + ], + "xcode build version": "9C40b", + "gn_args": [ + "goma_dir=\"$(goma_dir)\"", + "additional_target_cpus=[\"x86\"]", + "is_component_build=false", + "is_debug=true", + "symbol_level=1", + "target_cpu=\"x64\"", + "target_os=\"ios\"", + "use_goma=true" + ], + "tests": [ + { + "include": "uirefresh_unittests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPhone 5s", + "os": "11.2" + }, + { + "include": "uirefresh_unittests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPhone X", + "os": "11.2" + }, + { + "include": "uirefresh_unittests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPad Air", + "os": "11.2" + }, + { + "include": "internal_earl_grey_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPhone X", + "os": "11.2" + }, + { + "include": "internal_earl_grey_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPad Air", + "os": "11.2" + }, + { + "include": "eg_cq_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPhone X", + "os": "11.2" + }, + { + "include": "eg_cq_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPad Air", + "os": "11.2" + }, + { + "include": "eg_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPhone X", + "os": "11.2" + }, + { + "include": "eg_tests.json", + "test args": [ + "--enable-features=UIRefreshPhase1" + ], + "device type": "iPad Air", + "os": "11.2" + } + ] +}
diff --git a/ios/build/bots/tests/uirefresh_unittests.json b/ios/build/bots/tests/uirefresh_unittests.json new file mode 100644 index 0000000..5d10b2a --- /dev/null +++ b/ios/build/bots/tests/uirefresh_unittests.json
@@ -0,0 +1,24 @@ +{ + "comments": [ + "Common set of tests for the UIRefresh bot to run on various device/OS", + "combinations. These are the tests which will be affected by the ", + "UIRefreshPhase1 flag." + ], + "tests": [ + { + "app": "ios_chrome_unittests" + }, + { + "app": "ios_net_unittests" + }, + { + "app": "ios_web_inttests" + }, + { + "app": "ios_web_unittests" + }, + { + "app": "ios_web_view_inttests" + } + ] +}
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 7b1fd78..647ecc0 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -171,7 +171,7 @@ "//ios/chrome/browser/geolocation", "//ios/chrome/browser/geolocation:geolocation_internal", "//ios/chrome/browser/history", - "//ios/chrome/browser/mailto:features", + "//ios/chrome/browser/mailto:feature_flags", "//ios/chrome/browser/memory", "//ios/chrome/browser/metrics", "//ios/chrome/browser/metrics:metrics_internal",
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn index 564985e..77b29f2fa 100644 --- a/ios/chrome/browser/BUILD.gn +++ b/ios/chrome/browser/BUILD.gn
@@ -113,23 +113,22 @@ "//google_apis", "//ios/chrome/app/strings", "//ios/chrome/browser/browser_state", - "//ios/chrome/browser/browsing_data:features", + "//ios/chrome/browser/browsing_data:feature_flags", "//ios/chrome/browser/download", "//ios/chrome/browser/drag_and_drop", "//ios/chrome/browser/itunes_urls", - "//ios/chrome/browser/mailto:features", + "//ios/chrome/browser/mailto:feature_flags", "//ios/chrome/browser/payments:constants", - "//ios/chrome/browser/ssl:features", + "//ios/chrome/browser/ssl:feature_flags", "//ios/chrome/browser/sync/glue", "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/coordinators:chrome_coordinators", - "//ios/chrome/browser/ui/external_search:features", - "//ios/chrome/browser/ui/fullscreen:features", - "//ios/chrome/browser/ui/history:history_base_feature", + "//ios/chrome/browser/ui/external_search:feature_flags", + "//ios/chrome/browser/ui/fullscreen:feature_flags", + "//ios/chrome/browser/ui/history:feature_flags", "//ios/chrome/browser/ui/main:feature_flags", "//ios/chrome/browser/ui/omnibox", - "//ios/chrome/browser/ui/popup_menu:flags", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/common", "//ios/components/io_thread", "//ios/net",
diff --git a/ios/chrome/browser/about_flags.mm b/ios/chrome/browser/about_flags.mm index 6b2eb27..7b11d37 100644 --- a/ios/chrome/browser/about_flags.mm +++ b/ios/chrome/browser/about_flags.mm
@@ -48,10 +48,9 @@ #include "ios/chrome/browser/ssl/captive_portal_features.h" #include "ios/chrome/browser/ui/external_search/features.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h" -#import "ios/chrome/browser/ui/history/history_base_feature.h" +#import "ios/chrome/browser/ui/history/features.h" #include "ios/chrome/browser/ui/main/main_feature_flags.h" -#import "ios/chrome/browser/ui/popup_menu/popup_menu_flags.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/ui/user_feedback_features.h" #include "ios/chrome/grit/ios_strings.h" @@ -269,9 +268,6 @@ flag_descriptions::kNewClearBrowsingDataUIName, flag_descriptions::kNewClearBrowsingDataUIDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kNewClearBrowsingDataUI)}, - {"new-tools_menu", flag_descriptions::kNewToolsMenuName, - flag_descriptions::kNewToolsMenuDescription, flags_ui::kOsIos, - FEATURE_VALUE_TYPE(kNewToolsMenu)}, {"itunes-urls-store-kit-handling", flag_descriptions::kITunesUrlsStoreKitHandlingName, flag_descriptions::kITunesUrlsStoreKitHandlingDescription,
diff --git a/ios/chrome/browser/browsing_data/BUILD.gn b/ios/chrome/browser/browsing_data/BUILD.gn index a125c8a8..c16abd93 100644 --- a/ios/chrome/browser/browsing_data/BUILD.gn +++ b/ios/chrome/browser/browsing_data/BUILD.gn
@@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -source_set("features") { +source_set("feature_flags") { sources = [ "browsing_data_features.cc", "browsing_data_features.h",
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/ios_chrome_flag_descriptions.cc index b00b542..4cb03eb 100644 --- a/ios/chrome/browser/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
@@ -148,10 +148,6 @@ "prototype site instead of triggering the native Tab Switcher. The native " "TabSwitcher is accessible by long pressing the button"; -const char kNewToolsMenuName[] = "Enable the new tools menu"; -const char kNewToolsMenuDescription[] = - "When enabled, the new tools menu is displayed"; - const char kOmniboxUIElideSuggestionUrlAfterHostName[] = "Hide the path, query, and ref of omnibox suggestions"; const char kOmniboxUIElideSuggestionUrlAfterHostDescription[] =
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.h b/ios/chrome/browser/ios_chrome_flag_descriptions.h index 3e01299..20f4e9cc 100644 --- a/ios/chrome/browser/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/ios_chrome_flag_descriptions.h
@@ -116,10 +116,6 @@ extern const char kMemexTabSwitcherName[]; extern const char kMemexTabSwitcherDescription[]; -// Title and description for the flag to enable new tools menu. -extern const char kNewToolsMenuName[]; -extern const char kNewToolsMenuDescription[]; - // Title and description for the flag to enable elision of the URL path, query, // and ref in omnibox URL suggestions. extern const char kOmniboxUIElideSuggestionUrlAfterHostName[];
diff --git a/ios/chrome/browser/mailto/BUILD.gn b/ios/chrome/browser/mailto/BUILD.gn index 9af0174..70b81971 100644 --- a/ios/chrome/browser/mailto/BUILD.gn +++ b/ios/chrome/browser/mailto/BUILD.gn
@@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -source_set("features") { +source_set("feature_flags") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ "features.h",
diff --git a/ios/chrome/browser/signin/identity_manager_factory.cc b/ios/chrome/browser/signin/identity_manager_factory.cc index c55848fd..74ed2fd 100644 --- a/ios/chrome/browser/signin/identity_manager_factory.cc +++ b/ios/chrome/browser/signin/identity_manager_factory.cc
@@ -10,6 +10,7 @@ #include "components/keyed_service/ios/browser_state_dependency_manager.h" #include "components/signin/core/browser/signin_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#include "ios/chrome/browser/signin/account_tracker_service_factory.h" #include "ios/chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "ios/chrome/browser/signin/signin_manager_factory.h" #include "services/identity/public/cpp/identity_manager.h" @@ -23,7 +24,8 @@ explicit IdentityManagerHolder(ios::ChromeBrowserState* browser_state) : identity_manager_( ios::SigninManagerFactory::GetForBrowserState(browser_state), - ProfileOAuth2TokenServiceFactory::GetForBrowserState( + ProfileOAuth2TokenServiceFactory::GetForBrowserState(browser_state), + ios::AccountTrackerServiceFactory::GetForBrowserState( browser_state)) {} identity::IdentityManager* identity_manager() { return &identity_manager_; } @@ -36,6 +38,7 @@ : BrowserStateKeyedServiceFactory( "IdentityManager", BrowserStateDependencyManager::GetInstance()) { + DependsOn(ios::AccountTrackerServiceFactory::GetInstance()); DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); DependsOn(ios::SigninManagerFactory::GetInstance()); }
diff --git a/ios/chrome/browser/ssl/BUILD.gn b/ios/chrome/browser/ssl/BUILD.gn index 5dbe830..2f48086 100644 --- a/ios/chrome/browser/ssl/BUILD.gn +++ b/ios/chrome/browser/ssl/BUILD.gn
@@ -23,7 +23,7 @@ "ios_ssl_error_handler.mm", ] deps = [ - ":features", + ":feature_flags", "//base", "//base:i18n", "//components/captive_portal", @@ -45,7 +45,7 @@ ] } -source_set("features") { +source_set("feature_flags") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ "captive_portal_features.cc", @@ -65,10 +65,10 @@ "ios_ssl_error_handler_unittest.mm", ] deps = [ + ":feature_flags", ":ssl", "//components/security_state/core", "//ios/chrome/browser/browser_state:test_support", - "//ios/chrome/browser/ssl:features", "//ios/chrome/browser/web:test_support", "//ios/testing:ios_test_support", "//ios/web",
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn index cca1c88..b451440e 100644 --- a/ios/chrome/browser/tabs/BUILD.gn +++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -109,7 +109,7 @@ "//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/snapshots", "//ios/chrome/browser/ssl", - "//ios/chrome/browser/ssl:features", + "//ios/chrome/browser/ssl:feature_flags", "//ios/chrome/browser/store_kit", "//ios/chrome/browser/sync", "//ios/chrome/browser/translate",
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn index 49f2e284..3a1c3e1 100644 --- a/ios/chrome/browser/ui/BUILD.gn +++ b/ios/chrome/browser/ui/BUILD.gn
@@ -69,7 +69,7 @@ "//base:i18n", "//ios/chrome/app:tests_hook", "//ios/chrome/browser", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/web", "//ui/base", "//ui/gfx", @@ -364,7 +364,7 @@ "//ios/chrome/browser/ui/find_bar", "//ios/chrome/browser/ui/first_run", "//ios/chrome/browser/ui/fullscreen", - "//ios/chrome/browser/ui/fullscreen:features", + "//ios/chrome/browser/ui/fullscreen:feature_flags", "//ios/chrome/browser/ui/fullscreen:ui", "//ios/chrome/browser/ui/history", "//ios/chrome/browser/ui/history_popup:coordinator", @@ -384,7 +384,6 @@ "//ios/chrome/browser/ui/page_info/requirements", "//ios/chrome/browser/ui/payments", "//ios/chrome/browser/ui/popup_menu", - "//ios/chrome/browser/ui/popup_menu:flags", "//ios/chrome/browser/ui/presenters", "//ios/chrome/browser/ui/print", "//ios/chrome/browser/ui/qr_scanner:coordinator", @@ -409,7 +408,7 @@ "//ios/chrome/browser/ui/toolbar/clean:toolbar_ui", "//ios/chrome/browser/ui/toolbar/legacy", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/tools_menu", "//ios/chrome/browser/ui/tools_menu:configuration", "//ios/chrome/browser/ui/tools_menu/public",
diff --git a/ios/chrome/browser/ui/app_launcher/BUILD.gn b/ios/chrome/browser/ui/app_launcher/BUILD.gn index 6ce48aec..61fac104 100644 --- a/ios/chrome/browser/ui/app_launcher/BUILD.gn +++ b/ios/chrome/browser/ui/app_launcher/BUILD.gn
@@ -20,7 +20,7 @@ "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser", "//ios/chrome/browser/app_launcher", - "//ios/chrome/browser/mailto:features", + "//ios/chrome/browser/mailto:feature_flags", "//ios/chrome/browser/ui/collection_view", "//ios/chrome/browser/web", "//ios/public/provider/chrome/browser",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index 1acd6fd..3b184cbd 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -255,9 +255,15 @@ browserState:(ios::ChromeBrowserState*)browserState dispatcher:(id<ApplicationCommands>)dispatcher { DCHECK(browserState); - self = - [super initWithTableViewStyle:UITableViewStylePlain - appBarStyle:ChromeTableViewControllerStyleWithAppBar]; + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + self = + [super initWithTableViewStyle:UITableViewStylePlain + appBarStyle:ChromeTableViewControllerStyleNoAppBar]; + } else { + self = + [super initWithTableViewStyle:UITableViewStylePlain + appBarStyle:ChromeTableViewControllerStyleWithAppBar]; + } if (self) { _browserState = browserState->GetOriginalChromeBrowserState(); _loader = loader; @@ -288,6 +294,12 @@ DCHECK_EQ(_rootNode, self.bookmarks->root_node()); NSMutableArray<BookmarkHomeViewController*>* stack = [NSMutableArray array]; + // On UIRefresh we need to configure the root controller Navigationbar at this + // time when reconstructing from cache, or there will be a loading flicker if + // this gets done on viewDidLoad. + if (experimental_flags::IsBookmarksUIRebootEnabled()) + [self setupNavigationForBookmarkHomeViewController:self + usingBookmarkNode:_rootNode]; [stack addObject:self]; int64_t cachedFolderID; @@ -324,6 +336,12 @@ BookmarkHomeViewController* controller = [self createControllerWithRootFolder:node]; + // On UIRefresh we need to configure the controller's Navigationbar at this + // time when reconstructing from cache, or there will be a loading flicker + // if this gets done on viewDidLoad. + if (experimental_flags::IsBookmarksUIRebootEnabled()) + [self setupNavigationForBookmarkHomeViewController:controller + usingBookmarkNode:node]; if (nodeID == cachedFolderID) { [controller setCachedContentPosition:[NSNumber @@ -340,13 +358,21 @@ [super viewDidLoad]; // Set Navigation Bar and Toolbar appearance. - self.navigationController.navigationBarHidden = YES; - self.navigationController.toolbar.translucent = NO; - self.navigationController.toolbar.barTintColor = [UIColor whiteColor]; + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + self.navigationController.navigationBarHidden = NO; + self.navigationController.toolbar.translucent = YES; + // If the NavigationBar is not translucent, set + // |self.extendedLayoutIncludesOpaqueBars| to YES. + self.extendedLayoutIncludesOpaqueBars = YES; + } else { + self.navigationController.navigationBarHidden = YES; + self.navigationController.toolbar.translucent = NO; + self.navigationController.toolbar.barTintColor = [UIColor whiteColor]; + self.navigationController.toolbar.layer.shadowRadius = kShadowRadius; + self.navigationController.toolbar.layer.shadowOpacity = kShadowOpacity; + } self.navigationController.toolbar.accessibilityIdentifier = kBookmarkHomeUIToolbarIdentifier; - self.navigationController.toolbar.layer.shadowRadius = kShadowRadius; - self.navigationController.toolbar.layer.shadowOpacity = kShadowOpacity; // Disable separators while the loading spinner is showing. |loadBookmarkView| // will bring them back if needed. @@ -445,8 +471,8 @@ self.mediator.consumer = self; [self.mediator startMediating]; - // After the table view has been added. - [self setupNavigationBar]; + [self setupNavigationForBookmarkHomeViewController:self + usingBookmarkNode:_rootNode]; [self setupContextBar]; @@ -945,24 +971,38 @@ } } -// Set up navigation bar for the new UI. -- (void)setupNavigationBar { - DCHECK(self.sharedState.tableView); - self.navigationController.navigationBarHidden = YES; - if (self.navigationController.viewControllers.count > 1) { - // Add custom back button. - UIBarButtonItem* backButton = - [ChromeIcon templateBarButtonItemWithImage:[ChromeIcon backIcon] - target:self - action:@selector(back)]; - self.navigationItem.leftBarButtonItem = backButton; +// Set up navigation bar for |viewController|'s navigationBar using |node|. +- (void)setupNavigationForBookmarkHomeViewController: + (BookmarkHomeViewController*)viewController + usingBookmarkNode: + (const bookmarks::BookmarkNode*)node { + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + viewController.navigationItem.leftBarButtonItem.action = @selector(back); + // Disable large titles on every VC but the root controller. + if (@available(iOS 11, *)) { + if (node != self.bookmarks->root_node()) { + viewController.navigationItem.largeTitleDisplayMode = + UINavigationItemLargeTitleDisplayModeNever; + } + } + } else { + viewController.navigationController.navigationBarHidden = YES; + if (viewController.navigationController.viewControllers.count > 1) { + // Add custom back button. + UIBarButtonItem* backButton = + [ChromeIcon templateBarButtonItemWithImage:[ChromeIcon backIcon] + target:self + action:@selector(back)]; + viewController.navigationItem.leftBarButtonItem = backButton; + } } // Add custom title. - self.title = bookmark_utils_ios::TitleForBookmarkNode(_rootNode); + viewController.title = bookmark_utils_ios::TitleForBookmarkNode(node); // Add custom done button. - self.navigationItem.rightBarButtonItem = [self customizedDoneButton]; + viewController.navigationItem.rightBarButtonItem = + [self customizedDoneButton]; } // Back button callback for the new ui. @@ -1713,22 +1753,27 @@ if (item.type == BookmarkHomeItemTypeBookmark) { BookmarkHomeNodeItem* nodeItem = base::mac::ObjCCastStrict<BookmarkHomeNodeItem>(item); - BookmarkTableCell* tableCell = - base::mac::ObjCCastStrict<BookmarkTableCell>(cell); - if (nodeItem.bookmarkNode == self.sharedState.editingFolderNode) { - // Delay starting edit, so that the cell is fully created. - dispatch_async(dispatch_get_main_queue(), ^{ - self.sharedState.editingFolderCell = tableCell; - [tableCell startEdit]; - tableCell.textDelegate = self; - }); - } + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + // TODO(crbug.com/839442): Implement support for + // TableViewBookmarkFolderCell editing. + } else { + BookmarkTableCell* tableCell = + base::mac::ObjCCastStrict<BookmarkTableCell>(cell); + if (nodeItem.bookmarkNode == self.sharedState.editingFolderNode) { + // Delay starting edit, so that the cell is fully created. + dispatch_async(dispatch_get_main_queue(), ^{ + self.sharedState.editingFolderCell = tableCell; + [tableCell startEdit]; + tableCell.textDelegate = self; + }); + } - // Cancel previous load attempts. - [self cancelLoadingFaviconAtIndexPath:indexPath]; - // Load the favicon from cache. If not found, try fetching it from a Google - // Server. - [self loadFaviconAtIndexPath:indexPath continueToGoogleServer:YES]; + // Cancel previous load attempts. + [self cancelLoadingFaviconAtIndexPath:indexPath]; + // Load the favicon from cache. If not found, try fetching it from a + // Google Server. + [self loadFaviconAtIndexPath:indexPath continueToGoogleServer:YES]; + } } return cell;
diff --git a/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.h b/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.h index 78dc3f9..b8a69f1 100644 --- a/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.h +++ b/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.h
@@ -12,6 +12,12 @@ BookmarkFolderStyleNewFolder, }; +typedef NS_ENUM(NSInteger, TableViewBookmarkFolderAccessoryType) { + TableViewBookmarkFolderAccessoryTypeNone, + TableViewBookmarkFolderAccessoryTypeCheckmark, + TableViewBookmarkFolderAccessoryTypeDisclosureIndicator, +}; + // BookmarkFolderItem provides data for a table view row that displays a // single bookmark folder. @interface BookmarkFolderItem : TableViewItem @@ -45,9 +51,9 @@ @property(nonatomic, strong) UIImageView* folderImageView; // The folder title displayed by this cell. @property(nonatomic, strong) UILabel* folderTitleLabel; -// Whether the cell is displaying a checkmark. -@property(nonatomic, assign, getter=isChecked) BOOL checked; - +// Accessory View. +@property(nonatomic, assign) + TableViewBookmarkFolderAccessoryType bookmarkAccessoryType; @end // TableViewCell that displays BookmarkFolderItem data.
diff --git a/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.mm b/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.mm index 02defeec..493a80b 100644 --- a/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.mm +++ b/ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.mm
@@ -73,7 +73,9 @@ folderCell.folderTitleLabel.text = self.title; folderCell.accessibilityIdentifier = self.title; folderCell.accessibilityLabel = self.title; - folderCell.checked = self.isCurrentFolder; + if (self.isCurrentFolder) + folderCell.bookmarkAccessoryType = + TableViewBookmarkFolderAccessoryTypeCheckmark; // In order to indent the cell's content we need to modify its // indentation constraint. folderCell.indentationConstraint.constant = @@ -121,7 +123,7 @@ @end @implementation TableViewBookmarkFolderCell -@synthesize checked = _checked; +@synthesize bookmarkAccessoryType = _bookmarkAccessoryType; @synthesize folderImageView = _folderImageView; @synthesize folderTitleLabel = _folderTitleLabel; @synthesize indentationConstraint = _indentationConstraint; @@ -183,20 +185,27 @@ return self; } -- (void)setChecked:(BOOL)checked { - if (checked != _checked) { - _checked = checked; - UIImageView* checkImageView = - checked ? [[UIImageView alloc] - initWithImage:[UIImage imageNamed:@"bookmark_blue_check"]] - : nil; - self.accessoryView = checkImageView; +- (void)setBookmarkAccessoryType: + (TableViewBookmarkFolderAccessoryType)bookmarkAccessoryType { + _bookmarkAccessoryType = bookmarkAccessoryType; + switch (_bookmarkAccessoryType) { + case TableViewBookmarkFolderAccessoryTypeCheckmark: + self.accessoryView = [[UIImageView alloc] + initWithImage:[UIImage imageNamed:@"bookmark_blue_check"]]; + break; + case TableViewBookmarkFolderAccessoryTypeDisclosureIndicator: + self.accessoryView = [[UIImageView alloc] + initWithImage:[UIImage imageNamed:@"table_view_cell_chevron"]]; + break; + case TableViewBookmarkFolderAccessoryTypeNone: + self.accessoryView = nil; + break; } } - (void)prepareForReuse { [super prepareForReuse]; - self.checked = NO; + self.bookmarkAccessoryType = TableViewBookmarkFolderAccessoryTypeNone; self.indentationWidth = 0; self.imageView.image = nil; self.indentationConstraint.constant = kFolderCellHorizonalInset;
diff --git a/ios/chrome/browser/ui/bookmarks/cells/bookmark_home_node_item.mm b/ios/chrome/browser/ui/bookmarks/cells/bookmark_home_node_item.mm index eec4562..bd947fd6 100644 --- a/ios/chrome/browser/ui/bookmarks/cells/bookmark_home_node_item.mm +++ b/ios/chrome/browser/ui/bookmarks/cells/bookmark_home_node_item.mm
@@ -5,8 +5,13 @@ #import "ios/chrome/browser/ui/bookmarks/cells/bookmark_home_node_item.h" #include "base/mac/foundation_util.h" +#include "base/strings/sys_string_conversions.h" #include "components/bookmarks/browser/bookmark_node.h" +#import "ios/chrome/browser/experimental_flags.h" +#import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" +#import "ios/chrome/browser/ui/bookmarks/cells/bookmark_folder_item.h" #import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_cell.h" +#import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -18,7 +23,15 @@ - (instancetype)initWithType:(NSInteger)type bookmarkNode:(const bookmarks::BookmarkNode*)node { if ((self = [super initWithType:type])) { - self.cellClass = [BookmarkTableCell class]; + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + if (node->is_folder()) { + self.cellClass = [TableViewBookmarkFolderCell class]; + } else { + self.cellClass = [TableViewURLCell class]; + } + } else { + self.cellClass = [BookmarkTableCell class]; + } _bookmarkNode = node; } return self; @@ -27,9 +40,31 @@ - (void)configureCell:(UITableViewCell*)cell withStyler:(ChromeTableViewStyler*)styler { [super configureCell:cell withStyler:styler]; - BookmarkTableCell* bookmarkCell = - base::mac::ObjCCastStrict<BookmarkTableCell>(cell); - [bookmarkCell setNode:self.bookmarkNode]; + if (experimental_flags::IsBookmarksUIRebootEnabled()) { + if (_bookmarkNode->is_folder()) { + TableViewBookmarkFolderCell* bookmarkCell = + base::mac::ObjCCastStrict<TableViewBookmarkFolderCell>(cell); + bookmarkCell.folderTitleLabel.text = + bookmark_utils_ios::TitleForBookmarkNode(_bookmarkNode); + bookmarkCell.accessibilityIdentifier = + bookmark_utils_ios::TitleForBookmarkNode(_bookmarkNode); + bookmarkCell.folderImageView.image = + [UIImage imageNamed:@"bookmark_blue_folder"]; + bookmarkCell.bookmarkAccessoryType = + TableViewBookmarkFolderAccessoryTypeDisclosureIndicator; + } else { + TableViewURLCell* urlCell = + base::mac::ObjCCastStrict<TableViewURLCell>(cell); + urlCell.titleLabel.text = + bookmark_utils_ios::TitleForBookmarkNode(_bookmarkNode); + urlCell.URLLabel.text = + base::SysUTF8ToNSString(_bookmarkNode->url().host()); + } + } else { + BookmarkTableCell* bookmarkCell = + base::mac::ObjCCastStrict<BookmarkTableCell>(cell); + [bookmarkCell setNode:self.bookmarkNode]; + } } @end
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index 98df455..524fc4b3 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -173,7 +173,6 @@ #import "ios/chrome/browser/ui/page_not_available_controller.h" #import "ios/chrome/browser/ui/payments/payment_request_manager.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.h" -#import "ios/chrome/browser/ui/popup_menu/popup_menu_flags.h" #import "ios/chrome/browser/ui/presenters/vertical_animation_container.h" #import "ios/chrome/browser/ui/print/print_controller.h" #import "ios/chrome/browser/ui/qr_scanner/qr_scanner_legacy_coordinator.h" @@ -204,8 +203,8 @@ #import "ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.h" #import "ios/chrome/browser/ui/toolbar/legacy/toolbar_controller_constants.h" #import "ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" #include "ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h" #import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h" #import "ios/chrome/browser/ui/toolbar/toolbar_ui.h"
diff --git a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm index 7f20da6..75a7bcb 100644 --- a/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm +++ b/ios/chrome/browser/ui/browser_view_controller_dependency_factory.mm
@@ -9,7 +9,7 @@ #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" #import "ios/chrome/browser/ui/browser_view_controller_helper.h" #import "ios/chrome/browser/ui/key_commands_provider.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/external_search/BUILD.gn b/ios/chrome/browser/ui/external_search/BUILD.gn index 8b04969..8419292 100644 --- a/ios/chrome/browser/ui/external_search/BUILD.gn +++ b/ios/chrome/browser/ui/external_search/BUILD.gn
@@ -19,7 +19,7 @@ ] } -source_set("features") { +source_set("feature_flags") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ "features.cc",
diff --git a/ios/chrome/browser/ui/fullscreen/BUILD.gn b/ios/chrome/browser/ui/fullscreen/BUILD.gn index 73bad64..e09e7d8 100644 --- a/ios/chrome/browser/ui/fullscreen/BUILD.gn +++ b/ios/chrome/browser/ui/fullscreen/BUILD.gn
@@ -29,7 +29,7 @@ ] } -source_set("features") { +source_set("feature_flags") { sources = [ "fullscreen_features.h", "fullscreen_features.mm", @@ -84,7 +84,7 @@ configs += [ "//build/config/compiler:enable_arc" ] deps = [ - ":features", + ":feature_flags", ":ui", "//base", "//components/keyed_service/ios",
diff --git a/ios/chrome/browser/ui/history/BUILD.gn b/ios/chrome/browser/ui/history/BUILD.gn index 127fdfc..7e656db 100644 --- a/ios/chrome/browser/ui/history/BUILD.gn +++ b/ios/chrome/browser/ui/history/BUILD.gn
@@ -29,7 +29,7 @@ "legacy_history_entry_item.mm", ] deps = [ - ":history_base_feature", + ":feature_flags", ":history_ui", "//base", "//base:i18n", @@ -132,11 +132,11 @@ ] } -source_set("history_base_feature") { +source_set("feature_flags") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ - "history_base_feature.h", - "history_base_feature.mm", + "features.cc", + "features.h", ] deps = [ "//base",
diff --git a/ios/chrome/browser/ui/history/history_base_feature.mm b/ios/chrome/browser/ui/history/features.cc similarity index 62% rename from ios/chrome/browser/ui/history/history_base_feature.mm rename to ios/chrome/browser/ui/history/features.cc index 65cfd7b..3e66cc0 100644 --- a/ios/chrome/browser/ui/history/history_base_feature.mm +++ b/ios/chrome/browser/ui/history/features.cc
@@ -2,11 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/history/history_base_feature.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif +#import "ios/chrome/browser/ui/history/features.h" const base::Feature kHistoryBatchUpdatesFilter{ "HistoryBatchUpdatesFilter", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/history/history_base_feature.h b/ios/chrome/browser/ui/history/features.h similarity index 63% rename from ios/chrome/browser/ui/history/history_base_feature.h rename to ios/chrome/browser/ui/history/features.h index fe2984b1..902b0e4 100644 --- a/ios/chrome/browser/ui/history/history_base_feature.h +++ b/ios/chrome/browser/ui/history/features.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_BASE_FEATURE_H_ -#define IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_BASE_FEATURE_H_ +#ifndef IOS_CHROME_BROWSER_UI_HISTORY_FEATURES_H_ +#define IOS_CHROME_BROWSER_UI_HISTORY_FEATURES_H_ #include "base/feature_list.h" // Feature to choose wether history filtering will use one BatchUpdates block. extern const base::Feature kHistoryBatchUpdatesFilter; -#endif // IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_BASE_FEATURE_H_ +#endif // IOS_CHROME_BROWSER_UI_HISTORY_FEATURES_H_
diff --git a/ios/chrome/browser/ui/history/legacy_history_collection_view_controller.mm b/ios/chrome/browser/ui/history/legacy_history_collection_view_controller.mm index b2c7ace..15526e0 100644 --- a/ios/chrome/browser/ui/history/legacy_history_collection_view_controller.mm +++ b/ios/chrome/browser/ui/history/legacy_history_collection_view_controller.mm
@@ -30,7 +30,7 @@ #import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h" #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" #import "ios/chrome/browser/ui/context_menu/context_menu_coordinator.h" -#import "ios/chrome/browser/ui/history/history_base_feature.h" +#import "ios/chrome/browser/ui/history/features.h" #import "ios/chrome/browser/ui/history/history_entries_status_item_delegate.h" #include "ios/chrome/browser/ui/history/history_entry_inserter.h" #import "ios/chrome/browser/ui/history/history_entry_item_delegate.h"
diff --git a/ios/chrome/browser/ui/history_popup/BUILD.gn b/ios/chrome/browser/ui/history_popup/BUILD.gn index 83008267..c0a3380 100644 --- a/ios/chrome/browser/ui/history_popup/BUILD.gn +++ b/ios/chrome/browser/ui/history_popup/BUILD.gn
@@ -44,7 +44,7 @@ "//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/fullscreen:coordinators", "//ios/chrome/browser/ui/history_popup/requirements", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", ] }
diff --git a/ios/chrome/browser/ui/history_popup/tab_history_legacy_coordinator.mm b/ios/chrome/browser/ui/history_popup/tab_history_legacy_coordinator.mm index 29be17492..575f83e0 100644 --- a/ios/chrome/browser/ui/history_popup/tab_history_legacy_coordinator.mm +++ b/ios/chrome/browser/ui/history_popup/tab_history_legacy_coordinator.mm
@@ -16,7 +16,7 @@ #import "ios/chrome/browser/ui/history_popup/requirements/tab_history_ui_updater.h" #import "ios/chrome/browser/ui/history_popup/tab_history_popup_controller.h" #include "ios/chrome/browser/ui/rtl_geometry.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/util/named_guide.h" #include "ios/web/public/navigation_item.h"
diff --git a/ios/chrome/browser/ui/location_bar/BUILD.gn b/ios/chrome/browser/ui/location_bar/BUILD.gn index 6d11d62..771dc434 100644 --- a/ios/chrome/browser/ui/location_bar/BUILD.gn +++ b/ios/chrome/browser/ui/location_bar/BUILD.gn
@@ -57,7 +57,7 @@ "//ios/chrome/browser/ui/toolbar/buttons", "//ios/chrome/browser/ui/toolbar/keyboard_assist:keyboard_assist", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/voice", "//ios/chrome/browser/web_state_list",
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn index d65226c..84ac8b9 100644 --- a/ios/chrome/browser/ui/ntp/BUILD.gn +++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -43,7 +43,7 @@ "//ios/chrome/browser/ui/toolbar/clean:toolbar_ui", "//ios/chrome/browser/ui/toolbar/legacy", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/common", "//ui/base", ]
diff --git a/ios/chrome/browser/ui/omnibox/BUILD.gn b/ios/chrome/browser/ui/omnibox/BUILD.gn index 05582c84..a225e6e9 100644 --- a/ios/chrome/browser/ui/omnibox/BUILD.gn +++ b/ios/chrome/browser/ui/omnibox/BUILD.gn
@@ -118,7 +118,7 @@ "//ios/chrome/browser/ui/omnibox/popup", "//ios/chrome/browser/ui/toolbar/buttons", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/common", "//ios/public/provider/chrome/browser",
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm index ae7c5c6..384bf40 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
@@ -22,7 +22,7 @@ #import "ios/chrome/browser/ui/reversed_animation.h" #include "ios/chrome/browser/ui/rtl_geometry.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #import "ios/chrome/common/material_timing.h"
diff --git a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn index 3c231e34..13b742fc 100644 --- a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn +++ b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
@@ -31,8 +31,8 @@ "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/omnibox:omnibox_popup_shared", "//ios/chrome/browser/ui/omnibox:omnibox_util", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/toolbar/public:public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", "//ios/chrome/browser/ui/util:util", "//ios/web/public:public", "//net",
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm index df2ff56..f2eb3c6 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm
@@ -5,7 +5,7 @@ #import "ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.h" #import "ios/chrome/browser/ui/omnibox/popup/omnibox_popup_positioner.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #include "ios/chrome/browser/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/popup_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/BUILD.gn index 7a06bf5..45955ff 100644 --- a/ios/chrome/browser/ui/popup_menu/BUILD.gn +++ b/ios/chrome/browser/ui/popup_menu/BUILD.gn
@@ -60,7 +60,6 @@ ] deps = [ ":constants", - ":flags", "resources:popup_background", "resources:popup_menu_add_bookmark", "resources:popup_menu_bookmarks", @@ -143,14 +142,3 @@ ] configs += [ "//build/config/compiler:enable_arc" ] } - -source_set("flags") { - configs += [ "//build/config/compiler:enable_arc" ] - sources = [ - "popup_menu_flags.h", - "popup_menu_flags.mm", - ] - deps = [ - "//base", - ] -}
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_flags.h b/ios/chrome/browser/ui/popup_menu/popup_menu_flags.h deleted file mode 100644 index 9305b9ca..0000000 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_flags.h +++ /dev/null
@@ -1,15 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_POPUP_MENU_POPUP_MENU_FLAGS_H_ -#define IOS_CHROME_BROWSER_UI_POPUP_MENU_POPUP_MENU_FLAGS_H_ - -#include "base/feature_list.h" - -// Temporary feature for displaying the new tools menu. This feature will be -// merged into the general phase 1 feature once it is possible to interact with -// it. -extern const base::Feature kNewToolsMenu; - -#endif // IOS_CHROME_BROWSER_UI_POPUP_MENU_POPUP_MENU_FLAGS_H_
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_flags.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_flags.mm deleted file mode 100644 index b5f5f1e..0000000 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_flags.mm +++ /dev/null
@@ -1,12 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/popup_menu/popup_menu_flags.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -const base::Feature kNewToolsMenu{"NewToolsMenu", - base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/qr_scanner/BUILD.gn b/ios/chrome/browser/ui/qr_scanner/BUILD.gn index b04e2c6..debaa4ff 100644 --- a/ios/chrome/browser/ui/qr_scanner/BUILD.gn +++ b/ios/chrome/browser/ui/qr_scanner/BUILD.gn
@@ -91,7 +91,7 @@ "//ios/chrome/browser/ui/omnibox", "//ios/chrome/browser/ui/toolbar", "//ios/chrome/browser/ui/toolbar/clean:toolbar", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/test/app:test_support", "//ios/chrome/test/base", "//ios/chrome/test/earl_grey:test_support",
diff --git a/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm b/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm index b2fee32..88c6d92 100644 --- a/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm +++ b/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm
@@ -22,7 +22,7 @@ #include "ios/chrome/browser/ui/qr_scanner/qr_scanner_view.h" #include "ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller.h" #import "ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_util.h" #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn index 18efcef..a204b1fa 100644 --- a/ios/chrome/browser/ui/settings/BUILD.gn +++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -130,7 +130,7 @@ "//ios/chrome/browser/content_settings", "//ios/chrome/browser/feature_engagement", "//ios/chrome/browser/history", - "//ios/chrome/browser/mailto:features", + "//ios/chrome/browser/mailto:feature_flags", "//ios/chrome/browser/passwords", "//ios/chrome/browser/search_engines", "//ios/chrome/browser/signin", @@ -288,7 +288,7 @@ "//ios/chrome/browser/browsing_data", "//ios/chrome/browser/browsing_data:counters", "//ios/chrome/browser/content_settings", - "//ios/chrome/browser/mailto:features", + "//ios/chrome/browser/mailto:feature_flags", "//ios/chrome/browser/passwords", "//ios/chrome/browser/prefs:browser_prefs", "//ios/chrome/browser/search_engines", @@ -360,7 +360,7 @@ "//ios/chrome/app/theme", "//ios/chrome/browser", "//ios/chrome/browser/browser_state", - "//ios/chrome/browser/browsing_data:features", + "//ios/chrome/browser/browsing_data:feature_flags", "//ios/chrome/browser/content_settings", "//ios/chrome/browser/ntp_snippets", "//ios/chrome/browser/passwords:passwords",
diff --git a/ios/chrome/browser/ui/stack_view/BUILD.gn b/ios/chrome/browser/ui/stack_view/BUILD.gn index f104a95..d6c3179 100644 --- a/ios/chrome/browser/ui/stack_view/BUILD.gn +++ b/ios/chrome/browser/ui/stack_view/BUILD.gn
@@ -65,7 +65,7 @@ "//ios/chrome/browser/ui/toolbar/buttons", "//ios/chrome/browser/ui/toolbar/legacy", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/tools_menu", "//ios/chrome/browser/ui/tools_menu:configuration", "//ios/chrome/browser/ui/tools_menu/public",
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm index 89bec93..2431916 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm
@@ -53,7 +53,7 @@ #import "ios/chrome/browser/ui/stack_view/title_label.h" #import "ios/chrome/browser/ui/toolbar/legacy/toolbar_controller_constants.h" #import "ios/chrome/browser/ui/toolbar/legacy/toolbar_utils.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/toolbar/toolbar_owner.h" #import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h" #import "ios/chrome/browser/ui/tools_menu/public/tools_menu_configuration_provider.h"
diff --git a/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm b/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm index 0f7508a0..283bd1be 100644 --- a/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm +++ b/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm
@@ -29,7 +29,6 @@ - (void)viewDidLoad { [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; - if (self.tableViewController.styler.tableViewBackgroundColor != [UIColor clearColor]) { self.navigationBar.translucent = NO;
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn b/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn index 016d002d..fa0f83f 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn
@@ -73,12 +73,11 @@ "//ios/chrome/browser/ui/fullscreen:ui", "//ios/chrome/browser/ui/ntp:ntp", "//ios/chrome/browser/ui/orchestrator", - "//ios/chrome/browser/ui/popup_menu:flags", "//ios/chrome/browser/ui/popup_menu/public", "//ios/chrome/browser/ui/toolbar/buttons", "//ios/chrome/browser/ui/toolbar/clean:toolbar_ui", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/util:constraints_ui", "//ios/third_party/material_components_ios",
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/adaptive_toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/adaptive/adaptive_toolbar_view_controller.mm index 243f5fde..a9a3232f 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/adaptive_toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/adaptive_toolbar_view_controller.mm
@@ -7,7 +7,6 @@ #import "base/logging.h" #include "base/metrics/user_metrics.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" -#import "ios/chrome/browser/ui/popup_menu/popup_menu_flags.h" #import "ios/chrome/browser/ui/toolbar/adaptive/adaptive_toolbar_view.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.h" @@ -15,8 +14,8 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tools_menu_button.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" #import "ios/third_party/material_components_ios/src/components/ProgressView/src/MaterialProgressView.h" #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm index 5580c01..f6306444 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm
@@ -11,7 +11,7 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tools_menu_button.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #import "ios/chrome/browser/ui/util/constraints_ui_util.h" #import "ios/third_party/material_components_ios/src/components/ProgressView/src/MaterialProgressView.h"
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_view.mm b/ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_view.mm index badd963..d6537b03 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_view.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_view.mm
@@ -10,7 +10,7 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_configuration.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tools_menu_button.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/util/constraints_ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/toolbar/buttons/BUILD.gn b/ios/chrome/browser/ui/toolbar/buttons/BUILD.gn index 48044ad5..5fbe8130 100644 --- a/ios/chrome/browser/ui/toolbar/buttons/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/buttons/BUILD.gn
@@ -46,10 +46,9 @@ "//ios/chrome/browser/ui", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant", - "//ios/chrome/browser/ui/popup_menu:flags", "//ios/chrome/browser/ui/toolbar:resource_macros", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/images",
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm index 8eb14b3..7eb5ec2 100644 --- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm +++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
@@ -7,7 +7,6 @@ #include "components/strings/grit/components_strings.h" #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" -#import "ios/chrome/browser/ui/popup_menu/popup_menu_flags.h" #import "ios/chrome/browser/ui/rtl_geometry.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h" @@ -15,8 +14,8 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tools_menu_button.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" #include "ios/chrome/browser/ui/toolbar/toolbar_resource_macros.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #import "ios/chrome/browser/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm index 320eacef..34895fa 100644 --- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm +++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm
@@ -4,7 +4,7 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.mm index 3d1652e..cd8a484 100644 --- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.mm +++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.mm
@@ -5,7 +5,7 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tab_grid_button.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "ios/chrome/browser/ui/ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn index a2eb6ca..608895b 100644 --- a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn
@@ -78,7 +78,7 @@ "//ios/chrome/browser/ui/history_popup/requirements", "//ios/chrome/browser/ui/toolbar/buttons", "//ios/chrome/browser/ui/toolbar/public", - "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", + "//ios/chrome/browser/ui/toolbar/public:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/voice", "//ios/chrome/common",
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm index c9b93a9..1731510 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm
@@ -19,8 +19,8 @@ #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_tools_menu_button.h" #import "ios/chrome/browser/ui/toolbar/clean/toolbar_button_updater.h" #import "ios/chrome/browser/ui/toolbar/clean/toolbar_view.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #import "ios/chrome/browser/ui/util/constraints_ui_util.h" #import "ios/chrome/browser/ui/util/named_guide.h"
diff --git a/ios/chrome/browser/ui/toolbar/keyboard_assist/BUILD.gn b/ios/chrome/browser/ui/toolbar/keyboard_assist/BUILD.gn index 9f90123..8d52f43 100644 --- a/ios/chrome/browser/ui/toolbar/keyboard_assist/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/keyboard_assist/BUILD.gn
@@ -27,7 +27,7 @@ "//ios/chrome/browser", "//ios/chrome/browser/ui", "//ios/chrome/browser/ui/commands", - "//ios/chrome/browser/ui/external_search:features", + "//ios/chrome/browser/ui/external_search:feature_flags", "//ios/chrome/browser/ui/location_bar:constants", "//ios/chrome/browser/ui/omnibox:omnibox_internal", "//ios/chrome/browser/ui/toolbar/public",
diff --git a/ios/chrome/browser/ui/toolbar/public/BUILD.gn b/ios/chrome/browser/ui/toolbar/public/BUILD.gn index 472ea9e..76f876b 100644 --- a/ios/chrome/browser/ui/toolbar/public/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/public/BUILD.gn
@@ -13,7 +13,7 @@ "toolbar_coordinating.h", ] deps = [ - ":toolbar_base_feature", + ":feature_flags", "//base", "//ios/chrome/browser/ui", "//ios/chrome/browser/ui/activity_services/requirements", @@ -26,10 +26,10 @@ ] } -source_set("toolbar_base_feature") { +source_set("feature_flags") { sources = [ - "toolbar_controller_base_feature.h", - "toolbar_controller_base_feature.mm", + "features.cc", + "features.h", ] deps = [ "//base",
diff --git a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm b/ios/chrome/browser/ui/toolbar/public/features.cc similarity index 63% rename from ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm rename to ios/chrome/browser/ui/toolbar/public/features.cc index 309eaf9..79623758 100644 --- a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm +++ b/ios/chrome/browser/ui/toolbar/public/features.cc
@@ -2,13 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #include "base/command_line.h" -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - const base::Feature kMemexTabSwitcher{"MemexTabSwitcher", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/toolbar/public/features.h b/ios/chrome/browser/ui/toolbar/public/features.h new file mode 100644 index 0000000..3211f4712 --- /dev/null +++ b/ios/chrome/browser/ui/toolbar/public/features.h
@@ -0,0 +1,14 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_FEATURES_H_ +#define IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_FEATURES_H_ + +#include "base/feature_list.h" + +// Feature to choose whether to use the memex prototype tab switcher or the +// regular native tab switcher. +extern const base::Feature kMemexTabSwitcher; + +#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_FEATURES_H_
diff --git a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h b/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h deleted file mode 100644 index c7444ab6..0000000 --- a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_TOOLBAR_TOOLBAR_CONTROLLER_BASE_FEATURE_H_ -#define IOS_CHROME_BROWSER_UI_TOOLBAR_TOOLBAR_CONTROLLER_BASE_FEATURE_H_ - -#import <Foundation/Foundation.h> - -#include "base/feature_list.h" - -// Feature to choose whether to use the memex prototype tab switcher or the -// regular native tab switcher. -extern const base::Feature kMemexTabSwitcher; - -#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_TOOLBAR_CONTROLLER_BASE_FEATURE_H_
diff --git a/ios/chrome/browser/ui/ui_util.mm b/ios/chrome/browser/ui/ui_util.mm index f0e36c6..54d39c1 100644 --- a/ios/chrome/browser/ui/ui_util.mm +++ b/ios/chrome/browser/ui/ui_util.mm
@@ -10,7 +10,7 @@ #include "base/feature_list.h" #include "base/logging.h" #include "ios/chrome/app/tests_hook.h" -#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h" +#import "ios/chrome/browser/ui/toolbar/public/features.h" #import "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/uikit_ui_util.h" #include "ui/base/device_form_factor.h"
diff --git a/ios/web/web_state/navigation_and_load_callbacks_inttest.mm b/ios/web/web_state/navigation_and_load_callbacks_inttest.mm index 2c32909..4a81a1d 100644 --- a/ios/web/web_state/navigation_and_load_callbacks_inttest.mm +++ b/ios/web/web_state/navigation_and_load_callbacks_inttest.mm
@@ -1262,7 +1262,12 @@ } // Tests failed load after the navigation is sucessfully finished. -// TODO(crbug.com/845879): test is flaky (probably since crrev.com/1065632). +// TODO(crbug.com/845879): test is flaky (probably since crrev.com/1056203). +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_FailedLoad FailedLoad +#else +#define MAYBE_FailedLoad FLAKY_FailedLoad +#endif TEST_F(NavigationAndLoadCallbacksTest, FLAKY_FailedLoad) { GURL url = test_server_->GetURL("/exabyte_response");
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index 00eb177..ccebe77 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -2941,21 +2941,8 @@ - (void)handleLoadError:(NSError*)error forNavigation:(WKNavigation*)navigation { - if ([error code] == NSURLErrorUnsupportedURL) + if (error.code == NSURLErrorUnsupportedURL) return; - // In cases where a Plug-in handles the load do not take any further action. - if ([error.domain isEqual:base::SysUTF8ToNSString(web::kWebKitErrorDomain)] && - (error.code == web::kWebKitErrorPlugInLoadFailed || - error.code == web::kWebKitErrorCannotShowUrl)) - return; - - // If URL is blocked due to Restriction, do not take any further action as - // WKWebView will show a built-in error. - if (web::GetWebClient()->IsSlimNavigationManagerEnabled() && - [error.domain isEqual:base::SysUTF8ToNSString(web::kWebKitErrorDomain)] && - error.code == web::kWebKitErrorUrlBlockedByContentFilter) { - return; - } if (error.code == NSURLErrorCancelled) { [self handleCancelledError:error forNavigation:navigation]; @@ -2964,12 +2951,20 @@ return; } - // Reset SSL status to default, unless the load was cancelled (manually or by - // back-forward navigation). - NavigationManager* navManager = self.webState->GetNavigationManager(); - web::NavigationItem* lastCommittedItem = navManager->GetLastCommittedItem(); - if (lastCommittedItem) - lastCommittedItem->GetSSL() = web::SSLStatus(); + if ([error.domain isEqual:base::SysUTF8ToNSString(web::kWebKitErrorDomain)] && + (error.code == web::kWebKitErrorPlugInLoadFailed || + error.code == web::kWebKitErrorCannotShowUrl)) { + // In cases where a Plug-in handles the load do not take any further action. + return; + } + + if (web::GetWebClient()->IsSlimNavigationManagerEnabled() && + [error.domain isEqual:base::SysUTF8ToNSString(web::kWebKitErrorDomain)] && + error.code == web::kWebKitErrorUrlBlockedByContentFilter) { + // If URL is blocked due to Restriction, do not take any further action as + // WKWebView will show a built-in error. + return; + } web::NavigationContextImpl* navigationContext = [_navigationStates contextForNavigation:navigation]; @@ -3018,6 +3013,14 @@ return; } + NavigationManager* navManager = self.webState->GetNavigationManager(); + web::NavigationItem* lastCommittedItem = navManager->GetLastCommittedItem(); + if (lastCommittedItem) { + // Reset SSL status for last committed navigation to avoid showing security + // status for error pages. + lastCommittedItem->GetSSL() = web::SSLStatus(); + } + if (!web::GetWebClient()->IsSlimNavigationManagerEnabled() && !base::FeatureList::IsEnabled(web::features::kWebErrorPages)) { [self loadErrorPageForNavigationItem:self.currentNavItem
diff --git a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm index e9d2d6a..6523ffe 100644 --- a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm +++ b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm
@@ -9,6 +9,7 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/ios/browser_state_dependency_manager.h" #include "components/signin/core/browser/signin_manager.h" +#include "ios/web_view/internal/signin/web_view_account_tracker_service_factory.h" #include "ios/web_view/internal/signin/web_view_oauth2_token_service_factory.h" #include "ios/web_view/internal/signin/web_view_signin_manager_factory.h" #include "ios/web_view/internal/web_view_browser_state.h" @@ -29,7 +30,8 @@ explicit IdentityManagerHolder(WebViewBrowserState* browser_state) : identity_manager_( WebViewSigninManagerFactory::GetForBrowserState(browser_state), - WebViewOAuth2TokenServiceFactory::GetForBrowserState( + WebViewOAuth2TokenServiceFactory::GetForBrowserState(browser_state), + WebViewAccountTrackerServiceFactory::GetForBrowserState( browser_state)) {} identity::IdentityManager* identity_manager() { return &identity_manager_; } @@ -42,6 +44,7 @@ : BrowserStateKeyedServiceFactory( "IdentityManager", BrowserStateDependencyManager::GetInstance()) { + DependsOn(WebViewAccountTrackerServiceFactory::GetInstance()); DependsOn(WebViewOAuth2TokenServiceFactory::GetInstance()); DependsOn(WebViewSigninManagerFactory::GetInstance()); }
diff --git a/media/mojo/interfaces/audio_input_stream.mojom b/media/mojo/interfaces/audio_input_stream.mojom index ff1ec0c..fd5df22c 100644 --- a/media/mojo/interfaces/audio_input_stream.mojom +++ b/media/mojo/interfaces/audio_input_stream.mojom
@@ -29,6 +29,21 @@ // AudioInputStream. DidStartRecording() is invoked when the stream starts // recording. Stream destruction is notified through binding connection error. interface AudioInputStreamObserver { + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + enum DisconnectReason { + // The Disconnect reason wasn't given explicitly. This probably means that + // the audio service crashed. + kDefault = 0, + // This code is used as disconnect reason when stream ended or failed to + // start due to an unrecoverable platform error, e.g. the hardware device is + // busy or disconnected. + kPlatformError = 1, + kTerminatedByClient = 2, + kStreamCreationFailed = 3, + kDocumentDestroyed = 4, + }; + // It will be called only once when input stream starts recording. DidStartRecording(); };
diff --git a/media/mojo/interfaces/audio_output_stream.mojom b/media/mojo/interfaces/audio_output_stream.mojom index fbc1fbf..7fa1fe4 100644 --- a/media/mojo/interfaces/audio_output_stream.mojom +++ b/media/mojo/interfaces/audio_output_stream.mojom
@@ -33,12 +33,20 @@ // Note: It is possible that DidStopPlaying() is not called in shutdown // situations. interface AudioOutputStreamObserver { - // This code is used as disconnect reason when stream ended or failed to - // start due to an unrecoverable platform error, e.g. the hardware device is - // busy or disconnected. - // If the error code isn't used, the stream ended due to being terminated by - // the client. - const uint32 kPlatformErrorDisconnectReason = 1; + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + enum DisconnectReason { + // The Disconnect reason wasn't given explicitly. This probably means that + // the audio service crashed. + kDefault = 0, + // This code is used as disconnect reason when stream ended or failed to + // start due to an unrecoverable platform error, e.g. the hardware device is + // busy or disconnected. + kPlatformError = 1, + kTerminatedByClient = 2, + kStreamCreationFailed = 3, + kDocumentDestroyed = 4, + }; // This notification indicates that the stream started playing. The stream // should be considered non-audible until a DidChangeAudibleState() call says @@ -66,13 +74,6 @@ }; interface AudioOutputStreamProviderClient { - // This code is used as disconnect reason when stream ended or failed to - // start due to an unrecoverable platform error, e.g. the hardware device is - // busy or disconnected. - // If the error code isn't used, the stream ended/wasn't started due to the - // stream becoming unnecessary or unwanted, or the request was dropped. - const uint32 kPlatformErrorDisconnectReason = 1; - // |stream| is used to pass commands to the stream, and |data_pipe| is used // to transfer the audio data. // TODO(https://crbug.com/787806): Currently, this will be called at most
diff --git a/media/mojo/services/mojo_audio_output_stream_provider.cc b/media/mojo/services/mojo_audio_output_stream_provider.cc index 74ccb4a..1a661e80 100644 --- a/media/mojo/services/mojo_audio_output_stream_provider.cc +++ b/media/mojo/services/mojo_audio_output_stream_provider.cc
@@ -69,7 +69,8 @@ void MojoAudioOutputStreamProvider::CleanUp(bool had_error) { if (had_error) { provider_client_.ResetWithReason( - mojom::AudioOutputStreamProviderClient::kPlatformErrorDisconnectReason, + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), std::string()); } std::move(deleter_callback_).Run(this);
diff --git a/net/http/http_server_properties_impl_unittest.cc b/net/http/http_server_properties_impl_unittest.cc index 23360d6..fb851b8 100644 --- a/net/http/http_server_properties_impl_unittest.cc +++ b/net/http/http_server_properties_impl_unittest.cc
@@ -10,13 +10,14 @@ #include "base/json/json_writer.h" #include "base/logging.h" +#include "base/run_loop.h" #include "base/test/scoped_task_environment.h" #include "base/test/simple_test_clock.h" -#include "base/test/test_mock_time_task_runner.h" #include "base/values.h" #include "net/base/host_port_pair.h" #include "net/base/ip_address.h" #include "net/http/http_network_session.h" +#include "net/test/test_with_scoped_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -63,11 +64,12 @@ namespace { -class HttpServerPropertiesImplTest : public testing::Test { +class HttpServerPropertiesImplTest : public TestWithScopedTaskEnvironment { protected: HttpServerPropertiesImplTest() - : test_task_runner_(new base::TestMockTimeTaskRunner()), - test_tick_clock_(test_task_runner_->GetMockTickClock()), + : TestWithScopedTaskEnvironment( + base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME), + test_tick_clock_(GetMockTickClock()), impl_(test_tick_clock_, &test_clock_) { // Set |test_clock_| to some random time. test_clock_.Advance(base::TimeDelta::FromSeconds(12345)); @@ -97,8 +99,6 @@ const AlternativeService& alternative_service, int num_times) {} - scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; - const base::TickClock* test_tick_clock_; base::SimpleTestClock test_clock_; @@ -279,8 +279,6 @@ } TEST_F(SpdyServerPropertiesTest, Clear) { - base::test::ScopedTaskEnvironment scoped_task_environment; - // Add www.google.com:443 and mail.google.com:443 as supporting SPDY. url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); impl_.SetSupportsSpdy(spdy_server_google, true); @@ -472,8 +470,6 @@ // SetAlternativeServiceServers() should not crash if there is an empty // hostname is the mapping. TEST_F(AlternateProtocolServerPropertiesTest, SetWithEmptyHostname) { - base::test::ScopedTaskEnvironment scoped_task_environment; - url::SchemeHostPort server("https", "foo", 443); const AlternativeService alternative_service_with_empty_hostname(kProtoHTTP2, "", 1234); @@ -625,8 +621,6 @@ } TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { - base::test::ScopedTaskEnvironment scoped_task_environment; - url::SchemeHostPort test_server("http", "foo", 80); const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service1); @@ -805,8 +799,6 @@ // particular, an alternative service mapped to an origin shadows alternative // services of canonical hosts. TEST_F(AlternateProtocolServerPropertiesTest, BrokenShadowsCanonical) { - base::test::ScopedTaskEnvironment scoped_task_environment; - url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); AlternativeService canonical_alternative_service(kProtoQUIC, @@ -832,8 +824,6 @@ } TEST_F(AlternateProtocolServerPropertiesTest, ClearBroken) { - base::test::ScopedTaskEnvironment scoped_task_environment; - url::SchemeHostPort test_server("http", "foo", 80); const AlternativeService alternative_service(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service); @@ -922,8 +912,6 @@ } TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBroken) { - base::test::ScopedTaskEnvironment scoped_task_environment; - url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); AlternativeService canonical_alternative_service(kProtoQUIC, @@ -1050,44 +1038,37 @@ // Repeatedly mark alt svc 1 broken and wait for its brokenness to expire. // This will increase its time until expiration. for (int i = 0; i < 3; ++i) { - { - base::TestMockTimeTaskRunner::ScopedContext scoped_context( - test_task_runner_); - impl_.MarkAlternativeServiceBroken(alternative_service1); - } + impl_.MarkAlternativeServiceBroken(alternative_service1); + // |impl_| should have posted task to expire the brokenness of // |alternative_service1| - EXPECT_EQ(1u, test_task_runner_->GetPendingTaskCount()); + EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); // Advance time by just enough so that |alternative_service1|'s brokenness // expires. - test_task_runner_->FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[i]); + FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[i]); // Ensure brokenness of |alternative_service1| has expired. - EXPECT_FALSE(test_task_runner_->HasPendingTask()); + EXPECT_FALSE(MainThreadHasPendingTask()); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service1)); } - { - base::TestMockTimeTaskRunner::ScopedContext scoped_context( - test_task_runner_); - impl_.MarkAlternativeServiceBroken(alternative_service1); - impl_.MarkAlternativeServiceBroken(alternative_service2); - } + impl_.MarkAlternativeServiceBroken(alternative_service1); + impl_.MarkAlternativeServiceBroken(alternative_service2); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service2)); // Advance time by just enough so that |alternative_service2|'s brokennness // expires. - test_task_runner_->FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[0]); + FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[0]); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service1)); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); // Advance time by enough so that |alternative_service1|'s brokenness expires. - test_task_runner_->FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[3] - - BROKEN_ALT_SVC_EXPIRE_DELAYS[0]); + FastForwardBy(BROKEN_ALT_SVC_EXPIRE_DELAYS[3] - + BROKEN_ALT_SVC_EXPIRE_DELAYS[0]); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service1)); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); @@ -1095,8 +1076,6 @@ TEST_F(AlternateProtocolServerPropertiesTest, GetAlternativeServiceInfoAsValue) { - base::test::ScopedTaskEnvironment scoped_task_environment; - base::Time::Exploded now_exploded; now_exploded.year = 2018; now_exploded.month = 1;
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index 1ae2849..0adae8af 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc
@@ -14,7 +14,7 @@ #include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "base/test/scoped_feature_list.h" -#include "base/test/test_mock_time_task_runner.h" +#include "base/test/scoped_task_environment.h" #include "net/base/completion_callback.h" #include "net/base/host_port_pair.h" #include "net/base/io_buffer.h" @@ -130,7 +130,13 @@ protected: SpdySessionTest() - : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( + : SpdySessionTest( + base::test::ScopedTaskEnvironment::MainThreadType::IO){}; + + explicit SpdySessionTest( + base::test::ScopedTaskEnvironment::MainThreadType type) + : WithScopedTaskEnvironment(type), + old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( HttpNetworkSession::NORMAL_SOCKET_POOL)), old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( HttpNetworkSession::NORMAL_SOCKET_POOL)), @@ -365,6 +371,13 @@ BoundTestNetLog log_; }; +class SpdySessionTestWithMockTime : public SpdySessionTest { + protected: + SpdySessionTestWithMockTime() + : SpdySessionTest( + base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME){}; +}; + // Try to create a SPDY session that will fail during // initialization. Nothing should blow up. TEST_F(SpdySessionTest, InitialReadError) { @@ -1516,10 +1529,7 @@ 6, 1); } -TEST_F(SpdySessionTest, CancelPushAfterExpired) { - auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); - base::TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner.get()); - +TEST_F(SpdySessionTestWithMockTime, CancelPushAfterExpired) { base::HistogramTester histogram_tester; spdy::SpdySerializedFrame req( @@ -1547,40 +1557,7 @@ AddSSLSocketData(); CreateNetworkSession(); - - // TODO(bnc): Use CreateSpdySession() instead of the boilerplate below once - // ScopedTaskEnvironment supports mocked time and can be used instead of - // TestMockTimeTaskRunner. - auto transport_params = base::MakeRefCounted<TransportSocketParams>( - key_.host_port_pair(), false, OnHostResolutionCallback(), - TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); - - auto connection = std::make_unique<ClientSocketHandle>(); - TestCompletionCallback callback; - - auto ssl_params = base::MakeRefCounted<SSLSocketParams>( - transport_params, nullptr, nullptr, key_.host_port_pair(), SSLConfig(), - key_.privacy_mode(), 0); - int rv = connection->Init( - key_.host_port_pair().ToString(), ssl_params, MEDIUM, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, callback.callback(), - http_session_->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL), - log_.bound()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - task_runner->RunUntilIdle(); - // At this point, |callback| already has the result, so the following will not - // call RunLoop(). - rv = callback.WaitForResult(); - - EXPECT_THAT(rv, IsOk()); - - session_ = - http_session_->spdy_session_pool()->CreateAvailableSessionFromSocket( - key_, /*is_trusted_proxy=*/false, std::move(connection), - log_.bound()); - EXPECT_TRUE(session_); - EXPECT_TRUE(HasSpdySession(http_session_->spdy_session_pool(), key_)); + CreateSpdySession(); base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, @@ -1592,7 +1569,7 @@ spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); - task_runner->RunUntilIdle(); + RunUntilIdle(); // Verify that there is one unclaimed push stream. const GURL pushed_url(kPushedUrl); @@ -1606,8 +1583,8 @@ // Fast forward to CancelPushedStreamIfUnclaimed() that was posted with a // delay. - task_runner->FastForwardUntilNoTasksRemain(); - task_runner->RunUntilIdle(); + FastForwardUntilNoTasksRemain(); + RunUntilIdle(); // Verify that pushed stream is cancelled. EXPECT_EQ(0u, num_unclaimed_pushed_streams()); @@ -1623,7 +1600,7 @@ // Read and process EOF. data.Resume(); - task_runner->RunUntilIdle(); + RunUntilIdle(); EXPECT_FALSE(session_); histogram_tester.ExpectBucketCount("Net.SpdyStreamsPushedPerSession", 1, 1); @@ -1637,10 +1614,7 @@ histogram_tester.ExpectTotalCount("Net.SpdyPushedStreamFate", 1); } -TEST_F(SpdySessionTest, ClaimPushedStreamBeforeExpires) { - auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); - base::TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner.get()); - +TEST_F(SpdySessionTestWithMockTime, ClaimPushedStreamBeforeExpires) { base::HistogramTester histogram_tester; spdy::SpdySerializedFrame req( @@ -1663,40 +1637,7 @@ AddSSLSocketData(); CreateNetworkSession(); - - // TODO(bnc): Use CreateSpdySession() instead of the boilerplate below once - // ScopedTaskEnvironment supports mocked time and can be used instead of - // TestMockTimeTaskRunner. - auto transport_params = base::MakeRefCounted<TransportSocketParams>( - key_.host_port_pair(), false, OnHostResolutionCallback(), - TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); - - auto connection = std::make_unique<ClientSocketHandle>(); - TestCompletionCallback callback; - - auto ssl_params = base::MakeRefCounted<SSLSocketParams>( - transport_params, nullptr, nullptr, key_.host_port_pair(), SSLConfig(), - key_.privacy_mode(), 0); - int rv = connection->Init( - key_.host_port_pair().ToString(), ssl_params, MEDIUM, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, callback.callback(), - http_session_->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL), - log_.bound()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - task_runner->RunUntilIdle(); - // At this point, |callback| already has the result, so the following will not - // call RunLoop(). - rv = callback.WaitForResult(); - - EXPECT_THAT(rv, IsOk()); - - session_ = - http_session_->spdy_session_pool()->CreateAvailableSessionFromSocket( - key_, /*is_trusted_proxy=*/false, std::move(connection), - log_.bound()); - EXPECT_TRUE(session_); - EXPECT_TRUE(HasSpdySession(http_session_->spdy_session_pool(), key_)); + CreateSpdySession(); base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, @@ -1708,7 +1649,7 @@ spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); - task_runner->RunUntilIdle(); + RunUntilIdle(); // Verify that there is one unclaimed push stream. const GURL pushed_url(kPushedUrl); @@ -1736,8 +1677,8 @@ EXPECT_EQ(0u, num_unclaimed_pushed_streams()); SpdyStream* spdy_stream2; - rv = session_->GetPushedStream(pushed_url, pushed_stream_id, MEDIUM, - &spdy_stream2, NetLogWithSource()); + int rv = session_->GetPushedStream(pushed_url, pushed_stream_id, MEDIUM, + &spdy_stream2, NetLogWithSource()); ASSERT_THAT(rv, IsOk()); ASSERT_TRUE(spdy_stream2); @@ -1746,13 +1687,13 @@ // Fast forward to CancelPushedStreamIfUnclaimed() that was posted with a // delay. CancelPushedStreamIfUnclaimed() must be a no-op. - task_runner->FastForwardUntilNoTasksRemain(); - task_runner->RunUntilIdle(); + FastForwardUntilNoTasksRemain(); + RunUntilIdle(); EXPECT_TRUE(session_); // Read and process EOF. data.Resume(); - task_runner->RunUntilIdle(); + RunUntilIdle(); EXPECT_FALSE(session_); histogram_tester.ExpectBucketCount("Net.SpdyStreamsPushedPerSession", 1, 1);
diff --git a/services/audio/input_stream.cc b/services/audio/input_stream.cc index 441ca87..1898b7a5 100644 --- a/services/audio/input_stream.cc +++ b/services/audio/input_stream.cc
@@ -65,8 +65,8 @@ params.AsHumanReadableString()); // |this| owns these objects, so unretained is safe. - base::RepeatingClosure error_handler = - base::BindRepeating(&InputStream::OnStreamError, base::Unretained(this)); + base::RepeatingClosure error_handler = base::BindRepeating( + &InputStream::OnStreamError, base::Unretained(this), false); binding_.set_connection_error_handler(error_handler); client_.set_connection_error_handler(error_handler); @@ -79,12 +79,12 @@ // Only MONO, STEREO and STEREO_AND_KEYBOARD_MIC channel layouts are expected, // see AudioManagerBase::MakeAudioInputStream(). if (!params.IsValid() || (params.channels() > kMaxInputChannels)) { - OnStreamError(); + OnStreamError(true); return; } if (!writer_) { - OnStreamError(); + OnStreamError(true); return; } @@ -99,6 +99,12 @@ if (log_) log_->get()->OnClosed(); + if (observer_) + observer_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioInputStreamObserver:: + DisconnectReason::kTerminatedByClient), + std::string()); + if (created_callback_) { // Didn't manage to create the stream. Call the callback anyways as mandated // by mojo. @@ -146,7 +152,7 @@ if (volume < 0 || volume > 1) { mojo::ReportBadMessage("Invalid volume"); - OnStreamError(); + OnStreamError(true); return; } @@ -163,7 +169,7 @@ base::ReadOnlySharedMemoryRegion shared_memory_region = writer_->TakeSharedMemoryRegion(); if (!shared_memory_region.IsValid()) { - OnStreamError(); + OnStreamError(true); return; } @@ -188,7 +194,7 @@ client_->OnError(); if (log_) log_->get()->OnError(); - OnStreamError(); + OnStreamError(true); } void InputStream::OnLog(base::StringPiece message) { @@ -202,10 +208,17 @@ client_->OnMutedStateChanged(is_muted); } -void InputStream::OnStreamError() { +void InputStream::OnStreamError(bool signalPlatformError) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); TRACE_EVENT_NESTABLE_ASYNC_INSTANT0("audio", "OnStreamError", this); + if (signalPlatformError && observer_) { + observer_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioInputStreamObserver:: + DisconnectReason::kPlatformError), + std::string()); + } + // Defer callback so we're not destructed while in the constructor. base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE,
diff --git a/services/audio/input_stream.h b/services/audio/input_stream.h index 6ea6cad..e98ecad 100644 --- a/services/audio/input_stream.h +++ b/services/audio/input_stream.h
@@ -66,7 +66,7 @@ void OnMuted(bool is_muted) override; private: - void OnStreamError(); + void OnStreamError(bool signalPlatformError); void CallDeleter(); const base::UnguessableToken id_;
diff --git a/services/audio/output_stream.cc b/services/audio/output_stream.cc index d3b65e6..9b37d41 100644 --- a/services/audio/output_stream.cc +++ b/services/audio/output_stream.cc
@@ -85,6 +85,12 @@ log_->get()->OnClosed(); + if (observer_) + observer_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kTerminatedByClient), + std::string()); + controller_.Close(); coordinator_->UnregisterGroupMember(&controller_); @@ -119,7 +125,7 @@ if (volume < 0 || volume > 1) { mojo::ReportBadMessage("Invalid volume"); - OnError(); + OnControllerError(); return; } @@ -202,11 +208,15 @@ // torn down. poll_timer_.Stop(); - // Only propagate platform errors to the observer. - observer_.ResetWithReason( - media::mojom::AudioOutputStreamObserver::kPlatformErrorDisconnectReason, - std::string()); log_->get()->OnError(); + + if (observer_) { + observer_.ResetWithReason( + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kPlatformError), + std::string()); + } + OnError(); }
diff --git a/services/audio/output_stream_unittest.cc b/services/audio/output_stream_unittest.cc index 9b8e82ec..2eedf2d 100644 --- a/services/audio/output_stream_unittest.cc +++ b/services/audio/output_stream_unittest.cc
@@ -52,7 +52,11 @@ DISALLOW_COPY_AND_ASSIGN(MockStream); }; -const uint32_t kNoDisconnectReason = 0; +const uint32_t kPlatformErrorDisconnectReason = static_cast<uint32_t>( + media::mojom::AudioOutputStreamObserver::DisconnectReason::kPlatformError); +const uint32_t kTerminatedByClientDisconnectReason = + static_cast<uint32_t>(media::mojom::AudioOutputStreamObserver:: + DisconnectReason::kTerminatedByClient); class MockObserver : public media::mojom::AudioOutputStreamObserver { public: @@ -177,7 +181,8 @@ EXPECT_CALL(env.log(), OnClosed()); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kTerminatedByClientDisconnectReason, _)); stream_ptr.reset(); base::RunLoop().RunUntilIdle(); } @@ -227,7 +232,8 @@ Mock::VerifyAndClear(&env.created_callback()); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kTerminatedByClientDisconnectReason, _)); stream_ptr.reset(); base::RunLoop().RunUntilIdle(); @@ -268,7 +274,8 @@ EXPECT_CALL(mock_stream, Close()); EXPECT_CALL(env.observer(), DidChangeAudibleState(false)).Times(AtMost(1)); EXPECT_CALL(env.observer(), DidStopPlaying()).Times(AtMost(1)); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kTerminatedByClientDisconnectReason, _)); stream_ptr.reset(); base::RunLoop().RunUntilIdle(); } @@ -310,7 +317,8 @@ Mock::VerifyAndClear(&env.observer()); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kTerminatedByClientDisconnectReason, _)); stream_ptr.reset(); base::RunLoop().RunUntilIdle(); } @@ -340,7 +348,8 @@ Mock::VerifyAndClear(&mock_stream); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kTerminatedByClientDisconnectReason, _)); stream_ptr.reset(); base::RunLoop().RunUntilIdle(); } @@ -363,7 +372,8 @@ Mock::VerifyAndClear(&env.created_callback()); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kPlatformErrorDisconnectReason, _)); EXPECT_CALL(env.bad_message_callback(), Run(_)); stream_ptr->SetVolume(-0.1); base::RunLoop().RunUntilIdle(); @@ -387,7 +397,8 @@ Mock::VerifyAndClear(&env.created_callback()); EXPECT_CALL(mock_stream, Close()); - EXPECT_CALL(env.observer(), BindingConnectionError(kNoDisconnectReason, _)); + EXPECT_CALL(env.observer(), + BindingConnectionError(kPlatformErrorDisconnectReason, _)); EXPECT_CALL(env.bad_message_callback(), Run(_)); stream_ptr->SetVolume(1.1); base::RunLoop().RunUntilIdle(); @@ -403,9 +414,7 @@ EXPECT_CALL(env.created_callback(), Created(unsuccessfully_)); EXPECT_CALL(env.observer(), - BindingConnectionError(media::mojom::AudioOutputStreamObserver:: - kPlatformErrorDisconnectReason, - _)); + BindingConnectionError(kPlatformErrorDisconnectReason, _)); EXPECT_CALL(env.log(), OnError()); base::RunLoop().RunUntilIdle(); Mock::VerifyAndClear(&env.observer()); @@ -423,9 +432,7 @@ EXPECT_CALL(env.created_callback(), Created(unsuccessfully_)); EXPECT_CALL(env.observer(), - BindingConnectionError(media::mojom::AudioOutputStreamObserver:: - kPlatformErrorDisconnectReason, - _)); + BindingConnectionError(kPlatformErrorDisconnectReason, _)); base::RunLoop().RunUntilIdle(); Mock::VerifyAndClear(&env.observer());
diff --git a/services/device/generic_sensor/README.md b/services/device/generic_sensor/README.md index 405f807..9e31045 100644 --- a/services/device/generic_sensor/README.md +++ b/services/device/generic_sensor/README.md
@@ -48,7 +48,7 @@ * Browser tests are located in `content/browser/device_sensors`. * Layout tests are located in `third_party/WebKit/LayoutTests/device_orientation`. -* Web platform tests are located in `third_party/WebKit/LayoutTests/external/wpt/orientation-event` and are a mirror of the [web-platform-tests GitHub repository](https://github.com/w3c/web-platform-tests). +* Web platform tests are located in `third_party/WebKit/LayoutTests/external/wpt/orientation-event` and are a mirror of the [web-platform-tests GitHub repository](https://github.com/web-platform-tests/wpt). ## Permissions
diff --git a/services/identity/public/cpp/identity_manager.cc b/services/identity/public/cpp/identity_manager.cc index 84e7187..6c21ab3 100644 --- a/services/identity/public/cpp/identity_manager.cc +++ b/services/identity/public/cpp/identity_manager.cc
@@ -9,8 +9,11 @@ namespace identity { IdentityManager::IdentityManager(SigninManagerBase* signin_manager, - ProfileOAuth2TokenService* token_service) - : signin_manager_(signin_manager), token_service_(token_service) { + ProfileOAuth2TokenService* token_service, + AccountTrackerService* account_tracker_service) + : signin_manager_(signin_manager), + token_service_(token_service), + account_tracker_service_(account_tracker_service) { primary_account_info_ = signin_manager_->GetAuthenticatedAccountInfo(); signin_manager_->AddObserver(this); #if !defined(OS_CHROMEOS)
diff --git a/services/identity/public/cpp/identity_manager.h b/services/identity/public/cpp/identity_manager.h index 71a75952..43c164b9 100644 --- a/services/identity/public/cpp/identity_manager.h +++ b/services/identity/public/cpp/identity_manager.h
@@ -7,6 +7,7 @@ #include "base/observer_list.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/signin_manager_base.h" #include "services/identity/public/cpp/primary_account_access_token_fetcher.h" @@ -90,7 +91,8 @@ }; IdentityManager(SigninManagerBase* signin_manager, - ProfileOAuth2TokenService* token_service); + ProfileOAuth2TokenService* token_service, + AccountTrackerService* account_tracker_service); ~IdentityManager() override; // Provides access to the latest cached information of the user's primary @@ -186,6 +188,7 @@ // the Identity Service. SigninManagerBase* signin_manager_; ProfileOAuth2TokenService* token_service_; + AccountTrackerService* account_tracker_service_; // The latest (cached) value of the primary account. AccountInfo primary_account_info_;
diff --git a/services/identity/public/cpp/identity_manager_unittest.cc b/services/identity/public/cpp/identity_manager_unittest.cc index 0617583..950f3504 100644 --- a/services/identity/public/cpp/identity_manager_unittest.cc +++ b/services/identity/public/cpp/identity_manager_unittest.cc
@@ -269,8 +269,8 @@ identity_manager_diagnostics_observer_.reset(); identity_manager_.reset(); - identity_manager_.reset( - new IdentityManager(&signin_manager_, &token_service_)); + identity_manager_.reset(new IdentityManager( + &signin_manager_, &token_service_, &account_tracker_)); identity_manager_observer_.reset( new TestIdentityManagerObserver(identity_manager_.get())); identity_manager_diagnostics_observer_.reset(
diff --git a/services/identity/public/cpp/identity_test_environment.cc b/services/identity/public/cpp/identity_test_environment.cc index 62a571b..916fd0f 100644 --- a/services/identity/public/cpp/identity_test_environment.cc +++ b/services/identity/public/cpp/identity_test_environment.cc
@@ -65,8 +65,8 @@ account_tracker_.Initialize(&signin_client_); - identity_manager_.reset( - new IdentityManager(&signin_manager_, &token_service_)); + identity_manager_.reset(new IdentityManager(&signin_manager_, &token_service_, + &account_tracker_)); } IdentityTestEnvironmentInternal::~IdentityTestEnvironmentInternal() {}
diff --git a/services/network/public/cpp/cors/cors_legacy.cc b/services/network/public/cpp/cors/cors_legacy.cc index 8f32ac3..f01af63 100644 --- a/services/network/public/cpp/cors/cors_legacy.cc +++ b/services/network/public/cpp/cors/cors_legacy.cc
@@ -5,8 +5,6 @@ #include "services/network/public/cpp/cors/cors_legacy.h" #include <algorithm> -#include <string> -#include <vector> #include "url/gurl.h" #include "url/url_util.h"
diff --git a/services/network/public/cpp/cors/cors_legacy.h b/services/network/public/cpp/cors/cors_legacy.h index d2cdf026..dc9295a 100644 --- a/services/network/public/cpp/cors/cors_legacy.h +++ b/services/network/public/cpp/cors/cors_legacy.h
@@ -5,6 +5,7 @@ #ifndef SERVICES_NETWORK_PUBLIC_CPP_CORS_CORS_LEGACY_H_ #define SERVICES_NETWORK_PUBLIC_CPP_CORS_CORS_LEGACY_H_ +#include <string> #include <vector> #include "base/component_export.h"
diff --git a/services/resource_coordinator/BUILD.gn b/services/resource_coordinator/BUILD.gn index fb69895..33663cb 100644 --- a/services/resource_coordinator/BUILD.gn +++ b/services/resource_coordinator/BUILD.gn
@@ -14,10 +14,10 @@ sources = [ "coordination_unit/coordination_unit_base.cc", "coordination_unit/coordination_unit_base.h", + "coordination_unit/coordination_unit_graph.cc", + "coordination_unit/coordination_unit_graph.h", "coordination_unit/coordination_unit_introspector_impl.cc", "coordination_unit/coordination_unit_introspector_impl.h", - "coordination_unit/coordination_unit_manager.cc", - "coordination_unit/coordination_unit_manager.h", "coordination_unit/coordination_unit_provider_impl.cc", "coordination_unit/coordination_unit_provider_impl.h", "coordination_unit/frame_coordination_unit_impl.cc",
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_base.cc b/services/resource_coordinator/coordination_unit/coordination_unit_base.cc index 0647483..e4130ff 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_base.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_base.cc
@@ -6,6 +6,7 @@ #include <unordered_map> +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/observers/coordination_unit_graph_observer.h" #include "services/resource_coordinator/public/cpp/coordination_unit_id.h" @@ -59,8 +60,9 @@ return cu_iter != g_cu_map().end() ? cu_iter->second.get() : nullptr; } -CoordinationUnitBase::CoordinationUnitBase(const CoordinationUnitID& id) - : id_(id.type, id.id) {} +CoordinationUnitBase::CoordinationUnitBase(const CoordinationUnitID& id, + CoordinationUnitGraph* graph) + : graph_(graph), id_(id.type, id.id) {} CoordinationUnitBase::~CoordinationUnitBase() = default;
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_base.h b/services/resource_coordinator/coordination_unit/coordination_unit_base.h index df3d240..2f0b91e 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_base.h +++ b/services/resource_coordinator/coordination_unit/coordination_unit_base.h
@@ -20,6 +20,8 @@ namespace resource_coordinator { +class CoordinationUnitGraph; + // CoordinationUnitBase implements shared functionality among different types of // coordination units. A specific type of coordination unit will derive from // this class and can override shared funtionality when needed. @@ -32,7 +34,8 @@ static void AssertNoActiveCoordinationUnits(); static void ClearAllCoordinationUnits(); - CoordinationUnitBase(const CoordinationUnitID& id); + CoordinationUnitBase(const CoordinationUnitID& id, + CoordinationUnitGraph* graph); virtual ~CoordinationUnitBase(); void Destruct(); @@ -45,6 +48,8 @@ int64_t default_value) const; const CoordinationUnitID& id() const { return id_; } + CoordinationUnitGraph* graph() const { return graph_; } + const base::ObserverList<CoordinationUnitGraphObserver>& observers() const { return observers_; } @@ -70,6 +75,7 @@ void SendEvent(mojom::Event event); void SetProperty(mojom::PropertyType property_type, int64_t value); + CoordinationUnitGraph* const graph_; const CoordinationUnitID id_; private: @@ -87,9 +93,11 @@ public: static CoordinationUnitClass* Create( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref) { std::unique_ptr<CoordinationUnitClass> new_cu = - std::make_unique<CoordinationUnitClass>(id, std::move(service_ref)); + std::make_unique<CoordinationUnitClass>(id, graph, + std::move(service_ref)); return static_cast<CoordinationUnitClass*>( CoordinationUnitBase::AddNewCoordinationUnit(std::move(new_cu))); } @@ -108,8 +116,10 @@ CoordinationUnitInterface( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, + std::unique_ptr<service_manager::ServiceContextRef> service_ref) - : CoordinationUnitBase(id), binding_(this) { + : CoordinationUnitBase(id, graph), binding_(this) { service_ref_ = std::move(service_ref); }
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_base_unittest.cc b/services/resource_coordinator/coordination_unit/coordination_unit_base_unittest.cc index 51d53fa10..c0fe4540 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_base_unittest.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_base_unittest.cc
@@ -40,7 +40,8 @@ TEST_F(CoordinationUnitBaseTest, GetAssociatedCoordinationUnitsForSinglePageInSingleProcess) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto pages_associated_with_process = cu_graph.process->GetAssociatedPageCoordinationUnits(); @@ -55,7 +56,8 @@ TEST_F(CoordinationUnitBaseTest, GetAssociatedCoordinationUnitsForMultiplePagesInSingleProcess) { - MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph; + MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto pages_associated_with_process = cu_graph.process->GetAssociatedPageCoordinationUnits(); @@ -76,7 +78,8 @@ TEST_F(CoordinationUnitBaseTest, GetAssociatedCoordinationUnitsForSinglePageWithMultipleProcesses) { - MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto pages_associated_with_process = cu_graph.process->GetAssociatedPageCoordinationUnits(); @@ -98,7 +101,8 @@ TEST_F(CoordinationUnitBaseTest, GetAssociatedCoordinationUnitsForMultiplePagesWithMultipleProcesses) { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto pages_associated_with_process = cu_graph.process->GetAssociatedPageCoordinationUnits();
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc b/services/resource_coordinator/coordination_unit/coordination_unit_graph.cc similarity index 63% rename from services/resource_coordinator/coordination_unit/coordination_unit_manager.cc rename to services/resource_coordinator/coordination_unit/coordination_unit_graph.cc index d033d83..44fa487 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_graph.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include <utility> @@ -11,6 +11,9 @@ #include "base/macros.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_base.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h" +#include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" +#include "services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h" +#include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/system_coordination_unit_impl.h" #include "services/resource_coordinator/observers/coordination_unit_graph_observer.h" #include "services/resource_coordinator/public/cpp/coordination_unit_types.h" @@ -23,18 +26,18 @@ namespace resource_coordinator { -CoordinationUnitManager::CoordinationUnitManager() { +CoordinationUnitGraph::CoordinationUnitGraph() { CoordinationUnitBase::AssertNoActiveCoordinationUnits(); } -CoordinationUnitManager::~CoordinationUnitManager() { +CoordinationUnitGraph::~CoordinationUnitGraph() { // TODO(oysteine): Keep the map of coordination units as a member of this // class, rather than statically inside CoordinationUnitBase, to avoid this // manual lifetime management. CoordinationUnitBase::ClearAllCoordinationUnits(); } -void CoordinationUnitManager::OnStart( +void CoordinationUnitGraph::OnStart( service_manager::BinderRegistryWithArgs< const service_manager::BindSourceInfo&>* registry, service_manager::ServiceContextRefFactory* service_ref_factory) { @@ -49,16 +52,16 @@ // service, but rather clients can access it via CoordinationUnitProvider. CoordinationUnitID system_cu_id(CoordinationUnitType::kSystem, std::string()); system_cu_ = SystemCoordinationUnitImpl::Create( - system_cu_id, service_ref_factory->CreateRef()); + system_cu_id, this, service_ref_factory->CreateRef()); } -void CoordinationUnitManager::RegisterObserver( +void CoordinationUnitGraph::RegisterObserver( std::unique_ptr<CoordinationUnitGraphObserver> observer) { - observer->set_coordination_unit_manager(this); + observer->set_coordination_unit_graph(this); observers_.push_back(std::move(observer)); } -void CoordinationUnitManager::OnCoordinationUnitCreated( +void CoordinationUnitGraph::OnCoordinationUnitCreated( CoordinationUnitBase* coordination_unit) { for (auto& observer : observers_) { if (observer->ShouldObserve(coordination_unit)) { @@ -68,9 +71,28 @@ } } -void CoordinationUnitManager::OnBeforeCoordinationUnitDestroyed( +void CoordinationUnitGraph::OnBeforeCoordinationUnitDestroyed( CoordinationUnitBase* coordination_unit) { coordination_unit->BeforeDestroyed(); } +FrameCoordinationUnitImpl* CoordinationUnitGraph::CreateFrameCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref) { + return FrameCoordinationUnitImpl::Create(id, this, std::move(service_ref)); +} + +PageCoordinationUnitImpl* CoordinationUnitGraph::CreatePageCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref) { + return PageCoordinationUnitImpl::Create(id, this, std::move(service_ref)); +} + +ProcessCoordinationUnitImpl* +CoordinationUnitGraph::CreateProcessCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref) { + return ProcessCoordinationUnitImpl::Create(id, this, std::move(service_ref)); +} + } // namespace resource_coordinator
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_manager.h b/services/resource_coordinator/coordination_unit/coordination_unit_graph.h similarity index 60% rename from services/resource_coordinator/coordination_unit/coordination_unit_manager.h rename to services/resource_coordinator/coordination_unit/coordination_unit_graph.h index 6c4f02d..9057f703 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_manager.h +++ b/services/resource_coordinator/coordination_unit/coordination_unit_graph.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_MANAGER_H_ -#define SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_MANAGER_H_ +#ifndef SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_GRAPH_H_ +#define SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_GRAPH_H_ #include <stdint.h> @@ -13,29 +13,34 @@ #include "base/macros.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/ukm_recorder.h" +#include "services/service_manager/public/cpp/service_context_ref.h" namespace service_manager { template <typename... BinderArgs> class BinderRegistryWithArgs; struct BindSourceInfo; class ServiceContextRefFactory; -} // service_manager +} // namespace service_manager namespace resource_coordinator { class CoordinationUnitBase; +struct CoordinationUnitID; class CoordinationUnitGraphObserver; class CoordinationUnitProviderImpl; +class FrameCoordinationUnitImpl; +class PageCoordinationUnitImpl; +class ProcessCoordinationUnitImpl; class SystemCoordinationUnitImpl; -// The CoordinationUnitManager is a singleton that encapsulates all -// aspects of Coordination Units within the resource_coordinator service. -// All functionality for dealing with CoordinationUnits should be contained -// within this class or classes that are owned by it. -class CoordinationUnitManager { +// The CoordinationUnitGraph represents a graph of the coordination units +// representing a single system. It vends out new instances of coordination +// units and indexes them by ID. It also fires the creation and pre-destruction +// notifications for all coordination units. +class CoordinationUnitGraph { public: - CoordinationUnitManager(); - ~CoordinationUnitManager(); + CoordinationUnitGraph(); + ~CoordinationUnitGraph(); void set_ukm_recorder(ukm::UkmRecorder* ukm_recorder) { ukm_recorder_ = ukm_recorder; @@ -51,6 +56,20 @@ void OnBeforeCoordinationUnitDestroyed( CoordinationUnitBase* coordination_unit); + FrameCoordinationUnitImpl* CreateFrameCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref); + PageCoordinationUnitImpl* CreatePageCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref); + ProcessCoordinationUnitImpl* CreateProcessCoordinationUnit( + const CoordinationUnitID& id, + std::unique_ptr<service_manager::ServiceContextRef> service_ref); + + // TODO(siggi): replace the accessor with this function. + // SystemCoordinationUnitImpl* FindOrCreateSystemCoordinationUnit( + // std::unique_ptr<service_manager::ServiceContextRef> service_ref); + // Returns the singleton SystemCU. SystemCoordinationUnitImpl* system_cu() const { return system_cu_; } @@ -70,9 +89,9 @@ static void Create( service_manager::ServiceContextRefFactory* service_ref_factory); - DISALLOW_COPY_AND_ASSIGN(CoordinationUnitManager); + DISALLOW_COPY_AND_ASSIGN(CoordinationUnitGraph); }; } // namespace resource_coordinator -#endif // SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_MANAGER_H_ +#endif // SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_COORDINATION_UNIT_GRAPH_H_
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.cc b/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.cc index 71e28ce..e2ff2ba 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.cc
@@ -19,9 +19,9 @@ CoordinationUnitProviderImpl::CoordinationUnitProviderImpl( service_manager::ServiceContextRefFactory* service_ref_factory, - CoordinationUnitManager* coordination_unit_manager) + CoordinationUnitGraph* coordination_unit_graph) : service_ref_factory_(service_ref_factory), - coordination_unit_manager_(coordination_unit_manager) { + coordination_unit_graph_(coordination_unit_graph) { DCHECK(service_ref_factory); service_ref_ = service_ref_factory->CreateRef(); } @@ -30,7 +30,7 @@ void CoordinationUnitProviderImpl::OnConnectionError( CoordinationUnitBase* coordination_unit) { - coordination_unit_manager_->OnBeforeCoordinationUnitDestroyed( + coordination_unit_graph_->OnBeforeCoordinationUnitDestroyed( coordination_unit); coordination_unit->Destruct(); } @@ -39,10 +39,11 @@ mojom::FrameCoordinationUnitRequest request, const CoordinationUnitID& id) { FrameCoordinationUnitImpl* frame_cu = - FrameCoordinationUnitImpl::Create(id, service_ref_factory_->CreateRef()); + coordination_unit_graph_->CreateFrameCoordinationUnit( + id, service_ref_factory_->CreateRef()); frame_cu->Bind(std::move(request)); - coordination_unit_manager_->OnCoordinationUnitCreated(frame_cu); + coordination_unit_graph_->OnCoordinationUnitCreated(frame_cu); auto& frame_cu_binding = frame_cu->binding(); frame_cu_binding.set_connection_error_handler( @@ -54,10 +55,11 @@ mojom::PageCoordinationUnitRequest request, const CoordinationUnitID& id) { PageCoordinationUnitImpl* page_cu = - PageCoordinationUnitImpl::Create(id, service_ref_factory_->CreateRef()); + coordination_unit_graph_->CreatePageCoordinationUnit( + id, service_ref_factory_->CreateRef()); page_cu->Bind(std::move(request)); - coordination_unit_manager_->OnCoordinationUnitCreated(page_cu); + coordination_unit_graph_->OnCoordinationUnitCreated(page_cu); auto& page_cu_binding = page_cu->binding(); page_cu_binding.set_connection_error_handler( @@ -68,11 +70,12 @@ void CoordinationUnitProviderImpl::CreateProcessCoordinationUnit( mojom::ProcessCoordinationUnitRequest request, const CoordinationUnitID& id) { - ProcessCoordinationUnitImpl* process_cu = ProcessCoordinationUnitImpl::Create( - id, service_ref_factory_->CreateRef()); + ProcessCoordinationUnitImpl* process_cu = + coordination_unit_graph_->CreateProcessCoordinationUnit( + id, service_ref_factory_->CreateRef()); process_cu->Bind(std::move(request)); - coordination_unit_manager_->OnCoordinationUnitCreated(process_cu); + coordination_unit_graph_->OnCoordinationUnitCreated(process_cu); auto& process_cu_binding = process_cu->binding(); process_cu_binding.set_connection_error_handler( @@ -83,7 +86,7 @@ void CoordinationUnitProviderImpl::GetSystemCoordinationUnit( resource_coordinator::mojom::SystemCoordinationUnitRequest request) { // Simply fetch the existing SystemCU and add an additional binding to it. - coordination_unit_manager_->system_cu()->AddBinding(std::move(request)); + coordination_unit_graph_->system_cu()->AddBinding(std::move(request)); } void CoordinationUnitProviderImpl::Bind(
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h b/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h index c7e8a6a2..6d3d2d0e 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h +++ b/services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h
@@ -10,7 +10,7 @@ #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/interface_request.h" -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/public/mojom/coordination_unit_provider.mojom.h" namespace service_manager { @@ -25,7 +25,7 @@ public: CoordinationUnitProviderImpl( service_manager::ServiceContextRefFactory* service_ref_factory, - CoordinationUnitManager* coordination_unit_manager); + CoordinationUnitGraph* coordination_unit_graph); ~CoordinationUnitProviderImpl() override; void Bind( @@ -51,7 +51,7 @@ private: service_manager::ServiceContextRefFactory* service_ref_factory_; std::unique_ptr<service_manager::ServiceContextRef> service_ref_; - CoordinationUnitManager* coordination_unit_manager_; + CoordinationUnitGraph* coordination_unit_graph_; mojo::BindingSet<mojom::CoordinationUnitProvider> bindings_; DISALLOW_COPY_AND_ASSIGN(CoordinationUnitProviderImpl);
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.cc b/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.cc index a2b9462..e490916 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.cc
@@ -22,7 +22,7 @@ : task_env_(base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME, base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED), service_ref_factory_(base::Bind(&OnLastServiceRefDestroyed)), - provider_(&service_ref_factory_, &coordination_unit_manager_) {} + provider_(&service_ref_factory_, &coordination_unit_graph_) {} CoordinationUnitTestHarness::~CoordinationUnitTestHarness() = default;
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h b/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h index e03c9b6..1304665 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h +++ b/services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h
@@ -10,7 +10,7 @@ #include "base/test/scoped_task_environment.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_base.h" -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h" #include "services/service_manager/public/cpp/service_context_ref.h" #include "testing/gtest/include/gtest/gtest.h" @@ -22,10 +22,11 @@ template <class CoordinationUnitClass> class TestCoordinationUnitWrapper { public: - static TestCoordinationUnitWrapper<CoordinationUnitClass> Create() { + static TestCoordinationUnitWrapper<CoordinationUnitClass> Create( + CoordinationUnitGraph* graph) { CoordinationUnitID cu_id(CoordinationUnitClass::Type(), std::string()); return TestCoordinationUnitWrapper<CoordinationUnitClass>( - CoordinationUnitClass::Create(cu_id, nullptr)); + CoordinationUnitClass::Create(cu_id, graph, nullptr)); } TestCoordinationUnitWrapper(CoordinationUnitClass* impl) : impl_(impl) { @@ -55,7 +56,8 @@ TestCoordinationUnitWrapper<CoordinationUnitClass> CreateCoordinationUnit( CoordinationUnitID cu_id) { return TestCoordinationUnitWrapper<CoordinationUnitClass>( - CoordinationUnitClass::Create(cu_id, service_ref_factory_.CreateRef())); + CoordinationUnitClass::Create(cu_id, coordination_unit_graph(), + service_ref_factory_.CreateRef())); } template <class CoordinationUnitClass> @@ -74,15 +76,15 @@ service_manager::ServiceContextRefFactory* service_context_ref_factory() { return &service_ref_factory_; } - CoordinationUnitManager& coordination_unit_manager() { - return coordination_unit_manager_; + CoordinationUnitGraph* coordination_unit_graph() { + return &coordination_unit_graph_; } CoordinationUnitProviderImpl* provider() { return &provider_; } private: base::test::ScopedTaskEnvironment task_env_; service_manager::ServiceContextRefFactory service_ref_factory_; - CoordinationUnitManager coordination_unit_manager_; + CoordinationUnitGraph coordination_unit_graph_; CoordinationUnitProviderImpl provider_; };
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc index 2e3d6a0..8d08c33a 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.cc
@@ -13,8 +13,9 @@ FrameCoordinationUnitImpl::FrameCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref) - : CoordinationUnitInterface(id, std::move(service_ref)), + : CoordinationUnitInterface(id, graph, std::move(service_ref)), parent_frame_coordination_unit_(nullptr), page_coordination_unit_(nullptr), process_coordination_unit_(nullptr) {}
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h index da8adc8..b37d8ac 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h
@@ -25,6 +25,7 @@ FrameCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref); ~FrameCoordinationUnitImpl() override;
diff --git a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc index 7f56e26..cb5a69de 100644 --- a/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc +++ b/services/resource_coordinator/coordination_unit/frame_coordination_unit_impl_unittest.cc
@@ -115,7 +115,8 @@ } TEST_F(FrameCoordinationUnitImplTest, LastAudibleTime) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); EXPECT_EQ(base::TimeTicks(), cu_graph.frame->last_audible_time()); cu_graph.frame->SetAudibility(true); AdvanceClock(base::TimeDelta::FromSeconds(1)); @@ -140,7 +141,8 @@ GetLifecycleState(cu.get())) TEST_F(FrameCoordinationUnitImplTest, LifecycleStatesTransitions) { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); // Verifying the model. ASSERT_TRUE(cu_graph.frame->IsMainFrame()); ASSERT_TRUE(cu_graph.other_frame->IsMainFrame());
diff --git a/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.cc b/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.cc index 527b7f6..c0fd8c56 100644 --- a/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.cc +++ b/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.cc
@@ -21,12 +21,16 @@ namespace resource_coordinator { MockSinglePageInSingleProcessCoordinationUnitGraph:: - MockSinglePageInSingleProcessCoordinationUnitGraph() - : system(TestCoordinationUnitWrapper<SystemCoordinationUnitImpl>::Create()), - frame(TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create()), - process( - TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create()), - page(TestCoordinationUnitWrapper<PageCoordinationUnitImpl>::Create()) { + MockSinglePageInSingleProcessCoordinationUnitGraph( + CoordinationUnitGraph* graph) + : system(TestCoordinationUnitWrapper<SystemCoordinationUnitImpl>::Create( + graph)), + frame(TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create( + graph)), + process(TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create( + graph)), + page(TestCoordinationUnitWrapper<PageCoordinationUnitImpl>::Create( + graph)) { page->AddFrame(frame->id()); process->AddFrame(frame->id()); process->SetPID(1); @@ -36,11 +40,14 @@ ~MockSinglePageInSingleProcessCoordinationUnitGraph() = default; MockMultiplePagesInSingleProcessCoordinationUnitGraph:: - MockMultiplePagesInSingleProcessCoordinationUnitGraph() - : other_frame( - TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create()), - other_page( - TestCoordinationUnitWrapper<PageCoordinationUnitImpl>::Create()) { + MockMultiplePagesInSingleProcessCoordinationUnitGraph( + CoordinationUnitGraph* graph) + : MockSinglePageInSingleProcessCoordinationUnitGraph(graph), + other_frame( + TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create( + graph)), + other_page(TestCoordinationUnitWrapper<PageCoordinationUnitImpl>::Create( + graph)) { other_page->AddFrame(other_frame->id()); process->AddFrame(other_frame->id()); } @@ -49,11 +56,15 @@ ~MockMultiplePagesInSingleProcessCoordinationUnitGraph() = default; MockSinglePageWithMultipleProcessesCoordinationUnitGraph:: - MockSinglePageWithMultipleProcessesCoordinationUnitGraph() - : child_frame( - TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create()), + MockSinglePageWithMultipleProcessesCoordinationUnitGraph( + CoordinationUnitGraph* graph) + : MockSinglePageInSingleProcessCoordinationUnitGraph(graph), + child_frame( + TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create( + graph)), other_process( - TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create()) { + TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create( + graph)) { frame->AddChildFrame(child_frame->id()); page->AddFrame(child_frame->id()); other_process->AddFrame(child_frame->id()); @@ -64,11 +75,15 @@ ~MockSinglePageWithMultipleProcessesCoordinationUnitGraph() = default; MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph:: - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph() - : child_frame( - TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create()), + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph( + CoordinationUnitGraph* graph) + : MockMultiplePagesInSingleProcessCoordinationUnitGraph(graph), + child_frame( + TestCoordinationUnitWrapper<FrameCoordinationUnitImpl>::Create( + graph)), other_process( - TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create()) { + TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl>::Create( + graph)) { other_frame->AddChildFrame(child_frame->id()); other_page->AddFrame(child_frame->id()); other_process->AddFrame(child_frame->id());
diff --git a/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.h b/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.h index 1b1513f..8fa30155 100644 --- a/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.h +++ b/services/resource_coordinator/coordination_unit/mock_coordination_unit_graphs.h
@@ -9,6 +9,7 @@ namespace resource_coordinator { +class CoordinationUnitGraph; class FrameCoordinationUnitImpl; class PageCoordinationUnitImpl; class ProcessCoordinationUnitImpl; @@ -26,7 +27,8 @@ // Pr: process(pid:1) // Pg: page struct MockSinglePageInSingleProcessCoordinationUnitGraph { - MockSinglePageInSingleProcessCoordinationUnitGraph(); + MockSinglePageInSingleProcessCoordinationUnitGraph( + CoordinationUnitGraph* graph); ~MockSinglePageInSingleProcessCoordinationUnitGraph(); TestCoordinationUnitWrapper<SystemCoordinationUnitImpl> system; TestCoordinationUnitWrapper<FrameCoordinationUnitImpl> frame; @@ -49,7 +51,8 @@ // Pr: process(pid:1) struct MockMultiplePagesInSingleProcessCoordinationUnitGraph : public MockSinglePageInSingleProcessCoordinationUnitGraph { - MockMultiplePagesInSingleProcessCoordinationUnitGraph(); + MockMultiplePagesInSingleProcessCoordinationUnitGraph( + CoordinationUnitGraph* graph); ~MockMultiplePagesInSingleProcessCoordinationUnitGraph(); TestCoordinationUnitWrapper<FrameCoordinationUnitImpl> other_frame; TestCoordinationUnitWrapper<PageCoordinationUnitImpl> other_page; @@ -73,7 +76,8 @@ // OPr: other_process(pid:2) struct MockSinglePageWithMultipleProcessesCoordinationUnitGraph : public MockSinglePageInSingleProcessCoordinationUnitGraph { - MockSinglePageWithMultipleProcessesCoordinationUnitGraph(); + MockSinglePageWithMultipleProcessesCoordinationUnitGraph( + CoordinationUnitGraph* graph); ~MockSinglePageWithMultipleProcessesCoordinationUnitGraph(); TestCoordinationUnitWrapper<FrameCoordinationUnitImpl> child_frame; TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl> other_process; @@ -99,7 +103,8 @@ // OPr: other_process(pid:2) struct MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph : public MockMultiplePagesInSingleProcessCoordinationUnitGraph { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph(); + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph( + CoordinationUnitGraph* graph); ~MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph(); TestCoordinationUnitWrapper<FrameCoordinationUnitImpl> child_frame; TestCoordinationUnitWrapper<ProcessCoordinationUnitImpl> other_process;
diff --git a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.cc index 94a92383..73eb241 100644 --- a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.cc
@@ -15,8 +15,9 @@ PageCoordinationUnitImpl::PageCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref) - : CoordinationUnitInterface(id, std::move(service_ref)) {} + : CoordinationUnitInterface(id, graph, std::move(service_ref)) {} PageCoordinationUnitImpl::~PageCoordinationUnitImpl() { for (auto* child_frame : frame_coordination_units_)
diff --git a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h index a5d94c3f..bcc7844 100644 --- a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h
@@ -23,6 +23,7 @@ PageCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref); ~PageCoordinationUnitImpl() override;
diff --git a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl_unittest.cc b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl_unittest.cc index d81e427..83ebe1a 100644 --- a/services/resource_coordinator/coordination_unit/page_coordination_unit_impl_unittest.cc +++ b/services/resource_coordinator/coordination_unit/page_coordination_unit_impl_unittest.cc
@@ -86,14 +86,16 @@ TEST_F(PageCoordinationUnitImplTest, CalculatePageCPUUsageForSinglePageInSingleProcess) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetCPUUsage(40); EXPECT_EQ(40, cu_graph.page->GetCPUUsage()); } TEST_F(PageCoordinationUnitImplTest, CalculatePageCPUUsageForMultiplePagesInSingleProcess) { - MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph; + MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetCPUUsage(40); EXPECT_EQ(20, cu_graph.page->GetCPUUsage()); EXPECT_EQ(20, cu_graph.other_page->GetCPUUsage()); @@ -101,7 +103,8 @@ TEST_F(PageCoordinationUnitImplTest, CalculatePageCPUUsageForSinglePageWithMultipleProcesses) { - MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetCPUUsage(40); cu_graph.other_process->SetCPUUsage(30); EXPECT_EQ(70, cu_graph.page->GetCPUUsage()); @@ -109,7 +112,8 @@ TEST_F(PageCoordinationUnitImplTest, CalculatePageCPUUsageForMultiplePagesWithMultipleProcesses) { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetCPUUsage(40); cu_graph.other_process->SetCPUUsage(30); EXPECT_EQ(20, cu_graph.page->GetCPUUsage()); @@ -118,7 +122,8 @@ TEST_F(PageCoordinationUnitImplTest, CalculatePageEQTForSinglePageInSingleProcess) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetExpectedTaskQueueingDuration( base::TimeDelta::FromMilliseconds(1)); @@ -130,7 +135,8 @@ TEST_F(PageCoordinationUnitImplTest, CalculatePageEQTForMultiplePagesInSingleProcess) { - MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph; + MockMultiplePagesInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->SetExpectedTaskQueueingDuration( base::TimeDelta::FromMilliseconds(1)); @@ -144,7 +150,8 @@ } TEST_F(PageCoordinationUnitImplTest, TimeSinceLastVisibilityChange) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.page->SetVisibility(true); EXPECT_TRUE(cu_graph.page->IsVisible()); @@ -160,7 +167,8 @@ } TEST_F(PageCoordinationUnitImplTest, TimeSinceLastNavigation) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); // Before any commit events, timedelta should be 0. EXPECT_TRUE(cu_graph.page->TimeSinceLastNavigation().is_zero()); @@ -178,7 +186,8 @@ } TEST_F(PageCoordinationUnitImplTest, IsLoading) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* page_cu = cu_graph.page.get(); // First attempt should fail, as the property is unset.
diff --git a/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc index ba52c83c..cf291e3 100644 --- a/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc
@@ -25,8 +25,9 @@ ProcessCoordinationUnitImpl::ProcessCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref) - : CoordinationUnitInterface(id, std::move(service_ref)) {} + : CoordinationUnitInterface(id, graph, std::move(service_ref)) {} ProcessCoordinationUnitImpl::~ProcessCoordinationUnitImpl() { for (auto* child_frame : frame_coordination_units_)
diff --git a/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h index 448dfd49..68485700 100644 --- a/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h
@@ -25,6 +25,7 @@ ProcessCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref); ~ProcessCoordinationUnitImpl() override;
diff --git a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.cc index 3229465..4773b0df 100644 --- a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.cc
@@ -15,8 +15,9 @@ SystemCoordinationUnitImpl::SystemCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref) - : CoordinationUnitInterface(id, std::move(service_ref)) {} + : CoordinationUnitInterface(id, graph, std::move(service_ref)) {} SystemCoordinationUnitImpl::~SystemCoordinationUnitImpl() = default;
diff --git a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.h index 0e80d620..d11902e7a 100644 --- a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl.h
@@ -20,6 +20,7 @@ SystemCoordinationUnitImpl( const CoordinationUnitID& id, + CoordinationUnitGraph* graph, std::unique_ptr<service_manager::ServiceContextRef> service_ref); ~SystemCoordinationUnitImpl() override;
diff --git a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl_unittest.cc b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl_unittest.cc index 690e83ad..7c5022b8 100644 --- a/services/resource_coordinator/coordination_unit/system_coordination_unit_impl_unittest.cc +++ b/services/resource_coordinator/coordination_unit/system_coordination_unit_impl_unittest.cc
@@ -94,7 +94,8 @@ } // namespace TEST_F(SystemCoordinationUnitImplTest, OnProcessCPUUsageReady) { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); SystemAndProcessObserver observer; cu_graph.system->AddObserver(&observer); EXPECT_EQ(0u, observer.system_event_seen_count()); @@ -103,7 +104,8 @@ } TEST_F(SystemCoordinationUnitImplTest, DistributeMeasurementBatch) { - MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockMultiplePagesWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); SystemAndProcessObserver observer; cu_graph.system->AddObserver(&observer); cu_graph.process->AddObserver(&observer);
diff --git a/services/resource_coordinator/observers/coordination_unit_graph_observer.h b/services/resource_coordinator/observers/coordination_unit_graph_observer.h index ab6f6d41..6d5efaa 100644 --- a/services/resource_coordinator/observers/coordination_unit_graph_observer.h +++ b/services/resource_coordinator/observers/coordination_unit_graph_observer.h
@@ -11,7 +11,7 @@ namespace resource_coordinator { class CoordinationUnitBase; -class CoordinationUnitManager; +class CoordinationUnitGraph; class FrameCoordinationUnitImpl; class PageCoordinationUnitImpl; class ProcessCoordinationUnitImpl; @@ -29,7 +29,7 @@ // // To create and install a new observer: // (1) Derive from this class. -// (2) Register by calling on |coordination_unit_manager().ResgiterObserver| +// (2) Register by calling on |coordination_unit_graph().RegisterObserver| // inside of the ResourceCoordinatorService::Create. class CoordinationUnitGraphObserver { public: @@ -91,17 +91,17 @@ const SystemCoordinationUnitImpl* system_cu, const mojom::Event event) {} - void set_coordination_unit_manager( - CoordinationUnitManager* coordination_unit_manager) { - coordination_unit_manager_ = coordination_unit_manager; + void set_coordination_unit_graph( + CoordinationUnitGraph* coordination_unit_graph) { + coordination_unit_graph_ = coordination_unit_graph; } - const CoordinationUnitManager& coordination_unit_manager() const { - return *coordination_unit_manager_; + const CoordinationUnitGraph& coordination_unit_graph() const { + return *coordination_unit_graph_; } private: - CoordinationUnitManager* coordination_unit_manager_ = nullptr; + CoordinationUnitGraph* coordination_unit_graph_ = nullptr; DISALLOW_COPY_AND_ASSIGN(CoordinationUnitGraphObserver); };
diff --git a/services/resource_coordinator/observers/coordination_unit_graph_observer_unittest.cc b/services/resource_coordinator/observers/coordination_unit_graph_observer_unittest.cc index 35ecee1..67a7103 100644 --- a/services/resource_coordinator/observers/coordination_unit_graph_observer_unittest.cc +++ b/services/resource_coordinator/observers/coordination_unit_graph_observer_unittest.cc
@@ -5,7 +5,7 @@ #include "services/resource_coordinator/observers/coordination_unit_graph_observer.h" #include "base/process/process_handle.h" -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_test_harness.h" #include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h" @@ -63,22 +63,22 @@ } // namespace TEST_F(CoordinationUnitGraphObserverTest, CallbacksInvoked) { - EXPECT_TRUE(coordination_unit_manager().observers_for_testing().empty()); - coordination_unit_manager().RegisterObserver( + EXPECT_TRUE(coordination_unit_graph()->observers_for_testing().empty()); + coordination_unit_graph()->RegisterObserver( std::make_unique<TestCoordinationUnitGraphObserver>()); - EXPECT_EQ(1u, coordination_unit_manager().observers_for_testing().size()); + EXPECT_EQ(1u, coordination_unit_graph()->observers_for_testing().size()); TestCoordinationUnitGraphObserver* observer = static_cast<TestCoordinationUnitGraphObserver*>( - coordination_unit_manager().observers_for_testing()[0].get()); + coordination_unit_graph()->observers_for_testing()[0].get()); auto process_cu = CreateCoordinationUnit<ProcessCoordinationUnitImpl>(); auto root_frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(process_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(root_frame_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(process_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(root_frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); EXPECT_EQ(2u, observer->coordination_unit_created_count()); // The registered observer will only observe the events that happen to @@ -89,11 +89,11 @@ process_cu->SetPropertyForTesting(42); EXPECT_EQ(1u, observer->property_changed_count()); - coordination_unit_manager().OnBeforeCoordinationUnitDestroyed( + coordination_unit_graph()->OnBeforeCoordinationUnitDestroyed( process_cu.get()); - coordination_unit_manager().OnBeforeCoordinationUnitDestroyed( + coordination_unit_graph()->OnBeforeCoordinationUnitDestroyed( root_frame_cu.get()); - coordination_unit_manager().OnBeforeCoordinationUnitDestroyed(frame_cu.get()); + coordination_unit_graph()->OnBeforeCoordinationUnitDestroyed(frame_cu.get()); EXPECT_EQ(2u, observer->coordination_unit_destroyed_count()); }
diff --git a/services/resource_coordinator/observers/ipc_volume_reporter_unittest.cc b/services/resource_coordinator/observers/ipc_volume_reporter_unittest.cc index b67cbdc7..50d4621 100644 --- a/services/resource_coordinator/observers/ipc_volume_reporter_unittest.cc +++ b/services/resource_coordinator/observers/ipc_volume_reporter_unittest.cc
@@ -30,7 +30,7 @@ void SetUp() override { reporter_ = new TestIPCVolumeReporter(); - coordination_unit_manager().RegisterObserver(base::WrapUnique(reporter_)); + coordination_unit_graph()->RegisterObserver(base::WrapUnique(reporter_)); } protected: @@ -43,10 +43,11 @@ TEST_F(IPCVolumeReporterTest, Basic) { EXPECT_TRUE(reporter_->mock_timer()->IsRunning()); - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; - coordination_unit_manager().OnCoordinationUnitCreated(cu_graph.process.get()); - coordination_unit_manager().OnCoordinationUnitCreated(cu_graph.page.get()); - coordination_unit_manager().OnCoordinationUnitCreated(cu_graph.frame.get()); + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); + coordination_unit_graph()->OnCoordinationUnitCreated(cu_graph.process.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(cu_graph.page.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(cu_graph.frame.get()); cu_graph.frame->SetAudibility(true); cu_graph.frame->SetNetworkAlmostIdle(true);
diff --git a/services/resource_coordinator/observers/metrics_collector.cc b/services/resource_coordinator/observers/metrics_collector.cc index f470d89..6c9a907 100644 --- a/services/resource_coordinator/observers/metrics_collector.cc +++ b/services/resource_coordinator/observers/metrics_collector.cc
@@ -6,7 +6,7 @@ #include "base/metrics/field_trial_params.h" #include "base/metrics/histogram_macros.h" -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h" @@ -105,7 +105,7 @@ metrics_report_record_map_.find(page_cu->id())->second; record.first_audible.OnSignalReceived( frame_cu->IsMainFrame(), page_cu->TimeSinceLastVisibilityChange(), - coordination_unit_manager().ukm_recorder()); + coordination_unit_graph().ukm_recorder()); } } } @@ -169,7 +169,7 @@ metrics_report_record_map_.find(page_cu->id())->second; record.first_alert_fired.OnSignalReceived( frame_cu->IsMainFrame(), page_cu->TimeSinceLastVisibilityChange(), - coordination_unit_manager().ukm_recorder()); + coordination_unit_graph().ukm_recorder()); } else if (event == mojom::Event::kNonPersistentNotificationCreated) { auto* page_cu = frame_cu->GetPageCoordinationUnit(); // Only record metrics while it is backgrounded. @@ -180,7 +180,7 @@ metrics_report_record_map_.find(page_cu->id())->second; record.first_non_persistent_notification_created.OnSignalReceived( frame_cu->IsMainFrame(), page_cu->TimeSinceLastVisibilityChange(), - coordination_unit_manager().ukm_recorder()); + coordination_unit_graph().ukm_recorder()); } } @@ -195,7 +195,7 @@ metrics_report_record_map_.find(page_cu->id())->second; record.first_title_updated.OnSignalReceived( true, page_cu->TimeSinceLastVisibilityChange(), - coordination_unit_manager().ukm_recorder()); + coordination_unit_graph().ukm_recorder()); } else if (event == mojom::Event::kFaviconUpdated) { // Only record metrics while it is backgrounded. if (page_cu->IsVisible() || !ShouldReportMetrics(page_cu)) @@ -204,7 +204,7 @@ metrics_report_record_map_.find(page_cu->id())->second; record.first_favicon_updated.OnSignalReceived( true, page_cu->TimeSinceLastVisibilityChange(), - coordination_unit_manager().ukm_recorder()); + coordination_unit_graph().ukm_recorder()); } } @@ -237,7 +237,7 @@ ukm::builders::CPUUsageMeasurement(state.ukm_source_id) .SetCPUUsage(cpu_usage) .SetNumberOfCoresidentTabs(num_coresident_tabs) - .Record(coordination_unit_manager().ukm_recorder()); + .Record(coordination_unit_graph().ukm_recorder()); } void MetricsCollector::RecordExpectedQueueingTimeForUkm( @@ -247,7 +247,7 @@ state.num_unreported_eqt_measurements = 0u; ukm::builders::ResponsivenessMeasurement(state.ukm_source_id) .SetExpectedTaskQueueingDuration(expected_queueing_time) - .Record(coordination_unit_manager().ukm_recorder()); + .Record(coordination_unit_graph().ukm_recorder()); } void MetricsCollector::UpdateUkmSourceIdForPage(
diff --git a/services/resource_coordinator/observers/metrics_collector_unittest.cc b/services/resource_coordinator/observers/metrics_collector_unittest.cc index 04c2718..132a465 100644 --- a/services/resource_coordinator/observers/metrics_collector_unittest.cc +++ b/services/resource_coordinator/observers/metrics_collector_unittest.cc
@@ -39,7 +39,7 @@ // Sets a valid starting time. clock_.SetNowTicks(base::TimeTicks::Now()); - coordination_unit_manager().RegisterObserver( + coordination_unit_graph()->RegisterObserver( base::WrapUnique(metrics_collector)); } @@ -60,8 +60,8 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstAudioStartsUMA) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); page_cu->OnMainFrameNavigationCommitted(); @@ -112,8 +112,8 @@ FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); @@ -133,7 +133,7 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstTitleUpdatedUMA) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); page_cu->OnMainFrameNavigationCommitted(); AdvanceClock(kTestMetricsReportDelayTimeout); @@ -166,7 +166,7 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); page_cu->OnMainFrameNavigationCommitted(); page_cu->SetVisibility(false); @@ -184,8 +184,8 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstAlertFiredUMA) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); page_cu->OnMainFrameNavigationCommitted(); @@ -220,8 +220,8 @@ FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); page_cu->OnMainFrameNavigationCommitted(); @@ -241,8 +241,8 @@ FromBackgroundedToFirstNonPersistentNotificationCreatedUMA) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); page_cu->OnMainFrameNavigationCommitted(); @@ -278,8 +278,8 @@ FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); page_cu->OnMainFrameNavigationCommitted(); @@ -297,7 +297,7 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstFaviconUpdatedUMA) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); page_cu->OnMainFrameNavigationCommitted(); AdvanceClock(kTestMetricsReportDelayTimeout); @@ -330,7 +330,7 @@ TEST_F(MAYBE_MetricsCollectorTest, FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); page_cu->OnMainFrameNavigationCommitted(); page_cu->SetVisibility(false); @@ -348,17 +348,17 @@ // Flaky test: https://crbug.com/833028 TEST_F(MAYBE_MetricsCollectorTest, ResponsivenessMetric) { auto page_cu = CreateCoordinationUnit<PageCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(page_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(page_cu.get()); auto process_cu = CreateCoordinationUnit<ProcessCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(process_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(process_cu.get()); auto frame_cu = CreateCoordinationUnit<FrameCoordinationUnitImpl>(); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + coordination_unit_graph()->OnCoordinationUnitCreated(frame_cu.get()); page_cu->AddFrame(frame_cu->id()); process_cu->AddFrame(frame_cu->id()); ukm::TestUkmRecorder ukm_recorder; - coordination_unit_manager().set_ukm_recorder(&ukm_recorder); + coordination_unit_graph()->set_ukm_recorder(&ukm_recorder); ukm::SourceId id = ukm_recorder.GetNewSourceID(); GURL url = GURL("https://google.com/foobar");
diff --git a/services/resource_coordinator/observers/page_signal_generator_impl_unittest.cc b/services/resource_coordinator/observers/page_signal_generator_impl_unittest.cc index 33a0ad8..2bcaa03 100644 --- a/services/resource_coordinator/observers/page_signal_generator_impl_unittest.cc +++ b/services/resource_coordinator/observers/page_signal_generator_impl_unittest.cc
@@ -80,7 +80,8 @@ TEST_F(PageSignalGeneratorImplTest, CalculatePageEQTForSinglePageWithMultipleProcesses) { - MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph; + MockSinglePageWithMultipleProcessesCoordinationUnitGraph cu_graph( + coordination_unit_graph()); cu_graph.process->AddObserver(page_signal_generator()); cu_graph.process->SetExpectedTaskQueueingDuration( @@ -98,7 +99,8 @@ TEST_F(PageSignalGeneratorImplTest, IsLoading) { EnablePAI(); - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* page_cu = cu_graph.page.get(); auto* psg = page_signal_generator(); // The observer relationship isn't required for testing IsLoading. @@ -118,7 +120,8 @@ TEST_F(PageSignalGeneratorImplTest, IsIdling) { EnablePAI(); - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* frame_cu = cu_graph.frame.get(); auto* page_cu = cu_graph.page.get(); auto* proc_cu = cu_graph.process.get(); @@ -153,7 +156,8 @@ TEST_F(PageSignalGeneratorImplTest, PageDataCorrectlyManaged) { EnablePAI(); - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* page_cu = cu_graph.page.get(); auto* psg = page_signal_generator(); // The observer relationship isn't required for testing GetPageData. @@ -171,7 +175,8 @@ ResourceCoordinatorClock::SetClockForTesting(task_env().GetMockTickClock()); task_env().FastForwardBy(base::TimeDelta::FromSeconds(1)); - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* frame_cu = cu_graph.frame.get(); auto* page_cu = cu_graph.page.get(); auto* proc_cu = cu_graph.process.get(); @@ -277,7 +282,8 @@ } TEST_F(PageSignalGeneratorImplTest, NonPersistentNotificationCreatedEvent) { - MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph; + MockSinglePageInSingleProcessCoordinationUnitGraph cu_graph( + coordination_unit_graph()); auto* frame_cu = cu_graph.frame.get(); // Create a mock receiver and register it against the psg.
diff --git a/services/resource_coordinator/resource_coordinator_service.cc b/services/resource_coordinator/resource_coordinator_service.cc index 52a88f8..622b392 100644 --- a/services/resource_coordinator/resource_coordinator_service.cc +++ b/services/resource_coordinator/resource_coordinator_service.cc
@@ -43,18 +43,17 @@ registry_.AddInterface( base::Bind(&PageSignalGeneratorImpl::BindToInterface, base::Unretained(page_signal_generator_impl.get()))); - coordination_unit_manager_.RegisterObserver( + coordination_unit_graph_.RegisterObserver( std::move(page_signal_generator_impl)); - coordination_unit_manager_.RegisterObserver( + coordination_unit_graph_.RegisterObserver( std::make_unique<MetricsCollector>()); - coordination_unit_manager_.RegisterObserver( - std::make_unique<IPCVolumeReporter>( - std::make_unique<base::OneShotTimer>())); + coordination_unit_graph_.RegisterObserver(std::make_unique<IPCVolumeReporter>( + std::make_unique<base::OneShotTimer>())); - coordination_unit_manager_.OnStart(®istry_, ref_factory_.get()); - coordination_unit_manager_.set_ukm_recorder(ukm_recorder_.get()); + coordination_unit_graph_.OnStart(®istry_, ref_factory_.get()); + coordination_unit_graph_.set_ukm_recorder(ukm_recorder_.get()); // TODO(chiniforooshan): The abstract class Coordinator in the // public/cpp/memory_instrumentation directory should not be needed anymore.
diff --git a/services/resource_coordinator/resource_coordinator_service.h b/services/resource_coordinator/resource_coordinator_service.h index 6ffa3ede..2e20782 100644 --- a/services/resource_coordinator/resource_coordinator_service.h +++ b/services/resource_coordinator/resource_coordinator_service.h
@@ -12,8 +12,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h" +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_introspector_impl.h" -#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" #include "services/resource_coordinator/memory_instrumentation/coordinator_impl.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/service.h" @@ -40,15 +40,15 @@ return ref_factory_.get(); } ukm::MojoUkmRecorder* ukm_recorder() { return ukm_recorder_.get(); } - CoordinationUnitManager* coordination_unit_manager() { - return &coordination_unit_manager_; + CoordinationUnitGraph* coordination_unit_graph() { + return &coordination_unit_graph_; } private: service_manager::BinderRegistryWithArgs< const service_manager::BindSourceInfo&> registry_; - CoordinationUnitManager coordination_unit_manager_; + CoordinationUnitGraph coordination_unit_graph_; CoordinationUnitIntrospectorImpl introspector_; std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder_; std::unique_ptr<memory_instrumentation::CoordinatorImpl>
diff --git a/services/ui/ws2/client_root.cc b/services/ui/ws2/client_root.cc index 28dc8c0..82d0c65 100644 --- a/services/ui/ws2/client_root.cc +++ b/services/ui/ws2/client_root.cc
@@ -31,10 +31,6 @@ // TODO: wire up gfx::Insets() correctly below. See usage in // aura::ClientSurfaceEmbedder for details. Insets here are used for // guttering. - // TODO: this may only be needed for top-level windows and any ClientRoots - // created as the result of a direct call to create a WindowServiceClient by - // code running in process (that is, not at the request of a client through - // WindowServiceClient). client_surface_embedder_ = std::make_unique<aura::ClientSurfaceEmbedder>( window_, is_top_level, gfx::Insets()); }
diff --git a/services/ui/ws2/window_host_frame_sink_client.cc b/services/ui/ws2/window_host_frame_sink_client.cc index eaa15da..b507bf0f 100644 --- a/services/ui/ws2/window_host_frame_sink_client.cc +++ b/services/ui/ws2/window_host_frame_sink_client.cc
@@ -22,7 +22,8 @@ } void WindowHostFrameSinkClient::OnFrameTokenChanged(uint32_t frame_token) { - NOTIMPLEMENTED(); + // TODO: this needs to call through to WindowTreeClient. + // https://crbug.com/848022. } } // namespace ws2
diff --git a/skia/BUILD.gn b/skia/BUILD.gn index 4aefafd..139101f 100644 --- a/skia/BUILD.gn +++ b/skia/BUILD.gn
@@ -118,6 +118,7 @@ config("skia_library_config") { # These include directories are only included for Skia code and are not # exported to dependents. + defines = [] include_dirs = [ "//third_party/skia/include/codec", "//third_party/skia/include/private", @@ -146,8 +147,6 @@ # TODO: remove after Skia shader relocation (https://skia-review.googlesource.com/c/17927) include_dirs += [ "//third_party/skia/src/effects/gradients" ] - defines = [ "SK_USE_SKCMS" ] - if (!is_ios && !use_system_freetype) { defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ] } @@ -228,12 +227,7 @@ } import("//third_party/skia/third_party/skcms/skcms.gni") -config("skcms_public") { - include_dirs = [ "//third_party/skia/third_party/skcms" ] -} source_set("skcms") { - public_configs = [ ":skcms_public" ] - cflags = [] if (!is_win || is_clang) { cflags += [ @@ -578,7 +572,6 @@ # skcms deps += [ ":skcms" ] - sources += [ "//third_party/skia/src/core/SkColorSpaceXform_skcms.cpp" ] } # Template for things that are logically part of :skia, but need to be split out
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index cd1af24..e7336c2 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -98,6 +98,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -547,6 +553,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -906,6 +918,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -1009,6 +1027,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -1087,6 +1111,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -1213,6 +1243,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -1371,6 +1407,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -1474,6 +1516,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -1552,6 +1600,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -1678,6 +1732,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -1836,6 +1896,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -1932,6 +1998,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -2010,6 +2082,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -2136,6 +2214,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -2294,6 +2378,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -2397,6 +2487,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -2475,6 +2571,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -2601,6 +2703,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -2759,6 +2867,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -2862,6 +2976,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -2940,6 +3060,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -3066,6 +3192,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -3224,6 +3356,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -3327,6 +3465,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -3405,6 +3549,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -3531,6 +3681,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -3689,6 +3845,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -3792,6 +3954,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -3870,6 +4038,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -3996,6 +4170,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -7396,6 +7576,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -7836,6 +8022,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -8264,6 +8456,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -8680,6 +8878,12 @@ "swarming": { "can_use_on_swarming_builders": false }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": false + }, "test": "chromedriver_unittests" }, { @@ -9113,6 +9317,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -9534,6 +9744,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -9715,6 +9931,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -10014,6 +10236,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -10195,6 +10423,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -10319,6 +10553,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -10422,6 +10662,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -10500,6 +10746,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -10626,6 +10878,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -10784,6 +11042,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -10887,6 +11151,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -10965,6 +11235,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -11091,6 +11367,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -11249,6 +11531,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -11352,6 +11640,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -11430,6 +11724,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -11556,6 +11856,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -11714,6 +12020,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -11817,6 +12129,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -11895,6 +12213,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -12021,6 +12345,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -12179,6 +12509,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -12282,6 +12618,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -12360,6 +12702,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -12486,6 +12834,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -12644,6 +12998,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -12747,6 +13107,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -12825,6 +13191,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -12951,6 +13323,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -13109,6 +13487,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -13212,6 +13596,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -13290,6 +13680,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -13416,6 +13812,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -13574,6 +13976,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -13677,6 +14085,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -13755,6 +14169,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -13881,6 +14301,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -14039,6 +14465,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -14142,6 +14574,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -14220,6 +14658,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -14346,6 +14790,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -14504,6 +14954,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -14607,6 +15063,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -14685,6 +15147,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -14811,6 +15279,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -15053,6 +15527,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -15392,6 +15872,17 @@ } ] }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10" + } + ] + }, "test": "angle_unittests" }, { @@ -15568,6 +16059,17 @@ } ] }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10" + } + ] + }, "test": "components_browsertests" }, { @@ -15701,6 +16203,17 @@ } ] }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10" + } + ] + }, "test": "extensions_unittests" }, { @@ -15923,6 +16436,17 @@ } ] }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10" + } + ] + }, "test": "native_theme_unittests" }, {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index ce5a0e28..b858eef0 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -420,6 +420,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -869,6 +875,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -4967,6 +4979,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -5741,6 +5759,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "angle_unittests" }, { @@ -5826,6 +5850,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "components_browsertests" }, { @@ -5898,6 +5928,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "extensions_unittests" }, { @@ -6018,6 +6054,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "native_theme_unittests" }, { @@ -6505,6 +6547,12 @@ "swarming": { "can_use_on_swarming_builders": false }, + "test": "accessibility_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": false + }, "test": "angle_unittests" }, { @@ -6589,6 +6637,12 @@ "swarming": { "can_use_on_swarming_builders": false }, + "test": "chromedriver_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": false + }, "test": "components_browsertests" }, { @@ -6661,6 +6715,12 @@ "swarming": { "can_use_on_swarming_builders": false }, + "test": "extensions_browsertests" + }, + { + "swarming": { + "can_use_on_swarming_builders": false + }, "test": "extensions_unittests" }, { @@ -6775,6 +6835,12 @@ "swarming": { "can_use_on_swarming_builders": false }, + "test": "nacl_loader_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": false + }, "test": "native_theme_unittests" }, {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 5cd4f08..15bff06 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -2537,6 +2537,16 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "args": [ + "--test-launcher-batch-limit=1", + "--test-launcher-print-test-stdio=always" + ], + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -3254,6 +3264,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -3766,6 +3782,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -4233,6 +4255,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -4665,6 +4693,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -5096,6 +5130,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -5536,6 +5576,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -5567,6 +5613,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "crashpad_tests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "cronet_tests" }, { @@ -5664,6 +5716,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "mac_installer_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "media_blink_unittests" }, { @@ -5736,6 +5794,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "sandbox_mac_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "service_manager_unittests" }, {
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter index 3c411bd..496d73c 100644 --- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter +++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -230,9 +230,6 @@ # to work with network service. -ConditionalCacheCountingHelperBrowserTest.Count -# https://crbug.com/839982 --ExtensionApiTest.SharedWorker_ControlledByServiceWorker - # NOTE: if adding an exclusion for an existing failure (e.g. additional test for # feature X that is already not working), please add it beside the existing # failures. Otherwise please reach out to network-service-dev@.
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 29c5c19..3e86160 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1762,8 +1762,9 @@ 'Chromium Mac 10.13', 'Out of Process Profiling Mac', # chromium.memory - 'Linux ASan LSan Tests (1)', + 'Linux ASan LSan Tests (1)', # TODO(thakis): Try removing this exception. 'Linux TSan Tests', # The TSan bot sets enable_nacl=false + 'Mac ASan 64 Tests (1)', # The mac asan bot sets enable_nacl=false ], }, 'native_theme_unittests': {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 03bd1e5..4a53c0c 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -1295,12 +1295,16 @@ }, 'non_android_chromium_gtests': { + 'accessibility_unittests': {}, 'app_shell_unittests': {}, 'browser_tests': { 'swarming': { 'shards': 10, }, }, + 'chrome_app_unittests': {}, + 'chromedriver_unittests': {}, + 'extensions_browsertests': {}, 'extensions_unittests': {}, 'gin_unittests': {}, # crbug.com/843124 'interactive_ui_tests': { @@ -1309,6 +1313,7 @@ }, }, 'message_center_unittests': {}, + 'nacl_loader_unittests': {}, 'native_theme_unittests': {}, 'pdf_unittests': {}, 'ppapi_unittests': {}, @@ -1331,27 +1336,10 @@ 'headless_unittests': {}, }, - 'non_android_and_clang_linux_mac_chromium_gtests': { - # TODO(kbr): merge back into non_android_chromium_gtests. - 'chrome_app_unittests': {}, - }, - 'non_android_and_clang_linux_win_chromium_gtests': { 'sync_integration_tests': {}, }, - 'non_android_and_clang_mac_win_chromium_gtests': { - # TODO(kbr): merge back into non_android_chromium_gtests. - 'nacl_loader_unittests': {}, - }, - - 'non_android_and_clang_win_chromium_gtests': { - # TODO(kbr): merge back into non_android_chromium_gtests. - 'accessibility_unittests': {}, - 'chromedriver_unittests': {}, - 'extensions_browsertests': {}, - }, - 'non_linux_chromium_gtests': { 'crashpad_tests': {}, }, @@ -1830,8 +1818,6 @@ 'linux_incl_clang_specific_chromium_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', ], @@ -1845,8 +1831,6 @@ 'linux_incl_clang_specific_chromium_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', ], @@ -1863,10 +1847,7 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_cast_and_chromeos_and_clang_and_mac_fyi_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'site_isolation_chromium_gtests', 'site_isolation_chromium_linux_gtests', @@ -1888,10 +1869,7 @@ 'linux_chromeos_specific_gtests', 'linux_flavor_specific_chromium_gtests', 'non_android_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', ], @@ -1910,10 +1888,7 @@ 'linux_flavor_specific_chromium_gtests', 'mash_chromium_gtests', 'non_android_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'viz_gtests', ], @@ -1938,7 +1913,6 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', ], @@ -1949,10 +1923,7 @@ 'mac_specific_chromium_gtests', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', 'viz_fyi_gtests', ], @@ -1965,10 +1936,7 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_cast_and_chromeos_and_clang_and_mac_fyi_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', ], @@ -1980,8 +1948,6 @@ 'linux_flavor_specific_chromium_gtests', 'linux_incl_clang_specific_chromium_gtests', 'mash_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_android_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', ], @@ -1995,8 +1961,6 @@ 'linux_flavor_specific_chromium_gtests', 'linux_incl_clang_specific_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_android_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'vr_platform_specific_non_clang_win_chromium_gtests', @@ -2006,9 +1970,10 @@ 'chromium_gtests', 'chromium_gtests_for_devices_with_graphical_output', 'linux_and_mac_specific_chromium_gtests', + 'mac_specific_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_android_chromium_gtests', + 'non_linux_chromium_gtests', ], 'chromium_win_10_fast_ring_gtests': [ @@ -2018,7 +1983,6 @@ 'chromium_gtests_for_devices_with_graphical_output', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_linux_chromium_gtests', 'win_specific_chromium_gtests', ], @@ -2029,7 +1993,6 @@ 'chromium_gtests_for_devices_with_graphical_output', 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_linux_chromium_gtests', 'win_specific_chromium_gtests', ], @@ -2042,10 +2005,7 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_cast_and_chromeos_and_clang_and_mac_fyi_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'vr_platform_specific_non_clang_win_chromium_gtests', @@ -2059,10 +2019,7 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_cast_and_chromeos_and_clang_and_mac_fyi_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'viz_gtests', @@ -2078,10 +2035,7 @@ 'non_android_chromium_gtests', 'non_android_and_cast_and_chromeos_chromium_gtests', 'non_android_and_cast_and_chromeos_and_clang_and_mac_fyi_chromium_gtests', - 'non_android_and_clang_linux_mac_chromium_gtests', 'non_android_and_clang_linux_win_chromium_gtests', - 'non_android_and_clang_mac_win_chromium_gtests', - 'non_android_and_clang_win_chromium_gtests', 'non_linux_chromium_gtests', 'non_mac_non_clang_win_chromium_gtests', 'viz_gtests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 99a0ef7..ce1da14 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1262,21 +1262,6 @@ ] } ], - "EmojiContextMenu": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableEmojiContextMenu" - ] - } - ] - } - ], "EnableAppContainer": [ { "platforms": [ @@ -1340,6 +1325,21 @@ ] } ], + "EnableEmojiContextMenu": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableEmojiContextMenu" + ] + } + ] + } + ], "EnableMediaRouter": [ { "platforms": [ @@ -2467,6 +2467,28 @@ ] } ], + "PageLoadMetricsTimerDelay": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "win" + ], + "experiments": [ + { + "name": "10MS", + "params": { + "BufferTimerDelayMillis": "10" + }, + "enable_features": [ + "PageLoadMetricsTimerDelay" + ] + } + ] + } + ], "ParallelDownloading": [ { "platforms": [
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process index 97631e6..28a24f73 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process +++ b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
@@ -111,6 +111,7 @@ # for the foreseeable future. Bug(none) external/wpt/html/browsers/origin/relaxing-the-same-origin-restriction [ Skip ] Bug(none) external/wpt/FileAPI/url/multi-global-origin-serialization.sub.html [ Skip ] +Bug(none) virtual/mojo-blob-urls/external/wpt/FileAPI/url/multi-global-origin-serialization.sub.html [ Skip ] Bug(none) external/wpt/dom/events/EventListener-incumbent-global-1.sub.html [ Skip ] Bug(none) external/wpt/dom/events/EventListener-incumbent-global-2.sub.html [ Skip ] Bug(none) external/wpt/html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub.html [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests index b1f254b..0601350e 100644 --- a/third_party/WebKit/LayoutTests/NeverFixTests +++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -772,6 +772,7 @@ external/wpt/FileAPI/FileReader/test_notreadableerrors-manual.html [ WontFix ] external/wpt/FileAPI/FileReader/test_securityerrors-manual.html [ WontFix ] external/wpt/FileAPI/url/url_createobjecturl_file_img-manual.html [ WontFix ] +virtual/mojo-blob-urls/external/wpt/FileAPI/url/url_createobjecturl_file_img-manual.html [ WontFix ] external/wpt/geolocation-API/getCurrentPosition_permission_allow-manual.html [ WontFix ] external/wpt/geolocation-API/getCurrentPosition_permission_deny-manual.html [ WontFix ] external/wpt/geolocation-API/getCurrentPosition_permission-manual.html [ WontFix ] @@ -1835,7 +1836,7 @@ external/wpt/css/css-color/t32-opacity-offscreen-multiple-boxes-2-c.xht [ WontFix ] external/wpt/css/css-color/t422-rgba-onscreen-b.xht [ WontFix ] -# https://github.com/w3c/web-platform-tests/issues/8547 +# https://github.com/web-platform-tests/wpt/issues/8547 external/wpt/css/mediaqueries/device-aspect-ratio-001.html [ WontFix ] external/wpt/css/mediaqueries/device-aspect-ratio-005.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index edf910bd..19f4b33 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2819,6 +2819,7 @@ crbug.com/800898 external/wpt/FileAPI/url/url-with-fetch.any.worker.html [ Pass Failure ] crbug.com/800898 external/wpt/FileAPI/url/url-with-xhr.any.worker.html [ Pass Failure ] crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Timeout ] +crbug.com/800901 virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Timeout ] # Websockets crbug.com/803558 external/wpt/websockets/opening-handshake/003-sets-origin.worker.html [ Timeout ] @@ -2842,6 +2843,7 @@ crbug.com/832071 virtual/navigation-mojo-response/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Win10 ] external/wpt/fullscreen/api/document-exit-fullscreen-nested-in-iframe-manual.html [ Skip ] crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/range/sw.https.window.html [ Timeout ] crbug.com/626703 [ Retina ] external/wpt/accelerometer/Accelerometer.https.html [ Timeout ] crbug.com/626703 virtual/service-worker-servicification/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ Skip ] @@ -4816,3 +4818,7 @@ # Sheriff 2018-05-30 crbug.com/847373 [ Mac Linux ] virtual/pwa-full-code-cache/http/tests/devtools/service-workers/service-workers-force-update-on-page-load.js [ Pass Timeout ] + +# Sheriff 2018-05-31 +crbug.com/848258 [ Win7 ] fast/gradients/unprefixed-repeating-linear-gradient.html [ Failure ] +crbug.com/848281 [ Linux ] http/tests/security/cross-origin-session-storage-allowed.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites index be34c290..d45214f 100644 --- a/third_party/WebKit/LayoutTests/VirtualTestSuites +++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -680,5 +680,10 @@ "base": "fast/canvas/display-compositor-pixel-dump", "args": ["--enable-display-compositor-pixel-dump", "--enable-accelerated-2d-canvas"] + }, + { + "prefix": "mojo-blob-urls", + "base": "external/wpt/FileAPI/url", + "args": ["--enable-blink-features=MojoBlobURLs"] } ]
diff --git a/third_party/WebKit/LayoutTests/custom-elements/spec/define-element.html b/third_party/WebKit/LayoutTests/custom-elements/spec/define-element.html index a61859e8..034d12339 100644 --- a/third_party/WebKit/LayoutTests/custom-elements/spec/define-element.html +++ b/third_party/WebKit/LayoutTests/custom-elements/spec/define-element.html
@@ -8,7 +8,7 @@ <body> <script> // TODO(dominicc): Merge these tests with -// https://github.com/w3c/web-platform-tests/pull/2940 +// https://github.com/web-platform-tests/wpt/pull/2940 'use strict';
diff --git a/third_party/WebKit/LayoutTests/dom/domparsing/README.md b/third_party/WebKit/LayoutTests/dom/domparsing/README.md index 460ef4e..6259c9db 100644 --- a/third_party/WebKit/LayoutTests/dom/domparsing/README.md +++ b/third_party/WebKit/LayoutTests/dom/domparsing/README.md
@@ -1,3 +1,3 @@ Tests for [DOM Parsing and Serialization](https://w3c.github.io/DOM-Parsing/) -Corresponding web-platform-tests: [domparsing](https://github.com/w3c/web-platform-tests/tree/master/domparsing) +Corresponding web-platform-tests: [domparsing](https://github.com/web-platform-tests/wpt/tree/master/domparsing)
diff --git a/third_party/WebKit/LayoutTests/dom/legacy_dom_conformance/README.md b/third_party/WebKit/LayoutTests/dom/legacy_dom_conformance/README.md index 3207e8e1..4291a3be 100644 --- a/third_party/WebKit/LayoutTests/dom/legacy_dom_conformance/README.md +++ b/third_party/WebKit/LayoutTests/dom/legacy_dom_conformance/README.md
@@ -1,5 +1,5 @@ This direcotry contains tests imported from [Document Object Model Conformance Test Suites](https://www.w3.org/DOM/Test/). -Many tests must be overlapped with [web-platform-tests](https://github.com/w3c/web-platform-tests/). +Many tests must be overlapped with [web-platform-tests](https://github.com/web-platform-tests/wpt/). We should verify it, and remove this directory entirely.
diff --git a/third_party/WebKit/LayoutTests/external/PRESUBMIT.py b/third_party/WebKit/LayoutTests/external/PRESUBMIT.py index c9d0e9fb..d315923 100644 --- a/third_party/WebKit/LayoutTests/external/PRESUBMIT.py +++ b/third_party/WebKit/LayoutTests/external/PRESUBMIT.py
@@ -5,7 +5,7 @@ """Lint functionality duplicated from web-platform-tests upstream. This is to catch lint errors that would otherwise be caught in WPT CI. -See http://web-platform-tests.org/writing-tests/lint-tool.html for more +See https://web-platform-tests.org/writing-tests/lint-tool.html for more information about the lint tool. """
diff --git a/third_party/WebKit/LayoutTests/external/README b/third_party/WebKit/LayoutTests/external/README index 3f43b5b4..1f56eaab 100644 --- a/third_party/WebKit/LayoutTests/external/README +++ b/third_party/WebKit/LayoutTests/external/README
@@ -1,6 +1,6 @@ The test suites in this directory are synced with third-party repos. -The tests in wpt are imported from https://github.com/w3c/web-platform-tests, +The tests in wpt are imported from https://github.com/web-platform-tests/wpt, and changes in the wpt directory are automatically upstreamed, usually within 24 hours.
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index ffa1fb0..77f5640d 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -35357,6 +35357,78 @@ {} ] ], + "css/css-contain/contain-paint-014.html": [ + [ + "/css/css-contain/contain-paint-014.html", + [ + [ + "/css/css-contain/reference/contain-paint-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-contain/contain-paint-015.html": [ + [ + "/css/css-contain/contain-paint-015.html", + [ + [ + "/css/css-contain/reference/contain-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-contain/contain-paint-016.html": [ + [ + "/css/css-contain/contain-paint-016.html", + [ + [ + "/css/css-contain/reference/contain-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-contain/contain-paint-017.html": [ + [ + "/css/css-contain/contain-paint-017.html", + [ + [ + "/css/css-contain/reference/contain-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-contain/contain-paint-018.html": [ + [ + "/css/css-contain/contain-paint-018.html", + [ + [ + "/css/css-contain/reference/contain-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-contain/contain-paint-019.html": [ + [ + "/css/css-contain/contain-paint-019.html", + [ + [ + "/css/css-contain/reference/contain-paint-014-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-contain/contain-size-001.html": [ [ "/css/css-contain/contain-size-001.html", @@ -52273,6 +52345,18 @@ {} ] ], + "css/css-shapes/shape-outside/shape-image/shape-image-027.html": [ + [ + "/css/css-shapes/shape-outside/shape-image/shape-image-027.html", + [ + [ + "/css/css-shapes/shape-outside/shape-image/reference/shape-image-006-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-013.html": [ [ "/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-013.html", @@ -110298,6 +110382,11 @@ {} ] ], + "css/css-contain/reference/contain-paint-014-ref.html": [ + [ + {} + ] + ], "css/css-contain/reference/contain-size-001-ref.html": [ [ {} @@ -138313,6 +138402,46 @@ {} ] ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_7001-last-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers": [ [ {} @@ -138338,6 +138467,46 @@ {} ] ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_7001-last-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii-expected.txt": [ [ {} @@ -138368,6 +138537,46 @@ {} ] ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_7001-last-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js": [ [ {} @@ -138588,6 +138797,46 @@ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-korean-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-decoder.js": [ [ {} @@ -138603,12 +138852,97 @@ {} ] ], - "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers": [ + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1-1000-expected.txt": [ [ {} ] ], - "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers": [ + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_9001-10000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers": [ [ {} ] @@ -138623,21 +138957,381 @@ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers": [ [ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers": [ [ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers": [ [ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers": [ [ {} @@ -138648,6 +139342,96 @@ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers": [ [ {} @@ -138673,6 +139457,96 @@ {} ] ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_10001-11000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_11001-12000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_12001-13000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_13001-14000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_14001-15000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_15001-16000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_16001-17000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_17001-last-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_3001-4000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_4001-5000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_5001-6000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_6001-7000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_7001-8000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_8001-9000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_9001-10000-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-korean/euc-kr/euckr-encoder.js": [ [ {} @@ -138793,6 +139667,21 @@ {} ] ], + "encoding/legacy-mb-tchinese/big5/big5-decode-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-extra-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-tchinese/big5/big5-decoder.js": [ [ {} @@ -138868,6 +139757,26 @@ {} ] ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1-1000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1001-2000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_2001-3000-expected.txt": [ + [ + {} + ] + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_3001-last-expected.txt": [ + [ + {} + ] + ], "encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers": [ [ {} @@ -138953,16 +139862,36 @@ {} ] ], + "encoding/resources/decode-common.js": [ + [ + {} + ] + ], "encoding/resources/decoding-helpers.js": [ [ {} ] ], + "encoding/resources/encode-form-common.js": [ + [ + {} + ] + ], + "encoding/resources/encode-href-common.js": [ + [ + {} + ] + ], "encoding/resources/encodings.js": [ [ {} ] ], + "encoding/resources/ranges.js": [ + [ + {} + ] + ], "encoding/resources/single-byte-raw.py": [ [ {} @@ -141208,11 +142137,6 @@ {} ] ], - "fullscreen/model/move-to-fullscreen-iframe-manual-expected.txt": [ - [ - {} - ] - ], "fullscreen/rendering/fullscreen-pseudo-class-manual-expected.txt": [ [ {} @@ -149463,6 +150387,11 @@ {} ] ], + "html/rendering/non-replaced-elements/tables/hidden-attr-expected.txt": [ + [ + {} + ] + ], "html/rendering/non-replaced-elements/tables/table-border-1-ref.html": [ [ {} @@ -196637,7 +197566,85 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?13001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html?9001-10000", { "timeout": "long" } @@ -196653,7 +197660,85 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?13001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html?9001-10000", { "timeout": "long" } @@ -196661,7 +197746,85 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?13001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html?9001-10000", { "timeout": "long" } @@ -196669,7 +197832,49 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html?7001-last", { "timeout": "long" } @@ -196677,7 +197882,133 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?21001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html?9001-10000", { "timeout": "long" } @@ -196685,7 +198016,73 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -196693,7 +198090,25 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html?3001-last", { "timeout": "long" } @@ -196701,7 +198116,49 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html?7001-last", { "timeout": "long" } @@ -196709,7 +198166,49 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html?7001-last", { "timeout": "long" } @@ -196717,7 +198216,133 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?10001-10000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?21001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html?9001-10000", { "timeout": "long" } @@ -196725,7 +198350,73 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?10001-10000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -196733,7 +198424,25 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html?3001-last", { "timeout": "long" } @@ -196741,7 +198450,49 @@ ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html": [ [ - "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html", + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html?7001-last", { "timeout": "long" } @@ -196749,7 +198500,49 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html?7001-last", { "timeout": "long" } @@ -196765,7 +198558,49 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html?7001-last", { "timeout": "long" } @@ -196773,7 +198608,49 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html?7001-last", { "timeout": "long" } @@ -196781,7 +198658,127 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?20001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html?9001-10000", { "timeout": "long" } @@ -196789,7 +198786,73 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -196797,7 +198860,25 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html?3001-last", { "timeout": "long" } @@ -196811,7 +198892,49 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html?7001-last", { "timeout": "long" } @@ -196819,7 +198942,127 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?20001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html?9001-10000", { "timeout": "long" } @@ -196827,7 +199070,73 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -196835,7 +199144,25 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html?3001-last", { "timeout": "long" } @@ -196843,7 +199170,49 @@ ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html": [ [ - "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html", + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html?7001-last", { "timeout": "long" } @@ -196851,7 +199220,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html?7001-last", { "timeout": "long" } @@ -196867,7 +199278,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html?7001-last", { "timeout": "long" } @@ -196875,7 +199328,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html?7001-last", { "timeout": "long" } @@ -196883,7 +199378,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html?7001-last", { "timeout": "long" } @@ -196891,7 +199428,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html?7001-last", { "timeout": "long" } @@ -196899,7 +199478,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html?7001-last", { "timeout": "long" } @@ -196907,7 +199528,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html?7001-last", { "timeout": "long" } @@ -196915,7 +199578,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html?7001-last", { "timeout": "long" } @@ -196923,7 +199628,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html?7001-last", { "timeout": "long" } @@ -196931,7 +199678,127 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?20001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html?9001-10000", { "timeout": "long" } @@ -196939,7 +199806,73 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -196947,7 +199880,25 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html?3001-last", { "timeout": "long" } @@ -196955,7 +199906,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html?7001-last", { "timeout": "long" } @@ -196963,7 +199956,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html?7001-last", { "timeout": "long" } @@ -196971,7 +200006,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html?7001-last", { "timeout": "long" } @@ -196979,7 +200056,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html?7001-last", { "timeout": "long" } @@ -196987,7 +200106,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html?7001-last", { "timeout": "long" } @@ -196995,7 +200156,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html?7001-last", { "timeout": "long" } @@ -197003,7 +200206,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?7001-last", { "timeout": "long" } @@ -197011,7 +200256,133 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?10001-10000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?21001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html?9001-10000", { "timeout": "long" } @@ -197019,7 +200390,73 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -197027,7 +200464,25 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html?3001-last", { "timeout": "long" } @@ -197035,7 +200490,49 @@ ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html": [ [ - "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html", + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html?7001-last", { "timeout": "long" } @@ -197043,7 +200540,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html?9001-10000", { "timeout": "long" } @@ -197051,7 +200650,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html?9001-10000", { "timeout": "long" } @@ -197131,7 +200832,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html?9001-10000", { "timeout": "long" } @@ -197139,7 +200942,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?9001-10000", { "timeout": "long" } @@ -197147,7 +201052,145 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?21001-22000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?22001-23000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?23001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html?9001-10000", { "timeout": "long" } @@ -197155,7 +201198,25 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html?3001-last", { "timeout": "long" } @@ -197163,7 +201224,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html?9001-10000", { "timeout": "long" } @@ -197171,7 +201334,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html?9001-10000", { "timeout": "long" } @@ -197179,7 +201444,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?9001-10000", { "timeout": "long" } @@ -197187,7 +201554,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html?9001-10000", { "timeout": "long" } @@ -197195,7 +201664,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html?9001-10000", { "timeout": "long" } @@ -197203,7 +201774,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html?9001-10000", { "timeout": "long" } @@ -197211,7 +201884,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html?9001-10000", { "timeout": "long" } @@ -197219,7 +201994,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html?9001-10000", { "timeout": "long" } @@ -197227,7 +202104,145 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?21001-22000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?22001-23000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?23001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html?9001-10000", { "timeout": "long" } @@ -197235,7 +202250,25 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html?3001-last", { "timeout": "long" } @@ -197243,7 +202276,109 @@ ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html": [ [ - "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html", + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?17001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html?9001-10000", { "timeout": "long" } @@ -197251,7 +202386,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html", + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?9001-10000", { "timeout": "long" } @@ -197259,7 +202478,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html", + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html?9001-10000", { "timeout": "long" } @@ -197267,7 +202570,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html", + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html?9001-10000", { "timeout": "long" } @@ -197315,7 +202702,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html?9001-10000", { "timeout": "long" } @@ -197323,7 +202794,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html?9001-10000", { "timeout": "long" } @@ -197331,7 +202886,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html?9001-10000", { "timeout": "long" } @@ -197339,7 +202978,133 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?21001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html?9001-10000", { "timeout": "long" } @@ -197347,7 +203112,133 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?21001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html?9001-10000", { "timeout": "long" } @@ -197355,7 +203246,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html?9001-10000", { "timeout": "long" } @@ -197363,7 +203338,73 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -197371,7 +203412,25 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html?3001-last", { "timeout": "long" } @@ -197379,7 +203438,43 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html?6001-last", { "timeout": "long" } @@ -197387,7 +203482,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html?9001-10000", { "timeout": "long" } @@ -197395,7 +203574,91 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-form.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?14001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-form.html?9001-10000", { "timeout": "long" } @@ -197403,7 +203666,145 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?10001-11000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?11001-12000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?12001-13000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?13001-14000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?14001-15000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?15001-16000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?16001-17000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?17001-18000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?18001-19000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?19001-20000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?20001-21000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?21001-22000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?22001-23000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?23001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html?9001-10000", { "timeout": "long" } @@ -197411,7 +203812,73 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?10001-10000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?11001-last", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?7001-8000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?8001-9000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html?9001-10000", { "timeout": "long" } @@ -197419,7 +203886,25 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html?3001-last", { "timeout": "long" } @@ -197427,7 +203912,49 @@ ], "encoding/legacy-mb-tchinese/big5/big5-encode-href.html": [ [ - "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html", + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?1-1000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?1001-2000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?2001-3000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?3001-4000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?4001-5000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?5001-6000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?6001-7000", + { + "timeout": "long" + } + ], + [ + "/encoding/legacy-mb-tchinese/big5/big5-encode-href.html?7001-last", { "timeout": "long" } @@ -197441,7 +203968,19 @@ ], "encoding/single-byte-decoder.html": [ [ - "/encoding/single-byte-decoder.html", + "/encoding/single-byte-decoder.html?TextDecoder", + { + "timeout": "long" + } + ], + [ + "/encoding/single-byte-decoder.html?XMLHttpRequest", + { + "timeout": "long" + } + ], + [ + "/encoding/single-byte-decoder.html?document", { "timeout": "long" } @@ -204019,6 +210558,12 @@ {} ] ], + "html/rendering/non-replaced-elements/tables/hidden-attr.html": [ + [ + "/html/rendering/non-replaced-elements/tables/hidden-attr.html", + {} + ] + ], "html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html": [ [ "/html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html", @@ -208337,6 +214882,12 @@ {} ] ], + "html/semantics/interactive-elements/the-dialog-element/dialog-showModal-remove.html": [ + [ + "/html/semantics/interactive-elements/the-dialog-element/dialog-showModal-remove.html", + {} + ] + ], "html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html": [ [ "/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html", @@ -234145,6 +240696,12 @@ {} ] ], + "resource-timing/resource_timing_buffer_full_eventually.html": [ + [ + "/resource-timing/resource_timing_buffer_full_eventually.html", + {} + ] + ], "resource-timing/resource_timing_buffer_full_when_populate_entries.html": [ [ "/resource-timing/resource_timing_buffer_full_when_populate_entries.html", @@ -284892,6 +291449,30 @@ "9d34bde07da1bcd1d8cb7e65cb35bafca7b6eef4", "reftest" ], + "css/css-contain/contain-paint-014.html": [ + "c22ee90cf05992dab4188cc86c255bd040babe26", + "reftest" + ], + "css/css-contain/contain-paint-015.html": [ + "3941644b7fffc11a2786e55dc28d6fcfe55c57dc", + "reftest" + ], + "css/css-contain/contain-paint-016.html": [ + "fbedca7cd40c2e5a6aea020de403d81ea334f2c1", + "reftest" + ], + "css/css-contain/contain-paint-017.html": [ + "40a82207bac0728925609faf19e0aa896f956009", + "reftest" + ], + "css/css-contain/contain-paint-018.html": [ + "74f65ae0e2f8c4ceb77c54fa8bf9b1d364f55c38", + "reftest" + ], + "css/css-contain/contain-paint-019.html": [ + "75b780b1b791b6c3c06cddbd9462103b88bbd603", + "reftest" + ], "css/css-contain/contain-size-001.html": [ "089c4fd7352f91a85d5d8f6bf8c5f261c868cd37", "reftest" @@ -285008,6 +291589,10 @@ "c3d8d642f2b4b25df84170669222b61866ab3057", "support" ], + "css/css-contain/reference/contain-paint-014-ref.html": [ + "1f281c10ae1bf7dd0f1c9119458b3698077a8e60", + "support" + ], "css/css-contain/reference/contain-size-001-ref.html": [ "6f68316c3e9647eb6f71d299bb1d43e286899a7d", "support" @@ -302888,6 +309473,10 @@ "a7cbad00762e590050f118a84ef5d6a6fbbb3db3", "reftest" ], + "css/css-shapes/shape-outside/shape-image/shape-image-027.html": [ + "14d6e34ac39967dcf29b3140c5745458f26ed59d", + "reftest" + ], "css/css-shapes/shape-outside/shape-image/support/animated.gif": [ "c5252926d8dbf82c06cdb615fda708ca7728f0bb", "support" @@ -335765,7 +342354,7 @@ "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html": [ - "aef28a54f483ec66edbd9b0ea500d25f3966c4cb", + "bf13e044c17b8789f91a276db5f5d4c999b580da", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html": [ @@ -335773,11 +342362,11 @@ "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html": [ - "8c76fc5373dbd2c62c1f15b97889cb43a4c2a6ef", + "8a30b25890d5a12aac42456f689fd875deda2c5b", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html": [ - "1d5e6367dd725c7d8863503e66b9750f469ab3ee", + "525a6ebf58e88289d0afffcfca2ef4124f4ead3c", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js": [ @@ -335785,7 +342374,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html": [ - "42ac7feefc19dc6ef09ff292bc8584dd376802a2", + "3c7c5a00b11e1ad9b5a02ece0aa047fcfe834359", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers": [ @@ -335793,7 +342382,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html": [ - "64fcbe6783d68372c9a03a1e732ad7acbfff925f", + "bcfbb57961356d1e31750ac359e9d3f7c0a88f53", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers": [ @@ -335801,7 +342390,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html": [ - "e7897095737650b30287cf4e618f5502d8bf86e2", + "23d5f4f9d39d7fa09ff318cabb5ec40bffdd052c", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers": [ @@ -335809,7 +342398,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html": [ - "f4245d39d4435d9c00b981d220677ff0e3579106", + "8f2cb89122e9c0f0e3ab3bf77d3b5bff37aa6134", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers": [ @@ -335817,7 +342406,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html": [ - "2b4e86fdf26006eefd3ac5093bda1d02258b0121", + "f162cd29b4d351891bb0bdb5b4146960d457d8b2", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers": [ @@ -335825,7 +342414,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html": [ - "18240913dc69be3419e51987315842b3168253c8", + "392b0f0499cec695478b661ca1507d457c30fce6", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers": [ @@ -335833,7 +342422,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html": [ - "3ff8533d6e7c59ea4a2fe98255e140b7b583ef2c", + "033c5ce0f5b992f81ccf4838da120ea097268548", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers": [ @@ -335841,7 +342430,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html": [ - "eeb61c360f85949479c970652c81532d27e38892", + "fc46574bdb29fdd33a850b5cfc15640e02587185", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers": [ @@ -335849,7 +342438,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html": [ - "6c1e0582aae5a1dc83ea286feebebe69c6e218e8", + "d29e9e9db1c7f578e440992655930d4cd5c8d7be", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers": [ @@ -335857,7 +342446,7 @@ "support" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html": [ - "d0e0236048f578b35a5956295d2a295660a2c297", + "9d5acd1a4f5e064e2202ddbad2a17ef4ab488c4f", "testharness" ], "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers": [ @@ -335909,7 +342498,7 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html": [ - "25764a359d3d95c75a7e3b2008e912c80ef69194", + "da92868efb96b1748a7e4f285020f0c804e4c400", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html": [ @@ -335917,7 +342506,7 @@ "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html": [ - "3982165d2f78d500d87fa9a4590da8cdc3c0ae9c", + "2cb6b373f63113b5624f71cb216ccf8bed37e7b5", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js": [ @@ -335929,15 +342518,47 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html": [ - "d3751457c76d5dacd10a7dad1f22ceb7837c68a2", + "621b1de6e75367b61d375e7dbc7bfe8c39e710bd", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers": [ "41346529f39267656c8061d183165a30998c8e47", "support" ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1-1000-expected.txt": [ + "54f27b32c03b60b73db504a95c49d7c15ae2882e", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1001-2000-expected.txt": [ + "181be206c5300bc5a7760efbe8ee7c032dd895dc", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_2001-3000-expected.txt": [ + "f93fd2f913b6cc3b45e0bb5ecc74f1f4166d7201", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_3001-4000-expected.txt": [ + "e7aeff06804235a8a7238127a5da1124536c3ee5", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_4001-5000-expected.txt": [ + "8cb8f8345af6682def76ce0c9711e8a5df846cd0", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_5001-6000-expected.txt": [ + "b838098a466eab2c34529976b934c200cde41fc3", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_6001-7000-expected.txt": [ + "6ebc8ae53cd160bfbfcb17bde30cb0ae158df79a", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_7001-last-expected.txt": [ + "14111557de42bd66de254e081085111f4d6c953d", + "support" + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html": [ - "d2cbf81979d2755352b9f007c40a6340b60e74d3", + "a22811fdbd126d98b234c2618919f65b426bfeec", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers": [ @@ -335945,7 +342566,7 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html": [ - "b6b1deba45ea2621747d292443758adfb075e27e", + "d938cb4fbbed96bfbb220f11877ca27ee03871b4", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers": [ @@ -335953,7 +342574,7 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html": [ - "4cb2e185dedbd21c3632b7a31e883580e71b366f", + "f9ad40795ffb35ee57725f047470f9f8b989af09", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers": [ @@ -335969,19 +342590,51 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html": [ - "89dd8a641b8eb05e47cc2d23dd452cdfc9f9dfc9", + "507fc186dc5c64e1e3c4293a88a1754ef90b9d00", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers": [ "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", "support" ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1-1000-expected.txt": [ + "19416930ade451943bae37ff85cd279f28098ee5", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1001-2000-expected.txt": [ + "433f5c4e9f6194eaf26d0b7c38b34c32d0104d3f", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_2001-3000-expected.txt": [ + "1c70af1e9f7d5f2064e2ce0cd9122b485c5154b3", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_3001-4000-expected.txt": [ + "d872327204338f5cc11feefabd25fa1c52ab4c89", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_4001-5000-expected.txt": [ + "e843e2f76190edbdd463c97b0b72c476c5f47e8b", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_5001-6000-expected.txt": [ + "dec214a9dccc45d15f8907e2facdc07dd4745b7a", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_6001-7000-expected.txt": [ + "2f5b03a420fdcb869ff9d04c0bbd0b71c677ed63", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_7001-last-expected.txt": [ + "c9a5e63c935802de8b881fad137fc803fd6dc9ec", + "support" + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii-expected.txt": [ "e3f0cf5f3125e6ca177c8fb3b1072263ade97cd1", "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html": [ - "cdc3fe8fc70539fc6415e2d3b43fda6f87d09262", + "c50d0ffb66e826113397c0af8ef20b7e9794a179", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers": [ @@ -335989,7 +342642,7 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html": [ - "19c4224bda8f399f090f3ea4d77c10a0f47513e8", + "85fe1bf7660307d50b86f4387c5a5046ca7aa299", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers": [ @@ -335997,7 +342650,7 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html": [ - "a99791f74775a996f49e4b60a369d5b81d289c0d", + "e6c2f034f4ab0e02fa5d04a5f9c5228508fa4403", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers": [ @@ -336009,13 +342662,45 @@ "support" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html": [ - "d823114d271354e58578547d0de3b570d9705282", + "0ef7ca4a1a35b65def6b7bbe79f34e5f6144be88", "testharness" ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers": [ "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", "support" ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1-1000-expected.txt": [ + "d368b6c54eab045898f6bca466446a370cc1789c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1001-2000-expected.txt": [ + "6e3d6d34451f061f4244a6138d0d9e35e82684c2", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_2001-3000-expected.txt": [ + "5c25bf7211e3d48623cc72fbbe8ed4d5ccf1187d", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_3001-4000-expected.txt": [ + "24e554a5104a00f28f22827057dfa7683e9caabb", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_4001-5000-expected.txt": [ + "564fe239b4f4ae4011ab41a52b75e49d55032073", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_5001-6000-expected.txt": [ + "2814844adf29d15f80995c03c012ab3a8fec0ec4", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_6001-7000-expected.txt": [ + "e030425116fb6e0029a700b4bcd91049388e770c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_7001-last-expected.txt": [ + "78f7966f50b962c07dab9fe67f0582681a55ff8d", + "support" + ], "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js": [ "77ee708cafbbe8c3bd13c4fa0eedb2e0ac8221ac", "support" @@ -336053,39 +342738,39 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html": [ - "d4d171de17f81f98cd240ff08257fcb33e1d2b54", + "bd6d995cc4f6d72956ce7119cb288946500f2c15", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html": [ - "f2c37c888dff50feebd5797adfe265e82ae2afde", + "ddc4b88916e3f3dc5f919789945b11e434dd76b2", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html": [ - "c866259244a4460f41869311e9ee194fb57045ca", + "f3de45d5173c529d05bb906e8191b30fe5dac66c", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html": [ - "b62ce57f3f53cc455507c64266f6b9e4e6ad25f8", + "30b69d7eec2d048b6a1acd440ca7515ee76327b5", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html": [ - "ce645b76538fb62b63e9a9cd71bdfc57293f71f9", + "48f45d5a25657754e42622e9f79d02e739d77258", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html": [ - "bdc93e4f8aa501cb1d144278cb30df9c8e1ee76b", + "63c2f9498942d7b13bc26ec421abd5e72c788ff2", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html": [ - "14db20c9e48a3ba187d86225af2173f509ffc69d", + "c9c5b8250cccc94cbc749ddacd18b7ffc6473442", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html": [ - "96d67ef3a09f579192b60469b1c6f0fcea709e83", + "03614895d1a2522a457144f087e351a424e92dcf", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode.html": [ - "aa249b101da22936c53da5a3ae535bdac2bcd8d9", + "abdbda4bc542db01ddbf7d4c9f66871d0058e649", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-decoder.js": [ @@ -336093,7 +342778,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html": [ - "22a6fef29cf831742bea680190d79a7ad9f7a344", + "f94b04e6ab996b9e5b0ebdd3f50bff13a04bd127", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html.headers": [ @@ -336101,7 +342786,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html": [ - "034b3f10660076f877d7e78699cd5103d8c955f7", + "6c166a30f84f442a3aeb803aa9861c406718baee", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html.headers": [ @@ -336109,7 +342794,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html": [ - "abe031cce4bec1c40f37fcff428b874ef3ef1f76", + "525bdeabe49b13f9b5bb5e2156ad66c8f3b230aa", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html.headers": [ @@ -336117,7 +342802,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html": [ - "dcba1f4b6755e55ed5dbfa3d2cff642324aa6c2a", + "51f0add5cd60a3c5a1fa0180bd179706c4854acd", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html.headers": [ @@ -336125,7 +342810,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html": [ - "81a3377b7bcef81ea1472c4751e8e8d4724a603b", + "353830975d0543c9b046fe464d5807f74024837b", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html.headers": [ @@ -336133,7 +342818,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html": [ - "e1e71336c2799dad56fef0e2d84f626ed7f86e5e", + "be457f064d92e48d7bda8a702f6cbb4a2da44a3b", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html.headers": [ @@ -336141,7 +342826,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html": [ - "edf365f82441e1e50f128be66dc11ccb71402e16", + "3d5d0c96a849e1703eb26e639a6aa3fe295550ae", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html.headers": [ @@ -336149,7 +342834,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html": [ - "2d537643263ef5731f5cfe91a9023173c9402b23", + "cef1e1c91b0ef8cab130956fcb11edf73c277871", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html.headers": [ @@ -336157,7 +342842,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html": [ - "9879e7651eae4894739cdf47d27e557cd986ecda", + "2a7f888b37dfc07cd8b8ea193a2007beaa5c6082", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html.headers": [ @@ -336165,7 +342850,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html": [ - "f435452102431058c9337d5bd1f7a133f9d0bb97", + "e156f06bc96da020bcf638d3687bdfad07f0c813", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html.headers": [ @@ -336173,7 +342858,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html": [ - "cfd117bfde470ed113357ebcb9d47a8f106c0ff0", + "3b4a6dac670f2524430c9a1536d47d2ae99ec84d", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html.headers": [ @@ -336181,7 +342866,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html": [ - "94990204891a673ed591a05bd4423b8d22a907ac", + "191b78f2db1a27fa19970985a330e77ed5e48578", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html.headers": [ @@ -336189,7 +342874,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html": [ - "e3ef37abf1fb9d6a39f391c4e5a4b376cad808c8", + "45a31e542d8ce2839199b9d5598c7661bc3c1086", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html.headers": [ @@ -336197,7 +342882,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html": [ - "a1cfb188c286c2f34d95fe2ca180dd577da1d7b5", + "229147d988fe811900fd70479e9fe24212722785", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html.headers": [ @@ -336205,7 +342890,7 @@ "support" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html": [ - "8aec6118dd060483017b49e802cfe3ad30cef367", + "6d44e049b4acc41e5522c0d66e8823079f0c456c", "testharness" ], "encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html.headers": [ @@ -336289,47 +342974,79 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html": [ - "9e729590a574c8e0a9f6e07d378197c2bafde0a2", + "a2d3709f65d703d9518ec577823fbd9919eea5fd", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html": [ - "d4a4a944fc1cf03a0780fcf4309e4061324c8098", + "612b024e2237c8a36506a1104665e7848d7a6ebd", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-errors.html": [ "1d562589a3752c4994002cdb441923fdc27bfe8e", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-expected.txt": [ + "514f1512bc9c6786865877360cb2a0aa2fc56af1", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149-expected.txt": [ + "4b57d60448218aa41eae80f7f387633d029f19af", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html": [ - "bf9d9edd88da4ddff223800fa6ae68852b73cb99", + "3268a3d47cb3dedc7a351f8801f56dd498cb8947", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-korean-expected.txt": [ + "0c24de44338d3037fe552332374eccc0a7657c71", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html": [ - "6ae51030974e7e607c6a3fea34eafbf10de62605", + "b90a6e57dc93ddc00b6fdc83c90c044c10d55e07", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987-expected.txt": [ + "9fbdb553ae66c78576996ac050639209a0f35cd9", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html": [ - "c8381944a21d5b44dc9a984068987a4030dd5319", + "a765380a8ac54c9e61e2d7b349faa14d0e99bd03", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989-expected.txt": [ + "cffa79e8d9b012045e4118c65278355a0386696f", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html": [ - "6eb5b0d291030e565210ae8546f14e641b8a187b", + "a5b6c6964b6a8db2b064b23c3b6bfce08ee89189", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601-expected.txt": [ + "270970a34c9a5aac6d078c935ae8265863c25cbc", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html": [ - "430d70a811f3469fdbf90159b6a78d2b2fdd93da", + "50f5d0981e0a76ee172e71bd6631bfa1c70a9f42", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601-expected.txt": [ + "736dbee66d64147883e2e42334b28a882320f8c7", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html": [ - "f9ea25a81d5268a20b7a9673496142fba7f14189", + "70d7606a3c067b5c3d1c6f718ffd797427b5e687", "testharness" ], + "encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949-expected.txt": [ + "20634e1c4e9e8ad3de5a4f221a4b408a3f156833", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html": [ - "8306399cd88ee735be247e8a3f102a03ff905ac6", + "fe47649bcc1adaa7ab5cdbc023f0d2f302ae58cd", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-decode.html": [ - "294baa8a7364504443d9ddbabeadfd8fda0e19f3", + "5d59a4333e4f15676035025cb8ead4b9f2484181", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-decoder.js": [ @@ -336337,7 +343054,7 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html": [ - "5530823dd5556d646b4a0f9090cf402e847c4827", + "f0eabf16eb6d56d4c6a98df6cacf5c69b6f33a7e", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html.headers": [ @@ -336345,27 +343062,95 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html": [ - "569abb7b5211b3c404a8c5b73781fa576c471770", + "ec39f68af9894ab6b633d57ac58060ae1ee49d77", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html.headers": [ "1d83197942d969528458a09998b6070331d8ff1e", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1-1000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_10001-11000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1001-2000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_11001-12000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_12001-13000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_13001-14000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_14001-15000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_15001-16000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_16001-17000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_17001-last-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_2001-3000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_3001-4000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_4001-5000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_5001-6000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_6001-7000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_7001-8000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_8001-9000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_9001-10000-expected.txt": [ + "267023c438d1b64080bb19301e5f3b8761a8a922", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html": [ - "f9710ba55e4f6781f14f7b292c767cf87fc40090", + "369a386e8983d3c15e3cd7ac6ff8ba10b28cfa5e", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html.headers": [ "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", "support" ], - "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers": [ - "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", - "support" - ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html": [ - "936dedf12d56abe3083061a68b6be806a8cb8503", + "9aba79ce67863933b57323f7f6df3f3ce09b492d", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html.headers": [ @@ -336373,39 +343158,327 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html": [ - "5a480ddabd671ab24b9fbc6485ae1bb543787ddb", + "152db8284caf186d03bfca5396a72fe6a1715449", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html.headers": [ "eb4e384383eea636c6ee36c42bdd83851560d6d6", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1-1000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_10001-11000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1001-2000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_11001-12000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_12001-13000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_13001-14000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_14001-15000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_15001-16000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_16001-17000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_17001-last-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_2001-3000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_3001-4000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_4001-5000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_5001-6000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_6001-7000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_7001-8000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_8001-9000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_9001-10000-expected.txt": [ + "579d151669c975e6e1a4fd360e182d3a23fa31e4", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html": [ - "3a161c00a862191e63b03672edd165a4b2488bf4", + "0dc06f5158ee41f26e801c2a584bd207118d8fbc", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html.headers": [ "e1eb3537b5c5b184d8baafefd026097a7042fa9b", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1-1000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_10001-11000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1001-2000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_11001-12000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_12001-13000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_13001-14000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_14001-15000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_15001-16000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_16001-17000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_17001-last-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_2001-3000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_3001-4000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_4001-5000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_5001-6000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_6001-7000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_7001-8000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_8001-9000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_9001-10000-expected.txt": [ + "d7d537e3eeace1d8255fd09a75ec7ac48a40bf79", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html": [ - "196a6bf5cb61ae5743f676ca18c59b5c559926ec", + "3cb58cf45311173bd63449dd264ebc8e77e7461f", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html.headers": [ "0f38fd98a428e4825237334f670d6068d95b9a4b", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1-1000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_10001-11000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1001-2000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_11001-12000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_12001-13000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_13001-14000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_14001-15000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_15001-16000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_16001-17000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_17001-last-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_2001-3000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_3001-4000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_4001-5000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_5001-6000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_6001-7000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_7001-8000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_8001-9000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_9001-10000-expected.txt": [ + "5b2514ca63b3f8bbcfdcd7a244e08cd770b7ce70", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html": [ - "b7d941acafd598b06b2898108815f5a3c849b7e2", + "4fbe2e412e07a5cc24876287f0ab57dbf83b9aa6", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html.headers": [ "83ea110e65d38a7bad96a31aa2368ab5079aed1e", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1-1000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_10001-11000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1001-2000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_11001-12000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_12001-13000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_13001-14000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_14001-15000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_15001-16000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_16001-17000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_17001-last-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_2001-3000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_3001-4000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_4001-5000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_5001-6000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_6001-7000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_7001-8000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_8001-9000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_9001-10000-expected.txt": [ + "fa1a8850555d1132ef358ae5c310fd7d0dc95307", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html": [ - "c67014bd3da49c1d87c830af119c5b3c3e8deb65", + "8ee3ad26f51776368b5f86f4302b654523d8c5bc", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html.headers": [ @@ -336413,15 +343486,87 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html": [ - "b1fb4fcb8ea4ef38ef88df5229e3d315790a8110", + "29531cacec50549c48d974b7cbbb1b70da4be633", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html.headers": [ "18669624f116dfa99e04c0f24a70bc0db44f8b26", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1-1000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_10001-11000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1001-2000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_11001-12000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_12001-13000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_13001-14000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_14001-15000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_15001-16000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_16001-17000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_17001-last-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_2001-3000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_3001-4000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_4001-5000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_5001-6000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_6001-7000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_7001-8000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_8001-9000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_9001-10000-expected.txt": [ + "e98f9bcb48328db722bfd0bbb2bf01d58bca1c10", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html": [ - "7ce4b142ff073509b76b4f473dd1bff1211ce8c8", + "9b6d8d4ad8412aef0c1ee1300ff14f8730865200", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html.headers": [ @@ -336429,7 +343574,7 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html": [ - "934c25bf57b7a57390d38cc2f21230b16e142241", + "e3d95055e6f362332fd1d4513f470695c25e530a", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html.headers": [ @@ -336437,7 +343582,7 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html": [ - "e855d30690f5aed7043442f233cbb77fc209bca0", + "01d7933e6995c9afbeba289b0e2219d636b8cc7f", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html.headers": [ @@ -336445,7 +343590,7 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html": [ - "f4caa1544f2291f394f58a4835f1fb5962baac14", + "450bf6c9b7250a7d42c8708169836c8aed2aedd4", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html.headers": [ @@ -336453,13 +343598,85 @@ "support" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html": [ - "20b152603cbca961959653c8c042ea004f58334f", + "447babc2cfcbc5fc54662313b173d143e975b46c", "testharness" ], "encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html.headers": [ "c79f9150befa2f7ce67d17069da7fb66f7f22ca0", "support" ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1-1000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_10001-11000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1001-2000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_11001-12000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_12001-13000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_13001-14000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_14001-15000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_15001-16000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_16001-17000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_17001-last-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_2001-3000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_3001-4000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_4001-5000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_5001-6000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_6001-7000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_7001-8000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_8001-9000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], + "encoding/legacy-mb-korean/euc-kr/euckr-encode-href_9001-10000-expected.txt": [ + "d9d0381284f18e689f544a1254bfc48d01d682c7", + "support" + ], "encoding/legacy-mb-korean/euc-kr/euckr-encoder.js": [ "00d536de97386456dd1455bc3b8ea8328ba68c52", "support" @@ -336557,31 +343774,43 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html": [ - "1e41252d834091a1f2069eb83ceb04c1ae502aed", + "91e0b0cb5f782cb1bd195660d17c66d78a137cb4", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html": [ - "61bff3fa165736f77d1f09b0d3087acaa66f2fa9", + "ae14165428b3673d2cd527cff137259957ea7086", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html": [ - "bb60208f1d75de351e057310415db81869f39be6", + "4002f3e151202fcbb53c3a6f29e6a36551e61a45", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-decode-errors.html": [ "a559253dfdd5671a231d17d5abcc6b7fd0cb0bbf", "testharness" ], + "encoding/legacy-mb-tchinese/big5/big5-decode-expected.txt": [ + "7f2d764fa619efd4fa1095792fce06c05a438647", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-decode-extra-expected.txt": [ + "ce3a3be223bb30e03ab88b6be71cf8d35946df91", + "support" + ], "encoding/legacy-mb-tchinese/big5/big5-decode-extra.html": [ - "2f8917690621f23c8844bf7a1f93713e878f6841", + "a4583386ccad9d8d7b660c0d244d0168376755e9", "testharness" ], + "encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5-expected.txt": [ + "08af450f69fadfdff19affa74c356a6447c0c962", + "support" + ], "encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html": [ - "3e0cba9f9ca8692767e535a5f4328edec151d3fb", + "3d15d5795e6c21a33ac8f98a25c5b6f8b871d2f7", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-decode.html": [ - "a1d709dad31f27e9c3a5c958a3f666bf79c6fe9f", + "2837ce392411f8b9fbc7c4a4fbade9f4f0054806", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-decoder.js": [ @@ -336597,7 +343826,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html": [ - "e9ab06a4999556053f53e5c9ee951d47411b0d2b", + "4a41623b8368b6c4c5fcc52dcc390a3eee9485e4", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html.headers": [ @@ -336605,7 +343834,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html": [ - "136bc3abafdfe069b32ddfae85056bbaffd0d7ca", + "c514b499b57d3bcf662dd2b954f4fe5256a72d8a", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html.headers": [ @@ -336613,7 +343842,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html": [ - "ed5c833f250f1713193b56371298c73b4b412d50", + "9c3eca4c97f67b7ff880416a0a225c185adb75c8", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html.headers": [ @@ -336621,7 +343850,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html": [ - "7201211915cb8ae3ac0b7f5656c295f3c08b3089", + "af131ebf35d5750b332fd4e5c9399c03dc3d0a20", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html.headers": [ @@ -336629,7 +343858,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html": [ - "3eb05f9627d84506e9d730b9e26021403963d0f9", + "fe3afde373c382f9146b5fa0a78a89fccb6c0958", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html.headers": [ @@ -336637,7 +343866,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html": [ - "d4e49734b115c0bf3f0ab2ddc7a3de4556866e9c", + "211d59bef871f43bb979550d69c91e70dae79272", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html.headers": [ @@ -336645,7 +343874,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html": [ - "b24f67557b5e6ef966484b4c0b6b1c90a69b24ee", + "abbb5eb1a72e74e2b17806ce88bc53020b8b9047", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html.headers": [ @@ -336653,7 +343882,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html": [ - "f4ce13cd0e392452ce160d0b688315ef039e2e56", + "a3f87cfd6a2b9b3f25ca57526c3e1a511f499c09", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html.headers": [ @@ -336661,11 +343890,11 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html": [ - "4e83b4a9d2695780b0ad87ac8519f36b83778ee6", + "a99abd3f7f02c3b47ffe1138aa59946a7bf80af6", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html": [ - "6014d5a50918d4d16389df0c7a07f71bd78babeb", + "460dc28c00c2d39d04f36c7f49951ed2337489b5", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html.headers": [ @@ -336673,7 +343902,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form.html": [ - "3d272e5b51ca3bcd8bb34807024df71807da3c05", + "44d2bb9c0707c78e0e8fd07d0a8dea7694972af4", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-form.html.headers": [ @@ -336681,7 +343910,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html": [ - "90cbc57fb49501ff276c2198235f0d5c2d5561eb", + "cd684a384fa563ba8bad826bdb77878e71198590", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html.headers": [ @@ -336689,7 +343918,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html": [ - "2ec76262a6bc1a789999fd51b394a66a878bc6bf", + "cfa27f2ec91d0f38416a12f9581eb09e3169f91b", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html.headers": [ @@ -336697,15 +343926,31 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html": [ - "ba76ce0d3d04f97074c712ce6b11a7d6b523fb33", + "f55a2bfb2bc00720126b19e7aace7869b2e0e5c5", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html.headers": [ "17edf8b3f37188f85a7c4af654dd93026ac96825", "support" ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1-1000-expected.txt": [ + "42f3f335a0e5e5f7ce1ff3d03d3280ae7fdbaa6a", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1001-2000-expected.txt": [ + "42f3f335a0e5e5f7ce1ff3d03d3280ae7fdbaa6a", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_2001-3000-expected.txt": [ + "42f3f335a0e5e5f7ce1ff3d03d3280ae7fdbaa6a", + "support" + ], + "encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_3001-last-expected.txt": [ + "42f3f335a0e5e5f7ce1ff3d03d3280ae7fdbaa6a", + "support" + ], "encoding/legacy-mb-tchinese/big5/big5-encode-href.html": [ - "6df38fd56a6eee0b2a8fbe84dc62258fef405ea9", + "7470f06a2c26f807162834dec74e848b7bd1a004", "testharness" ], "encoding/legacy-mb-tchinese/big5/big5-encode-href.html.headers": [ @@ -336780,14 +344025,30 @@ "10ebae214ee7307c8087206a318ce8b5765ed8e9", "testharness" ], + "encoding/resources/decode-common.js": [ + "36c584cd9a1d53ad082cb7333e9a58b4b98bc764", + "support" + ], "encoding/resources/decoding-helpers.js": [ "e8e58f30dff991e6aa6a20553081a1754bf02300", "support" ], + "encoding/resources/encode-form-common.js": [ + "41e0388191f050af6c52ee0269c994b843dca5ea", + "support" + ], + "encoding/resources/encode-href-common.js": [ + "c3caa03d8bbbe33d586f28b8ebbeecbe565bb919", + "support" + ], "encoding/resources/encodings.js": [ "66626403db30a2778878a187df339b0bfd767495", "support" ], + "encoding/resources/ranges.js": [ + "2e09b999f7839eee5286dff052791dfd6a92cbef", + "support" + ], "encoding/resources/single-byte-raw.py": [ "a5e5464b00944713d7e90d3e5f9313ef2924b375", "support" @@ -336829,7 +344090,7 @@ "support" ], "encoding/single-byte-decoder.html": [ - "2f64550e5e845fa2de949577f0756a021bede269", + "60eb39cc7d5115ee50611e81bbd332228ef4e03b", "testharness" ], "encoding/textdecoder-byte-order-marks.html": [ @@ -340157,7 +347418,7 @@ "manual" ], "fullscreen/api/document-exit-fullscreen-twice-manual.html": [ - "c6e9696b4cfdef6a7042ccbe9beaddf8c56d8031", + "d017b67adff16d1dad2195763bbe88e741ee47ad", "manual" ], "fullscreen/api/document-fullscreen-element-manual.html": [ @@ -340348,40 +347609,36 @@ "f6f0dbc8a505896a0e7ec7aca2746bbd5c1eb7d9", "testharness" ], - "fullscreen/model/move-to-fullscreen-iframe-manual-expected.txt": [ - "037a68b636df39dabb086b9e9d3f48aaed4f6013", - "support" - ], "fullscreen/model/move-to-fullscreen-iframe-manual.html": [ "62aec7e1d5065bf99a00fc533c8c6d6704ac2010", "manual" ], "fullscreen/model/move-to-iframe-manual.html": [ - "818cb1b5db729db4959591dc75d4bb1ae3c7542d", + "7d591d11ce4a399156ed7cae7ddbee93aa8cb883", "manual" ], "fullscreen/model/move-to-inactive-document-manual.html": [ - "552d65141acc2221e8407316c02e0d4cf17db7eb", + "e3f8160bd2457bfb2797f85aed082f865ae6ad78", "manual" ], "fullscreen/model/remove-child-manual.html": [ - "b1142930c6c972057213bd477cf116fcc9e7fc2a", + "0b19b1bbb6040b4ca6280bba0f742680856c5b9a", "manual" ], "fullscreen/model/remove-first-manual.html": [ - "3de98ae96822370fa80c1b8d61df254910a63ff9", + "b694dcf40492ec67239f19152779794acde3fe4a", "manual" ], "fullscreen/model/remove-last-manual.html": [ - "8caa21a892edeaba9996a7f2bf1c670385e0a91b", + "5c425c386688bf38a8b26ba25c43923e128db88e", "manual" ], "fullscreen/model/remove-parent-manual.html": [ - "e5791db04ab5e2b75a00c922457fcc8ba87c7ce7", + "c0f0103c9e4491ef04b016f7bbacd8564ea5493d", "manual" ], "fullscreen/model/remove-single-manual.html": [ - "c7fc8323d503adb6d7f0c390a8add90c5c9e8082", + "64bf88ae3a1a3708dfe823d85f67636ae5b0d736", "manual" ], "fullscreen/rendering/fullscreen-pseudo-class-manual-expected.txt": [ @@ -350496,6 +357753,14 @@ "610932708cb18b8022ca64b8c9f3f59d8cf1ae56", "testharness" ], + "html/rendering/non-replaced-elements/tables/hidden-attr-expected.txt": [ + "141308c21776aead4a1f808f3a6b42bfbeb24bf5", + "support" + ], + "html/rendering/non-replaced-elements/tables/hidden-attr.html": [ + "dd0173850f4593c883b24f28a750462bf0bae0e5", + "testharness" + ], "html/rendering/non-replaced-elements/tables/table-border-1-ref.html": [ "1f3aa494ba434211a8cdcd1be289e702856fa05a", "support" @@ -355960,6 +363225,10 @@ "2de9fc78a570af675094cbb1781b1b03e4e3dd45", "support" ], + "html/semantics/interactive-elements/the-dialog-element/dialog-showModal-remove.html": [ + "86aef9d34903bf33c036cd8eabb4078b98cbe4d9", + "testharness" + ], "html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html": [ "c00ac5b6d038b45b1a7cfbef94a4527757fa74e6", "testharness" @@ -380344,6 +387613,10 @@ "ccf716aec242f3ec6d3754e4dd43456954d45d3c", "testharness" ], + "resource-timing/resource_timing_buffer_full_eventually.html": [ + "5c0a85e6e61a11fca1682b30b6b68f317f9c343e", + "testharness" + ], "resource-timing/resource_timing_buffer_full_when_populate_entries.html": [ "af0727706a4160a49aabe131b2f3a4bbca8268e0", "testharness" @@ -390413,7 +397686,7 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "92d80863e0a51bf3c1b5bd9b67825100de37cfc1", + "5d84148e02da8cce6599e50060ceb7813d9e07f4", "support" ], "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-function-failure.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-function-failure.https.html new file mode 100644 index 0000000..394f68c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-function-failure.https.html
@@ -0,0 +1,63 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that a function can't be passed to a child layout." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(parent)) { + .test { + display: layout(parent); + background: green; + } + + .child { + display: layout(child); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +registerLayout('parent', class { + *intrinsicSizes() {} + *layout() {} + *layout([child], edges, constraints, styleMap) { + let childFragment = null; + + try { + childFragment = yield child.layoutNextFragment({ + data: { fn: function() {} } + }); + } catch(e) { + // Success! The structured cloning algorithm should have thrown an error. + childFragment = yield child.layoutNextFragment({}); + return {autoBlockSize: 100, childFragments: [childFragment]}; + } + + return {autoBlockSize: 0, childFragments: [childFragment]}; + } +}); + +registerLayout('child', class { + *intrinsicSizes() {} + *layout() {} + *layout() { + return {autoBlockSize: 0}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html new file mode 100644 index 0000000..eb652d9a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html
@@ -0,0 +1,68 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that a SharedArrayBuffer can't be passed to a child layout." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(parent)) { + .test { + display: layout(parent); + background: green; + } + + .child { + display: layout(child); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +registerLayout('parent', class { + *intrinsicSizes() {} + *layout() {} + *layout([child], edges, constraints, styleMap) { + let childFragment = null; + + try { + // We need SABs to be enabled to properly run this test. + if (typeof SharedArrayBuffer !== 'undefined') { + childFragment = yield child.layoutNextFragment({ + data: { sab: new SharedArrayBuffer(4) } + }); + } else { + throw Error(); + } + } catch(e) { + // Success! The structured cloning algorithm should have thrown an error. + childFragment = yield child.layoutNextFragment({}); + return {autoBlockSize: 100, childFragments: [childFragment]}; + } + + return {autoBlockSize: 0, childFragments: [childFragment]}; + } +}); + +registerLayout('child', class { + *intrinsicSizes() {} + *layout() {} + *layout() { + return {autoBlockSize: 0}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data.https.html new file mode 100644 index 0000000..b7b6964 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-data.https.html
@@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that passing data to a child layout works correctly." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(parent)) { + .test { + display: layout(parent); + background: green; + } + + .child { + display: layout(child); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +const DATA = { + str: 'hello', + num: 42, + obj: {str2: 'world'}, +}; + +registerLayout('parent', class { + *intrinsicSizes() {} + *layout() {} + *layout([child], edges, constraints, styleMap) { + + const childFragment = yield child.layoutNextFragment({data: DATA}); + + // If the child's block-size is 100 the structured cloning worked. + if (childFragment.blockSize === 100) { + return {autoBlockSize: 100, childFragments: [childFragment]}; + } + + return {autoBlockSize: 0, childFragments: [childFragment]}; + } +}); + +registerLayout('child', class { + *intrinsicSizes() {} + *layout() {} + *layout(children, edges, constraints, styleMap) { + // Use JSON.stringify to make sure the structured cloning worked. + if (constraints.data !== DATA && + JSON.stringify(constraints.data) === JSON.stringify(DATA)) { + return {autoBlockSize: 100}; + } + + return {autoBlockSize: 0}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-function-failure.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-function-failure.https.html new file mode 100644 index 0000000..5e21be0b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-function-failure.https.html
@@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutfragment-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that passing something that can't be serialized to the parent triggers a fallback to block layout." /> +<style> +.test { + background: red; + width: 100px; +} + +.child { + height: 100px; +} + +@supports (display: layout(fallback-fn)) { + .test { + display: layout(fallback-fn); + background: green; + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +registerLayout('fallback-fn', class { + *intrinsicSizes() {} + *layout() {} + *layout(children, edges, constraints, styleMap) { + const childFragments = yield children.map(child => child.layoutNextFragment()); + return {autoBlockSize: 0, childFragments, data: {fn: function() {}}}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-immutable.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-immutable.https.html new file mode 100644 index 0000000..cc1875b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-immutable.https.html
@@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutfragment-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that LayoutFragment#data is immutable between child layout passes." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(parent)) { + .test { + display: layout(parent); + background: green; + } + + .child { + display: layout(child); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +registerLayout('parent', class { + *intrinsicSizes() {} + *layout() {} + *layout([child], edges, constraints, styleMap) { + + const childFragment10 = yield child.layoutNextFragment({fixedInlineSize: 10}); + + // First layout data should be "10". + if (childFragment10.data.size !== 10) { + return {autoBlockSize: 0, childFragments: [childFragment10]}; + } + + const childFragment20 = yield child.layoutNextFragment({fixedInlineSize: 20}); + + // Second layout data should be "20". + if (childFragment20.data.size !== 20) { + return {autoBlockSize: 0, childFragments: [childFragment10]}; + } + + // First layout data should still be "10". + if (childFragment10.data.size !== 10) { + return {autoBlockSize: 0, childFragments: [childFragment10]}; + } + + return {autoBlockSize: 100, childFragments: [childFragment20]}; + } +}); + +registerLayout('child', class { + *intrinsicSizes() {} + *layout() {} + *layout(children, edges, constraints, styleMap) { + return {autoBlockSize: 10, data: {size: constraints.fixedInlineSize}}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html new file mode 100644 index 0000000..59a9f83 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutfragment-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that a SharedArrayBuffer can't be passed to the parent layout." /> +<style> +.test { + background: red; + width: 100px; +} + +.child { + height: 100px; +} + +@supports (display: layout(fallback-sab)) { + .test { + display: layout(fallback-sab); + background: green; + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +registerLayout('fallback-sab', class { + *intrinsicSizes() {} + *layout() {} + *layout(children, edges, constraints, styleMap) { + const childFragments = yield children.map(child => child.layoutNextFragment()); + + if (typeof SharedArrayBuffer !== 'undefined') { + return {autoBlockSize: 0, childFragments, data: {sab: new SharedArrayBuffer(4) }}; + } else { + throw Error(); + } + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data.https.html new file mode 100644 index 0000000..589ee9c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/fragment-data.https.html
@@ -0,0 +1,66 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutfragment-data"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that passing data to a parent layout works correctly." /> +<style> +.test { + background: red; + width: 100px; +} + +@supports (display: layout(parent)) { + .test { + display: layout(parent); + background: green; + } + + .child { + display: layout(child); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="test"> + <div class="child"></div> +</div> + +<script id="code" type="text/worklet"> +const DATA = { + str: 'hello', + num: 42, + obj: {str2: 'world'}, +}; + +registerLayout('parent', class { + *intrinsicSizes() {} + *layout() {} + *layout([child], edges, constraints, styleMap) { + + const childFragment = yield child.layoutNextFragment(); + + // Use JSON.stringify to make sure the structured cloning worked. + if (childFragment.data !== DATA && + JSON.stringify(childFragment.data) === JSON.stringify(DATA)) { + return {autoBlockSize: 100, childFragments: [childFragment]}; + } + + return {autoBlockSize: 0, childFragments: [childFragment]}; + } +}); + +registerLayout('child', class { + *intrinsicSizes() {} + *layout() {} + *layout(children, edges, constraints, styleMap) { + return {autoBlockSize: 10, data: DATA}; + } +}); +</script> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById('code').textContent); +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/green-square-ref.html similarity index 88% rename from third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-ref.html rename to third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/green-square-ref.html index 641dda1..a28e43b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-ref.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/green-square-ref.html
@@ -2,7 +2,6 @@ <style> .result { background: green; - margin: 10px; height: 100px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-absolute.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-absolute.https.html index 73c0bf78..26513f4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-absolute.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-absolute.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that absolute children don't appear in the children array." /> <style> @@ -9,7 +9,6 @@ --child-expected: ["2"]; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-before-after.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-before-after.https.html index 87d1219..4923f26c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-before-after.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-before-after.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that boxes created by ::before/::after appear as children." /> <style> @@ -9,7 +9,6 @@ --child-expected: ["1", "2", "3"]; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-fixed.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-fixed.https.html index 9de556e..264fc638 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-fixed.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-fixed.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that fixed children don't appear in the children array." /> <style> @@ -9,7 +9,6 @@ --child-expected: ["2"]; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-float.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-float.https.html index 0465b18..6e40893e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-float.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-float.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that float children appear in the children array." /> <style> @@ -9,7 +9,6 @@ --child-expected: ["1", "2"]; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inflow.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inflow.https.html index 7c5aa29..11f2b88a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inflow.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inflow.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that regular inflow children appear as children." /> <style> @@ -9,7 +9,6 @@ --child-expected: ["1", "2"]; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inlines.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inlines.https.html index e1d65ab..811af3f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inlines.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-inlines.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that inline children are correctly blockified or wrapped in anonymous boxes." /> <style> @@ -11,7 +11,6 @@ .wrapper { background: green; padding: 0 10px; - margin: 10px; width: 80px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-text.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-text.https.html index 0757f5d..40513f0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-text.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/layout-child-text.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#layout-children"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that text children are correctly blockified." /> <style> @@ -11,7 +11,6 @@ .wrapper { background: green; padding: 0 10px; - margin: 10px; width: 80px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-htb.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-htb.https.html index e14541b..bfe8a99 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-htb.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-htb.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-availableinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that setting the available inline size of children works as expected." /> <style> .test { writing-mode: horizontal-tb; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-vrl.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-vrl.https.html index 1b45998..602536c5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-vrl.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-htb-vrl.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-availableinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that setting the available inline size of children works as expected." /> <style> .test { writing-mode: horizontal-tb; background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-htb.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-htb.https.html index 63590c92..4759c1b6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-htb.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-htb.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-availableinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that setting the available inline size of children works as expected." /> <style> .test { writing-mode: vertical-rl; background: red; - margin: 10px; height: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-vrl.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-vrl.https.html index 815f5254..7bfa44d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-vrl.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-available-inline-size-vrl-vrl.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-availableinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that setting the available inline size of children works as expected." /> <style> .test { writing-mode: vertical-rl; background: red; - margin: 10px; height: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size-vrl.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size-vrl.https.html index cc44484..43dd483 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size-vrl.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size-vrl.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-fixedinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that fixing the block size of children works as expected." /> <style> .test { writing-mode: vertical-rl; background: red; - margin: 10px; height: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size.https.html index add1a3d..c714e1f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-block-size.https.html
@@ -1,13 +1,12 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-fixedblocksize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that fixing the block size of children works as expected." /> <style> .test { background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size-vrl.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size-vrl.https.html index 42e9c56..ba86d2c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size-vrl.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size-vrl.https.html
@@ -1,14 +1,13 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-fixedinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that fixing the inline size of children works as expected." /> <style> .test { writing-mode: vertical-rl; background: red; - margin: 10px; height: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size.https.html index 188e586..a2a422bd6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/perform-child-layout-fixed-inline-size.https.html
@@ -1,13 +1,12 @@ <!DOCTYPE html> <html class=reftest-wait> <link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraintsoptions-fixedinlinesize"> -<link rel="match" href="layout-child-ref.html"> +<link rel="match" href="green-square-ref.html"> <meta name="assert" content="This test checks that fixing the inline size of children works as expected." /> <style> .test { background: red; - margin: 10px; width: 100px; }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-shapes/shape-outside/shape-image/shape-image-027.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-shapes/shape-outside/shape-image/shape-image-027.html new file mode 100644 index 0000000..2c232ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-shapes/shape-outside/shape-image/shape-image-027.html
@@ -0,0 +1,69 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Test: left float, url(png), real negative offset image + shape-margin (px)</title> + <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> + <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> + <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> + <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"/> + <link rel="match" href="reference/shape-image-006-ref.html"/> + <meta name="flags" content="ahem"/> + <meta name="assert" content="This test verifies that content wraps around all the image pixels + + the shape-margin when shape-outside is given a png file. + Additionally, the shape-outside: image element is given a negative + left offset relative to its containing block."/> + <style type="text/css"> + body { + margin: 0; + } + .container { + left: 10px; + font: 50px/1 Ahem; + } + #test { + width: 200px; + color: rgb(0,100,0); + } + #image { + float: left; + shape-outside: url("support/left-half-rectangle.png"); + shape-margin: 20px; + margin-left: -10px; + width: 100px; + height: 100px; + } + .blue { + width: 2px; + height: 100px; + background-color: blue; + } + .left-line { left: 65px; } + .right-line { left: 125px; } + + .failure { + left: 70px; + width: 50px; + height: 100px; + background-color: red; + z-index: -1; + } + .container, .blue, .failure { + position: absolute; + top: 70px; + } + </style> +</head> +<body> + <p> + The test passes if the green rectangle on the right is completely between the two blue lines. + There should be no red. + </p> + <div id="test" class="container"> + <div id="image"><img src="support/left-half-rectangle.png" style="margin-left: 10px"/></div> + X<br/>X + </div> + <div class="blue left-line"></div> + <div class="blue right-line"></div> + <div class="failure"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html index 5d0e4cb..8448bf4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html
@@ -4,8 +4,23 @@ <meta charset="utf-8"/> <title>cseucpkdfmtjapanese decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'cseucpkdfmtjapanese' as for a document labeled 'euc-jp'."> @@ -15,51 +30,15 @@ <script src="jis0208_index.js"></script> <script src="jis0212_index.js"></script> <script src="eucjp-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(eucjpDecoder);"> <iframe src="eucjp_chars-cseucpkdfmtjapanese.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - eucjpDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals( - nodes[i].textContent, - eucjpDecoder(nodes[i].dataset.bytes) - ); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html index 6b99117e7..b66bb2d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html
@@ -4,8 +4,23 @@ <meta charset="utf-8"/> <title>x-euc-jp decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'x-euc-jp' as for a document labeled 'euc-jp'."> @@ -15,51 +30,15 @@ <script src="jis0208_index.js"></script> <script src="jis0212_index.js"></script> <script src="eucjp-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(eucjpDecoder);"> <iframe src="eucjp_chars-x-euc-jp.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - eucjpDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals( - nodes[i].textContent, - eucjpDecoder(nodes[i].dataset.bytes) - ); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html index ed05e31..0889856 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html
@@ -4,8 +4,23 @@ <meta charset="utf-8"/> <title>EUC-JP decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser decodes all characters as expected from a file generated by encoding all pointers in the euc-jp encoding per the encoder steps in the specification."> @@ -15,51 +30,15 @@ <script src="jis0208_index.js"></script> <script src="jis0212_index.js"></script> <script src="eucjp-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(eucjpDecoder);"> <iframe src="eucjp_chars.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - eucjpDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals( - nodes[i].textContent, - eucjpDecoder(nodes[i].dataset.bytes) - ); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html index f64f0ed..83a674b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html
@@ -4,8 +4,17 @@ <meta charset="cseucpkdfmtjapanese"><!-- test breaks if the server overrides this --> <title>cseucpkdfmtjapanese encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "cseucpkdfmtjapanese"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = eucjpEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html index f79178a..0d7585c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html
@@ -4,8 +4,31 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (form, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,167 +41,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x4e00; i < 0x9fba; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } - } - - for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0xfa70; i < 0xfada; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html index 0f9ecff2..8c70e8f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html
@@ -4,8 +4,21 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (form, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,132 +31,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0xac00; i < 0xd7af; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesHangul; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html index 54da3eb..c80193c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html
@@ -4,8 +4,13 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (form, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,176 +23,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (var i = 0x80; i < 0x4ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } - } - - for (i = 0x2000; i < 0x23ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } - } - - for (i = 0x2460; i < 0x26ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } - } - - for (i = 0x3000; i < 0x33ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } - } - - for (i = 0xff00; i < 0xffef; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesMisc; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html index 37ec8f8..30c376cc 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html
@@ -4,8 +4,17 @@ <meta charset="x-euc-jp"><!-- test breaks if the server overrides this --> <title>x-euc-jp encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "x-euc-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = eucjpEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html index 297ed84..cd6bcdc 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html
@@ -4,8 +4,17 @@ <meta charset="euc-jp"><!-- test breaks if the server overrides this --> <title>EUC-JP encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = eucjpEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html index c0519e8..5883c006 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html
@@ -4,97 +4,56 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (href, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-10000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the euc-jp encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0x4e00; i < 0x9fba; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } -} - -for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0xfa70; i < 0xfada; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesHan; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html index 29c9f223..695aad88 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html
@@ -4,62 +4,46 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (href, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-10000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding hangul characters that are not in the euc-jp encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0xac00; i < 0xd7af; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesHangul; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html index 1456b945..ba884f32 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html
@@ -4,106 +4,38 @@ <meta charset="euc-jp"> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding errors (href, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the euc-jp encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (var i = 0x80; i < 0x4ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } -} - -for (i = 0x2000; i < 0x23ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } -} - -for (i = 0x2460; i < 0x26ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } -} - -for (i = 0x3000; i < 0x33ff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } -} - -for (i = 0xff00; i < 0xffef; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesMisc; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html index 05b6c2c09..9d60eda 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html
@@ -4,59 +4,38 @@ <meta charset=euc-jp> <!-- test breaks if the server overrides this --> <title>EUC-JP encoding (href)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="eucjp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp"> <meta name="assert" content="The browser produces the expected byte sequences for all characters in the euc-jp encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(normalizeStr(result), normalizeStr(expected)); - }, desc); -} - -// create a simple list of just those code points for which there is an encoding possible -codepoints = []; -for (var i = 0x80; i < 0xffff; i++) { - result = eucjpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - "U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = false; +var encoder = eucjpEncoder; +var ranges = rangesAll; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html index 73d8a2f..d9dc2f09 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>csiso2022jp decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'csiso2022jp' as for a document labeled 'iso-2022-jp'."> @@ -14,50 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="iso2022jp-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(iso2022jpDecoder);"> <iframe src="iso2022jp_chars-csiso2022jp.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - iso2022jpDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals( - nodes[i].textContent, - iso2022jpDecoder(nodes[i].dataset.bytes) - ); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html index 192e25e3..4434e54 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>ISO 2022-JP decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser decodes all characters as expected from a file generated by encoding all pointers in the iso-2022-jp encoding per the encoder steps in the specification."> @@ -14,50 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="iso2022jp-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(iso2022jpDecoder);"> <iframe src="iso2022jp_chars.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - iso2022jpDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals( - nodes[i].textContent, - iso2022jpDecoder(nodes[i].dataset.bytes) - ); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html index 213791af..cd8d41b5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html
@@ -4,8 +4,17 @@ <meta charset="csiso2022jp"> <!-- test breaks if the server overrides this --> <title>csiso2022jp encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,19 +27,19 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = "\u0019"; -var encodedSeperator = encodeURIComponent("\u0019"); -var currentChunkIndex = 0; +var errors = false; +var separator = "\u0019"; +var ranges = rangesAll; + +function expect(result, codepoint) { + return result; +} + +function encoder(str) { + return getByteSequence(str.codePointAt(0)); +} function getByteSequence(cp) { // uses the Encoding spec algorithm to derive a sequence of bytes for a character that can be encoded @@ -121,118 +130,7 @@ indexcodepoints[jis0208[p]] = p; } } - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = getByteSequence(i); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = result; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - normalizeStr(item.expected) - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "csiso2022jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; -} </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1-1000-expected.txt new file mode 100644 index 0000000..6c759d98 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1-1000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 961 PASS, 39 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+A5 ¥ %1B%28%4A%5C%1B%28%42 +PASS U+A7 § %1B%24%42%21%78%1B%28%42 +PASS U+A8 ¨ %1B%24%42%21%2F%1B%28%42 +PASS U+B0 ° %1B%24%42%21%6B%1B%28%42 +PASS U+B1 ± %1B%24%42%21%5E%1B%28%42 +PASS U+B4 ´ %1B%24%42%21%2D%1B%28%42 +PASS U+B6 ¶ %1B%24%42%22%79%1B%28%42 +PASS U+D7 × %1B%24%42%21%5F%1B%28%42 +PASS U+F7 ÷ %1B%24%42%21%60%1B%28%42 +PASS U+391 Α %1B%24%42%26%21%1B%28%42 +PASS U+392 Β %1B%24%42%26%22%1B%28%42 +PASS U+393 Γ %1B%24%42%26%23%1B%28%42 +PASS U+394 Δ %1B%24%42%26%24%1B%28%42 +PASS U+395 Ε %1B%24%42%26%25%1B%28%42 +PASS U+396 Ζ %1B%24%42%26%26%1B%28%42 +PASS U+397 Η %1B%24%42%26%27%1B%28%42 +PASS U+398 Θ %1B%24%42%26%28%1B%28%42 +PASS U+399 Ι %1B%24%42%26%29%1B%28%42 +PASS U+39A Κ %1B%24%42%26%2A%1B%28%42 +PASS U+39B Λ %1B%24%42%26%2B%1B%28%42 +PASS U+39C Μ %1B%24%42%26%2C%1B%28%42 +PASS U+39D Ν %1B%24%42%26%2D%1B%28%42 +PASS U+39E Ξ %1B%24%42%26%2E%1B%28%42 +PASS U+39F Ο %1B%24%42%26%2F%1B%28%42 +PASS U+3A0 Π %1B%24%42%26%30%1B%28%42 +PASS U+3A1 Ρ %1B%24%42%26%31%1B%28%42 +PASS U+3A3 Σ %1B%24%42%26%32%1B%28%42 +PASS U+3A4 Τ %1B%24%42%26%33%1B%28%42 +PASS U+3A5 Υ %1B%24%42%26%34%1B%28%42 +PASS U+3A6 Φ %1B%24%42%26%35%1B%28%42 +PASS U+3A7 Χ %1B%24%42%26%36%1B%28%42 +PASS U+3A8 Ψ %1B%24%42%26%37%1B%28%42 +PASS U+3A9 Ω %1B%24%42%26%38%1B%28%42 +PASS U+3B1 α %1B%24%42%26%41%1B%28%42 +PASS U+3B2 β %1B%24%42%26%42%1B%28%42 +PASS U+3B3 γ %1B%24%42%26%43%1B%28%42 +PASS U+3B4 δ %1B%24%42%26%44%1B%28%42 +PASS U+3B5 ε %1B%24%42%26%45%1B%28%42 +PASS U+3B6 ζ %1B%24%42%26%46%1B%28%42 +PASS U+3B7 η %1B%24%42%26%47%1B%28%42 +PASS U+3B8 θ %1B%24%42%26%48%1B%28%42 +PASS U+3B9 ι %1B%24%42%26%49%1B%28%42 +PASS U+3BA κ %1B%24%42%26%4A%1B%28%42 +PASS U+3BB λ %1B%24%42%26%4B%1B%28%42 +PASS U+3BC μ %1B%24%42%26%4C%1B%28%42 +PASS U+3BD ν %1B%24%42%26%4D%1B%28%42 +PASS U+3BE ξ %1B%24%42%26%4E%1B%28%42 +PASS U+3BF ο %1B%24%42%26%4F%1B%28%42 +PASS U+3C0 π %1B%24%42%26%50%1B%28%42 +PASS U+3C1 ρ %1B%24%42%26%51%1B%28%42 +PASS U+3C3 σ %1B%24%42%26%52%1B%28%42 +PASS U+3C4 τ %1B%24%42%26%53%1B%28%42 +PASS U+3C5 υ %1B%24%42%26%54%1B%28%42 +PASS U+3C6 φ %1B%24%42%26%55%1B%28%42 +PASS U+3C7 χ %1B%24%42%26%56%1B%28%42 +PASS U+3C8 ψ %1B%24%42%26%57%1B%28%42 +PASS U+3C9 ω %1B%24%42%26%58%1B%28%42 +PASS U+401 Ё %1B%24%42%27%27%1B%28%42 +PASS U+410 А %1B%24%42%27%21%1B%28%42 +PASS U+411 Б %1B%24%42%27%22%1B%28%42 +PASS U+412 В %1B%24%42%27%23%1B%28%42 +PASS U+413 Г %1B%24%42%27%24%1B%28%42 +PASS U+414 Д %1B%24%42%27%25%1B%28%42 +PASS U+415 Е %1B%24%42%27%26%1B%28%42 +PASS U+416 Ж %1B%24%42%27%28%1B%28%42 +PASS U+417 З %1B%24%42%27%29%1B%28%42 +PASS U+418 И %1B%24%42%27%2A%1B%28%42 +PASS U+419 Й %1B%24%42%27%2B%1B%28%42 +PASS U+41A К %1B%24%42%27%2C%1B%28%42 +PASS U+41B Л %1B%24%42%27%2D%1B%28%42 +PASS U+41C М %1B%24%42%27%2E%1B%28%42 +PASS U+41D Н %1B%24%42%27%2F%1B%28%42 +PASS U+41E О %1B%24%42%27%30%1B%28%42 +PASS U+41F П %1B%24%42%27%31%1B%28%42 +PASS U+420 Р %1B%24%42%27%32%1B%28%42 +PASS U+421 С %1B%24%42%27%33%1B%28%42 +PASS U+422 Т %1B%24%42%27%34%1B%28%42 +PASS U+423 У %1B%24%42%27%35%1B%28%42 +PASS U+424 Ф %1B%24%42%27%36%1B%28%42 +PASS U+425 Х %1B%24%42%27%37%1B%28%42 +PASS U+426 Ц %1B%24%42%27%38%1B%28%42 +PASS U+427 Ч %1B%24%42%27%39%1B%28%42 +PASS U+428 Ш %1B%24%42%27%3A%1B%28%42 +PASS U+429 Щ %1B%24%42%27%3B%1B%28%42 +PASS U+42A Ъ %1B%24%42%27%3C%1B%28%42 +PASS U+42B Ы %1B%24%42%27%3D%1B%28%42 +PASS U+42C Ь %1B%24%42%27%3E%1B%28%42 +PASS U+42D Э %1B%24%42%27%3F%1B%28%42 +PASS U+42E Ю %1B%24%42%27%40%1B%28%42 +PASS U+42F Я %1B%24%42%27%41%1B%28%42 +PASS U+430 а %1B%24%42%27%51%1B%28%42 +PASS U+431 б %1B%24%42%27%52%1B%28%42 +PASS U+432 в %1B%24%42%27%53%1B%28%42 +PASS U+433 г %1B%24%42%27%54%1B%28%42 +PASS U+434 д %1B%24%42%27%55%1B%28%42 +PASS U+435 е %1B%24%42%27%56%1B%28%42 +PASS U+436 ж %1B%24%42%27%58%1B%28%42 +PASS U+437 з %1B%24%42%27%59%1B%28%42 +PASS U+438 и %1B%24%42%27%5A%1B%28%42 +PASS U+439 й %1B%24%42%27%5B%1B%28%42 +PASS U+43A к %1B%24%42%27%5C%1B%28%42 +PASS U+43B л %1B%24%42%27%5D%1B%28%42 +PASS U+43C м %1B%24%42%27%5E%1B%28%42 +PASS U+43D н %1B%24%42%27%5F%1B%28%42 +PASS U+43E о %1B%24%42%27%60%1B%28%42 +PASS U+43F п %1B%24%42%27%61%1B%28%42 +PASS U+440 р %1B%24%42%27%62%1B%28%42 +PASS U+441 с %1B%24%42%27%63%1B%28%42 +PASS U+442 т %1B%24%42%27%64%1B%28%42 +PASS U+443 у %1B%24%42%27%65%1B%28%42 +PASS U+444 ф %1B%24%42%27%66%1B%28%42 +PASS U+445 х %1B%24%42%27%67%1B%28%42 +PASS U+446 ц %1B%24%42%27%68%1B%28%42 +PASS U+447 ч %1B%24%42%27%69%1B%28%42 +PASS U+448 ш %1B%24%42%27%6A%1B%28%42 +PASS U+449 щ %1B%24%42%27%6B%1B%28%42 +PASS U+44A ъ %1B%24%42%27%6C%1B%28%42 +PASS U+44B ы %1B%24%42%27%6D%1B%28%42 +PASS U+44C ь %1B%24%42%27%6E%1B%28%42 +PASS U+44D э %1B%24%42%27%6F%1B%28%42 +PASS U+44E ю %1B%24%42%27%70%1B%28%42 +PASS U+44F я %1B%24%42%27%71%1B%28%42 +PASS U+451 ё %1B%24%42%27%57%1B%28%42 +PASS U+2010 ‐ %1B%24%42%21%3E%1B%28%42 +PASS U+2015 ― %1B%24%42%21%3D%1B%28%42 +PASS U+2018 ‘ %1B%24%42%21%46%1B%28%42 +PASS U+2019 ’ %1B%24%42%21%47%1B%28%42 +PASS U+201C “ %1B%24%42%21%48%1B%28%42 +PASS U+201D ” %1B%24%42%21%49%1B%28%42 +PASS U+2020 † %1B%24%42%22%77%1B%28%42 +PASS U+2021 ‡ %1B%24%42%22%78%1B%28%42 +PASS U+2025 ‥ %1B%24%42%21%45%1B%28%42 +PASS U+2026 … %1B%24%42%21%44%1B%28%42 +PASS U+2030 ‰ %1B%24%42%22%73%1B%28%42 +PASS U+2032 ′ %1B%24%42%21%6C%1B%28%42 +PASS U+2033 ″ %1B%24%42%21%6D%1B%28%42 +PASS U+203B ※ %1B%24%42%22%28%1B%28%42 +PASS U+203E ‾ %1B%28%4A%7E%1B%28%42 +PASS U+2103 ℃ %1B%24%42%21%6E%1B%28%42 +PASS U+2116 № %1B%24%42%2D%62%1B%28%42 +PASS U+2121 ℡ %1B%24%42%2D%64%1B%28%42 +PASS U+212B Å %1B%24%42%22%72%1B%28%42 +PASS U+2160 Ⅰ %1B%24%42%2D%35%1B%28%42 +PASS U+2161 Ⅱ %1B%24%42%2D%36%1B%28%42 +PASS U+2162 Ⅲ %1B%24%42%2D%37%1B%28%42 +PASS U+2163 Ⅳ %1B%24%42%2D%38%1B%28%42 +PASS U+2164 Ⅴ %1B%24%42%2D%39%1B%28%42 +PASS U+2165 Ⅵ %1B%24%42%2D%3A%1B%28%42 +PASS U+2166 Ⅶ %1B%24%42%2D%3B%1B%28%42 +PASS U+2167 Ⅷ %1B%24%42%2D%3C%1B%28%42 +PASS U+2168 Ⅸ %1B%24%42%2D%3D%1B%28%42 +PASS U+2169 Ⅹ %1B%24%42%2D%3E%1B%28%42 +FAIL U+2170 ⅰ %1B%24%42%7C%71%1B%28%42 assert_equals: expected "%1B%24%42%7C%71" but got "%26%23%38%35%36%30%3B" +FAIL U+2171 ⅱ %1B%24%42%7C%72%1B%28%42 assert_equals: expected "%1B%24%42%7C%72" but got "%26%23%38%35%36%31%3B" +FAIL U+2172 ⅲ %1B%24%42%7C%73%1B%28%42 assert_equals: expected "%1B%24%42%7C%73" but got "%26%23%38%35%36%32%3B" +FAIL U+2173 ⅳ %1B%24%42%7C%74%1B%28%42 assert_equals: expected "%1B%24%42%7C%74" but got "%26%23%38%35%36%33%3B" +FAIL U+2174 ⅴ %1B%24%42%7C%75%1B%28%42 assert_equals: expected "%1B%24%42%7C%75" but got "%26%23%38%35%36%34%3B" +FAIL U+2175 ⅵ %1B%24%42%7C%76%1B%28%42 assert_equals: expected "%1B%24%42%7C%76" but got "%26%23%38%35%36%35%3B" +FAIL U+2176 ⅶ %1B%24%42%7C%77%1B%28%42 assert_equals: expected "%1B%24%42%7C%77" but got "%26%23%38%35%36%36%3B" +FAIL U+2177 ⅷ %1B%24%42%7C%78%1B%28%42 assert_equals: expected "%1B%24%42%7C%78" but got "%26%23%38%35%36%37%3B" +FAIL U+2178 ⅸ %1B%24%42%7C%79%1B%28%42 assert_equals: expected "%1B%24%42%7C%79" but got "%26%23%38%35%36%38%3B" +FAIL U+2179 ⅹ %1B%24%42%7C%7A%1B%28%42 assert_equals: expected "%1B%24%42%7C%7A" but got "%26%23%38%35%36%39%3B" +PASS U+2190 ← %1B%24%42%22%2B%1B%28%42 +PASS U+2191 ↑ %1B%24%42%22%2C%1B%28%42 +PASS U+2192 → %1B%24%42%22%2A%1B%28%42 +PASS U+2193 ↓ %1B%24%42%22%2D%1B%28%42 +PASS U+21D2 ⇒ %1B%24%42%22%4D%1B%28%42 +PASS U+21D4 ⇔ %1B%24%42%22%4E%1B%28%42 +PASS U+2200 ∀ %1B%24%42%22%4F%1B%28%42 +PASS U+2202 ∂ %1B%24%42%22%5F%1B%28%42 +PASS U+2203 ∃ %1B%24%42%22%50%1B%28%42 +PASS U+2207 ∇ %1B%24%42%22%60%1B%28%42 +PASS U+2208 ∈ %1B%24%42%22%3A%1B%28%42 +PASS U+220B ∋ %1B%24%42%22%3B%1B%28%42 +PASS U+2211 ∑ %1B%24%42%2D%74%1B%28%42 +PASS U+2212 − %1B%24%42%21%5D%1B%28%42 +PASS U+221A √ %1B%24%42%22%65%1B%28%42 +PASS U+221D ∝ %1B%24%42%22%67%1B%28%42 +PASS U+221E ∞ %1B%24%42%21%67%1B%28%42 +PASS U+221F ∟ %1B%24%42%2D%78%1B%28%42 +PASS U+2220 ∠ %1B%24%42%22%5C%1B%28%42 +PASS U+2225 ∥ %1B%24%42%21%42%1B%28%42 +PASS U+2227 ∧ %1B%24%42%22%4A%1B%28%42 +PASS U+2228 ∨ %1B%24%42%22%4B%1B%28%42 +PASS U+2229 ∩ %1B%24%42%22%41%1B%28%42 +PASS U+222A ∪ %1B%24%42%22%40%1B%28%42 +PASS U+222B ∫ %1B%24%42%22%69%1B%28%42 +PASS U+222C ∬ %1B%24%42%22%6A%1B%28%42 +PASS U+222E ∮ %1B%24%42%2D%73%1B%28%42 +PASS U+2234 ∴ %1B%24%42%21%68%1B%28%42 +PASS U+2235 ∵ %1B%24%42%22%68%1B%28%42 +PASS U+223D ∽ %1B%24%42%22%66%1B%28%42 +PASS U+2252 ≒ %1B%24%42%22%62%1B%28%42 +PASS U+2260 ≠ %1B%24%42%21%62%1B%28%42 +PASS U+2261 ≡ %1B%24%42%22%61%1B%28%42 +PASS U+2266 ≦ %1B%24%42%21%65%1B%28%42 +PASS U+2267 ≧ %1B%24%42%21%66%1B%28%42 +PASS U+226A ≪ %1B%24%42%22%63%1B%28%42 +PASS U+226B ≫ %1B%24%42%22%64%1B%28%42 +PASS U+2282 ⊂ %1B%24%42%22%3E%1B%28%42 +PASS U+2283 ⊃ %1B%24%42%22%3F%1B%28%42 +PASS U+2286 ⊆ %1B%24%42%22%3C%1B%28%42 +PASS U+2287 ⊇ %1B%24%42%22%3D%1B%28%42 +PASS U+22A5 ⊥ %1B%24%42%22%5D%1B%28%42 +PASS U+22BF ⊿ %1B%24%42%2D%79%1B%28%42 +PASS U+2312 ⌒ %1B%24%42%22%5E%1B%28%42 +PASS U+2460 ① %1B%24%42%2D%21%1B%28%42 +PASS U+2461 ② %1B%24%42%2D%22%1B%28%42 +PASS U+2462 ③ %1B%24%42%2D%23%1B%28%42 +PASS U+2463 ④ %1B%24%42%2D%24%1B%28%42 +PASS U+2464 ⑤ %1B%24%42%2D%25%1B%28%42 +PASS U+2465 ⑥ %1B%24%42%2D%26%1B%28%42 +PASS U+2466 ⑦ %1B%24%42%2D%27%1B%28%42 +PASS U+2467 ⑧ %1B%24%42%2D%28%1B%28%42 +PASS U+2468 ⑨ %1B%24%42%2D%29%1B%28%42 +PASS U+2469 ⑩ %1B%24%42%2D%2A%1B%28%42 +PASS U+246A ⑪ %1B%24%42%2D%2B%1B%28%42 +PASS U+246B ⑫ %1B%24%42%2D%2C%1B%28%42 +PASS U+246C ⑬ %1B%24%42%2D%2D%1B%28%42 +PASS U+246D ⑭ %1B%24%42%2D%2E%1B%28%42 +PASS U+246E ⑮ %1B%24%42%2D%2F%1B%28%42 +PASS U+246F ⑯ %1B%24%42%2D%30%1B%28%42 +PASS U+2470 ⑰ %1B%24%42%2D%31%1B%28%42 +PASS U+2471 ⑱ %1B%24%42%2D%32%1B%28%42 +PASS U+2472 ⑲ %1B%24%42%2D%33%1B%28%42 +PASS U+2473 ⑳ %1B%24%42%2D%34%1B%28%42 +PASS U+2500 ─ %1B%24%42%28%21%1B%28%42 +PASS U+2501 ━ %1B%24%42%28%2C%1B%28%42 +PASS U+2502 │ %1B%24%42%28%22%1B%28%42 +PASS U+2503 ┃ %1B%24%42%28%2D%1B%28%42 +PASS U+250C ┌ %1B%24%42%28%23%1B%28%42 +PASS U+250F ┏ %1B%24%42%28%2E%1B%28%42 +PASS U+2510 ┐ %1B%24%42%28%24%1B%28%42 +PASS U+2513 ┓ %1B%24%42%28%2F%1B%28%42 +PASS U+2514 └ %1B%24%42%28%26%1B%28%42 +PASS U+2517 ┗ %1B%24%42%28%31%1B%28%42 +PASS U+2518 ┘ %1B%24%42%28%25%1B%28%42 +PASS U+251B ┛ %1B%24%42%28%30%1B%28%42 +PASS U+251C ├ %1B%24%42%28%27%1B%28%42 +PASS U+251D ┝ %1B%24%42%28%3C%1B%28%42 +PASS U+2520 ┠ %1B%24%42%28%37%1B%28%42 +PASS U+2523 ┣ %1B%24%42%28%32%1B%28%42 +PASS U+2524 ┤ %1B%24%42%28%29%1B%28%42 +PASS U+2525 ┥ %1B%24%42%28%3E%1B%28%42 +PASS U+2528 ┨ %1B%24%42%28%39%1B%28%42 +PASS U+252B ┫ %1B%24%42%28%34%1B%28%42 +PASS U+252C ┬ %1B%24%42%28%28%1B%28%42 +PASS U+252F ┯ %1B%24%42%28%38%1B%28%42 +PASS U+2530 ┰ %1B%24%42%28%3D%1B%28%42 +PASS U+2533 ┳ %1B%24%42%28%33%1B%28%42 +PASS U+2534 ┴ %1B%24%42%28%2A%1B%28%42 +PASS U+2537 ┷ %1B%24%42%28%3A%1B%28%42 +PASS U+2538 ┸ %1B%24%42%28%3F%1B%28%42 +PASS U+253B ┻ %1B%24%42%28%35%1B%28%42 +PASS U+253C ┼ %1B%24%42%28%2B%1B%28%42 +PASS U+253F ┿ %1B%24%42%28%3B%1B%28%42 +PASS U+2542 ╂ %1B%24%42%28%40%1B%28%42 +PASS U+254B ╋ %1B%24%42%28%36%1B%28%42 +PASS U+25A0 ■ %1B%24%42%22%23%1B%28%42 +PASS U+25A1 □ %1B%24%42%22%22%1B%28%42 +PASS U+25B2 ▲ %1B%24%42%22%25%1B%28%42 +PASS U+25B3 △ %1B%24%42%22%24%1B%28%42 +PASS U+25BC ▼ %1B%24%42%22%27%1B%28%42 +PASS U+25BD ▽ %1B%24%42%22%26%1B%28%42 +PASS U+25C6 ◆ %1B%24%42%22%21%1B%28%42 +PASS U+25C7 ◇ %1B%24%42%21%7E%1B%28%42 +PASS U+25CB ○ %1B%24%42%21%7B%1B%28%42 +PASS U+25CE ◎ %1B%24%42%21%7D%1B%28%42 +PASS U+25CF ● %1B%24%42%21%7C%1B%28%42 +PASS U+25EF ◯ %1B%24%42%22%7E%1B%28%42 +PASS U+2605 ★ %1B%24%42%21%7A%1B%28%42 +PASS U+2606 ☆ %1B%24%42%21%79%1B%28%42 +PASS U+2640 ♀ %1B%24%42%21%6A%1B%28%42 +PASS U+2642 ♂ %1B%24%42%21%69%1B%28%42 +PASS U+266A ♪ %1B%24%42%22%76%1B%28%42 +PASS U+266D ♭ %1B%24%42%22%75%1B%28%42 +PASS U+266F ♯ %1B%24%42%22%74%1B%28%42 +PASS U+3000 %1B%24%42%21%21%1B%28%42 +PASS U+3001 、 %1B%24%42%21%22%1B%28%42 +PASS U+3002 。 %1B%24%42%21%23%1B%28%42 +PASS U+3003 〃 %1B%24%42%21%37%1B%28%42 +PASS U+3005 々 %1B%24%42%21%39%1B%28%42 +PASS U+3006 〆 %1B%24%42%21%3A%1B%28%42 +PASS U+3007 〇 %1B%24%42%21%3B%1B%28%42 +PASS U+3008 〈 %1B%24%42%21%52%1B%28%42 +PASS U+3009 〉 %1B%24%42%21%53%1B%28%42 +PASS U+300A 《 %1B%24%42%21%54%1B%28%42 +PASS U+300B 》 %1B%24%42%21%55%1B%28%42 +PASS U+300C 「 %1B%24%42%21%56%1B%28%42 +PASS U+300D 」 %1B%24%42%21%57%1B%28%42 +PASS U+300E 『 %1B%24%42%21%58%1B%28%42 +PASS U+300F 』 %1B%24%42%21%59%1B%28%42 +PASS U+3010 【 %1B%24%42%21%5A%1B%28%42 +PASS U+3011 】 %1B%24%42%21%5B%1B%28%42 +PASS U+3012 〒 %1B%24%42%22%29%1B%28%42 +PASS U+3013 〓 %1B%24%42%22%2E%1B%28%42 +PASS U+3014 〔 %1B%24%42%21%4C%1B%28%42 +PASS U+3015 〕 %1B%24%42%21%4D%1B%28%42 +PASS U+301D 〝 %1B%24%42%2D%60%1B%28%42 +PASS U+301F 〟 %1B%24%42%2D%61%1B%28%42 +PASS U+3041 ぁ %1B%24%42%24%21%1B%28%42 +PASS U+3042 あ %1B%24%42%24%22%1B%28%42 +PASS U+3043 ぃ %1B%24%42%24%23%1B%28%42 +PASS U+3044 い %1B%24%42%24%24%1B%28%42 +PASS U+3045 ぅ %1B%24%42%24%25%1B%28%42 +PASS U+3046 う %1B%24%42%24%26%1B%28%42 +PASS U+3047 ぇ %1B%24%42%24%27%1B%28%42 +PASS U+3048 え %1B%24%42%24%28%1B%28%42 +PASS U+3049 ぉ %1B%24%42%24%29%1B%28%42 +PASS U+304A お %1B%24%42%24%2A%1B%28%42 +PASS U+304B か %1B%24%42%24%2B%1B%28%42 +PASS U+304C が %1B%24%42%24%2C%1B%28%42 +PASS U+304D き %1B%24%42%24%2D%1B%28%42 +PASS U+304E ぎ %1B%24%42%24%2E%1B%28%42 +PASS U+304F く %1B%24%42%24%2F%1B%28%42 +PASS U+3050 ぐ %1B%24%42%24%30%1B%28%42 +PASS U+3051 け %1B%24%42%24%31%1B%28%42 +PASS U+3052 げ %1B%24%42%24%32%1B%28%42 +PASS U+3053 こ %1B%24%42%24%33%1B%28%42 +PASS U+3054 ご %1B%24%42%24%34%1B%28%42 +PASS U+3055 さ %1B%24%42%24%35%1B%28%42 +PASS U+3056 ざ %1B%24%42%24%36%1B%28%42 +PASS U+3057 し %1B%24%42%24%37%1B%28%42 +PASS U+3058 じ %1B%24%42%24%38%1B%28%42 +PASS U+3059 す %1B%24%42%24%39%1B%28%42 +PASS U+305A ず %1B%24%42%24%3A%1B%28%42 +PASS U+305B せ %1B%24%42%24%3B%1B%28%42 +PASS U+305C ぜ %1B%24%42%24%3C%1B%28%42 +PASS U+305D そ %1B%24%42%24%3D%1B%28%42 +PASS U+305E ぞ %1B%24%42%24%3E%1B%28%42 +PASS U+305F た %1B%24%42%24%3F%1B%28%42 +PASS U+3060 だ %1B%24%42%24%40%1B%28%42 +PASS U+3061 ち %1B%24%42%24%41%1B%28%42 +PASS U+3062 ぢ %1B%24%42%24%42%1B%28%42 +PASS U+3063 っ %1B%24%42%24%43%1B%28%42 +PASS U+3064 つ %1B%24%42%24%44%1B%28%42 +PASS U+3065 づ %1B%24%42%24%45%1B%28%42 +PASS U+3066 て %1B%24%42%24%46%1B%28%42 +PASS U+3067 で %1B%24%42%24%47%1B%28%42 +PASS U+3068 と %1B%24%42%24%48%1B%28%42 +PASS U+3069 ど %1B%24%42%24%49%1B%28%42 +PASS U+306A な %1B%24%42%24%4A%1B%28%42 +PASS U+306B に %1B%24%42%24%4B%1B%28%42 +PASS U+306C ぬ %1B%24%42%24%4C%1B%28%42 +PASS U+306D ね %1B%24%42%24%4D%1B%28%42 +PASS U+306E の %1B%24%42%24%4E%1B%28%42 +PASS U+306F は %1B%24%42%24%4F%1B%28%42 +PASS U+3070 ば %1B%24%42%24%50%1B%28%42 +PASS U+3071 ぱ %1B%24%42%24%51%1B%28%42 +PASS U+3072 ひ %1B%24%42%24%52%1B%28%42 +PASS U+3073 び %1B%24%42%24%53%1B%28%42 +PASS U+3074 ぴ %1B%24%42%24%54%1B%28%42 +PASS U+3075 ふ %1B%24%42%24%55%1B%28%42 +PASS U+3076 ぶ %1B%24%42%24%56%1B%28%42 +PASS U+3077 ぷ %1B%24%42%24%57%1B%28%42 +PASS U+3078 へ %1B%24%42%24%58%1B%28%42 +PASS U+3079 べ %1B%24%42%24%59%1B%28%42 +PASS U+307A ぺ %1B%24%42%24%5A%1B%28%42 +PASS U+307B ほ %1B%24%42%24%5B%1B%28%42 +PASS U+307C ぼ %1B%24%42%24%5C%1B%28%42 +PASS U+307D ぽ %1B%24%42%24%5D%1B%28%42 +PASS U+307E ま %1B%24%42%24%5E%1B%28%42 +PASS U+307F み %1B%24%42%24%5F%1B%28%42 +PASS U+3080 む %1B%24%42%24%60%1B%28%42 +PASS U+3081 め %1B%24%42%24%61%1B%28%42 +PASS U+3082 も %1B%24%42%24%62%1B%28%42 +PASS U+3083 ゃ %1B%24%42%24%63%1B%28%42 +PASS U+3084 や %1B%24%42%24%64%1B%28%42 +PASS U+3085 ゅ %1B%24%42%24%65%1B%28%42 +PASS U+3086 ゆ %1B%24%42%24%66%1B%28%42 +PASS U+3087 ょ %1B%24%42%24%67%1B%28%42 +PASS U+3088 よ %1B%24%42%24%68%1B%28%42 +PASS U+3089 ら %1B%24%42%24%69%1B%28%42 +PASS U+308A り %1B%24%42%24%6A%1B%28%42 +PASS U+308B る %1B%24%42%24%6B%1B%28%42 +PASS U+308C れ %1B%24%42%24%6C%1B%28%42 +PASS U+308D ろ %1B%24%42%24%6D%1B%28%42 +PASS U+308E ゎ %1B%24%42%24%6E%1B%28%42 +PASS U+308F わ %1B%24%42%24%6F%1B%28%42 +PASS U+3090 ゐ %1B%24%42%24%70%1B%28%42 +PASS U+3091 ゑ %1B%24%42%24%71%1B%28%42 +PASS U+3092 を %1B%24%42%24%72%1B%28%42 +PASS U+3093 ん %1B%24%42%24%73%1B%28%42 +PASS U+309B ゛ %1B%24%42%21%2B%1B%28%42 +PASS U+309C ゜ %1B%24%42%21%2C%1B%28%42 +PASS U+309D ゝ %1B%24%42%21%35%1B%28%42 +PASS U+309E ゞ %1B%24%42%21%36%1B%28%42 +PASS U+30A1 ァ %1B%24%42%25%21%1B%28%42 +PASS U+30A2 ア %1B%24%42%25%22%1B%28%42 +PASS U+30A3 ィ %1B%24%42%25%23%1B%28%42 +PASS U+30A4 イ %1B%24%42%25%24%1B%28%42 +PASS U+30A5 ゥ %1B%24%42%25%25%1B%28%42 +PASS U+30A6 ウ %1B%24%42%25%26%1B%28%42 +PASS U+30A7 ェ %1B%24%42%25%27%1B%28%42 +PASS U+30A8 エ %1B%24%42%25%28%1B%28%42 +PASS U+30A9 ォ %1B%24%42%25%29%1B%28%42 +PASS U+30AA オ %1B%24%42%25%2A%1B%28%42 +PASS U+30AB カ %1B%24%42%25%2B%1B%28%42 +PASS U+30AC ガ %1B%24%42%25%2C%1B%28%42 +PASS U+30AD キ %1B%24%42%25%2D%1B%28%42 +PASS U+30AE ギ %1B%24%42%25%2E%1B%28%42 +PASS U+30AF ク %1B%24%42%25%2F%1B%28%42 +PASS U+30B0 グ %1B%24%42%25%30%1B%28%42 +PASS U+30B1 ケ %1B%24%42%25%31%1B%28%42 +PASS U+30B2 ゲ %1B%24%42%25%32%1B%28%42 +PASS U+30B3 コ %1B%24%42%25%33%1B%28%42 +PASS U+30B4 ゴ %1B%24%42%25%34%1B%28%42 +PASS U+30B5 サ %1B%24%42%25%35%1B%28%42 +PASS U+30B6 ザ %1B%24%42%25%36%1B%28%42 +PASS U+30B7 シ %1B%24%42%25%37%1B%28%42 +PASS U+30B8 ジ %1B%24%42%25%38%1B%28%42 +PASS U+30B9 ス %1B%24%42%25%39%1B%28%42 +PASS U+30BA ズ %1B%24%42%25%3A%1B%28%42 +PASS U+30BB セ %1B%24%42%25%3B%1B%28%42 +PASS U+30BC ゼ %1B%24%42%25%3C%1B%28%42 +PASS U+30BD ソ %1B%24%42%25%3D%1B%28%42 +PASS U+30BE ゾ %1B%24%42%25%3E%1B%28%42 +PASS U+30BF タ %1B%24%42%25%3F%1B%28%42 +PASS U+30C0 ダ %1B%24%42%25%40%1B%28%42 +PASS U+30C1 チ %1B%24%42%25%41%1B%28%42 +PASS U+30C2 ヂ %1B%24%42%25%42%1B%28%42 +PASS U+30C3 ッ %1B%24%42%25%43%1B%28%42 +PASS U+30C4 ツ %1B%24%42%25%44%1B%28%42 +PASS U+30C5 ヅ %1B%24%42%25%45%1B%28%42 +PASS U+30C6 テ %1B%24%42%25%46%1B%28%42 +PASS U+30C7 デ %1B%24%42%25%47%1B%28%42 +PASS U+30C8 ト %1B%24%42%25%48%1B%28%42 +PASS U+30C9 ド %1B%24%42%25%49%1B%28%42 +PASS U+30CA ナ %1B%24%42%25%4A%1B%28%42 +PASS U+30CB ニ %1B%24%42%25%4B%1B%28%42 +PASS U+30CC ヌ %1B%24%42%25%4C%1B%28%42 +PASS U+30CD ネ %1B%24%42%25%4D%1B%28%42 +PASS U+30CE ノ %1B%24%42%25%4E%1B%28%42 +PASS U+30CF ハ %1B%24%42%25%4F%1B%28%42 +PASS U+30D0 バ %1B%24%42%25%50%1B%28%42 +PASS U+30D1 パ %1B%24%42%25%51%1B%28%42 +PASS U+30D2 ヒ %1B%24%42%25%52%1B%28%42 +PASS U+30D3 ビ %1B%24%42%25%53%1B%28%42 +PASS U+30D4 ピ %1B%24%42%25%54%1B%28%42 +PASS U+30D5 フ %1B%24%42%25%55%1B%28%42 +PASS U+30D6 ブ %1B%24%42%25%56%1B%28%42 +PASS U+30D7 プ %1B%24%42%25%57%1B%28%42 +PASS U+30D8 ヘ %1B%24%42%25%58%1B%28%42 +PASS U+30D9 ベ %1B%24%42%25%59%1B%28%42 +PASS U+30DA ペ %1B%24%42%25%5A%1B%28%42 +PASS U+30DB ホ %1B%24%42%25%5B%1B%28%42 +PASS U+30DC ボ %1B%24%42%25%5C%1B%28%42 +PASS U+30DD ポ %1B%24%42%25%5D%1B%28%42 +PASS U+30DE マ %1B%24%42%25%5E%1B%28%42 +PASS U+30DF ミ %1B%24%42%25%5F%1B%28%42 +PASS U+30E0 ム %1B%24%42%25%60%1B%28%42 +PASS U+30E1 メ %1B%24%42%25%61%1B%28%42 +PASS U+30E2 モ %1B%24%42%25%62%1B%28%42 +PASS U+30E3 ャ %1B%24%42%25%63%1B%28%42 +PASS U+30E4 ヤ %1B%24%42%25%64%1B%28%42 +PASS U+30E5 ュ %1B%24%42%25%65%1B%28%42 +PASS U+30E6 ユ %1B%24%42%25%66%1B%28%42 +PASS U+30E7 ョ %1B%24%42%25%67%1B%28%42 +PASS U+30E8 ヨ %1B%24%42%25%68%1B%28%42 +PASS U+30E9 ラ %1B%24%42%25%69%1B%28%42 +PASS U+30EA リ %1B%24%42%25%6A%1B%28%42 +PASS U+30EB ル %1B%24%42%25%6B%1B%28%42 +PASS U+30EC レ %1B%24%42%25%6C%1B%28%42 +PASS U+30ED ロ %1B%24%42%25%6D%1B%28%42 +PASS U+30EE ヮ %1B%24%42%25%6E%1B%28%42 +PASS U+30EF ワ %1B%24%42%25%6F%1B%28%42 +PASS U+30F0 ヰ %1B%24%42%25%70%1B%28%42 +PASS U+30F1 ヱ %1B%24%42%25%71%1B%28%42 +PASS U+30F2 ヲ %1B%24%42%25%72%1B%28%42 +PASS U+30F3 ン %1B%24%42%25%73%1B%28%42 +PASS U+30F4 ヴ %1B%24%42%25%74%1B%28%42 +PASS U+30F5 ヵ %1B%24%42%25%75%1B%28%42 +PASS U+30F6 ヶ %1B%24%42%25%76%1B%28%42 +PASS U+30FB ・ %1B%24%42%21%26%1B%28%42 +PASS U+30FC ー %1B%24%42%21%3C%1B%28%42 +PASS U+30FD ヽ %1B%24%42%21%33%1B%28%42 +PASS U+30FE ヾ %1B%24%42%21%34%1B%28%42 +PASS U+3231 ㈱ %1B%24%42%2D%6A%1B%28%42 +PASS U+3232 ㈲ %1B%24%42%2D%6B%1B%28%42 +PASS U+3239 ㈹ %1B%24%42%2D%6C%1B%28%42 +PASS U+32A4 ㊤ %1B%24%42%2D%65%1B%28%42 +PASS U+32A5 ㊥ %1B%24%42%2D%66%1B%28%42 +PASS U+32A6 ㊦ %1B%24%42%2D%67%1B%28%42 +PASS U+32A7 ㊧ %1B%24%42%2D%68%1B%28%42 +PASS U+32A8 ㊨ %1B%24%42%2D%69%1B%28%42 +PASS U+3303 ㌃ %1B%24%42%2D%46%1B%28%42 +PASS U+330D ㌍ %1B%24%42%2D%4A%1B%28%42 +PASS U+3314 ㌔ %1B%24%42%2D%41%1B%28%42 +PASS U+3318 ㌘ %1B%24%42%2D%44%1B%28%42 +PASS U+3322 ㌢ %1B%24%42%2D%42%1B%28%42 +PASS U+3323 ㌣ %1B%24%42%2D%4C%1B%28%42 +PASS U+3326 ㌦ %1B%24%42%2D%4B%1B%28%42 +PASS U+3327 ㌧ %1B%24%42%2D%45%1B%28%42 +PASS U+332B ㌫ %1B%24%42%2D%4D%1B%28%42 +PASS U+3336 ㌶ %1B%24%42%2D%47%1B%28%42 +PASS U+333B ㌻ %1B%24%42%2D%4F%1B%28%42 +PASS U+3349 ㍉ %1B%24%42%2D%40%1B%28%42 +PASS U+334A ㍊ %1B%24%42%2D%4E%1B%28%42 +PASS U+334D ㍍ %1B%24%42%2D%43%1B%28%42 +PASS U+3351 ㍑ %1B%24%42%2D%48%1B%28%42 +PASS U+3357 ㍗ %1B%24%42%2D%49%1B%28%42 +PASS U+337B ㍻ %1B%24%42%2D%5F%1B%28%42 +PASS U+337C ㍼ %1B%24%42%2D%6F%1B%28%42 +PASS U+337D ㍽ %1B%24%42%2D%6E%1B%28%42 +PASS U+337E ㍾ %1B%24%42%2D%6D%1B%28%42 +PASS U+338E ㎎ %1B%24%42%2D%53%1B%28%42 +PASS U+338F ㎏ %1B%24%42%2D%54%1B%28%42 +PASS U+339C ㎜ %1B%24%42%2D%50%1B%28%42 +PASS U+339D ㎝ %1B%24%42%2D%51%1B%28%42 +PASS U+339E ㎞ %1B%24%42%2D%52%1B%28%42 +PASS U+33A1 ㎡ %1B%24%42%2D%56%1B%28%42 +PASS U+33C4 ㏄ %1B%24%42%2D%55%1B%28%42 +PASS U+33CD ㏍ %1B%24%42%2D%63%1B%28%42 +PASS U+4E00 一 %1B%24%42%30%6C%1B%28%42 +PASS U+4E01 丁 %1B%24%42%43%7A%1B%28%42 +PASS U+4E03 七 %1B%24%42%3C%37%1B%28%42 +PASS U+4E07 万 %1B%24%42%4B%7C%1B%28%42 +PASS U+4E08 丈 %1B%24%42%3E%66%1B%28%42 +PASS U+4E09 三 %1B%24%42%3B%30%1B%28%42 +PASS U+4E0A 上 %1B%24%42%3E%65%1B%28%42 +PASS U+4E0B 下 %1B%24%42%32%3C%1B%28%42 +PASS U+4E0D 不 %1B%24%42%49%54%1B%28%42 +PASS U+4E0E 与 %1B%24%42%4D%3F%1B%28%42 +PASS U+4E10 丐 %1B%24%42%50%22%1B%28%42 +PASS U+4E11 丑 %1B%24%42%31%2F%1B%28%42 +PASS U+4E14 且 %1B%24%42%33%6E%1B%28%42 +PASS U+4E15 丕 %1B%24%42%50%23%1B%28%42 +PASS U+4E16 世 %1B%24%42%40%24%1B%28%42 +PASS U+4E17 丗 %1B%24%42%52%42%1B%28%42 +PASS U+4E18 丘 %1B%24%42%35%56%1B%28%42 +PASS U+4E19 丙 %1B%24%42%4A%3A%1B%28%42 +PASS U+4E1E 丞 %1B%24%42%3E%67%1B%28%42 +PASS U+4E21 両 %1B%24%42%4E%3E%1B%28%42 +PASS U+4E26 並 %1B%24%42%4A%42%1B%28%42 +FAIL U+4E28 丨 %1B%24%42%79%2D%1B%28%42 assert_equals: expected "%1B%24%42%79%2D" but got "%26%23%32%30%30%30%38%3B" +PASS U+4E2A 个 %1B%24%42%50%24%1B%28%42 +PASS U+4E2D 中 %1B%24%42%43%66%1B%28%42 +PASS U+4E31 丱 %1B%24%42%50%25%1B%28%42 +PASS U+4E32 串 %1B%24%42%36%7A%1B%28%42 +PASS U+4E36 丶 %1B%24%42%50%26%1B%28%42 +PASS U+4E38 丸 %1B%24%42%34%5D%1B%28%42 +PASS U+4E39 丹 %1B%24%42%43%30%1B%28%42 +PASS U+4E3B 主 %1B%24%42%3C%67%1B%28%42 +PASS U+4E3C 丼 %1B%24%42%50%27%1B%28%42 +PASS U+4E3F 丿 %1B%24%42%50%28%1B%28%42 +PASS U+4E42 乂 %1B%24%42%50%29%1B%28%42 +PASS U+4E43 乃 %1B%24%42%47%35%1B%28%42 +PASS U+4E45 久 %1B%24%42%35%57%1B%28%42 +PASS U+4E4B 之 %1B%24%42%47%37%1B%28%42 +PASS U+4E4D 乍 %1B%24%42%46%63%1B%28%42 +PASS U+4E4E 乎 %1B%24%42%38%43%1B%28%42 +PASS U+4E4F 乏 %1B%24%42%4B%33%1B%28%42 +PASS U+4E55 乕 %1B%24%42%69%49%1B%28%42 +PASS U+4E56 乖 %1B%24%42%50%2A%1B%28%42 +PASS U+4E57 乗 %1B%24%42%3E%68%1B%28%42 +PASS U+4E58 乘 %1B%24%42%50%2B%1B%28%42 +PASS U+4E59 乙 %1B%24%42%32%35%1B%28%42 +PASS U+4E5D 九 %1B%24%42%36%65%1B%28%42 +PASS U+4E5E 乞 %1B%24%42%38%70%1B%28%42 +PASS U+4E5F 也 %1B%24%42%4C%69%1B%28%42 +PASS U+4E62 乢 %1B%24%42%56%26%1B%28%42 +PASS U+4E71 乱 %1B%24%42%4D%70%1B%28%42 +PASS U+4E73 乳 %1B%24%42%46%7D%1B%28%42 +PASS U+4E7E 乾 %1B%24%42%34%25%1B%28%42 +PASS U+4E80 亀 %1B%24%42%35%35%1B%28%42 +PASS U+4E82 亂 %1B%24%42%50%2C%1B%28%42 +PASS U+4E85 亅 %1B%24%42%50%2D%1B%28%42 +PASS U+4E86 了 %1B%24%42%4E%3B%1B%28%42 +PASS U+4E88 予 %1B%24%42%4D%3D%1B%28%42 +PASS U+4E89 争 %1B%24%42%41%68%1B%28%42 +PASS U+4E8A 亊 %1B%24%42%50%2F%1B%28%42 +PASS U+4E8B 事 %1B%24%42%3B%76%1B%28%42 +PASS U+4E8C 二 %1B%24%42%46%73%1B%28%42 +PASS U+4E8E 于 %1B%24%42%50%32%1B%28%42 +PASS U+4E91 云 %1B%24%42%31%3E%1B%28%42 +PASS U+4E92 互 %1B%24%42%38%5F%1B%28%42 +PASS U+4E94 五 %1B%24%42%38%5E%1B%28%42 +PASS U+4E95 井 %1B%24%42%30%66%1B%28%42 +PASS U+4E98 亘 %1B%24%42%4F%4B%1B%28%42 +PASS U+4E99 亙 %1B%24%42%4F%4A%1B%28%42 +PASS U+4E9B 些 %1B%24%42%3A%33%1B%28%42 +PASS U+4E9C 亜 %1B%24%42%30%21%1B%28%42 +PASS U+4E9E 亞 %1B%24%42%50%33%1B%28%42 +PASS U+4E9F 亟 %1B%24%42%50%34%1B%28%42 +PASS U+4EA0 亠 %1B%24%42%50%35%1B%28%42 +PASS U+4EA1 亡 %1B%24%42%4B%34%1B%28%42 +PASS U+4EA2 亢 %1B%24%42%50%36%1B%28%42 +PASS U+4EA4 交 %1B%24%42%38%72%1B%28%42 +PASS U+4EA5 亥 %1B%24%42%30%67%1B%28%42 +PASS U+4EA6 亦 %1B%24%42%4B%72%1B%28%42 +PASS U+4EA8 亨 %1B%24%42%35%7C%1B%28%42 +PASS U+4EAB 享 %1B%24%42%35%7D%1B%28%42 +PASS U+4EAC 京 %1B%24%42%35%7E%1B%28%42 +PASS U+4EAD 亭 %1B%24%42%44%62%1B%28%42 +PASS U+4EAE 亮 %1B%24%42%4E%3C%1B%28%42 +PASS U+4EB0 亰 %1B%24%42%50%37%1B%28%42 +PASS U+4EB3 亳 %1B%24%42%50%38%1B%28%42 +PASS U+4EB6 亶 %1B%24%42%50%39%1B%28%42 +PASS U+4EBA 人 %1B%24%42%3F%4D%1B%28%42 +PASS U+4EC0 什 %1B%24%42%3D%3A%1B%28%42 +PASS U+4EC1 仁 %1B%24%42%3F%4E%1B%28%42 +PASS U+4EC2 仂 %1B%24%42%50%3E%1B%28%42 +PASS U+4EC4 仄 %1B%24%42%50%3C%1B%28%42 +PASS U+4EC6 仆 %1B%24%42%50%3D%1B%28%42 +PASS U+4EC7 仇 %1B%24%42%35%58%1B%28%42 +PASS U+4ECA 今 %1B%24%42%3A%23%1B%28%42 +PASS U+4ECB 介 %1B%24%42%32%70%1B%28%42 +PASS U+4ECD 仍 %1B%24%42%50%3B%1B%28%42 +PASS U+4ECE 从 %1B%24%42%50%3A%1B%28%42 +PASS U+4ECF 仏 %1B%24%42%4A%29%1B%28%42 +PASS U+4ED4 仔 %1B%24%42%3B%46%1B%28%42 +PASS U+4ED5 仕 %1B%24%42%3B%45%1B%28%42 +PASS U+4ED6 他 %1B%24%42%42%3E%1B%28%42 +PASS U+4ED7 仗 %1B%24%42%50%3F%1B%28%42 +PASS U+4ED8 付 %1B%24%42%49%55%1B%28%42 +PASS U+4ED9 仙 %1B%24%42%40%67%1B%28%42 +PASS U+4EDD 仝 %1B%24%42%21%38%1B%28%42 +PASS U+4EDE 仞 %1B%24%42%50%40%1B%28%42 +PASS U+4EDF 仟 %1B%24%42%50%42%1B%28%42 +FAIL U+4EE1 仡 %1B%24%42%79%2E%1B%28%42 assert_equals: expected "%1B%24%42%79%2E" but got "%26%23%32%30%31%39%33%3B" +PASS U+4EE3 代 %1B%24%42%42%65%1B%28%42 +PASS U+4EE4 令 %1B%24%42%4E%61%1B%28%42 +PASS U+4EE5 以 %1B%24%42%30%4A%1B%28%42 +PASS U+4EED 仭 %1B%24%42%50%41%1B%28%42 +PASS U+4EEE 仮 %1B%24%42%32%3E%1B%28%42 +PASS U+4EF0 仰 %1B%24%42%36%44%1B%28%42 +PASS U+4EF2 仲 %1B%24%42%43%67%1B%28%42 +PASS U+4EF6 件 %1B%24%42%37%6F%1B%28%42 +PASS U+4EF7 价 %1B%24%42%50%43%1B%28%42 +PASS U+4EFB 任 %1B%24%42%47%24%1B%28%42 +FAIL U+4EFC 仼 %1B%24%42%79%2F%1B%28%42 assert_equals: expected "%1B%24%42%79%2F" but got "%26%23%32%30%32%32%30%3B" +FAIL U+4F00 伀 %1B%24%42%79%30%1B%28%42 assert_equals: expected "%1B%24%42%79%30" but got "%26%23%32%30%32%32%34%3B" +PASS U+4F01 企 %1B%24%42%34%6B%1B%28%42 +FAIL U+4F03 伃 %1B%24%42%79%31%1B%28%42 assert_equals: expected "%1B%24%42%79%31" but got "%26%23%32%30%32%32%37%3B" +PASS U+4F09 伉 %1B%24%42%50%44%1B%28%42 +PASS U+4F0A 伊 %1B%24%42%30%4B%1B%28%42 +PASS U+4F0D 伍 %1B%24%42%38%60%1B%28%42 +PASS U+4F0E 伎 %1B%24%42%34%6C%1B%28%42 +PASS U+4F0F 伏 %1B%24%42%49%7A%1B%28%42 +PASS U+4F10 伐 %1B%24%42%48%32%1B%28%42 +PASS U+4F11 休 %1B%24%42%35%59%1B%28%42 +PASS U+4F1A 会 %1B%24%42%32%71%1B%28%42 +PASS U+4F1C 伜 %1B%24%42%50%67%1B%28%42 +PASS U+4F1D 伝 %1B%24%42%45%41%1B%28%42 +PASS U+4F2F 伯 %1B%24%42%47%6C%1B%28%42 +PASS U+4F30 估 %1B%24%42%50%46%1B%28%42 +PASS U+4F34 伴 %1B%24%42%48%3C%1B%28%42 +PASS U+4F36 伶 %1B%24%42%4E%62%1B%28%42 +PASS U+4F38 伸 %1B%24%42%3F%2D%1B%28%42 +FAIL U+4F39 伹 %1B%24%42%79%32%1B%28%42 assert_equals: expected "%1B%24%42%79%32" but got "%26%23%32%30%32%38%31%3B" +PASS U+4F3A 伺 %1B%24%42%3B%47%1B%28%42 +PASS U+4F3C 似 %1B%24%42%3B%77%1B%28%42 +PASS U+4F3D 伽 %1B%24%42%32%40%1B%28%42 +PASS U+4F43 佃 %1B%24%42%44%51%1B%28%42 +PASS U+4F46 但 %1B%24%42%43%22%1B%28%42 +PASS U+4F47 佇 %1B%24%42%50%4A%1B%28%42 +PASS U+4F4D 位 %1B%24%42%30%4C%1B%28%42 +PASS U+4F4E 低 %1B%24%42%44%63%1B%28%42 +PASS U+4F4F 住 %1B%24%42%3D%3B%1B%28%42 +PASS U+4F50 佐 %1B%24%42%3A%34%1B%28%42 +PASS U+4F51 佑 %1B%24%42%4D%24%1B%28%42 +PASS U+4F53 体 %1B%24%42%42%4E%1B%28%42 +PASS U+4F55 何 %1B%24%42%32%3F%1B%28%42 +FAIL U+4F56 佖 %1B%24%42%79%33%1B%28%42 assert_equals: expected "%1B%24%42%79%33" but got "%26%23%32%30%33%31%30%3B" +PASS U+4F57 佗 %1B%24%42%50%49%1B%28%42 +PASS U+4F59 余 %1B%24%42%4D%3E%1B%28%42 +PASS U+4F5A 佚 %1B%24%42%50%45%1B%28%42 +PASS U+4F5B 佛 %1B%24%42%50%47%1B%28%42 +PASS U+4F5C 作 %1B%24%42%3A%6E%1B%28%42 +PASS U+4F5D 佝 %1B%24%42%50%48%1B%28%42 +PASS U+4F5E 佞 %1B%24%42%55%24%1B%28%42 +PASS U+4F69 佩 %1B%24%42%50%50%1B%28%42 +PASS U+4F6F 佯 %1B%24%42%50%53%1B%28%42 +PASS U+4F70 佰 %1B%24%42%50%51%1B%28%42 +PASS U+4F73 佳 %1B%24%42%32%42%1B%28%42 +PASS U+4F75 併 %1B%24%42%4A%3B%1B%28%42 +PASS U+4F76 佶 %1B%24%42%50%4B%1B%28%42 +PASS U+4F7B 佻 %1B%24%42%50%4F%1B%28%42 +PASS U+4F7C 佼 %1B%24%42%38%73%1B%28%42 +PASS U+4F7F 使 %1B%24%42%3B%48%1B%28%42 +PASS U+4F83 侃 %1B%24%42%34%26%1B%28%42 +PASS U+4F86 來 %1B%24%42%50%54%1B%28%42 +PASS U+4F88 侈 %1B%24%42%50%4C%1B%28%42 +FAIL U+4F8A 侊 %1B%24%42%79%35%1B%28%42 assert_equals: expected "%1B%24%42%79%35" but got "%26%23%32%30%33%36%32%3B" +PASS U+4F8B 例 %1B%24%42%4E%63%1B%28%42 +PASS U+4F8D 侍 %1B%24%42%3B%78%1B%28%42 +PASS U+4F8F 侏 %1B%24%42%50%4D%1B%28%42 +PASS U+4F91 侑 %1B%24%42%50%52%1B%28%42 +FAIL U+4F92 侒 %1B%24%42%79%34%1B%28%42 assert_equals: expected "%1B%24%42%79%34" but got "%26%23%32%30%33%37%30%3B" +FAIL U+4F94 侔 %1B%24%42%79%37%1B%28%42 assert_equals: expected "%1B%24%42%79%37" but got "%26%23%32%30%33%37%32%3B" +PASS U+4F96 侖 %1B%24%42%50%55%1B%28%42 +PASS U+4F98 侘 %1B%24%42%50%4E%1B%28%42 +FAIL U+4F9A 侚 %1B%24%42%79%36%1B%28%42 assert_equals: expected "%1B%24%42%79%36" but got "%26%23%32%30%33%37%38%3B" +PASS U+4F9B 供 %1B%24%42%36%21%1B%28%42 +PASS U+4F9D 依 %1B%24%42%30%4D%1B%28%42 +PASS U+4FA0 侠 %1B%24%42%36%22%1B%28%42 +PASS U+4FA1 価 %1B%24%42%32%41%1B%28%42 +PASS U+4FAB 侫 %1B%24%42%55%25%1B%28%42 +PASS U+4FAD 侭 %1B%24%42%4B%79%1B%28%42 +PASS U+4FAE 侮 %1B%24%42%49%6E%1B%28%42 +PASS U+4FAF 侯 %1B%24%42%38%74%1B%28%42 +PASS U+4FB5 侵 %1B%24%42%3F%2F%1B%28%42 +PASS U+4FB6 侶 %1B%24%42%4E%37%1B%28%42 +PASS U+4FBF 便 %1B%24%42%4A%58%1B%28%42 +PASS U+4FC2 係 %1B%24%42%37%38%1B%28%42 +PASS U+4FC3 促 %1B%24%42%42%25%1B%28%42 +PASS U+4FC4 俄 %1B%24%42%32%64%1B%28%42 +FAIL U+4FC9 俉 %1B%24%42%79%26%1B%28%42 assert_equals: expected "%1B%24%42%79%26" but got "%26%23%32%30%34%32%35%3B" +PASS U+4FCA 俊 %1B%24%42%3D%53%1B%28%42 +FAIL U+4FCD 俍 %1B%24%42%79%38%1B%28%42 assert_equals: expected "%1B%24%42%79%38" but got "%26%23%32%30%34%32%39%3B" +PASS U+4FCE 俎 %1B%24%42%50%59%1B%28%42 +PASS U+4FD0 俐 %1B%24%42%50%5E%1B%28%42 +PASS U+4FD1 俑 %1B%24%42%50%5C%1B%28%42 +PASS U+4FD4 俔 %1B%24%42%50%57%1B%28%42 +PASS U+4FD7 俗 %1B%24%42%42%2F%1B%28%42 +PASS U+4FD8 俘 %1B%24%42%50%5A%1B%28%42 +PASS U+4FDA 俚 %1B%24%42%50%5D%1B%28%42 +PASS U+4FDB 俛 %1B%24%42%50%5B%1B%28%42 +PASS U+4FDD 保 %1B%24%42%4A%5D%1B%28%42 +PASS U+4FDF 俟 %1B%24%42%50%58%1B%28%42 +PASS U+4FE1 信 %1B%24%42%3F%2E%1B%28%42 +PASS U+4FE3 俣 %1B%24%42%4B%73%1B%28%42 +PASS U+4FE4 俤 %1B%24%42%50%5F%1B%28%42 +PASS U+4FE5 俥 %1B%24%42%50%60%1B%28%42 +PASS U+4FEE 修 %1B%24%42%3D%24%1B%28%42 +PASS U+4FEF 俯 %1B%24%42%50%6D%1B%28%42 +PASS U+4FF3 俳 %1B%24%42%47%50%1B%28%42 +PASS U+4FF5 俵 %1B%24%42%49%36%1B%28%42 +PASS U+4FF6 俶 %1B%24%42%50%68%1B%28%42 +PASS U+4FF8 俸 %1B%24%42%4A%70%1B%28%42 +PASS U+4FFA 俺 %1B%24%42%32%36%1B%28%42 +PASS U+4FFE 俾 %1B%24%42%50%6C%1B%28%42 +FAIL U+4FFF 俿 %1B%24%42%79%3B%1B%28%42 assert_equals: expected "%1B%24%42%79%3B" but got "%26%23%32%30%34%37%39%3B" +PASS U+5005 倅 %1B%24%42%50%66%1B%28%42 +PASS U+5006 倆 %1B%24%42%50%6F%1B%28%42 +PASS U+5009 倉 %1B%24%42%41%52%1B%28%42 +PASS U+500B 個 %1B%24%42%38%44%1B%28%42 +PASS U+500D 倍 %1B%24%42%47%5C%1B%28%42 +PASS U+500F 倏 %1B%24%42%60%47%1B%28%42 +PASS U+5011 們 %1B%24%42%50%6E%1B%28%42 +PASS U+5012 倒 %1B%24%42%45%5D%1B%28%42 +PASS U+5014 倔 %1B%24%42%50%63%1B%28%42 +PASS U+5016 倖 %1B%24%42%38%76%1B%28%42 +PASS U+5019 候 %1B%24%42%38%75%1B%28%42 +PASS U+501A 倚 %1B%24%42%50%61%1B%28%42 +FAIL U+501E 倞 %1B%24%42%79%3C%1B%28%42 assert_equals: expected "%1B%24%42%79%3C" but got "%26%23%32%30%35%31%30%3B" +PASS U+501F 借 %1B%24%42%3C%5A%1B%28%42 +PASS U+5021 倡 %1B%24%42%50%69%1B%28%42 +FAIL U+5022 倢 %1B%24%42%79%3A%1B%28%42 assert_equals: expected "%1B%24%42%79%3A" but got "%26%23%32%30%35%31%34%3B" +PASS U+5023 倣 %1B%24%42%4A%6F%1B%28%42 +PASS U+5024 値 %1B%24%42%43%4D%1B%28%42 +PASS U+5025 倥 %1B%24%42%50%65%1B%28%42 +PASS U+5026 倦 %1B%24%42%37%71%1B%28%42 +PASS U+5028 倨 %1B%24%42%50%62%1B%28%42 +PASS U+5029 倩 %1B%24%42%50%6A%1B%28%42 +PASS U+502A 倪 %1B%24%42%50%64%1B%28%42 +PASS U+502B 倫 %1B%24%42%4E%51%1B%28%42 +PASS U+502C 倬 %1B%24%42%50%6B%1B%28%42 +PASS U+502D 倭 %1B%24%42%4F%41%1B%28%42 +PASS U+5036 倶 %1B%24%42%36%66%1B%28%42 +PASS U+5039 倹 %1B%24%42%37%70%1B%28%42 +FAIL U+5040 偀 %1B%24%42%79%39%1B%28%42 assert_equals: expected "%1B%24%42%79%39" but got "%26%23%32%30%35%34%34%3B" +FAIL U+5042 偂 %1B%24%42%79%3F%1B%28%42 assert_equals: expected "%1B%24%42%79%3F" but got "%26%23%32%30%35%34%36%3B" +PASS U+5043 偃 %1B%24%42%50%70%1B%28%42 +FAIL U+5046 偆 %1B%24%42%79%3D%1B%28%42 assert_equals: expected "%1B%24%42%79%3D" but got "%26%23%32%30%35%35%30%3B" +PASS U+5047 假 %1B%24%42%50%71%1B%28%42 +PASS U+5048 偈 %1B%24%42%50%75%1B%28%42 +PASS U+5049 偉 %1B%24%42%30%4E%1B%28%42 +PASS U+504F 偏 %1B%24%42%4A%50%1B%28%42 +PASS U+5050 偐 %1B%24%42%50%74%1B%28%42 +PASS U+5055 偕 %1B%24%42%50%73%1B%28%42 +PASS U+5056 偖 %1B%24%42%50%77%1B%28%42 +PASS U+505A 做 %1B%24%42%50%76%1B%28%42 +PASS U+505C 停 %1B%24%42%44%64%1B%28%42 +PASS U+5065 健 %1B%24%42%37%72%1B%28%42 +PASS U+506C 偬 %1B%24%42%50%78%1B%28%42 +FAIL U+5070 偰 %1B%24%42%79%3E%1B%28%42 assert_equals: expected "%1B%24%42%79%3E" but got "%26%23%32%30%35%39%32%3B" +PASS U+5072 偲 %1B%24%42%3C%45%1B%28%42 +PASS U+5074 側 %1B%24%42%42%26%1B%28%42 +PASS U+5075 偵 %1B%24%42%44%65%1B%28%42 +PASS U+5076 偶 %1B%24%42%36%76%1B%28%42 +PASS U+5078 偸 %1B%24%42%50%79%1B%28%42 +PASS U+507D 偽 %1B%24%42%35%36%1B%28%42 +PASS U+5080 傀 %1B%24%42%50%7A%1B%28%42 +PASS U+5085 傅 %1B%24%42%50%7C%1B%28%42 +PASS U+508D 傍 %1B%24%42%4B%35%1B%28%42 +PASS U+5091 傑 %1B%24%42%37%66%1B%28%42 +FAIL U+5094 傔 %1B%24%42%79%40%1B%28%42 assert_equals: expected "%1B%24%42%79%40" but got "%26%23%32%30%36%32%38%3B" +PASS U+5098 傘 %1B%24%42%3B%31%1B%28%42 +PASS U+5099 備 %1B%24%42%48%77%1B%28%42 +PASS U+509A 傚 %1B%24%42%50%7B%1B%28%42 +PASS U+50AC 催 %1B%24%42%3A%45%1B%28%42 +PASS U+50AD 傭 %1B%24%42%4D%43%1B%28%42 +PASS U+50B2 傲 %1B%24%42%50%7E%1B%28%42 +PASS U+50B3 傳 %1B%24%42%51%23%1B%28%42 +PASS U+50B4 傴 %1B%24%42%50%7D%1B%28%42 +PASS U+50B5 債 %1B%24%42%3A%44%1B%28%42 +PASS U+50B7 傷 %1B%24%42%3D%7D%1B%28%42 +PASS U+50BE 傾 %1B%24%42%37%39%1B%28%42 +PASS U+50C2 僂 %1B%24%42%51%24%1B%28%42 +PASS U+50C5 僅 %1B%24%42%36%4F%1B%28%42 +PASS U+50C9 僉 %1B%24%42%51%21%1B%28%42 +PASS U+50CA 僊 %1B%24%42%51%22%1B%28%42 +PASS U+50CD 働 %1B%24%42%46%2F%1B%28%42 +PASS U+50CF 像 %1B%24%42%41%7C%1B%28%42 +PASS U+50D1 僑 %1B%24%42%36%23%1B%28%42 +PASS U+50D5 僕 %1B%24%42%4B%4D%1B%28%42 +PASS U+50D6 僖 %1B%24%42%51%25%1B%28%42 +FAIL U+50D8 僘 %1B%24%42%79%42%1B%28%42 assert_equals: expected "%1B%24%42%79%42" but got "%26%23%32%30%36%39%36%3B" +PASS U+50DA 僚 %1B%24%42%4E%3D%1B%28%42 +PASS U+50DE 僞 %1B%24%42%51%26%1B%28%42 +PASS U+50E3 僣 %1B%24%42%51%29%1B%28%42 +PASS U+50E5 僥 %1B%24%42%51%27%1B%28%42 +PASS U+50E7 僧 %1B%24%42%41%4E%1B%28%42 +PASS U+50ED 僭 %1B%24%42%51%28%1B%28%42 +PASS U+50EE 僮 %1B%24%42%51%2A%1B%28%42 +FAIL U+50F4 僴 %1B%24%42%79%41%1B%28%42 assert_equals: expected "%1B%24%42%79%41" but got "%26%23%32%30%37%32%34%3B" +PASS U+50F5 僵 %1B%24%42%51%2C%1B%28%42 +PASS U+50F9 價 %1B%24%42%51%2B%1B%28%42 +PASS U+50FB 僻 %1B%24%42%4A%48%1B%28%42 +PASS U+5100 儀 %1B%24%42%35%37%1B%28%42 +PASS U+5101 儁 %1B%24%42%51%2E%1B%28%42 +PASS U+5102 儂 %1B%24%42%51%2F%1B%28%42 +PASS U+5104 億 %1B%24%42%32%2F%1B%28%42 +PASS U+5109 儉 %1B%24%42%51%2D%1B%28%42 +PASS U+5112 儒 %1B%24%42%3C%74%1B%28%42 +PASS U+5114 儔 %1B%24%42%51%32%1B%28%42 +PASS U+5115 儕 %1B%24%42%51%31%1B%28%42 +PASS U+5116 儖 %1B%24%42%51%30%1B%28%42 +PASS U+5118 儘 %1B%24%42%50%56%1B%28%42 +PASS U+511A 儚 %1B%24%42%51%33%1B%28%42 +PASS U+511F 償 %1B%24%42%3D%7E%1B%28%42 +PASS U+5121 儡 %1B%24%42%51%34%1B%28%42 +PASS U+512A 優 %1B%24%42%4D%25%1B%28%42 +PASS U+5132 儲 %1B%24%42%4C%59%1B%28%42 +PASS U+5137 儷 %1B%24%42%51%36%1B%28%42 +PASS U+513A 儺 %1B%24%42%51%35%1B%28%42 +PASS U+513B 儻 %1B%24%42%51%38%1B%28%42 +PASS U+513C 儼 %1B%24%42%51%37%1B%28%42 +PASS U+513F 儿 %1B%24%42%51%39%1B%28%42 +PASS U+5140 兀 %1B%24%42%51%3A%1B%28%42 +PASS U+5141 允 %1B%24%42%30%74%1B%28%42 +PASS U+5143 元 %1B%24%42%38%35%1B%28%42 +PASS U+5144 兄 %1B%24%42%37%3B%1B%28%42 +PASS U+5145 充 %1B%24%42%3D%3C%1B%28%42 +PASS U+5146 兆 %1B%24%42%43%7B%1B%28%42 +PASS U+5147 兇 %1B%24%42%36%24%1B%28%42 +PASS U+5148 先 %1B%24%42%40%68%1B%28%42 +PASS U+5149 光 %1B%24%42%38%77%1B%28%42 +FAIL U+514A 兊 %1B%24%42%79%43%1B%28%42 assert_equals: expected "%1B%24%42%79%43" but got "%26%23%32%30%38%31%30%3B" +PASS U+514B 克 %1B%24%42%39%6E%1B%28%42 +PASS U+514C 兌 %1B%24%42%51%3C%1B%28%42 +PASS U+514D 免 %1B%24%42%4C%48%1B%28%42 +PASS U+514E 兎 %1B%24%42%45%46%1B%28%42 +PASS U+5150 児 %1B%24%42%3B%79%1B%28%42 +PASS U+5152 兒 %1B%24%42%51%3B%1B%28%42 +PASS U+5154 兔 %1B%24%42%51%3D%1B%28%42 +PASS U+515A 党 %1B%24%42%45%5E%1B%28%42 +PASS U+515C 兜 %1B%24%42%33%75%1B%28%42 +PASS U+5162 兢 %1B%24%42%51%3E%1B%28%42 +FAIL U+5164 兤 %1B%24%42%79%44%1B%28%42 assert_equals: expected "%1B%24%42%79%44" but got "%26%23%32%30%38%33%36%3B" +PASS U+5165 入 %1B%24%42%46%7E%1B%28%42 +PASS U+5168 全 %1B%24%42%41%34%1B%28%42 +PASS U+5169 兩 %1B%24%42%51%40%1B%28%42 +PASS U+516A 兪 %1B%24%42%51%41%1B%28%42 +PASS U+516B 八 %1B%24%42%48%2C%1B%28%42 +PASS U+516C 公 %1B%24%42%38%78%1B%28%42 +PASS U+516D 六 %1B%24%42%4F%3B%1B%28%42 +PASS U+516E 兮 %1B%24%42%51%42%1B%28%42 +PASS U+5171 共 %1B%24%42%36%26%1B%28%42 +PASS U+5175 兵 %1B%24%42%4A%3C%1B%28%42 +PASS U+5176 其 %1B%24%42%42%36%1B%28%42 +PASS U+5177 具 %1B%24%42%36%71%1B%28%42 +PASS U+5178 典 %1B%24%42%45%35%1B%28%42 +PASS U+517C 兼 %1B%24%42%37%73%1B%28%42 +PASS U+5180 冀 %1B%24%42%51%43%1B%28%42 +PASS U+5182 冂 %1B%24%42%51%44%1B%28%42 +PASS U+5185 内 %1B%24%42%46%62%1B%28%42 +PASS U+5186 円 %1B%24%42%31%5F%1B%28%42 +PASS U+5189 冉 %1B%24%42%51%47%1B%28%42 +PASS U+518A 冊 %1B%24%42%3A%7D%1B%28%42 +PASS U+518C 册 %1B%24%42%51%46%1B%28%42 +PASS U+518D 再 %1B%24%42%3A%46%1B%28%42 +PASS U+518F 冏 %1B%24%42%51%48%1B%28%42 +PASS U+5190 冐 %1B%24%42%66%6E%1B%28%42 +PASS U+5191 冑 %1B%24%42%51%49%1B%28%42 +PASS U+5192 冒 %1B%24%42%4B%41%1B%28%42 +PASS U+5193 冓 %1B%24%42%51%4A%1B%28%42 +PASS U+5195 冕 %1B%24%42%51%4B%1B%28%42 +PASS U+5196 冖 %1B%24%42%51%4C%1B%28%42 +PASS U+5197 冗 %1B%24%42%3E%69%1B%28%42 +PASS U+5199 写 %1B%24%42%3C%4C%1B%28%42 +FAIL U+519D 冝 %1B%24%42%79%45%1B%28%42 assert_equals: expected "%1B%24%42%79%45" but got "%26%23%32%30%38%39%33%3B" +PASS U+51A0 冠 %1B%24%42%34%27%1B%28%42 +PASS U+51A2 冢 %1B%24%42%51%4F%1B%28%42 +PASS U+51A4 冤 %1B%24%42%51%4D%1B%28%42 +PASS U+51A5 冥 %1B%24%42%4C%3D%1B%28%42 +PASS U+51A6 冦 %1B%24%42%51%4E%1B%28%42 +PASS U+51A8 冨 %1B%24%42%49%5A%1B%28%42 +PASS U+51A9 冩 %1B%24%42%51%50%1B%28%42 +PASS U+51AA 冪 %1B%24%42%51%51%1B%28%42 +PASS U+51AB 冫 %1B%24%42%51%52%1B%28%42 +PASS U+51AC 冬 %1B%24%42%45%5F%1B%28%42 +PASS U+51B0 冰 %1B%24%42%51%56%1B%28%42 +PASS U+51B1 冱 %1B%24%42%51%54%1B%28%42 +PASS U+51B2 冲 %1B%24%42%51%55%1B%28%42 +PASS U+51B3 决 %1B%24%42%51%53%1B%28%42 +PASS U+51B4 冴 %1B%24%42%3A%63%1B%28%42 +PASS U+51B5 况 %1B%24%42%51%57%1B%28%42 +PASS U+51B6 冶 %1B%24%42%4C%6A%1B%28%42 +PASS U+51B7 冷 %1B%24%42%4E%64%1B%28%42 +PASS U+51BD 冽 %1B%24%42%51%58%1B%28%42 +FAIL U+51BE 冾 %1B%24%42%79%46%1B%28%42 assert_equals: expected "%1B%24%42%79%46" but got "%26%23%32%30%39%32%36%3B" +PASS U+51C4 凄 %1B%24%42%40%28%1B%28%42 +PASS U+51C5 凅 %1B%24%42%51%59%1B%28%42 +PASS U+51C6 准 %1B%24%42%3D%5A%1B%28%42 +PASS U+51C9 凉 %1B%24%42%51%5A%1B%28%42 +PASS U+51CB 凋 %1B%24%42%43%7C%1B%28%42 +PASS U+51CC 凌 %1B%24%42%4E%3F%1B%28%42 +PASS U+51CD 凍 %1B%24%42%45%60%1B%28%42 +PASS U+51D6 凖 %1B%24%42%52%45%1B%28%42 +PASS U+51DB 凛 %1B%24%42%51%5B%1B%28%42 +PASS U+51DC 凜 %1B%24%42%74%25%1B%28%42 +PASS U+51DD 凝 %1B%24%42%36%45%1B%28%42 +PASS U+51E0 几 %1B%24%42%51%5C%1B%28%42 +PASS U+51E1 凡 %1B%24%42%4B%5E%1B%28%42 +PASS U+51E6 処 %1B%24%42%3D%68%1B%28%42 +PASS U+51E7 凧 %1B%24%42%42%7C%1B%28%42 +PASS U+51E9 凩 %1B%24%42%51%5E%1B%28%42 +PASS U+51EA 凪 %1B%24%42%46%64%1B%28%42 +FAIL U+51EC 凬 %1B%24%42%79%47%1B%28%42 assert_equals: expected "%1B%24%42%79%47" but got "%26%23%32%30%39%37%32%3B" +PASS U+51ED 凭 %1B%24%42%51%5F%1B%28%42 +PASS U+51F0 凰 %1B%24%42%51%60%1B%28%42 +PASS U+51F1 凱 %1B%24%42%33%2E%1B%28%42 +PASS U+51F5 凵 %1B%24%42%51%61%1B%28%42 +PASS U+51F6 凶 %1B%24%42%36%27%1B%28%42 +PASS U+51F8 凸 %1B%24%42%46%4C%1B%28%42 +PASS U+51F9 凹 %1B%24%42%31%7A%1B%28%42 +PASS U+51FA 出 %1B%24%42%3D%50%1B%28%42 +PASS U+51FD 函 %1B%24%42%48%21%1B%28%42 +PASS U+51FE 凾 %1B%24%42%51%62%1B%28%42 +PASS U+5200 刀 %1B%24%42%45%61%1B%28%42 +PASS U+5203 刃 %1B%24%42%3F%4F%1B%28%42 +PASS U+5204 刄 %1B%24%42%51%63%1B%28%42 +PASS U+5206 分 %1B%24%42%4A%2C%1B%28%42 +PASS U+5207 切 %1B%24%42%40%5A%1B%28%42 +PASS U+5208 刈 %1B%24%42%34%22%1B%28%42 +PASS U+520A 刊 %1B%24%42%34%29%1B%28%42 +PASS U+520B 刋 %1B%24%42%51%64%1B%28%42 +PASS U+520E 刎 %1B%24%42%51%66%1B%28%42 +PASS U+5211 刑 %1B%24%42%37%3A%1B%28%42 +PASS U+5214 刔 %1B%24%42%51%65%1B%28%42 +FAIL U+5215 刕 %1B%24%42%79%48%1B%28%42 assert_equals: expected "%1B%24%42%79%48" but got "%26%23%32%31%30%31%33%3B" +PASS U+5217 列 %1B%24%42%4E%73%1B%28%42 +PASS U+521D 初 %1B%24%42%3D%69%1B%28%42 +PASS U+5224 判 %1B%24%42%48%3D%1B%28%42 +PASS U+5225 別 %1B%24%42%4A%4C%1B%28%42 +PASS U+5227 刧 %1B%24%42%51%67%1B%28%42 +PASS U+5229 利 %1B%24%42%4D%78%1B%28%42 +PASS U+522A 刪 %1B%24%42%51%68%1B%28%42 +PASS U+522E 刮 %1B%24%42%51%69%1B%28%42 +PASS U+5230 到 %1B%24%42%45%7E%1B%28%42 +PASS U+5233 刳 %1B%24%42%51%6A%1B%28%42 +PASS U+5236 制 %1B%24%42%40%29%1B%28%42 +PASS U+5237 刷 %1B%24%42%3A%7E%1B%28%42 +PASS U+5238 券 %1B%24%42%37%74%1B%28%42 +PASS U+5239 刹 %1B%24%42%51%6B%1B%28%42 +PASS U+523A 刺 %1B%24%42%3B%49%1B%28%42 +PASS U+523B 刻 %1B%24%42%39%6F%1B%28%42 +PASS U+5243 剃 %1B%24%42%44%66%1B%28%42 +PASS U+5244 剄 %1B%24%42%51%6D%1B%28%42 +PASS U+5247 則 %1B%24%42%42%27%1B%28%42 +PASS U+524A 削 %1B%24%42%3A%6F%1B%28%42 +PASS U+524B 剋 %1B%24%42%51%6E%1B%28%42 +PASS U+524C 剌 %1B%24%42%51%6F%1B%28%42 +PASS U+524D 前 %1B%24%42%41%30%1B%28%42 +PASS U+524F 剏 %1B%24%42%51%6C%1B%28%42 +PASS U+5254 剔 %1B%24%42%51%71%1B%28%42 +PASS U+5256 剖 %1B%24%42%4B%36%1B%28%42 +PASS U+525B 剛 %1B%24%42%39%64%1B%28%42 +PASS U+525E 剞 %1B%24%42%51%70%1B%28%42 +PASS U+5263 剣 %1B%24%42%37%75%1B%28%42 +PASS U+5264 剤 %1B%24%42%3A%5E%1B%28%42 +PASS U+5265 剥 %1B%24%42%47%6D%1B%28%42 +PASS U+5269 剩 %1B%24%42%51%74%1B%28%42 +PASS U+526A 剪 %1B%24%42%51%72%1B%28%42 +PASS U+526F 副 %1B%24%42%49%7B%1B%28%42 +PASS U+5270 剰 %1B%24%42%3E%6A%1B%28%42 +PASS U+5271 剱 %1B%24%42%51%7B%1B%28%42 +PASS U+5272 割 %1B%24%42%33%64%1B%28%42 +PASS U+5273 剳 %1B%24%42%51%75%1B%28%42 +PASS U+5274 剴 %1B%24%42%51%73%1B%28%42 +PASS U+5275 創 %1B%24%42%41%4F%1B%28%42 +PASS U+527D 剽 %1B%24%42%51%77%1B%28%42 +PASS U+527F 剿 %1B%24%42%51%76%1B%28%42 +PASS U+5283 劃 %1B%24%42%33%44%1B%28%42 +PASS U+5287 劇 %1B%24%42%37%60%1B%28%42 +PASS U+5288 劈 %1B%24%42%51%7C%1B%28%42 +PASS U+5289 劉 %1B%24%42%4E%2D%1B%28%42 +PASS U+528D 劍 %1B%24%42%51%78%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1001-2000-expected.txt new file mode 100644 index 0000000..60e7a61 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_1001-2000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 954 PASS, 46 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5291 劑 %1B%24%42%51%7D%1B%28%42 +PASS U+5292 劒 %1B%24%42%51%7A%1B%28%42 +PASS U+5294 劔 %1B%24%42%51%79%1B%28%42 +PASS U+529B 力 %1B%24%42%4E%4F%1B%28%42 +FAIL U+529C 劜 %1B%24%42%79%49%1B%28%42 assert_equals: expected "%1B%24%42%79%49" but got "%26%23%32%31%31%34%38%3B" +PASS U+529F 功 %1B%24%42%38%79%1B%28%42 +PASS U+52A0 加 %1B%24%42%32%43%1B%28%42 +PASS U+52A3 劣 %1B%24%42%4E%74%1B%28%42 +FAIL U+52A6 劦 %1B%24%42%79%4A%1B%28%42 assert_equals: expected "%1B%24%42%79%4A" but got "%26%23%32%31%31%35%38%3B" +PASS U+52A9 助 %1B%24%42%3D%75%1B%28%42 +PASS U+52AA 努 %1B%24%42%45%58%1B%28%42 +PASS U+52AB 劫 %1B%24%42%39%65%1B%28%42 +PASS U+52AC 劬 %1B%24%42%52%22%1B%28%42 +PASS U+52AD 劭 %1B%24%42%52%23%1B%28%42 +FAIL U+52AF 劯 %1B%24%42%7B%3C%1B%28%42 assert_equals: expected "%1B%24%42%7B%3C" but got "%26%23%32%31%31%36%37%3B" +PASS U+52B1 励 %1B%24%42%4E%65%1B%28%42 +PASS U+52B4 労 %1B%24%42%4F%2B%1B%28%42 +PASS U+52B5 劵 %1B%24%42%52%25%1B%28%42 +PASS U+52B9 効 %1B%24%42%38%7A%1B%28%42 +PASS U+52BC 劼 %1B%24%42%52%24%1B%28%42 +PASS U+52BE 劾 %1B%24%42%33%2F%1B%28%42 +FAIL U+52C0 勀 %1B%24%42%79%4B%1B%28%42 assert_equals: expected "%1B%24%42%79%4B" but got "%26%23%32%31%31%38%34%3B" +PASS U+52C1 勁 %1B%24%42%52%26%1B%28%42 +PASS U+52C3 勃 %1B%24%42%4B%56%1B%28%42 +PASS U+52C5 勅 %1B%24%42%44%3C%1B%28%42 +PASS U+52C7 勇 %1B%24%42%4D%26%1B%28%42 +PASS U+52C9 勉 %1B%24%42%4A%59%1B%28%42 +PASS U+52CD 勍 %1B%24%42%52%27%1B%28%42 +PASS U+52D2 勒 %1B%24%42%70%55%1B%28%42 +PASS U+52D5 動 %1B%24%42%46%30%1B%28%42 +PASS U+52D7 勗 %1B%24%42%52%28%1B%28%42 +PASS U+52D8 勘 %1B%24%42%34%2A%1B%28%42 +PASS U+52D9 務 %1B%24%42%4C%33%1B%28%42 +FAIL U+52DB 勛 %1B%24%42%79%4C%1B%28%42 assert_equals: expected "%1B%24%42%79%4C" but got "%26%23%32%31%32%31%31%3B" +PASS U+52DD 勝 %1B%24%42%3E%21%1B%28%42 +PASS U+52DE 勞 %1B%24%42%52%29%1B%28%42 +PASS U+52DF 募 %1B%24%42%4A%67%1B%28%42 +PASS U+52E0 勠 %1B%24%42%52%2D%1B%28%42 +PASS U+52E2 勢 %1B%24%42%40%2A%1B%28%42 +PASS U+52E3 勣 %1B%24%42%52%2A%1B%28%42 +PASS U+52E4 勤 %1B%24%42%36%50%1B%28%42 +PASS U+52E6 勦 %1B%24%42%52%2B%1B%28%42 +PASS U+52E7 勧 %1B%24%42%34%2B%1B%28%42 +PASS U+52F2 勲 %1B%24%42%37%2E%1B%28%42 +PASS U+52F3 勳 %1B%24%42%52%2E%1B%28%42 +PASS U+52F5 勵 %1B%24%42%52%2F%1B%28%42 +PASS U+52F8 勸 %1B%24%42%52%30%1B%28%42 +PASS U+52F9 勹 %1B%24%42%52%31%1B%28%42 +PASS U+52FA 勺 %1B%24%42%3C%5B%1B%28%42 +PASS U+52FE 勾 %1B%24%42%38%7B%1B%28%42 +PASS U+52FF 勿 %1B%24%42%4C%5E%1B%28%42 +FAIL U+5300 匀 %1B%24%42%79%4D%1B%28%42 assert_equals: expected "%1B%24%42%79%4D" but got "%26%23%32%31%32%34%38%3B" +PASS U+5301 匁 %1B%24%42%4C%68%1B%28%42 +PASS U+5302 匂 %1B%24%42%46%77%1B%28%42 +PASS U+5305 包 %1B%24%42%4A%71%1B%28%42 +PASS U+5306 匆 %1B%24%42%52%32%1B%28%42 +FAIL U+5307 匇 %1B%24%42%79%4E%1B%28%42 assert_equals: expected "%1B%24%42%79%4E" but got "%26%23%32%31%32%35%35%3B" +PASS U+5308 匈 %1B%24%42%52%33%1B%28%42 +PASS U+530D 匍 %1B%24%42%52%35%1B%28%42 +PASS U+530F 匏 %1B%24%42%52%37%1B%28%42 +PASS U+5310 匐 %1B%24%42%52%36%1B%28%42 +PASS U+5315 匕 %1B%24%42%52%38%1B%28%42 +PASS U+5316 化 %1B%24%42%32%3D%1B%28%42 +PASS U+5317 北 %1B%24%42%4B%4C%1B%28%42 +PASS U+5319 匙 %1B%24%42%3A%7C%1B%28%42 +PASS U+531A 匚 %1B%24%42%52%39%1B%28%42 +PASS U+531D 匝 %1B%24%42%41%59%1B%28%42 +PASS U+5320 匠 %1B%24%42%3E%22%1B%28%42 +PASS U+5321 匡 %1B%24%42%36%29%1B%28%42 +PASS U+5323 匣 %1B%24%42%52%3A%1B%28%42 +FAIL U+5324 匤 %1B%24%42%79%4F%1B%28%42 assert_equals: expected "%1B%24%42%79%4F" but got "%26%23%32%31%32%38%34%3B" +PASS U+532A 匪 %1B%24%42%48%5B%1B%28%42 +PASS U+532F 匯 %1B%24%42%52%3B%1B%28%42 +PASS U+5331 匱 %1B%24%42%52%3C%1B%28%42 +PASS U+5333 匳 %1B%24%42%52%3D%1B%28%42 +PASS U+5338 匸 %1B%24%42%52%3E%1B%28%42 +PASS U+5339 匹 %1B%24%42%49%24%1B%28%42 +PASS U+533A 区 %1B%24%42%36%68%1B%28%42 +PASS U+533B 医 %1B%24%42%30%65%1B%28%42 +PASS U+533F 匿 %1B%24%42%46%3F%1B%28%42 +PASS U+5340 區 %1B%24%42%52%3F%1B%28%42 +PASS U+5341 十 %1B%24%42%3D%3D%1B%28%42 +PASS U+5343 千 %1B%24%42%40%69%1B%28%42 +PASS U+5345 卅 %1B%24%42%52%41%1B%28%42 +PASS U+5346 卆 %1B%24%42%52%40%1B%28%42 +PASS U+5347 升 %1B%24%42%3E%23%1B%28%42 +PASS U+5348 午 %1B%24%42%38%61%1B%28%42 +PASS U+5349 卉 %1B%24%42%52%43%1B%28%42 +PASS U+534A 半 %1B%24%42%48%3E%1B%28%42 +PASS U+534D 卍 %1B%24%42%52%44%1B%28%42 +PASS U+5351 卑 %1B%24%42%48%5C%1B%28%42 +PASS U+5352 卒 %1B%24%42%42%34%1B%28%42 +PASS U+5353 卓 %1B%24%42%42%6E%1B%28%42 +PASS U+5354 協 %1B%24%42%36%28%1B%28%42 +PASS U+5357 南 %1B%24%42%46%6E%1B%28%42 +PASS U+5358 単 %1B%24%42%43%31%1B%28%42 +PASS U+535A 博 %1B%24%42%47%6E%1B%28%42 +PASS U+535C 卜 %1B%24%42%4B%4E%1B%28%42 +PASS U+535E 卞 %1B%24%42%52%46%1B%28%42 +PASS U+5360 占 %1B%24%42%40%6A%1B%28%42 +PASS U+5366 卦 %1B%24%42%37%35%1B%28%42 +PASS U+5369 卩 %1B%24%42%52%47%1B%28%42 +PASS U+536E 卮 %1B%24%42%52%48%1B%28%42 +PASS U+536F 卯 %1B%24%42%31%2C%1B%28%42 +PASS U+5370 印 %1B%24%42%30%75%1B%28%42 +PASS U+5371 危 %1B%24%42%34%6D%1B%28%42 +FAIL U+5372 卲 %1B%24%42%79%50%1B%28%42 assert_equals: expected "%1B%24%42%79%50" but got "%26%23%32%31%33%36%32%3B" +PASS U+5373 即 %1B%24%42%42%28%1B%28%42 +PASS U+5374 却 %1B%24%42%35%51%1B%28%42 +PASS U+5375 卵 %1B%24%42%4D%71%1B%28%42 +PASS U+5377 卷 %1B%24%42%52%4B%1B%28%42 +PASS U+5378 卸 %1B%24%42%32%37%1B%28%42 +PASS U+537B 卻 %1B%24%42%52%4A%1B%28%42 +PASS U+537F 卿 %1B%24%42%36%2A%1B%28%42 +PASS U+5382 厂 %1B%24%42%52%4C%1B%28%42 +PASS U+5384 厄 %1B%24%42%4C%71%1B%28%42 +FAIL U+5393 厓 %1B%24%42%79%51%1B%28%42 assert_equals: expected "%1B%24%42%79%51" but got "%26%23%32%31%33%39%35%3B" +PASS U+5396 厖 %1B%24%42%52%4D%1B%28%42 +PASS U+5398 厘 %1B%24%42%4E%52%1B%28%42 +PASS U+539A 厚 %1B%24%42%38%7C%1B%28%42 +PASS U+539F 原 %1B%24%42%38%36%1B%28%42 +PASS U+53A0 厠 %1B%24%42%52%4E%1B%28%42 +PASS U+53A5 厥 %1B%24%42%52%50%1B%28%42 +PASS U+53A6 厦 %1B%24%42%52%4F%1B%28%42 +PASS U+53A8 厨 %1B%24%42%3F%5F%1B%28%42 +PASS U+53A9 厩 %1B%24%42%31%39%1B%28%42 +PASS U+53AD 厭 %1B%24%42%31%5E%1B%28%42 +PASS U+53AE 厮 %1B%24%42%52%51%1B%28%42 +PASS U+53B0 厰 %1B%24%42%52%52%1B%28%42 +FAIL U+53B2 厲 %1B%24%42%79%52%1B%28%42 assert_equals: expected "%1B%24%42%79%52" but got "%26%23%32%31%34%32%36%3B" +PASS U+53B3 厳 %1B%24%42%38%37%1B%28%42 +PASS U+53B6 厶 %1B%24%42%52%53%1B%28%42 +PASS U+53BB 去 %1B%24%42%35%6E%1B%28%42 +PASS U+53C2 参 %1B%24%42%3B%32%1B%28%42 +PASS U+53C3 參 %1B%24%42%52%54%1B%28%42 +PASS U+53C8 又 %1B%24%42%4B%74%1B%28%42 +PASS U+53C9 叉 %1B%24%42%3A%35%1B%28%42 +PASS U+53CA 及 %1B%24%42%35%5A%1B%28%42 +PASS U+53CB 友 %1B%24%42%4D%27%1B%28%42 +PASS U+53CC 双 %1B%24%42%41%50%1B%28%42 +PASS U+53CD 反 %1B%24%42%48%3F%1B%28%42 +PASS U+53CE 収 %1B%24%42%3C%7D%1B%28%42 +PASS U+53D4 叔 %1B%24%42%3D%47%1B%28%42 +PASS U+53D6 取 %1B%24%42%3C%68%1B%28%42 +PASS U+53D7 受 %1B%24%42%3C%75%1B%28%42 +PASS U+53D9 叙 %1B%24%42%3D%76%1B%28%42 +PASS U+53DB 叛 %1B%24%42%48%40%1B%28%42 +FAIL U+53DD 叝 %1B%24%42%79%53%1B%28%42 assert_equals: expected "%1B%24%42%79%53" but got "%26%23%32%31%34%36%39%3B" +PASS U+53DF 叟 %1B%24%42%52%57%1B%28%42 +PASS U+53E1 叡 %1B%24%42%31%43%1B%28%42 +PASS U+53E2 叢 %1B%24%42%41%51%1B%28%42 +PASS U+53E3 口 %1B%24%42%38%7D%1B%28%42 +PASS U+53E4 古 %1B%24%42%38%45%1B%28%42 +PASS U+53E5 句 %1B%24%42%36%67%1B%28%42 +PASS U+53E8 叨 %1B%24%42%52%5B%1B%28%42 +PASS U+53E9 叩 %1B%24%42%43%21%1B%28%42 +PASS U+53EA 只 %1B%24%42%42%7E%1B%28%42 +PASS U+53EB 叫 %1B%24%42%36%2B%1B%28%42 +PASS U+53EC 召 %1B%24%42%3E%24%1B%28%42 +PASS U+53ED 叭 %1B%24%42%52%5C%1B%28%42 +PASS U+53EE 叮 %1B%24%42%52%5A%1B%28%42 +PASS U+53EF 可 %1B%24%42%32%44%1B%28%42 +PASS U+53F0 台 %1B%24%42%42%66%1B%28%42 +PASS U+53F1 叱 %1B%24%42%3C%38%1B%28%42 +PASS U+53F2 史 %1B%24%42%3B%4B%1B%28%42 +PASS U+53F3 右 %1B%24%42%31%26%1B%28%42 +PASS U+53F6 叶 %1B%24%42%33%70%1B%28%42 +PASS U+53F7 号 %1B%24%42%39%66%1B%28%42 +PASS U+53F8 司 %1B%24%42%3B%4A%1B%28%42 +PASS U+53FA 叺 %1B%24%42%52%5D%1B%28%42 +PASS U+5401 吁 %1B%24%42%52%5E%1B%28%42 +PASS U+5403 吃 %1B%24%42%35%49%1B%28%42 +PASS U+5404 各 %1B%24%42%33%46%1B%28%42 +PASS U+5408 合 %1B%24%42%39%67%1B%28%42 +PASS U+5409 吉 %1B%24%42%35%48%1B%28%42 +PASS U+540A 吊 %1B%24%42%44%5F%1B%28%42 +PASS U+540B 吋 %1B%24%42%31%25%1B%28%42 +PASS U+540C 同 %1B%24%42%46%31%1B%28%42 +PASS U+540D 名 %1B%24%42%4C%3E%1B%28%42 +PASS U+540E 后 %1B%24%42%39%21%1B%28%42 +PASS U+540F 吏 %1B%24%42%4D%79%1B%28%42 +PASS U+5410 吐 %1B%24%42%45%47%1B%28%42 +PASS U+5411 向 %1B%24%42%38%7E%1B%28%42 +PASS U+541B 君 %1B%24%42%37%2F%1B%28%42 +PASS U+541D 吝 %1B%24%42%52%67%1B%28%42 +PASS U+541F 吟 %1B%24%42%36%63%1B%28%42 +PASS U+5420 吠 %1B%24%42%4B%4A%1B%28%42 +PASS U+5426 否 %1B%24%42%48%5D%1B%28%42 +PASS U+5429 吩 %1B%24%42%52%66%1B%28%42 +PASS U+542B 含 %1B%24%42%34%5E%1B%28%42 +PASS U+542C 听 %1B%24%42%52%61%1B%28%42 +PASS U+542D 吭 %1B%24%42%52%62%1B%28%42 +PASS U+542E 吮 %1B%24%42%52%64%1B%28%42 +PASS U+5436 吶 %1B%24%42%52%65%1B%28%42 +PASS U+5438 吸 %1B%24%42%35%5B%1B%28%42 +PASS U+5439 吹 %1B%24%42%3F%61%1B%28%42 +PASS U+543B 吻 %1B%24%42%4A%2D%1B%28%42 +PASS U+543C 吼 %1B%24%42%52%63%1B%28%42 +PASS U+543D 吽 %1B%24%42%52%5F%1B%28%42 +PASS U+543E 吾 %1B%24%42%38%63%1B%28%42 +PASS U+5440 呀 %1B%24%42%52%60%1B%28%42 +PASS U+5442 呂 %1B%24%42%4F%24%1B%28%42 +PASS U+5446 呆 %1B%24%42%4A%72%1B%28%42 +PASS U+5448 呈 %1B%24%42%44%68%1B%28%42 +PASS U+5449 呉 %1B%24%42%38%62%1B%28%42 +PASS U+544A 告 %1B%24%42%39%70%1B%28%42 +PASS U+544E 呎 %1B%24%42%52%68%1B%28%42 +PASS U+5451 呑 %1B%24%42%46%5D%1B%28%42 +PASS U+545F 呟 %1B%24%42%52%6C%1B%28%42 +PASS U+5468 周 %1B%24%42%3C%7E%1B%28%42 +PASS U+546A 呪 %1B%24%42%3C%76%1B%28%42 +PASS U+5470 呰 %1B%24%42%52%6F%1B%28%42 +PASS U+5471 呱 %1B%24%42%52%6D%1B%28%42 +PASS U+5473 味 %1B%24%42%4C%23%1B%28%42 +PASS U+5475 呵 %1B%24%42%52%6A%1B%28%42 +PASS U+5476 呶 %1B%24%42%52%73%1B%28%42 +PASS U+5477 呷 %1B%24%42%52%6E%1B%28%42 +PASS U+547B 呻 %1B%24%42%52%71%1B%28%42 +PASS U+547C 呼 %1B%24%42%38%46%1B%28%42 +PASS U+547D 命 %1B%24%42%4C%3F%1B%28%42 +PASS U+5480 咀 %1B%24%42%52%72%1B%28%42 +PASS U+5484 咄 %1B%24%42%52%74%1B%28%42 +PASS U+5486 咆 %1B%24%42%52%76%1B%28%42 +FAIL U+548A 咊 %1B%24%42%79%56%1B%28%42 assert_equals: expected "%1B%24%42%79%56" but got "%26%23%32%31%36%34%32%3B" +PASS U+548B 咋 %1B%24%42%3A%70%1B%28%42 +PASS U+548C 和 %1B%24%42%4F%42%1B%28%42 +PASS U+548E 咎 %1B%24%42%52%6B%1B%28%42 +PASS U+548F 咏 %1B%24%42%52%69%1B%28%42 +PASS U+5490 咐 %1B%24%42%52%75%1B%28%42 +PASS U+5492 咒 %1B%24%42%52%70%1B%28%42 +FAIL U+549C 咜 %1B%24%42%79%55%1B%28%42 assert_equals: expected "%1B%24%42%79%55" but got "%26%23%32%31%36%36%30%3B" +PASS U+54A2 咢 %1B%24%42%52%78%1B%28%42 +PASS U+54A4 咤 %1B%24%42%53%23%1B%28%42 +PASS U+54A5 咥 %1B%24%42%52%7A%1B%28%42 +PASS U+54A8 咨 %1B%24%42%52%7E%1B%28%42 +FAIL U+54A9 咩 %1B%24%42%79%57%1B%28%42 assert_equals: expected "%1B%24%42%79%57" but got "%26%23%32%31%36%37%33%3B" +PASS U+54AB 咫 %1B%24%42%53%21%1B%28%42 +PASS U+54AC 咬 %1B%24%42%52%7B%1B%28%42 +PASS U+54AF 咯 %1B%24%42%53%3E%1B%28%42 +PASS U+54B2 咲 %1B%24%42%3A%69%1B%28%42 +PASS U+54B3 咳 %1B%24%42%33%31%1B%28%42 +PASS U+54B8 咸 %1B%24%42%52%79%1B%28%42 +PASS U+54BC 咼 %1B%24%42%53%25%1B%28%42 +PASS U+54BD 咽 %1B%24%42%30%76%1B%28%42 +PASS U+54BE 咾 %1B%24%42%53%24%1B%28%42 +PASS U+54C0 哀 %1B%24%42%30%25%1B%28%42 +PASS U+54C1 品 %1B%24%42%49%4A%1B%28%42 +PASS U+54C2 哂 %1B%24%42%53%22%1B%28%42 +PASS U+54C4 哄 %1B%24%42%52%7C%1B%28%42 +PASS U+54C7 哇 %1B%24%42%52%77%1B%28%42 +PASS U+54C8 哈 %1B%24%42%52%7D%1B%28%42 +PASS U+54C9 哉 %1B%24%42%3A%48%1B%28%42 +PASS U+54D8 哘 %1B%24%42%53%26%1B%28%42 +PASS U+54E1 員 %1B%24%42%30%77%1B%28%42 +PASS U+54E2 哢 %1B%24%42%53%2F%1B%28%42 +PASS U+54E5 哥 %1B%24%42%53%27%1B%28%42 +PASS U+54E6 哦 %1B%24%42%53%28%1B%28%42 +PASS U+54E8 哨 %1B%24%42%3E%25%1B%28%42 +PASS U+54E9 哩 %1B%24%42%4B%69%1B%28%42 +PASS U+54ED 哭 %1B%24%42%53%2D%1B%28%42 +PASS U+54EE 哮 %1B%24%42%53%2C%1B%28%42 +PASS U+54F2 哲 %1B%24%42%45%2F%1B%28%42 +PASS U+54FA 哺 %1B%24%42%53%2E%1B%28%42 +PASS U+54FD 哽 %1B%24%42%53%2B%1B%28%42 +FAIL U+54FF 哿 %1B%24%42%79%58%1B%28%42 assert_equals: expected "%1B%24%42%79%58" but got "%26%23%32%31%37%35%39%3B" +PASS U+5504 唄 %1B%24%42%31%34%1B%28%42 +PASS U+5506 唆 %1B%24%42%3A%36%1B%28%42 +PASS U+5507 唇 %1B%24%42%3F%30%1B%28%42 +PASS U+550F 唏 %1B%24%42%53%29%1B%28%42 +PASS U+5510 唐 %1B%24%42%45%62%1B%28%42 +PASS U+5514 唔 %1B%24%42%53%2A%1B%28%42 +PASS U+5516 唖 %1B%24%42%30%22%1B%28%42 +PASS U+552E 售 %1B%24%42%53%34%1B%28%42 +PASS U+552F 唯 %1B%24%42%4D%23%1B%28%42 +PASS U+5531 唱 %1B%24%42%3E%27%1B%28%42 +PASS U+5533 唳 %1B%24%42%53%3A%1B%28%42 +PASS U+5538 唸 %1B%24%42%53%39%1B%28%42 +PASS U+5539 唹 %1B%24%42%53%30%1B%28%42 +PASS U+553E 唾 %1B%24%42%42%43%1B%28%42 +PASS U+5540 啀 %1B%24%42%53%31%1B%28%42 +PASS U+5544 啄 %1B%24%42%42%6F%1B%28%42 +PASS U+5545 啅 %1B%24%42%53%36%1B%28%42 +PASS U+5546 商 %1B%24%42%3E%26%1B%28%42 +PASS U+554C 啌 %1B%24%42%53%33%1B%28%42 +PASS U+554F 問 %1B%24%42%4C%64%1B%28%42 +PASS U+5553 啓 %1B%24%42%37%3C%1B%28%42 +PASS U+5556 啖 %1B%24%42%53%37%1B%28%42 +PASS U+5557 啗 %1B%24%42%53%38%1B%28%42 +PASS U+555C 啜 %1B%24%42%53%35%1B%28%42 +PASS U+555D 啝 %1B%24%42%53%3B%1B%28%42 +PASS U+5563 啣 %1B%24%42%53%32%1B%28%42 +PASS U+557B 啻 %1B%24%42%53%41%1B%28%42 +PASS U+557C 啼 %1B%24%42%53%46%1B%28%42 +PASS U+557E 啾 %1B%24%42%53%42%1B%28%42 +PASS U+5580 喀 %1B%24%42%53%3D%1B%28%42 +PASS U+5583 喃 %1B%24%42%53%47%1B%28%42 +PASS U+5584 善 %1B%24%42%41%31%1B%28%42 +FAIL U+5586 喆 %1B%24%42%79%59%1B%28%42 assert_equals: expected "%1B%24%42%79%59" but got "%26%23%32%31%38%39%34%3B" +PASS U+5587 喇 %1B%24%42%53%49%1B%28%42 +PASS U+5589 喉 %1B%24%42%39%22%1B%28%42 +PASS U+558A 喊 %1B%24%42%53%3F%1B%28%42 +PASS U+558B 喋 %1B%24%42%43%7D%1B%28%42 +PASS U+5598 喘 %1B%24%42%53%43%1B%28%42 +PASS U+5599 喙 %1B%24%42%53%3C%1B%28%42 +PASS U+559A 喚 %1B%24%42%34%2D%1B%28%42 +PASS U+559C 喜 %1B%24%42%34%6E%1B%28%42 +PASS U+559D 喝 %1B%24%42%33%65%1B%28%42 +PASS U+559E 喞 %1B%24%42%53%44%1B%28%42 +PASS U+559F 喟 %1B%24%42%53%40%1B%28%42 +PASS U+55A7 喧 %1B%24%42%37%76%1B%28%42 +PASS U+55A8 喨 %1B%24%42%53%4A%1B%28%42 +PASS U+55A9 喩 %1B%24%42%53%48%1B%28%42 +PASS U+55AA 喪 %1B%24%42%41%53%1B%28%42 +PASS U+55AB 喫 %1B%24%42%35%4A%1B%28%42 +PASS U+55AC 喬 %1B%24%42%36%2C%1B%28%42 +PASS U+55AE 單 %1B%24%42%53%45%1B%28%42 +PASS U+55B0 喰 %1B%24%42%36%74%1B%28%42 +PASS U+55B6 営 %1B%24%42%31%44%1B%28%42 +PASS U+55C4 嗄 %1B%24%42%53%4E%1B%28%42 +PASS U+55C5 嗅 %1B%24%42%53%4C%1B%28%42 +PASS U+55C7 嗇 %1B%24%42%54%27%1B%28%42 +PASS U+55D4 嗔 %1B%24%42%53%51%1B%28%42 +PASS U+55DA 嗚 %1B%24%42%53%4B%1B%28%42 +PASS U+55DC 嗜 %1B%24%42%53%4F%1B%28%42 +PASS U+55DF 嗟 %1B%24%42%53%4D%1B%28%42 +PASS U+55E3 嗣 %1B%24%42%3B%4C%1B%28%42 +PASS U+55E4 嗤 %1B%24%42%53%50%1B%28%42 +PASS U+55F7 嗷 %1B%24%42%53%53%1B%28%42 +PASS U+55F9 嗹 %1B%24%42%53%58%1B%28%42 +PASS U+55FD 嗽 %1B%24%42%53%56%1B%28%42 +PASS U+55FE 嗾 %1B%24%42%53%55%1B%28%42 +PASS U+5606 嘆 %1B%24%42%43%32%1B%28%42 +PASS U+5609 嘉 %1B%24%42%32%45%1B%28%42 +PASS U+5614 嘔 %1B%24%42%53%52%1B%28%42 +PASS U+5616 嘖 %1B%24%42%53%54%1B%28%42 +PASS U+5617 嘗 %1B%24%42%3E%28%1B%28%42 +PASS U+5618 嘘 %1B%24%42%31%33%1B%28%42 +PASS U+561B 嘛 %1B%24%42%53%57%1B%28%42 +PASS U+5629 嘩 %1B%24%42%32%5E%1B%28%42 +PASS U+562F 嘯 %1B%24%42%53%62%1B%28%42 +PASS U+5631 嘱 %1B%24%42%3E%7C%1B%28%42 +PASS U+5632 嘲 %1B%24%42%53%5E%1B%28%42 +PASS U+5634 嘴 %1B%24%42%53%5C%1B%28%42 +PASS U+5636 嘶 %1B%24%42%53%5D%1B%28%42 +PASS U+5638 嘸 %1B%24%42%53%5F%1B%28%42 +PASS U+5642 噂 %1B%24%42%31%3D%1B%28%42 +PASS U+564C 噌 %1B%24%42%41%39%1B%28%42 +PASS U+564E 噎 %1B%24%42%53%59%1B%28%42 +PASS U+5650 噐 %1B%24%42%53%5A%1B%28%42 +PASS U+565B 噛 %1B%24%42%33%7A%1B%28%42 +PASS U+5664 噤 %1B%24%42%53%61%1B%28%42 +PASS U+5668 器 %1B%24%42%34%6F%1B%28%42 +PASS U+566A 噪 %1B%24%42%53%64%1B%28%42 +PASS U+566B 噫 %1B%24%42%53%60%1B%28%42 +PASS U+566C 噬 %1B%24%42%53%63%1B%28%42 +PASS U+5674 噴 %1B%24%42%4A%2E%1B%28%42 +PASS U+5678 噸 %1B%24%42%46%55%1B%28%42 +PASS U+567A 噺 %1B%24%42%48%38%1B%28%42 +PASS U+5680 嚀 %1B%24%42%53%66%1B%28%42 +PASS U+5686 嚆 %1B%24%42%53%65%1B%28%42 +PASS U+5687 嚇 %1B%24%42%33%45%1B%28%42 +PASS U+568A 嚊 %1B%24%42%53%67%1B%28%42 +PASS U+568F 嚏 %1B%24%42%53%6A%1B%28%42 +PASS U+5694 嚔 %1B%24%42%53%69%1B%28%42 +PASS U+56A0 嚠 %1B%24%42%53%68%1B%28%42 +PASS U+56A2 嚢 %1B%24%42%47%39%1B%28%42 +PASS U+56A5 嚥 %1B%24%42%53%6B%1B%28%42 +PASS U+56AE 嚮 %1B%24%42%53%6C%1B%28%42 +PASS U+56B4 嚴 %1B%24%42%53%6E%1B%28%42 +PASS U+56B6 嚶 %1B%24%42%53%6D%1B%28%42 +PASS U+56BC 嚼 %1B%24%42%53%70%1B%28%42 +PASS U+56C0 囀 %1B%24%42%53%73%1B%28%42 +PASS U+56C1 囁 %1B%24%42%53%71%1B%28%42 +PASS U+56C2 囂 %1B%24%42%53%6F%1B%28%42 +PASS U+56C3 囃 %1B%24%42%53%72%1B%28%42 +PASS U+56C8 囈 %1B%24%42%53%74%1B%28%42 +PASS U+56CE 囎 %1B%24%42%53%75%1B%28%42 +PASS U+56D1 囑 %1B%24%42%53%76%1B%28%42 +PASS U+56D3 囓 %1B%24%42%53%77%1B%28%42 +PASS U+56D7 囗 %1B%24%42%53%78%1B%28%42 +PASS U+56D8 囘 %1B%24%42%51%45%1B%28%42 +PASS U+56DA 囚 %1B%24%42%3C%7C%1B%28%42 +PASS U+56DB 四 %1B%24%42%3B%4D%1B%28%42 +PASS U+56DE 回 %1B%24%42%32%73%1B%28%42 +PASS U+56E0 因 %1B%24%42%30%78%1B%28%42 +PASS U+56E3 団 %1B%24%42%43%44%1B%28%42 +PASS U+56EE 囮 %1B%24%42%53%79%1B%28%42 +PASS U+56F0 困 %1B%24%42%3A%24%1B%28%42 +PASS U+56F2 囲 %1B%24%42%30%4F%1B%28%42 +PASS U+56F3 図 %1B%24%42%3F%5E%1B%28%42 +PASS U+56F9 囹 %1B%24%42%53%7A%1B%28%42 +PASS U+56FA 固 %1B%24%42%38%47%1B%28%42 +PASS U+56FD 国 %1B%24%42%39%71%1B%28%42 +PASS U+56FF 囿 %1B%24%42%53%7C%1B%28%42 +PASS U+5700 圀 %1B%24%42%53%7B%1B%28%42 +PASS U+5703 圃 %1B%24%42%4A%60%1B%28%42 +PASS U+5704 圄 %1B%24%42%53%7D%1B%28%42 +PASS U+5708 圈 %1B%24%42%54%21%1B%28%42 +PASS U+5709 圉 %1B%24%42%53%7E%1B%28%42 +PASS U+570B 國 %1B%24%42%54%22%1B%28%42 +PASS U+570D 圍 %1B%24%42%54%23%1B%28%42 +PASS U+570F 圏 %1B%24%42%37%77%1B%28%42 +PASS U+5712 園 %1B%24%42%31%60%1B%28%42 +PASS U+5713 圓 %1B%24%42%54%24%1B%28%42 +PASS U+5716 圖 %1B%24%42%54%26%1B%28%42 +PASS U+5718 團 %1B%24%42%54%25%1B%28%42 +PASS U+571C 圜 %1B%24%42%54%28%1B%28%42 +PASS U+571F 土 %1B%24%42%45%5A%1B%28%42 +PASS U+5726 圦 %1B%24%42%54%29%1B%28%42 +PASS U+5727 圧 %1B%24%42%30%35%1B%28%42 +PASS U+5728 在 %1B%24%42%3A%5F%1B%28%42 +PASS U+572D 圭 %1B%24%42%37%3D%1B%28%42 +PASS U+5730 地 %1B%24%42%43%4F%1B%28%42 +PASS U+5737 圷 %1B%24%42%54%2A%1B%28%42 +PASS U+5738 圸 %1B%24%42%54%2B%1B%28%42 +PASS U+573B 圻 %1B%24%42%54%2D%1B%28%42 +PASS U+5740 址 %1B%24%42%54%2E%1B%28%42 +PASS U+5742 坂 %1B%24%42%3A%64%1B%28%42 +PASS U+5747 均 %1B%24%42%36%51%1B%28%42 +PASS U+574A 坊 %1B%24%42%4B%37%1B%28%42 +PASS U+574E 坎 %1B%24%42%54%2C%1B%28%42 +PASS U+574F 坏 %1B%24%42%54%2F%1B%28%42 +PASS U+5750 坐 %1B%24%42%3A%41%1B%28%42 +PASS U+5751 坑 %1B%24%42%39%23%1B%28%42 +FAIL U+5759 坙 %1B%24%42%79%5A%1B%28%42 assert_equals: expected "%1B%24%42%79%5A" but got "%26%23%32%32%33%36%31%3B" +PASS U+5761 坡 %1B%24%42%54%33%1B%28%42 +PASS U+5764 坤 %1B%24%42%3A%25%1B%28%42 +FAIL U+5765 坥 %1B%24%42%79%5B%1B%28%42 assert_equals: expected "%1B%24%42%79%5B" but got "%26%23%32%32%33%37%33%3B" +PASS U+5766 坦 %1B%24%42%43%33%1B%28%42 +PASS U+5769 坩 %1B%24%42%54%30%1B%28%42 +PASS U+576A 坪 %1B%24%42%44%5A%1B%28%42 +PASS U+577F 坿 %1B%24%42%54%34%1B%28%42 +PASS U+5782 垂 %1B%24%42%3F%62%1B%28%42 +PASS U+5788 垈 %1B%24%42%54%32%1B%28%42 +PASS U+5789 垉 %1B%24%42%54%35%1B%28%42 +PASS U+578B 型 %1B%24%42%37%3F%1B%28%42 +PASS U+5793 垓 %1B%24%42%54%36%1B%28%42 +PASS U+57A0 垠 %1B%24%42%54%37%1B%28%42 +PASS U+57A2 垢 %1B%24%42%39%24%1B%28%42 +PASS U+57A3 垣 %1B%24%42%33%40%1B%28%42 +PASS U+57A4 垤 %1B%24%42%54%39%1B%28%42 +PASS U+57AA 垪 %1B%24%42%54%3A%1B%28%42 +FAIL U+57AC 垬 %1B%24%42%79%5C%1B%28%42 assert_equals: expected "%1B%24%42%79%5C" but got "%26%23%32%32%34%34%34%3B" +PASS U+57B0 垰 %1B%24%42%54%3B%1B%28%42 +PASS U+57B3 垳 %1B%24%42%54%38%1B%28%42 +PASS U+57C0 埀 %1B%24%42%54%31%1B%28%42 +PASS U+57C3 埃 %1B%24%42%54%3C%1B%28%42 +PASS U+57C6 埆 %1B%24%42%54%3D%1B%28%42 +FAIL U+57C7 埇 %1B%24%42%79%5E%1B%28%42 assert_equals: expected "%1B%24%42%79%5E" but got "%26%23%32%32%34%37%31%3B" +FAIL U+57C8 埈 %1B%24%42%79%5D%1B%28%42 assert_equals: expected "%1B%24%42%79%5D" but got "%26%23%32%32%34%37%32%3B" +PASS U+57CB 埋 %1B%24%42%4B%64%1B%28%42 +PASS U+57CE 城 %1B%24%42%3E%6B%1B%28%42 +PASS U+57D2 埒 %1B%24%42%54%3F%1B%28%42 +PASS U+57D3 埓 %1B%24%42%54%40%1B%28%42 +PASS U+57D4 埔 %1B%24%42%54%3E%1B%28%42 +PASS U+57D6 埖 %1B%24%42%54%42%1B%28%42 +PASS U+57DC 埜 %1B%24%42%47%38%1B%28%42 +PASS U+57DF 域 %1B%24%42%30%68%1B%28%42 +PASS U+57E0 埠 %1B%24%42%49%56%1B%28%42 +PASS U+57E3 埣 %1B%24%42%54%43%1B%28%42 +PASS U+57F4 埴 %1B%24%42%3E%7D%1B%28%42 +PASS U+57F7 執 %1B%24%42%3C%39%1B%28%42 +PASS U+57F9 培 %1B%24%42%47%5D%1B%28%42 +PASS U+57FA 基 %1B%24%42%34%70%1B%28%42 +PASS U+57FC 埼 %1B%24%42%3A%6B%1B%28%42 +PASS U+5800 堀 %1B%24%42%4B%59%1B%28%42 +PASS U+5802 堂 %1B%24%42%46%32%1B%28%42 +PASS U+5805 堅 %1B%24%42%37%78%1B%28%42 +PASS U+5806 堆 %1B%24%42%42%4F%1B%28%42 +PASS U+580A 堊 %1B%24%42%54%41%1B%28%42 +PASS U+580B 堋 %1B%24%42%54%44%1B%28%42 +PASS U+5815 堕 %1B%24%42%42%44%1B%28%42 +PASS U+5819 堙 %1B%24%42%54%45%1B%28%42 +PASS U+581D 堝 %1B%24%42%54%46%1B%28%42 +PASS U+5821 堡 %1B%24%42%54%48%1B%28%42 +PASS U+5824 堤 %1B%24%42%44%69%1B%28%42 +PASS U+582A 堪 %1B%24%42%34%2E%1B%28%42 +PASS U+582F 堯 %1B%24%42%74%21%1B%28%42 +PASS U+5830 堰 %1B%24%42%31%61%1B%28%42 +PASS U+5831 報 %1B%24%42%4A%73%1B%28%42 +PASS U+5834 場 %1B%24%42%3E%6C%1B%28%42 +PASS U+5835 堵 %1B%24%42%45%48%1B%28%42 +PASS U+583A 堺 %1B%24%42%3A%66%1B%28%42 +PASS U+583D 堽 %1B%24%42%54%4E%1B%28%42 +PASS U+5840 塀 %1B%24%42%4A%3D%1B%28%42 +PASS U+5841 塁 %1B%24%42%4E%5D%1B%28%42 +PASS U+584A 塊 %1B%24%42%32%74%1B%28%42 +PASS U+584B 塋 %1B%24%42%54%4A%1B%28%42 +PASS U+5851 塑 %1B%24%42%41%3A%1B%28%42 +PASS U+5852 塒 %1B%24%42%54%4D%1B%28%42 +PASS U+5854 塔 %1B%24%42%45%63%1B%28%42 +PASS U+5857 塗 %1B%24%42%45%49%1B%28%42 +PASS U+5858 塘 %1B%24%42%45%64%1B%28%42 +PASS U+5859 塙 %1B%24%42%48%39%1B%28%42 +PASS U+585A 塚 %1B%24%42%44%4D%1B%28%42 +PASS U+585E 塞 %1B%24%42%3A%49%1B%28%42 +PASS U+5862 塢 %1B%24%42%54%49%1B%28%42 +PASS U+5869 塩 %1B%24%42%31%76%1B%28%42 +PASS U+586B 填 %1B%24%42%45%36%1B%28%42 +PASS U+5870 塰 %1B%24%42%54%4B%1B%28%42 +PASS U+5872 塲 %1B%24%42%54%47%1B%28%42 +PASS U+5875 塵 %1B%24%42%3F%50%1B%28%42 +PASS U+5879 塹 %1B%24%42%54%4F%1B%28%42 +PASS U+587E 塾 %1B%24%42%3D%4E%1B%28%42 +PASS U+5883 境 %1B%24%42%36%2D%1B%28%42 +PASS U+5885 墅 %1B%24%42%54%50%1B%28%42 +PASS U+5893 墓 %1B%24%42%4A%68%1B%28%42 +PASS U+5897 増 %1B%24%42%41%7D%1B%28%42 +PASS U+589C 墜 %1B%24%42%44%46%1B%28%42 +FAIL U+589E 增 %1B%24%42%79%61%1B%28%42 assert_equals: expected "%1B%24%42%79%61" but got "%26%23%32%32%36%38%36%3B" +PASS U+589F 墟 %1B%24%42%54%52%1B%28%42 +PASS U+58A8 墨 %1B%24%42%4B%4F%1B%28%42 +PASS U+58AB 墫 %1B%24%42%54%53%1B%28%42 +PASS U+58AE 墮 %1B%24%42%54%58%1B%28%42 +FAIL U+58B2 墲 %1B%24%42%79%62%1B%28%42 assert_equals: expected "%1B%24%42%79%62" but got "%26%23%32%32%37%30%36%3B" +PASS U+58B3 墳 %1B%24%42%4A%2F%1B%28%42 +PASS U+58B8 墸 %1B%24%42%54%57%1B%28%42 +PASS U+58B9 墹 %1B%24%42%54%51%1B%28%42 +PASS U+58BA 墺 %1B%24%42%54%54%1B%28%42 +PASS U+58BB 墻 %1B%24%42%54%56%1B%28%42 +PASS U+58BE 墾 %1B%24%42%3A%26%1B%28%42 +PASS U+58C1 壁 %1B%24%42%4A%49%1B%28%42 +PASS U+58C5 壅 %1B%24%42%54%59%1B%28%42 +PASS U+58C7 壇 %1B%24%42%43%45%1B%28%42 +PASS U+58CA 壊 %1B%24%42%32%75%1B%28%42 +PASS U+58CC 壌 %1B%24%42%3E%6D%1B%28%42 +PASS U+58D1 壑 %1B%24%42%54%5B%1B%28%42 +PASS U+58D3 壓 %1B%24%42%54%5A%1B%28%42 +PASS U+58D5 壕 %1B%24%42%39%68%1B%28%42 +PASS U+58D7 壗 %1B%24%42%54%5C%1B%28%42 +PASS U+58D8 壘 %1B%24%42%54%5E%1B%28%42 +PASS U+58D9 壙 %1B%24%42%54%5D%1B%28%42 +PASS U+58DC 壜 %1B%24%42%54%60%1B%28%42 +PASS U+58DE 壞 %1B%24%42%54%55%1B%28%42 +PASS U+58DF 壟 %1B%24%42%54%62%1B%28%42 +PASS U+58E4 壤 %1B%24%42%54%61%1B%28%42 +PASS U+58E5 壥 %1B%24%42%54%5F%1B%28%42 +PASS U+58EB 士 %1B%24%42%3B%4E%1B%28%42 +PASS U+58EC 壬 %1B%24%42%3F%51%1B%28%42 +PASS U+58EE 壮 %1B%24%42%41%54%1B%28%42 +PASS U+58EF 壯 %1B%24%42%54%63%1B%28%42 +PASS U+58F0 声 %1B%24%42%40%3C%1B%28%42 +PASS U+58F1 壱 %1B%24%42%30%6D%1B%28%42 +PASS U+58F2 売 %1B%24%42%47%64%1B%28%42 +PASS U+58F7 壷 %1B%24%42%44%5B%1B%28%42 +PASS U+58F9 壹 %1B%24%42%54%65%1B%28%42 +PASS U+58FA 壺 %1B%24%42%54%64%1B%28%42 +PASS U+58FB 壻 %1B%24%42%54%66%1B%28%42 +PASS U+58FC 壼 %1B%24%42%54%67%1B%28%42 +PASS U+58FD 壽 %1B%24%42%54%68%1B%28%42 +PASS U+5902 夂 %1B%24%42%54%69%1B%28%42 +PASS U+5909 変 %1B%24%42%4A%51%1B%28%42 +PASS U+590A 夊 %1B%24%42%54%6A%1B%28%42 +FAIL U+590B 夋 %1B%24%42%79%63%1B%28%42 assert_equals: expected "%1B%24%42%79%63" but got "%26%23%32%32%37%39%35%3B" +PASS U+590F 夏 %1B%24%42%32%46%1B%28%42 +PASS U+5910 夐 %1B%24%42%54%6B%1B%28%42 +PASS U+5915 夕 %1B%24%42%4D%3C%1B%28%42 +PASS U+5916 外 %1B%24%42%33%30%1B%28%42 +PASS U+5918 夘 %1B%24%42%52%49%1B%28%42 +PASS U+5919 夙 %1B%24%42%3D%48%1B%28%42 +PASS U+591A 多 %1B%24%42%42%3F%1B%28%42 +PASS U+591B 夛 %1B%24%42%54%6C%1B%28%42 +PASS U+591C 夜 %1B%24%42%4C%6B%1B%28%42 +PASS U+5922 夢 %1B%24%42%4C%34%1B%28%42 +PASS U+5925 夥 %1B%24%42%54%6E%1B%28%42 +PASS U+5927 大 %1B%24%42%42%67%1B%28%42 +PASS U+5929 天 %1B%24%42%45%37%1B%28%42 +PASS U+592A 太 %1B%24%42%42%40%1B%28%42 +PASS U+592B 夫 %1B%24%42%49%57%1B%28%42 +PASS U+592C 夬 %1B%24%42%54%6F%1B%28%42 +PASS U+592D 夭 %1B%24%42%54%70%1B%28%42 +PASS U+592E 央 %1B%24%42%31%7B%1B%28%42 +PASS U+5931 失 %1B%24%42%3C%3A%1B%28%42 +PASS U+5932 夲 %1B%24%42%54%71%1B%28%42 +PASS U+5937 夷 %1B%24%42%30%50%1B%28%42 +PASS U+5938 夸 %1B%24%42%54%72%1B%28%42 +PASS U+593E 夾 %1B%24%42%54%73%1B%28%42 +PASS U+5944 奄 %1B%24%42%31%62%1B%28%42 +PASS U+5947 奇 %1B%24%42%34%71%1B%28%42 +PASS U+5948 奈 %1B%24%42%46%60%1B%28%42 +PASS U+5949 奉 %1B%24%42%4A%74%1B%28%42 +PASS U+594E 奎 %1B%24%42%54%77%1B%28%42 +PASS U+594F 奏 %1B%24%42%41%55%1B%28%42 +PASS U+5950 奐 %1B%24%42%54%76%1B%28%42 +PASS U+5951 契 %1B%24%42%37%40%1B%28%42 +FAIL U+5953 奓 %1B%24%42%79%64%1B%28%42 assert_equals: expected "%1B%24%42%79%64" but got "%26%23%32%32%38%36%37%3B" +PASS U+5954 奔 %1B%24%42%4B%5B%1B%28%42 +PASS U+5955 奕 %1B%24%42%54%75%1B%28%42 +PASS U+5957 套 %1B%24%42%45%65%1B%28%42 +PASS U+5958 奘 %1B%24%42%54%79%1B%28%42 +PASS U+595A 奚 %1B%24%42%54%78%1B%28%42 +FAIL U+595B 奛 %1B%24%42%79%65%1B%28%42 assert_equals: expected "%1B%24%42%79%65" but got "%26%23%32%32%38%37%35%3B" +FAIL U+595D 奝 %1B%24%42%79%66%1B%28%42 assert_equals: expected "%1B%24%42%79%66" but got "%26%23%32%32%38%37%37%3B" +PASS U+5960 奠 %1B%24%42%54%7B%1B%28%42 +PASS U+5962 奢 %1B%24%42%54%7A%1B%28%42 +FAIL U+5963 奣 %1B%24%42%79%67%1B%28%42 assert_equals: expected "%1B%24%42%79%67" but got "%26%23%32%32%38%38%33%3B" +PASS U+5965 奥 %1B%24%42%31%7C%1B%28%42 +PASS U+5967 奧 %1B%24%42%54%7C%1B%28%42 +PASS U+5968 奨 %1B%24%42%3E%29%1B%28%42 +PASS U+5969 奩 %1B%24%42%54%7E%1B%28%42 +PASS U+596A 奪 %1B%24%42%43%25%1B%28%42 +PASS U+596C 奬 %1B%24%42%54%7D%1B%28%42 +PASS U+596E 奮 %1B%24%42%4A%33%1B%28%42 +PASS U+5973 女 %1B%24%42%3D%77%1B%28%42 +PASS U+5974 奴 %1B%24%42%45%5B%1B%28%42 +PASS U+5978 奸 %1B%24%42%55%21%1B%28%42 +PASS U+597D 好 %1B%24%42%39%25%1B%28%42 +PASS U+5981 妁 %1B%24%42%55%22%1B%28%42 +PASS U+5982 如 %1B%24%42%47%21%1B%28%42 +PASS U+5983 妃 %1B%24%42%48%5E%1B%28%42 +PASS U+5984 妄 %1B%24%42%4C%51%1B%28%42 +PASS U+598A 妊 %1B%24%42%47%25%1B%28%42 +PASS U+598D 妍 %1B%24%42%55%2B%1B%28%42 +PASS U+5993 妓 %1B%24%42%35%38%1B%28%42 +PASS U+5996 妖 %1B%24%42%4D%45%1B%28%42 +PASS U+5999 妙 %1B%24%42%4C%2F%1B%28%42 +PASS U+599B 妛 %1B%24%42%56%2C%1B%28%42 +PASS U+599D 妝 %1B%24%42%55%23%1B%28%42 +PASS U+59A3 妣 %1B%24%42%55%26%1B%28%42 +FAIL U+59A4 妤 %1B%24%42%79%68%1B%28%42 assert_equals: expected "%1B%24%42%79%68" but got "%26%23%32%32%39%34%38%3B" +PASS U+59A5 妥 %1B%24%42%42%45%1B%28%42 +PASS U+59A8 妨 %1B%24%42%4B%38%1B%28%42 +PASS U+59AC 妬 %1B%24%42%45%4A%1B%28%42 +PASS U+59B2 妲 %1B%24%42%55%27%1B%28%42 +PASS U+59B9 妹 %1B%24%42%4B%65%1B%28%42 +FAIL U+59BA 妺 %1B%24%42%79%69%1B%28%42 assert_equals: expected "%1B%24%42%79%69" but got "%26%23%32%32%39%37%30%3B" +PASS U+59BB 妻 %1B%24%42%3A%4A%1B%28%42 +PASS U+59BE 妾 %1B%24%42%3E%2A%1B%28%42 +PASS U+59C6 姆 %1B%24%42%55%28%1B%28%42 +PASS U+59C9 姉 %1B%24%42%3B%50%1B%28%42 +PASS U+59CB 始 %1B%24%42%3B%4F%1B%28%42 +PASS U+59D0 姐 %1B%24%42%30%39%1B%28%42 +PASS U+59D1 姑 %1B%24%42%38%48%1B%28%42 +PASS U+59D3 姓 %1B%24%42%40%2B%1B%28%42 +PASS U+59D4 委 %1B%24%42%30%51%1B%28%42 +PASS U+59D9 姙 %1B%24%42%55%2C%1B%28%42 +PASS U+59DA 姚 %1B%24%42%55%2D%1B%28%42 +PASS U+59DC 姜 %1B%24%42%55%2A%1B%28%42 +PASS U+59E5 姥 %1B%24%42%31%38%1B%28%42 +PASS U+59E6 姦 %1B%24%42%34%2F%1B%28%42 +PASS U+59E8 姨 %1B%24%42%55%29%1B%28%42 +PASS U+59EA 姪 %1B%24%42%4C%45%1B%28%42 +PASS U+59EB 姫 %1B%24%42%49%31%1B%28%42 +PASS U+59F6 姶 %1B%24%42%30%28%1B%28%42 +PASS U+59FB 姻 %1B%24%42%30%79%1B%28%42 +PASS U+59FF 姿 %1B%24%42%3B%51%1B%28%42 +PASS U+5A01 威 %1B%24%42%30%52%1B%28%42 +PASS U+5A03 娃 %1B%24%42%30%23%1B%28%42 +PASS U+5A09 娉 %1B%24%42%55%32%1B%28%42 +PASS U+5A11 娑 %1B%24%42%55%30%1B%28%42 +PASS U+5A18 娘 %1B%24%42%4C%3C%1B%28%42 +PASS U+5A1A 娚 %1B%24%42%55%33%1B%28%42 +PASS U+5A1C 娜 %1B%24%42%55%31%1B%28%42 +PASS U+5A1F 娟 %1B%24%42%55%2F%1B%28%42 +PASS U+5A20 娠 %1B%24%42%3F%31%1B%28%42 +PASS U+5A25 娥 %1B%24%42%55%2E%1B%28%42 +PASS U+5A29 娩 %1B%24%42%4A%5A%1B%28%42 +PASS U+5A2F 娯 %1B%24%42%38%64%1B%28%42 +PASS U+5A35 娵 %1B%24%42%55%37%1B%28%42 +PASS U+5A36 娶 %1B%24%42%55%38%1B%28%42 +PASS U+5A3C 娼 %1B%24%42%3E%2B%1B%28%42 +PASS U+5A40 婀 %1B%24%42%55%34%1B%28%42 +PASS U+5A41 婁 %1B%24%42%4F%2C%1B%28%42 +PASS U+5A46 婆 %1B%24%42%47%4C%1B%28%42 +PASS U+5A49 婉 %1B%24%42%55%36%1B%28%42 +PASS U+5A5A 婚 %1B%24%42%3A%27%1B%28%42 +PASS U+5A62 婢 %1B%24%42%55%39%1B%28%42 +PASS U+5A66 婦 %1B%24%42%49%58%1B%28%42 +PASS U+5A6A 婪 %1B%24%42%55%3A%1B%28%42 +PASS U+5A6C 婬 %1B%24%42%55%35%1B%28%42 +PASS U+5A7F 婿 %1B%24%42%4C%3B%1B%28%42 +PASS U+5A92 媒 %1B%24%42%47%5E%1B%28%42 +PASS U+5A9A 媚 %1B%24%42%55%3B%1B%28%42 +PASS U+5A9B 媛 %1B%24%42%49%32%1B%28%42 +PASS U+5ABC 媼 %1B%24%42%55%3C%1B%28%42 +PASS U+5ABD 媽 %1B%24%42%55%40%1B%28%42 +PASS U+5ABE 媾 %1B%24%42%55%3D%1B%28%42 +PASS U+5AC1 嫁 %1B%24%42%32%47%1B%28%42 +PASS U+5AC2 嫂 %1B%24%42%55%3F%1B%28%42 +PASS U+5AC9 嫉 %1B%24%42%3C%3B%1B%28%42 +PASS U+5ACB 嫋 %1B%24%42%55%3E%1B%28%42 +PASS U+5ACC 嫌 %1B%24%42%37%79%1B%28%42 +PASS U+5AD0 嫐 %1B%24%42%55%4C%1B%28%42 +PASS U+5AD6 嫖 %1B%24%42%55%45%1B%28%42 +PASS U+5AD7 嫗 %1B%24%42%55%42%1B%28%42 +PASS U+5AE1 嫡 %1B%24%42%43%64%1B%28%42 +PASS U+5AE3 嫣 %1B%24%42%55%41%1B%28%42 +PASS U+5AE6 嫦 %1B%24%42%55%43%1B%28%42 +PASS U+5AE9 嫩 %1B%24%42%55%44%1B%28%42 +PASS U+5AFA 嫺 %1B%24%42%55%46%1B%28%42 +PASS U+5AFB 嫻 %1B%24%42%55%47%1B%28%42 +PASS U+5B09 嬉 %1B%24%42%34%72%1B%28%42 +PASS U+5B0B 嬋 %1B%24%42%55%49%1B%28%42 +PASS U+5B0C 嬌 %1B%24%42%55%48%1B%28%42 +PASS U+5B16 嬖 %1B%24%42%55%4A%1B%28%42 +PASS U+5B22 嬢 %1B%24%42%3E%6E%1B%28%42 +PASS U+5B2A 嬪 %1B%24%42%55%4D%1B%28%42 +PASS U+5B2C 嬬 %1B%24%42%44%5C%1B%28%42 +PASS U+5B30 嬰 %1B%24%42%31%45%1B%28%42 +PASS U+5B32 嬲 %1B%24%42%55%4B%1B%28%42 +PASS U+5B36 嬶 %1B%24%42%55%4E%1B%28%42 +PASS U+5B3E 嬾 %1B%24%42%55%4F%1B%28%42 +PASS U+5B40 孀 %1B%24%42%55%52%1B%28%42 +PASS U+5B43 孃 %1B%24%42%55%50%1B%28%42 +PASS U+5B45 孅 %1B%24%42%55%51%1B%28%42 +PASS U+5B50 子 %1B%24%42%3B%52%1B%28%42 +PASS U+5B51 孑 %1B%24%42%55%53%1B%28%42 +PASS U+5B54 孔 %1B%24%42%39%26%1B%28%42 +PASS U+5B55 孕 %1B%24%42%55%54%1B%28%42 +FAIL U+5B56 孖 %1B%24%42%79%6A%1B%28%42 assert_equals: expected "%1B%24%42%79%6A" but got "%26%23%32%33%33%38%32%3B" +PASS U+5B57 字 %1B%24%42%3B%7A%1B%28%42 +PASS U+5B58 存 %1B%24%42%42%38%1B%28%42 +PASS U+5B5A 孚 %1B%24%42%55%55%1B%28%42 +PASS U+5B5B 孛 %1B%24%42%55%56%1B%28%42 +PASS U+5B5C 孜 %1B%24%42%3B%5A%1B%28%42 +PASS U+5B5D 孝 %1B%24%42%39%27%1B%28%42 +PASS U+5B5F 孟 %1B%24%42%4C%52%1B%28%42 +PASS U+5B63 季 %1B%24%42%35%28%1B%28%42 +PASS U+5B64 孤 %1B%24%42%38%49%1B%28%42 +PASS U+5B65 孥 %1B%24%42%55%57%1B%28%42 +PASS U+5B66 学 %1B%24%42%33%58%1B%28%42 +PASS U+5B69 孩 %1B%24%42%55%58%1B%28%42 +PASS U+5B6B 孫 %1B%24%42%42%39%1B%28%42 +PASS U+5B70 孰 %1B%24%42%55%59%1B%28%42 +PASS U+5B71 孱 %1B%24%42%56%23%1B%28%42 +PASS U+5B73 孳 %1B%24%42%55%5A%1B%28%42 +PASS U+5B75 孵 %1B%24%42%55%5B%1B%28%42 +PASS U+5B78 學 %1B%24%42%55%5C%1B%28%42 +PASS U+5B7A 孺 %1B%24%42%55%5E%1B%28%42 +PASS U+5B80 宀 %1B%24%42%55%5F%1B%28%42 +PASS U+5B83 它 %1B%24%42%55%60%1B%28%42 +PASS U+5B85 宅 %1B%24%42%42%70%1B%28%42 +PASS U+5B87 宇 %1B%24%42%31%27%1B%28%42 +PASS U+5B88 守 %1B%24%42%3C%69%1B%28%42 +PASS U+5B89 安 %1B%24%42%30%42%1B%28%42 +PASS U+5B8B 宋 %1B%24%42%41%57%1B%28%42 +PASS U+5B8C 完 %1B%24%42%34%30%1B%28%42 +PASS U+5B8D 宍 %1B%24%42%3C%35%1B%28%42 +PASS U+5B8F 宏 %1B%24%42%39%28%1B%28%42 +PASS U+5B95 宕 %1B%24%42%45%66%1B%28%42 +PASS U+5B97 宗 %1B%24%42%3D%21%1B%28%42 +PASS U+5B98 官 %1B%24%42%34%31%1B%28%42 +PASS U+5B99 宙 %1B%24%42%43%68%1B%28%42 +PASS U+5B9A 定 %1B%24%42%44%6A%1B%28%42 +PASS U+5B9B 宛 %1B%24%42%30%38%1B%28%42 +PASS U+5B9C 宜 %1B%24%42%35%39%1B%28%42 +PASS U+5B9D 宝 %1B%24%42%4A%75%1B%28%42 +PASS U+5B9F 実 %1B%24%42%3C%42%1B%28%42 +PASS U+5BA2 客 %1B%24%42%35%52%1B%28%42 +PASS U+5BA3 宣 %1B%24%42%40%6B%1B%28%42 +PASS U+5BA4 室 %1B%24%42%3C%3C%1B%28%42 +PASS U+5BA5 宥 %1B%24%42%4D%28%1B%28%42 +PASS U+5BA6 宦 %1B%24%42%55%61%1B%28%42 +PASS U+5BAE 宮 %1B%24%42%35%5C%1B%28%42 +PASS U+5BB0 宰 %1B%24%42%3A%4B%1B%28%42 +PASS U+5BB3 害 %1B%24%42%33%32%1B%28%42 +PASS U+5BB4 宴 %1B%24%42%31%63%1B%28%42 +PASS U+5BB5 宵 %1B%24%42%3E%2C%1B%28%42 +PASS U+5BB6 家 %1B%24%42%32%48%1B%28%42 +PASS U+5BB8 宸 %1B%24%42%55%62%1B%28%42 +PASS U+5BB9 容 %1B%24%42%4D%46%1B%28%42 +PASS U+5BBF 宿 %1B%24%42%3D%49%1B%28%42 +FAIL U+5BC0 寀 %1B%24%42%79%6B%1B%28%42 assert_equals: expected "%1B%24%42%79%6B" but got "%26%23%32%33%34%38%38%3B" +PASS U+5BC2 寂 %1B%24%42%3C%64%1B%28%42 +PASS U+5BC3 寃 %1B%24%42%55%63%1B%28%42 +PASS U+5BC4 寄 %1B%24%42%34%73%1B%28%42 +PASS U+5BC5 寅 %1B%24%42%46%52%1B%28%42 +PASS U+5BC6 密 %1B%24%42%4C%29%1B%28%42 +PASS U+5BC7 寇 %1B%24%42%55%64%1B%28%42 +PASS U+5BC9 寉 %1B%24%42%55%65%1B%28%42 +PASS U+5BCC 富 %1B%24%42%49%59%1B%28%42 +PASS U+5BD0 寐 %1B%24%42%55%67%1B%28%42 +PASS U+5BD2 寒 %1B%24%42%34%28%1B%28%42 +PASS U+5BD3 寓 %1B%24%42%36%77%1B%28%42 +PASS U+5BD4 寔 %1B%24%42%55%66%1B%28%42 +FAIL U+5BD8 寘 %1B%24%42%79%6D%1B%28%42 assert_equals: expected "%1B%24%42%79%6D" but got "%26%23%32%33%35%31%32%3B" +PASS U+5BDB 寛 %1B%24%42%34%32%1B%28%42 +PASS U+5BDD 寝 %1B%24%42%3F%32%1B%28%42 +PASS U+5BDE 寞 %1B%24%42%55%6B%1B%28%42 +PASS U+5BDF 察 %1B%24%42%3B%21%1B%28%42 +PASS U+5BE1 寡 %1B%24%42%32%49%1B%28%42 +PASS U+5BE2 寢 %1B%24%42%55%6A%1B%28%42 +PASS U+5BE4 寤 %1B%24%42%55%68%1B%28%42 +PASS U+5BE5 寥 %1B%24%42%55%6C%1B%28%42 +PASS U+5BE6 實 %1B%24%42%55%69%1B%28%42 +PASS U+5BE7 寧 %1B%24%42%47%2B%1B%28%42 +PASS U+5BE8 寨 %1B%24%42%5C%4D%1B%28%42 +PASS U+5BE9 審 %1B%24%42%3F%33%1B%28%42 +PASS U+5BEB 寫 %1B%24%42%55%6D%1B%28%42 +FAIL U+5BEC 寬 %1B%24%42%79%6E%1B%28%42 assert_equals: expected "%1B%24%42%79%6E" but got "%26%23%32%33%35%33%32%3B" +PASS U+5BEE 寮 %1B%24%42%4E%40%1B%28%42 +PASS U+5BF0 寰 %1B%24%42%55%6E%1B%28%42 +PASS U+5BF3 寳 %1B%24%42%55%70%1B%28%42 +PASS U+5BF5 寵 %1B%24%42%43%7E%1B%28%42 +PASS U+5BF6 寶 %1B%24%42%55%6F%1B%28%42 +PASS U+5BF8 寸 %1B%24%42%40%23%1B%28%42 +PASS U+5BFA 寺 %1B%24%42%3B%7B%1B%28%42 +PASS U+5BFE 対 %1B%24%42%42%50%1B%28%42 +PASS U+5BFF 寿 %1B%24%42%3C%77%1B%28%42 +PASS U+5C01 封 %1B%24%42%49%75%1B%28%42 +PASS U+5C02 専 %1B%24%42%40%6C%1B%28%42 +PASS U+5C04 射 %1B%24%42%3C%4D%1B%28%42 +PASS U+5C05 尅 %1B%24%42%55%71%1B%28%42 +PASS U+5C06 将 %1B%24%42%3E%2D%1B%28%42 +PASS U+5C07 將 %1B%24%42%55%72%1B%28%42 +PASS U+5C08 專 %1B%24%42%55%73%1B%28%42 +PASS U+5C09 尉 %1B%24%42%30%53%1B%28%42 +PASS U+5C0A 尊 %1B%24%42%42%3A%1B%28%42 +PASS U+5C0B 尋 %1B%24%42%3F%52%1B%28%42 +PASS U+5C0D 對 %1B%24%42%55%74%1B%28%42 +PASS U+5C0E 導 %1B%24%42%46%33%1B%28%42 +PASS U+5C0F 小 %1B%24%42%3E%2E%1B%28%42 +PASS U+5C11 少 %1B%24%42%3E%2F%1B%28%42 +PASS U+5C13 尓 %1B%24%42%55%75%1B%28%42 +PASS U+5C16 尖 %1B%24%42%40%6D%1B%28%42 +PASS U+5C1A 尚 %1B%24%42%3E%30%1B%28%42 +FAIL U+5C1E 尞 %1B%24%42%79%6F%1B%28%42 assert_equals: expected "%1B%24%42%79%6F" but got "%26%23%32%33%35%38%32%3B" +PASS U+5C20 尠 %1B%24%42%55%76%1B%28%42 +PASS U+5C22 尢 %1B%24%42%55%77%1B%28%42 +PASS U+5C24 尤 %1B%24%42%4C%60%1B%28%42 +PASS U+5C28 尨 %1B%24%42%55%78%1B%28%42 +PASS U+5C2D 尭 %1B%24%42%36%46%1B%28%42 +PASS U+5C31 就 %1B%24%42%3D%22%1B%28%42 +PASS U+5C38 尸 %1B%24%42%55%79%1B%28%42 +PASS U+5C39 尹 %1B%24%42%55%7A%1B%28%42 +PASS U+5C3A 尺 %1B%24%42%3C%5C%1B%28%42 +PASS U+5C3B 尻 %1B%24%42%3F%2C%1B%28%42 +PASS U+5C3C 尼 %1B%24%42%46%74%1B%28%42 +PASS U+5C3D 尽 %1B%24%42%3F%54%1B%28%42 +PASS U+5C3E 尾 %1B%24%42%48%78%1B%28%42 +PASS U+5C3F 尿 %1B%24%42%47%22%1B%28%42 +PASS U+5C40 局 %1B%24%42%36%49%1B%28%42 +PASS U+5C41 屁 %1B%24%42%55%7B%1B%28%42 +PASS U+5C45 居 %1B%24%42%35%6F%1B%28%42 +PASS U+5C46 屆 %1B%24%42%55%7C%1B%28%42 +PASS U+5C48 屈 %1B%24%42%36%7E%1B%28%42 +PASS U+5C4A 届 %1B%24%42%46%4F%1B%28%42 +PASS U+5C4B 屋 %1B%24%42%32%30%1B%28%42 +PASS U+5C4D 屍 %1B%24%42%3B%53%1B%28%42 +PASS U+5C4E 屎 %1B%24%42%55%7D%1B%28%42 +PASS U+5C4F 屏 %1B%24%42%56%22%1B%28%42 +PASS U+5C50 屐 %1B%24%42%56%21%1B%28%42 +PASS U+5C51 屑 %1B%24%42%36%7D%1B%28%42 +PASS U+5C53 屓 %1B%24%42%55%7E%1B%28%42 +PASS U+5C55 展 %1B%24%42%45%38%1B%28%42 +PASS U+5C5E 属 %1B%24%42%42%30%1B%28%42 +PASS U+5C60 屠 %1B%24%42%45%4B%1B%28%42 +PASS U+5C61 屡 %1B%24%42%3C%48%1B%28%42 +PASS U+5C64 層 %1B%24%42%41%58%1B%28%42 +PASS U+5C65 履 %1B%24%42%4D%7A%1B%28%42 +PASS U+5C6C 屬 %1B%24%42%56%24%1B%28%42 +PASS U+5C6E 屮 %1B%24%42%56%25%1B%28%42 +PASS U+5C6F 屯 %1B%24%42%46%56%1B%28%42 +PASS U+5C71 山 %1B%24%42%3B%33%1B%28%42 +PASS U+5C76 屶 %1B%24%42%56%27%1B%28%42 +PASS U+5C79 屹 %1B%24%42%56%28%1B%28%42 +PASS U+5C8C 岌 %1B%24%42%56%29%1B%28%42 +PASS U+5C90 岐 %1B%24%42%34%74%1B%28%42 +PASS U+5C91 岑 %1B%24%42%56%2A%1B%28%42 +PASS U+5C94 岔 %1B%24%42%56%2B%1B%28%42 +PASS U+5CA1 岡 %1B%24%42%32%2C%1B%28%42 +FAIL U+5CA6 岦 %1B%24%42%79%70%1B%28%42 assert_equals: expected "%1B%24%42%79%70" but got "%26%23%32%33%37%31%38%3B" +PASS U+5CA8 岨 %1B%24%42%41%3B%1B%28%42 +PASS U+5CA9 岩 %1B%24%42%34%64%1B%28%42 +PASS U+5CAB 岫 %1B%24%42%56%2D%1B%28%42 +PASS U+5CAC 岬 %1B%24%42%4C%28%1B%28%42 +PASS U+5CB1 岱 %1B%24%42%42%52%1B%28%42 +PASS U+5CB3 岳 %1B%24%42%33%59%1B%28%42 +PASS U+5CB6 岶 %1B%24%42%56%2F%1B%28%42 +PASS U+5CB7 岷 %1B%24%42%56%31%1B%28%42 +PASS U+5CB8 岸 %1B%24%42%34%5F%1B%28%42 +FAIL U+5CBA 岺 %1B%24%42%79%71%1B%28%42 assert_equals: expected "%1B%24%42%79%71" but got "%26%23%32%33%37%33%38%3B" +PASS U+5CBB 岻 %1B%24%42%56%2E%1B%28%42 +PASS U+5CBC 岼 %1B%24%42%56%30%1B%28%42 +PASS U+5CBE 岾 %1B%24%42%56%33%1B%28%42 +PASS U+5CC5 峅 %1B%24%42%56%32%1B%28%42 +PASS U+5CC7 峇 %1B%24%42%56%34%1B%28%42 +PASS U+5CD9 峙 %1B%24%42%56%35%1B%28%42 +PASS U+5CE0 峠 %1B%24%42%46%3D%1B%28%42 +PASS U+5CE1 峡 %1B%24%42%36%2E%1B%28%42 +PASS U+5CE8 峨 %1B%24%42%32%65%1B%28%42 +PASS U+5CE9 峩 %1B%24%42%56%36%1B%28%42 +PASS U+5CEA 峪 %1B%24%42%56%3B%1B%28%42 +PASS U+5CED 峭 %1B%24%42%56%39%1B%28%42 +PASS U+5CEF 峯 %1B%24%42%4A%77%1B%28%42 +PASS U+5CF0 峰 %1B%24%42%4A%76%1B%28%42 +FAIL U+5CF5 峵 %1B%24%42%79%72%1B%28%42 assert_equals: expected "%1B%24%42%79%72" but got "%26%23%32%33%37%39%37%3B" +PASS U+5CF6 島 %1B%24%42%45%67%1B%28%42 +PASS U+5CFA 峺 %1B%24%42%56%38%1B%28%42 +PASS U+5CFB 峻 %1B%24%42%3D%54%1B%28%42 +PASS U+5CFD 峽 %1B%24%42%56%37%1B%28%42 +PASS U+5D07 崇 %1B%24%42%3F%72%1B%28%42 +PASS U+5D0B 崋 %1B%24%42%56%3C%1B%28%42 +PASS U+5D0E 崎 %1B%24%42%3A%6A%1B%28%42 +PASS U+5D11 崑 %1B%24%42%56%42%1B%28%42 +PASS U+5D14 崔 %1B%24%42%56%43%1B%28%42 +PASS U+5D15 崕 %1B%24%42%56%3D%1B%28%42 +PASS U+5D16 崖 %1B%24%42%33%33%1B%28%42 +PASS U+5D17 崗 %1B%24%42%56%3E%1B%28%42 +PASS U+5D18 崘 %1B%24%42%56%47%1B%28%42 +PASS U+5D19 崙 %1B%24%42%56%46%1B%28%42 +PASS U+5D1A 崚 %1B%24%42%56%45%1B%28%42 +PASS U+5D1B 崛 %1B%24%42%56%41%1B%28%42 +PASS U+5D1F 崟 %1B%24%42%56%40%1B%28%42 +PASS U+5D22 崢 %1B%24%42%56%44%1B%28%42 +FAIL U+5D27 崧 %1B%24%42%79%73%1B%28%42 assert_equals: expected "%1B%24%42%79%73" but got "%26%23%32%33%38%34%37%3B" +PASS U+5D29 崩 %1B%24%42%4A%78%1B%28%42 +FAIL U+5D42 嵂 %1B%24%42%79%76%1B%28%42 assert_equals: expected "%1B%24%42%79%76" but got "%26%23%32%33%38%37%34%3B" +PASS U+5D4B 嵋 %1B%24%42%56%4B%1B%28%42 +PASS U+5D4C 嵌 %1B%24%42%56%48%1B%28%42 +PASS U+5D4E 嵎 %1B%24%42%56%4A%1B%28%42 +PASS U+5D50 嵐 %1B%24%42%4D%72%1B%28%42 +PASS U+5D52 嵒 %1B%24%42%56%49%1B%28%42 +FAIL U+5D53 嵓 %1B%24%42%79%74%1B%28%42 assert_equals: expected "%1B%24%42%79%74" but got "%26%23%32%33%38%39%31%3B" +PASS U+5D5C 嵜 %1B%24%42%56%3F%1B%28%42 +PASS U+5D69 嵩 %1B%24%42%3F%73%1B%28%42 +PASS U+5D6C 嵬 %1B%24%42%56%4C%1B%28%42 +FAIL U+5D6D 嵭 %1B%24%42%79%77%1B%28%42 assert_equals: expected "%1B%24%42%79%77" but got "%26%23%32%33%39%31%37%3B" +PASS U+5D6F 嵯 %1B%24%42%3A%37%1B%28%42 +PASS U+5D73 嵳 %1B%24%42%56%4D%1B%28%42 +PASS U+5D76 嵶 %1B%24%42%56%4E%1B%28%42 +PASS U+5D82 嶂 %1B%24%42%56%51%1B%28%42 +PASS U+5D84 嶄 %1B%24%42%56%50%1B%28%42 +PASS U+5D87 嶇 %1B%24%42%56%4F%1B%28%42 +PASS U+5D8B 嶋 %1B%24%42%45%68%1B%28%42 +PASS U+5D8C 嶌 %1B%24%42%56%3A%1B%28%42 +PASS U+5D90 嶐 %1B%24%42%56%57%1B%28%42 +PASS U+5D9D 嶝 %1B%24%42%56%53%1B%28%42 +PASS U+5DA2 嶢 %1B%24%42%56%52%1B%28%42 +PASS U+5DAC 嶬 %1B%24%42%56%54%1B%28%42 +PASS U+5DAE 嶮 %1B%24%42%56%55%1B%28%42 +PASS U+5DB7 嶷 %1B%24%42%56%58%1B%28%42 +FAIL U+5DB8 嶸 %1B%24%42%79%78%1B%28%42 assert_equals: expected "%1B%24%42%79%78" but got "%26%23%32%33%39%39%32%3B" +FAIL U+5DB9 嶹 %1B%24%42%79%79%1B%28%42 assert_equals: expected "%1B%24%42%79%79" but got "%26%23%32%33%39%39%33%3B" +PASS U+5DBA 嶺 %1B%24%42%4E%66%1B%28%42 +PASS U+5DBC 嶼 %1B%24%42%56%59%1B%28%42 +PASS U+5DBD 嶽 %1B%24%42%56%56%1B%28%42 +PASS U+5DC9 巉 %1B%24%42%56%5A%1B%28%42 +PASS U+5DCC 巌 %1B%24%42%34%60%1B%28%42 +PASS U+5DCD 巍 %1B%24%42%56%5B%1B%28%42 +FAIL U+5DD0 巐 %1B%24%42%79%7A%1B%28%42 assert_equals: expected "%1B%24%42%79%7A" but got "%26%23%32%34%30%31%36%3B" +PASS U+5DD2 巒 %1B%24%42%56%5D%1B%28%42 +PASS U+5DD3 巓 %1B%24%42%56%5C%1B%28%42 +PASS U+5DD6 巖 %1B%24%42%56%5E%1B%28%42 +PASS U+5DDB 巛 %1B%24%42%56%5F%1B%28%42 +PASS U+5DDD 川 %1B%24%42%40%6E%1B%28%42 +PASS U+5DDE 州 %1B%24%42%3D%23%1B%28%42 +PASS U+5DE1 巡 %1B%24%42%3D%64%1B%28%42 +PASS U+5DE3 巣 %1B%24%42%41%63%1B%28%42 +PASS U+5DE5 工 %1B%24%42%39%29%1B%28%42 +PASS U+5DE6 左 %1B%24%42%3A%38%1B%28%42 +PASS U+5DE7 巧 %1B%24%42%39%2A%1B%28%42 +PASS U+5DE8 巨 %1B%24%42%35%70%1B%28%42 +PASS U+5DEB 巫 %1B%24%42%56%60%1B%28%42 +PASS U+5DEE 差 %1B%24%42%3A%39%1B%28%42 +PASS U+5DF1 己 %1B%24%42%38%4A%1B%28%42 +PASS U+5DF2 已 %1B%24%42%56%61%1B%28%42 +PASS U+5DF3 巳 %1B%24%42%4C%26%1B%28%42 +PASS U+5DF4 巴 %1B%24%42%47%43%1B%28%42 +PASS U+5DF5 巵 %1B%24%42%56%62%1B%28%42 +PASS U+5DF7 巷 %1B%24%42%39%2B%1B%28%42 +PASS U+5DFB 巻 %1B%24%42%34%2C%1B%28%42 +PASS U+5DFD 巽 %1B%24%42%43%27%1B%28%42 +PASS U+5DFE 巾 %1B%24%42%36%52%1B%28%42 +PASS U+5E02 市 %1B%24%42%3B%54%1B%28%42 +PASS U+5E03 布 %1B%24%42%49%5B%1B%28%42 +PASS U+5E06 帆 %1B%24%42%48%41%1B%28%42 +PASS U+5E0B 帋 %1B%24%42%56%63%1B%28%42 +PASS U+5E0C 希 %1B%24%42%34%75%1B%28%42 +PASS U+5E11 帑 %1B%24%42%56%66%1B%28%42 +PASS U+5E16 帖 %1B%24%42%44%21%1B%28%42 +PASS U+5E19 帙 %1B%24%42%56%65%1B%28%42 +PASS U+5E1A 帚 %1B%24%42%56%64%1B%28%42 +PASS U+5E1B 帛 %1B%24%42%56%67%1B%28%42 +PASS U+5E1D 帝 %1B%24%42%44%6B%1B%28%42 +PASS U+5E25 帥 %1B%24%42%3F%63%1B%28%42 +PASS U+5E2B 師 %1B%24%42%3B%55%1B%28%42 +PASS U+5E2D 席 %1B%24%42%40%4A%1B%28%42 +PASS U+5E2F 帯 %1B%24%42%42%53%1B%28%42 +PASS U+5E30 帰 %1B%24%42%35%22%1B%28%42 +PASS U+5E33 帳 %1B%24%42%44%22%1B%28%42 +PASS U+5E36 帶 %1B%24%42%56%68%1B%28%42 +PASS U+5E37 帷 %1B%24%42%56%69%1B%28%42 +PASS U+5E38 常 %1B%24%42%3E%6F%1B%28%42 +PASS U+5E3D 帽 %1B%24%42%4B%39%1B%28%42 +PASS U+5E40 幀 %1B%24%42%56%6C%1B%28%42 +PASS U+5E43 幃 %1B%24%42%56%6B%1B%28%42 +PASS U+5E44 幄 %1B%24%42%56%6A%1B%28%42 +PASS U+5E45 幅 %1B%24%42%49%7D%1B%28%42 +PASS U+5E47 幇 %1B%24%42%56%73%1B%28%42 +PASS U+5E4C 幌 %1B%24%42%4B%5A%1B%28%42 +PASS U+5E4E 幎 %1B%24%42%56%6D%1B%28%42 +PASS U+5E54 幔 %1B%24%42%56%6F%1B%28%42 +PASS U+5E55 幕 %1B%24%42%4B%6B%1B%28%42 +PASS U+5E57 幗 %1B%24%42%56%6E%1B%28%42 +PASS U+5E5F 幟 %1B%24%42%56%70%1B%28%42 +PASS U+5E61 幡 %1B%24%42%48%28%1B%28%42 +PASS U+5E62 幢 %1B%24%42%56%71%1B%28%42 +PASS U+5E63 幣 %1B%24%42%4A%3E%1B%28%42 +PASS U+5E64 幤 %1B%24%42%56%72%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_2001-3000-expected.txt new file mode 100644 index 0000000..7b24f9e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_2001-3000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 952 PASS, 48 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5E72 干 %1B%24%42%34%33%1B%28%42 +PASS U+5E73 平 %1B%24%42%4A%3F%1B%28%42 +PASS U+5E74 年 %1B%24%42%47%2F%1B%28%42 +PASS U+5E75 幵 %1B%24%42%56%74%1B%28%42 +PASS U+5E76 并 %1B%24%42%56%75%1B%28%42 +PASS U+5E78 幸 %1B%24%42%39%2C%1B%28%42 +PASS U+5E79 幹 %1B%24%42%34%34%1B%28%42 +PASS U+5E7A 幺 %1B%24%42%56%76%1B%28%42 +PASS U+5E7B 幻 %1B%24%42%38%38%1B%28%42 +PASS U+5E7C 幼 %1B%24%42%4D%44%1B%28%42 +PASS U+5E7D 幽 %1B%24%42%4D%29%1B%28%42 +PASS U+5E7E 幾 %1B%24%42%34%76%1B%28%42 +PASS U+5E7F 广 %1B%24%42%56%78%1B%28%42 +PASS U+5E81 庁 %1B%24%42%44%23%1B%28%42 +PASS U+5E83 広 %1B%24%42%39%2D%1B%28%42 +PASS U+5E84 庄 %1B%24%42%3E%31%1B%28%42 +PASS U+5E87 庇 %1B%24%42%48%5F%1B%28%42 +PASS U+5E8A 床 %1B%24%42%3E%32%1B%28%42 +PASS U+5E8F 序 %1B%24%42%3D%78%1B%28%42 +PASS U+5E95 底 %1B%24%42%44%6C%1B%28%42 +PASS U+5E96 庖 %1B%24%42%4A%79%1B%28%42 +PASS U+5E97 店 %1B%24%42%45%39%1B%28%42 +PASS U+5E9A 庚 %1B%24%42%39%2E%1B%28%42 +PASS U+5E9C 府 %1B%24%42%49%5C%1B%28%42 +PASS U+5EA0 庠 %1B%24%42%56%79%1B%28%42 +PASS U+5EA6 度 %1B%24%42%45%59%1B%28%42 +PASS U+5EA7 座 %1B%24%42%3A%42%1B%28%42 +PASS U+5EAB 庫 %1B%24%42%38%4B%1B%28%42 +PASS U+5EAD 庭 %1B%24%42%44%6D%1B%28%42 +PASS U+5EB5 庵 %1B%24%42%30%43%1B%28%42 +PASS U+5EB6 庶 %1B%24%42%3D%6E%1B%28%42 +PASS U+5EB7 康 %1B%24%42%39%2F%1B%28%42 +PASS U+5EB8 庸 %1B%24%42%4D%47%1B%28%42 +PASS U+5EC1 廁 %1B%24%42%56%7A%1B%28%42 +PASS U+5EC2 廂 %1B%24%42%56%7B%1B%28%42 +PASS U+5EC3 廃 %1B%24%42%47%51%1B%28%42 +PASS U+5EC8 廈 %1B%24%42%56%7C%1B%28%42 +PASS U+5EC9 廉 %1B%24%42%4E%77%1B%28%42 +PASS U+5ECA 廊 %1B%24%42%4F%2D%1B%28%42 +PASS U+5ECF 廏 %1B%24%42%56%7E%1B%28%42 +PASS U+5ED0 廐 %1B%24%42%56%7D%1B%28%42 +PASS U+5ED3 廓 %1B%24%42%33%47%1B%28%42 +PASS U+5ED6 廖 %1B%24%42%57%21%1B%28%42 +PASS U+5EDA 廚 %1B%24%42%57%24%1B%28%42 +PASS U+5EDB 廛 %1B%24%42%57%25%1B%28%42 +PASS U+5EDD 廝 %1B%24%42%57%23%1B%28%42 +PASS U+5EDF 廟 %1B%24%42%49%40%1B%28%42 +PASS U+5EE0 廠 %1B%24%42%3E%33%1B%28%42 +PASS U+5EE1 廡 %1B%24%42%57%27%1B%28%42 +PASS U+5EE2 廢 %1B%24%42%57%26%1B%28%42 +PASS U+5EE3 廣 %1B%24%42%57%22%1B%28%42 +PASS U+5EE8 廨 %1B%24%42%57%28%1B%28%42 +PASS U+5EE9 廩 %1B%24%42%57%29%1B%28%42 +PASS U+5EEC 廬 %1B%24%42%57%2A%1B%28%42 +PASS U+5EF0 廰 %1B%24%42%57%2D%1B%28%42 +PASS U+5EF1 廱 %1B%24%42%57%2B%1B%28%42 +PASS U+5EF3 廳 %1B%24%42%57%2C%1B%28%42 +PASS U+5EF4 廴 %1B%24%42%57%2E%1B%28%42 +PASS U+5EF6 延 %1B%24%42%31%64%1B%28%42 +PASS U+5EF7 廷 %1B%24%42%44%6E%1B%28%42 +PASS U+5EF8 廸 %1B%24%42%57%2F%1B%28%42 +PASS U+5EFA 建 %1B%24%42%37%7A%1B%28%42 +PASS U+5EFB 廻 %1B%24%42%32%76%1B%28%42 +PASS U+5EFC 廼 %1B%24%42%47%36%1B%28%42 +PASS U+5EFE 廾 %1B%24%42%57%30%1B%28%42 +PASS U+5EFF 廿 %1B%24%42%46%7B%1B%28%42 +PASS U+5F01 弁 %1B%24%42%4A%5B%1B%28%42 +PASS U+5F03 弃 %1B%24%42%57%31%1B%28%42 +PASS U+5F04 弄 %1B%24%42%4F%2E%1B%28%42 +PASS U+5F09 弉 %1B%24%42%57%32%1B%28%42 +PASS U+5F0A 弊 %1B%24%42%4A%40%1B%28%42 +PASS U+5F0B 弋 %1B%24%42%57%35%1B%28%42 +PASS U+5F0C 弌 %1B%24%42%50%21%1B%28%42 +PASS U+5F0D 弍 %1B%24%42%50%31%1B%28%42 +PASS U+5F0F 式 %1B%24%42%3C%30%1B%28%42 +PASS U+5F10 弐 %1B%24%42%46%75%1B%28%42 +PASS U+5F11 弑 %1B%24%42%57%36%1B%28%42 +PASS U+5F13 弓 %1B%24%42%35%5D%1B%28%42 +PASS U+5F14 弔 %1B%24%42%44%24%1B%28%42 +PASS U+5F15 引 %1B%24%42%30%7A%1B%28%42 +PASS U+5F16 弖 %1B%24%42%57%37%1B%28%42 +PASS U+5F17 弗 %1B%24%42%4A%26%1B%28%42 +PASS U+5F18 弘 %1B%24%42%39%30%1B%28%42 +PASS U+5F1B 弛 %1B%24%42%43%50%1B%28%42 +PASS U+5F1F 弟 %1B%24%42%44%6F%1B%28%42 +FAIL U+5F21 弡 %1B%24%42%79%7B%1B%28%42 assert_equals: expected "%1B%24%42%79%7B" but got "%26%23%32%34%33%35%33%3B" +PASS U+5F25 弥 %1B%24%42%4C%6F%1B%28%42 +PASS U+5F26 弦 %1B%24%42%38%39%1B%28%42 +PASS U+5F27 弧 %1B%24%42%38%4C%1B%28%42 +PASS U+5F29 弩 %1B%24%42%57%38%1B%28%42 +PASS U+5F2D 弭 %1B%24%42%57%39%1B%28%42 +PASS U+5F2F 弯 %1B%24%42%57%3F%1B%28%42 +PASS U+5F31 弱 %1B%24%42%3C%65%1B%28%42 +FAIL U+5F34 弴 %1B%24%42%79%7C%1B%28%42 assert_equals: expected "%1B%24%42%79%7C" but got "%26%23%32%34%33%37%32%3B" +PASS U+5F35 張 %1B%24%42%44%25%1B%28%42 +PASS U+5F37 強 %1B%24%42%36%2F%1B%28%42 +PASS U+5F38 弸 %1B%24%42%57%3A%1B%28%42 +PASS U+5F3C 弼 %1B%24%42%49%2B%1B%28%42 +PASS U+5F3E 弾 %1B%24%42%43%46%1B%28%42 +PASS U+5F41 彁 %1B%24%42%57%3B%1B%28%42 +FAIL U+5F45 彅 %1B%24%42%79%2C%1B%28%42 assert_equals: expected "%1B%24%42%79%2C" but got "%26%23%32%34%33%38%39%3B" +PASS U+5F48 彈 %1B%24%42%57%3C%1B%28%42 +PASS U+5F4A 彊 %1B%24%42%36%30%1B%28%42 +PASS U+5F4C 彌 %1B%24%42%57%3D%1B%28%42 +PASS U+5F4E 彎 %1B%24%42%57%3E%1B%28%42 +PASS U+5F51 彑 %1B%24%42%57%40%1B%28%42 +PASS U+5F53 当 %1B%24%42%45%76%1B%28%42 +PASS U+5F56 彖 %1B%24%42%57%41%1B%28%42 +PASS U+5F57 彗 %1B%24%42%57%42%1B%28%42 +PASS U+5F59 彙 %1B%24%42%57%43%1B%28%42 +PASS U+5F5C 彜 %1B%24%42%57%34%1B%28%42 +PASS U+5F5D 彝 %1B%24%42%57%33%1B%28%42 +PASS U+5F61 彡 %1B%24%42%57%44%1B%28%42 +PASS U+5F62 形 %1B%24%42%37%41%1B%28%42 +PASS U+5F66 彦 %1B%24%42%49%27%1B%28%42 +FAIL U+5F67 彧 %1B%24%42%79%7D%1B%28%42 assert_equals: expected "%1B%24%42%79%7D" but got "%26%23%32%34%34%32%33%3B" +PASS U+5F69 彩 %1B%24%42%3A%4C%1B%28%42 +PASS U+5F6A 彪 %1B%24%42%49%37%1B%28%42 +PASS U+5F6B 彫 %1B%24%42%44%26%1B%28%42 +PASS U+5F6C 彬 %1B%24%42%49%4B%1B%28%42 +PASS U+5F6D 彭 %1B%24%42%57%45%1B%28%42 +PASS U+5F70 彰 %1B%24%42%3E%34%1B%28%42 +PASS U+5F71 影 %1B%24%42%31%46%1B%28%42 +PASS U+5F73 彳 %1B%24%42%57%46%1B%28%42 +PASS U+5F77 彷 %1B%24%42%57%47%1B%28%42 +PASS U+5F79 役 %1B%24%42%4C%72%1B%28%42 +PASS U+5F7C 彼 %1B%24%42%48%60%1B%28%42 +PASS U+5F7F 彿 %1B%24%42%57%4A%1B%28%42 +PASS U+5F80 往 %1B%24%42%31%7D%1B%28%42 +PASS U+5F81 征 %1B%24%42%40%2C%1B%28%42 +PASS U+5F82 徂 %1B%24%42%57%49%1B%28%42 +PASS U+5F83 徃 %1B%24%42%57%48%1B%28%42 +PASS U+5F84 径 %1B%24%42%37%42%1B%28%42 +PASS U+5F85 待 %1B%24%42%42%54%1B%28%42 +PASS U+5F87 徇 %1B%24%42%57%4E%1B%28%42 +PASS U+5F88 很 %1B%24%42%57%4C%1B%28%42 +PASS U+5F8A 徊 %1B%24%42%57%4B%1B%28%42 +PASS U+5F8B 律 %1B%24%42%4E%27%1B%28%42 +PASS U+5F8C 後 %1B%24%42%38%65%1B%28%42 +PASS U+5F90 徐 %1B%24%42%3D%79%1B%28%42 +PASS U+5F91 徑 %1B%24%42%57%4D%1B%28%42 +PASS U+5F92 徒 %1B%24%42%45%4C%1B%28%42 +PASS U+5F93 従 %1B%24%42%3D%3E%1B%28%42 +PASS U+5F97 得 %1B%24%42%46%40%1B%28%42 +PASS U+5F98 徘 %1B%24%42%57%51%1B%28%42 +PASS U+5F99 徙 %1B%24%42%57%50%1B%28%42 +PASS U+5F9E 從 %1B%24%42%57%4F%1B%28%42 +PASS U+5FA0 徠 %1B%24%42%57%52%1B%28%42 +PASS U+5FA1 御 %1B%24%42%38%66%1B%28%42 +PASS U+5FA8 徨 %1B%24%42%57%53%1B%28%42 +PASS U+5FA9 復 %1B%24%42%49%7C%1B%28%42 +PASS U+5FAA 循 %1B%24%42%3D%5B%1B%28%42 +PASS U+5FAD 徭 %1B%24%42%57%54%1B%28%42 +PASS U+5FAE 微 %1B%24%42%48%79%1B%28%42 +PASS U+5FB3 徳 %1B%24%42%46%41%1B%28%42 +PASS U+5FB4 徴 %1B%24%42%44%27%1B%28%42 +FAIL U+5FB7 德 %1B%24%42%79%7E%1B%28%42 assert_equals: expected "%1B%24%42%79%7E" but got "%26%23%32%34%35%30%33%3B" +PASS U+5FB9 徹 %1B%24%42%45%30%1B%28%42 +PASS U+5FBC 徼 %1B%24%42%57%55%1B%28%42 +PASS U+5FBD 徽 %1B%24%42%35%2B%1B%28%42 +PASS U+5FC3 心 %1B%24%42%3F%34%1B%28%42 +PASS U+5FC5 必 %1B%24%42%49%2C%1B%28%42 +PASS U+5FCC 忌 %1B%24%42%34%77%1B%28%42 +PASS U+5FCD 忍 %1B%24%42%47%26%1B%28%42 +PASS U+5FD6 忖 %1B%24%42%57%56%1B%28%42 +PASS U+5FD7 志 %1B%24%42%3B%56%1B%28%42 +PASS U+5FD8 忘 %1B%24%42%4B%3A%1B%28%42 +PASS U+5FD9 忙 %1B%24%42%4B%3B%1B%28%42 +PASS U+5FDC 応 %1B%24%42%31%7E%1B%28%42 +PASS U+5FDD 忝 %1B%24%42%57%5B%1B%28%42 +FAIL U+5FDE 忞 %1B%24%42%7A%21%1B%28%42 assert_equals: expected "%1B%24%42%7A%21" but got "%26%23%32%34%35%34%32%3B" +PASS U+5FE0 忠 %1B%24%42%43%69%1B%28%42 +PASS U+5FE4 忤 %1B%24%42%57%58%1B%28%42 +PASS U+5FEB 快 %1B%24%42%32%77%1B%28%42 +PASS U+5FF0 忰 %1B%24%42%58%2D%1B%28%42 +PASS U+5FF1 忱 %1B%24%42%57%5A%1B%28%42 +PASS U+5FF5 念 %1B%24%42%47%30%1B%28%42 +PASS U+5FF8 忸 %1B%24%42%57%59%1B%28%42 +PASS U+5FFB 忻 %1B%24%42%57%57%1B%28%42 +PASS U+5FFD 忽 %1B%24%42%39%7A%1B%28%42 +PASS U+5FFF 忿 %1B%24%42%57%5D%1B%28%42 +PASS U+600E 怎 %1B%24%42%57%63%1B%28%42 +PASS U+600F 怏 %1B%24%42%57%69%1B%28%42 +PASS U+6010 怐 %1B%24%42%57%61%1B%28%42 +PASS U+6012 怒 %1B%24%42%45%5C%1B%28%42 +PASS U+6015 怕 %1B%24%42%57%66%1B%28%42 +PASS U+6016 怖 %1B%24%42%49%5D%1B%28%42 +PASS U+6019 怙 %1B%24%42%57%60%1B%28%42 +PASS U+601B 怛 %1B%24%42%57%65%1B%28%42 +PASS U+601C 怜 %1B%24%42%4E%67%1B%28%42 +PASS U+601D 思 %1B%24%42%3B%57%1B%28%42 +PASS U+6020 怠 %1B%24%42%42%55%1B%28%42 +PASS U+6021 怡 %1B%24%42%57%5E%1B%28%42 +PASS U+6025 急 %1B%24%42%35%5E%1B%28%42 +PASS U+6026 怦 %1B%24%42%57%68%1B%28%42 +PASS U+6027 性 %1B%24%42%40%2D%1B%28%42 +PASS U+6028 怨 %1B%24%42%31%65%1B%28%42 +PASS U+6029 怩 %1B%24%42%57%62%1B%28%42 +PASS U+602A 怪 %1B%24%42%32%78%1B%28%42 +PASS U+602B 怫 %1B%24%42%57%67%1B%28%42 +PASS U+602F 怯 %1B%24%42%36%31%1B%28%42 +PASS U+6031 怱 %1B%24%42%57%64%1B%28%42 +PASS U+603A 怺 %1B%24%42%57%6A%1B%28%42 +PASS U+6041 恁 %1B%24%42%57%6C%1B%28%42 +PASS U+6042 恂 %1B%24%42%57%76%1B%28%42 +PASS U+6043 恃 %1B%24%42%57%74%1B%28%42 +PASS U+6046 恆 %1B%24%42%57%71%1B%28%42 +PASS U+604A 恊 %1B%24%42%57%70%1B%28%42 +PASS U+604B 恋 %1B%24%42%4E%78%1B%28%42 +PASS U+604D 恍 %1B%24%42%57%72%1B%28%42 +PASS U+6050 恐 %1B%24%42%36%32%1B%28%42 +PASS U+6052 恒 %1B%24%42%39%31%1B%28%42 +PASS U+6055 恕 %1B%24%42%3D%7A%1B%28%42 +PASS U+6059 恙 %1B%24%42%57%79%1B%28%42 +PASS U+605A 恚 %1B%24%42%57%6B%1B%28%42 +FAIL U+605D 恝 %1B%24%42%7A%22%1B%28%42 assert_equals: expected "%1B%24%42%7A%22" but got "%26%23%32%34%36%36%39%3B" +PASS U+605F 恟 %1B%24%42%57%6F%1B%28%42 +PASS U+6060 恠 %1B%24%42%57%5F%1B%28%42 +PASS U+6062 恢 %1B%24%42%32%7A%1B%28%42 +PASS U+6063 恣 %1B%24%42%57%73%1B%28%42 +PASS U+6064 恤 %1B%24%42%57%75%1B%28%42 +PASS U+6065 恥 %1B%24%42%43%51%1B%28%42 +PASS U+6068 恨 %1B%24%42%3A%28%1B%28%42 +PASS U+6069 恩 %1B%24%42%32%38%1B%28%42 +PASS U+606A 恪 %1B%24%42%57%6D%1B%28%42 +PASS U+606B 恫 %1B%24%42%57%78%1B%28%42 +PASS U+606C 恬 %1B%24%42%57%77%1B%28%42 +PASS U+606D 恭 %1B%24%42%36%33%1B%28%42 +PASS U+606F 息 %1B%24%42%42%29%1B%28%42 +PASS U+6070 恰 %1B%24%42%33%66%1B%28%42 +PASS U+6075 恵 %1B%24%42%37%43%1B%28%42 +PASS U+6077 恷 %1B%24%42%57%6E%1B%28%42 +PASS U+6081 悁 %1B%24%42%57%7A%1B%28%42 +PASS U+6083 悃 %1B%24%42%57%7D%1B%28%42 +PASS U+6084 悄 %1B%24%42%58%21%1B%28%42 +FAIL U+6085 悅 %1B%24%42%7A%23%1B%28%42 assert_equals: expected "%1B%24%42%7A%23" but got "%26%23%32%34%37%30%39%3B" +PASS U+6089 悉 %1B%24%42%3C%3D%1B%28%42 +FAIL U+608A 悊 %1B%24%42%7A%24%1B%28%42 assert_equals: expected "%1B%24%42%7A%24" but got "%26%23%32%34%37%31%34%3B" +PASS U+608B 悋 %1B%24%42%58%27%1B%28%42 +PASS U+608C 悌 %1B%24%42%44%70%1B%28%42 +PASS U+608D 悍 %1B%24%42%57%7B%1B%28%42 +PASS U+6092 悒 %1B%24%42%58%25%1B%28%42 +PASS U+6094 悔 %1B%24%42%32%79%1B%28%42 +PASS U+6096 悖 %1B%24%42%58%23%1B%28%42 +PASS U+6097 悗 %1B%24%42%58%24%1B%28%42 +PASS U+609A 悚 %1B%24%42%57%7E%1B%28%42 +PASS U+609B 悛 %1B%24%42%58%22%1B%28%42 +PASS U+609F 悟 %1B%24%42%38%67%1B%28%42 +PASS U+60A0 悠 %1B%24%42%4D%2A%1B%28%42 +PASS U+60A3 患 %1B%24%42%34%35%1B%28%42 +PASS U+60A6 悦 %1B%24%42%31%59%1B%28%42 +PASS U+60A7 悧 %1B%24%42%58%26%1B%28%42 +PASS U+60A9 悩 %1B%24%42%47%3A%1B%28%42 +PASS U+60AA 悪 %1B%24%42%30%2D%1B%28%42 +PASS U+60B2 悲 %1B%24%42%48%61%1B%28%42 +PASS U+60B3 悳 %1B%24%42%57%5C%1B%28%42 +PASS U+60B4 悴 %1B%24%42%58%2C%1B%28%42 +PASS U+60B5 悵 %1B%24%42%58%30%1B%28%42 +PASS U+60B6 悶 %1B%24%42%4C%65%1B%28%42 +PASS U+60B8 悸 %1B%24%42%58%29%1B%28%42 +PASS U+60BC 悼 %1B%24%42%45%69%1B%28%42 +PASS U+60BD 悽 %1B%24%42%58%2E%1B%28%42 +PASS U+60C5 情 %1B%24%42%3E%70%1B%28%42 +PASS U+60C6 惆 %1B%24%42%58%2F%1B%28%42 +PASS U+60C7 惇 %1B%24%42%46%57%1B%28%42 +PASS U+60D1 惑 %1B%24%42%4F%47%1B%28%42 +PASS U+60D3 惓 %1B%24%42%58%2B%1B%28%42 +FAIL U+60D5 惕 %1B%24%42%7A%26%1B%28%42 assert_equals: expected "%1B%24%42%7A%26" but got "%26%23%32%34%37%38%39%3B" +PASS U+60D8 惘 %1B%24%42%58%31%1B%28%42 +PASS U+60DA 惚 %1B%24%42%39%7B%1B%28%42 +PASS U+60DC 惜 %1B%24%42%40%4B%1B%28%42 +FAIL U+60DE 惞 %1B%24%42%7A%25%1B%28%42 assert_equals: expected "%1B%24%42%7A%25" but got "%26%23%32%34%37%39%38%3B" +PASS U+60DF 惟 %1B%24%42%30%54%1B%28%42 +PASS U+60E0 惠 %1B%24%42%58%2A%1B%28%42 +PASS U+60E1 惡 %1B%24%42%58%28%1B%28%42 +PASS U+60E3 惣 %1B%24%42%41%5A%1B%28%42 +PASS U+60E7 惧 %1B%24%42%57%7C%1B%28%42 +PASS U+60E8 惨 %1B%24%42%3B%34%1B%28%42 +PASS U+60F0 惰 %1B%24%42%42%46%1B%28%42 +PASS U+60F1 惱 %1B%24%42%58%3D%1B%28%42 +FAIL U+60F2 惲 %1B%24%42%7A%28%1B%28%42 assert_equals: expected "%1B%24%42%7A%28" but got "%26%23%32%34%38%31%38%3B" +PASS U+60F3 想 %1B%24%42%41%5B%1B%28%42 +PASS U+60F4 惴 %1B%24%42%58%38%1B%28%42 +PASS U+60F6 惶 %1B%24%42%58%35%1B%28%42 +PASS U+60F7 惷 %1B%24%42%58%36%1B%28%42 +PASS U+60F9 惹 %1B%24%42%3C%66%1B%28%42 +PASS U+60FA 惺 %1B%24%42%58%39%1B%28%42 +PASS U+60FB 惻 %1B%24%42%58%3C%1B%28%42 +PASS U+6100 愀 %1B%24%42%58%37%1B%28%42 +PASS U+6101 愁 %1B%24%42%3D%25%1B%28%42 +PASS U+6103 愃 %1B%24%42%58%3A%1B%28%42 +PASS U+6106 愆 %1B%24%42%58%34%1B%28%42 +PASS U+6108 愈 %1B%24%42%4C%7C%1B%28%42 +PASS U+6109 愉 %1B%24%42%4C%7B%1B%28%42 +PASS U+610D 愍 %1B%24%42%58%3E%1B%28%42 +PASS U+610E 愎 %1B%24%42%58%3F%1B%28%42 +PASS U+610F 意 %1B%24%42%30%55%1B%28%42 +FAIL U+6111 愑 %1B%24%42%7A%29%1B%28%42 assert_equals: expected "%1B%24%42%7A%29" but got "%26%23%32%34%38%34%39%3B" +PASS U+6115 愕 %1B%24%42%58%33%1B%28%42 +PASS U+611A 愚 %1B%24%42%36%72%1B%28%42 +PASS U+611B 愛 %1B%24%42%30%26%1B%28%42 +PASS U+611F 感 %1B%24%42%34%36%1B%28%42 +FAIL U+6120 愠 %1B%24%42%7A%27%1B%28%42 assert_equals: expected "%1B%24%42%7A%27" but got "%26%23%32%34%38%36%34%3B" +PASS U+6121 愡 %1B%24%42%58%3B%1B%28%42 +PASS U+6127 愧 %1B%24%42%58%43%1B%28%42 +PASS U+6128 愨 %1B%24%42%58%42%1B%28%42 +PASS U+612C 愬 %1B%24%42%58%47%1B%28%42 +FAIL U+6130 愰 %1B%24%42%7A%2B%1B%28%42 assert_equals: expected "%1B%24%42%7A%2B" but got "%26%23%32%34%38%38%30%3B" +PASS U+6134 愴 %1B%24%42%58%48%1B%28%42 +FAIL U+6137 愷 %1B%24%42%7A%2A%1B%28%42 assert_equals: expected "%1B%24%42%7A%2A" but got "%26%23%32%34%38%38%37%3B" +PASS U+613C 愼 %1B%24%42%58%46%1B%28%42 +PASS U+613D 愽 %1B%24%42%58%49%1B%28%42 +PASS U+613E 愾 %1B%24%42%58%41%1B%28%42 +PASS U+613F 愿 %1B%24%42%58%45%1B%28%42 +PASS U+6142 慂 %1B%24%42%58%4A%1B%28%42 +PASS U+6144 慄 %1B%24%42%58%4B%1B%28%42 +PASS U+6147 慇 %1B%24%42%58%40%1B%28%42 +PASS U+6148 慈 %1B%24%42%3B%7C%1B%28%42 +PASS U+614A 慊 %1B%24%42%58%44%1B%28%42 +PASS U+614B 態 %1B%24%42%42%56%1B%28%42 +PASS U+614C 慌 %1B%24%42%39%32%1B%28%42 +PASS U+614D 慍 %1B%24%42%58%32%1B%28%42 +PASS U+614E 慎 %1B%24%42%3F%35%1B%28%42 +PASS U+6153 慓 %1B%24%42%58%58%1B%28%42 +PASS U+6155 慕 %1B%24%42%4A%69%1B%28%42 +PASS U+6158 慘 %1B%24%42%58%4E%1B%28%42 +PASS U+6159 慙 %1B%24%42%58%4F%1B%28%42 +PASS U+615A 慚 %1B%24%42%58%50%1B%28%42 +PASS U+615D 慝 %1B%24%42%58%57%1B%28%42 +PASS U+615F 慟 %1B%24%42%58%56%1B%28%42 +PASS U+6162 慢 %1B%24%42%4B%7D%1B%28%42 +PASS U+6163 慣 %1B%24%42%34%37%1B%28%42 +PASS U+6165 慥 %1B%24%42%58%54%1B%28%42 +PASS U+6167 慧 %1B%24%42%37%45%1B%28%42 +PASS U+6168 慨 %1B%24%42%33%34%1B%28%42 +PASS U+616B 慫 %1B%24%42%58%51%1B%28%42 +PASS U+616E 慮 %1B%24%42%4E%38%1B%28%42 +PASS U+616F 慯 %1B%24%42%58%53%1B%28%42 +PASS U+6170 慰 %1B%24%42%30%56%1B%28%42 +PASS U+6171 慱 %1B%24%42%58%55%1B%28%42 +PASS U+6173 慳 %1B%24%42%58%4C%1B%28%42 +PASS U+6174 慴 %1B%24%42%58%52%1B%28%42 +PASS U+6175 慵 %1B%24%42%58%59%1B%28%42 +PASS U+6176 慶 %1B%24%42%37%44%1B%28%42 +PASS U+6177 慷 %1B%24%42%58%4D%1B%28%42 +PASS U+617E 慾 %1B%24%42%4D%5D%1B%28%42 +PASS U+6182 憂 %1B%24%42%4D%2B%1B%28%42 +PASS U+6187 憇 %1B%24%42%58%5C%1B%28%42 +PASS U+618A 憊 %1B%24%42%58%60%1B%28%42 +PASS U+618E 憎 %1B%24%42%41%7E%1B%28%42 +PASS U+6190 憐 %1B%24%42%4E%79%1B%28%42 +PASS U+6191 憑 %1B%24%42%58%61%1B%28%42 +PASS U+6194 憔 %1B%24%42%58%5E%1B%28%42 +PASS U+6196 憖 %1B%24%42%58%5B%1B%28%42 +FAIL U+6198 憘 %1B%24%42%7A%2C%1B%28%42 assert_equals: expected "%1B%24%42%7A%2C" but got "%26%23%32%34%39%38%34%3B" +PASS U+6199 憙 %1B%24%42%58%5A%1B%28%42 +PASS U+619A 憚 %1B%24%42%58%5F%1B%28%42 +PASS U+61A4 憤 %1B%24%42%4A%30%1B%28%42 +PASS U+61A7 憧 %1B%24%42%46%34%1B%28%42 +PASS U+61A9 憩 %1B%24%42%37%46%1B%28%42 +PASS U+61AB 憫 %1B%24%42%58%62%1B%28%42 +PASS U+61AC 憬 %1B%24%42%58%5D%1B%28%42 +PASS U+61AE 憮 %1B%24%42%58%63%1B%28%42 +PASS U+61B2 憲 %1B%24%42%37%7B%1B%28%42 +PASS U+61B6 憶 %1B%24%42%32%31%1B%28%42 +PASS U+61BA 憺 %1B%24%42%58%6B%1B%28%42 +PASS U+61BE 憾 %1B%24%42%34%38%1B%28%42 +PASS U+61C3 懃 %1B%24%42%58%69%1B%28%42 +PASS U+61C6 懆 %1B%24%42%58%6A%1B%28%42 +PASS U+61C7 懇 %1B%24%42%3A%29%1B%28%42 +PASS U+61C8 懈 %1B%24%42%58%68%1B%28%42 +PASS U+61C9 應 %1B%24%42%58%66%1B%28%42 +PASS U+61CA 懊 %1B%24%42%58%65%1B%28%42 +PASS U+61CB 懋 %1B%24%42%58%6C%1B%28%42 +PASS U+61CC 懌 %1B%24%42%58%64%1B%28%42 +PASS U+61CD 懍 %1B%24%42%58%6E%1B%28%42 +PASS U+61D0 懐 %1B%24%42%32%7B%1B%28%42 +PASS U+61E3 懣 %1B%24%42%58%70%1B%28%42 +PASS U+61E6 懦 %1B%24%42%58%6F%1B%28%42 +PASS U+61F2 懲 %1B%24%42%44%28%1B%28%42 +PASS U+61F4 懴 %1B%24%42%58%73%1B%28%42 +PASS U+61F6 懶 %1B%24%42%58%71%1B%28%42 +PASS U+61F7 懷 %1B%24%42%58%67%1B%28%42 +PASS U+61F8 懸 %1B%24%42%37%7C%1B%28%42 +PASS U+61FA 懺 %1B%24%42%58%72%1B%28%42 +PASS U+61FC 懼 %1B%24%42%58%76%1B%28%42 +PASS U+61FD 懽 %1B%24%42%58%75%1B%28%42 +PASS U+61FE 懾 %1B%24%42%58%77%1B%28%42 +PASS U+61FF 懿 %1B%24%42%58%74%1B%28%42 +PASS U+6200 戀 %1B%24%42%58%78%1B%28%42 +PASS U+6208 戈 %1B%24%42%58%79%1B%28%42 +PASS U+6209 戉 %1B%24%42%58%7A%1B%28%42 +PASS U+620A 戊 %1B%24%42%4A%6A%1B%28%42 +PASS U+620C 戌 %1B%24%42%58%7C%1B%28%42 +PASS U+620D 戍 %1B%24%42%58%7B%1B%28%42 +PASS U+620E 戎 %1B%24%42%3D%3F%1B%28%42 +PASS U+6210 成 %1B%24%42%40%2E%1B%28%42 +PASS U+6211 我 %1B%24%42%32%66%1B%28%42 +PASS U+6212 戒 %1B%24%42%32%7C%1B%28%42 +FAIL U+6213 戓 %1B%24%42%7A%2D%1B%28%42 assert_equals: expected "%1B%24%42%7A%2D" but got "%26%23%32%35%31%30%37%3B" +PASS U+6214 戔 %1B%24%42%58%7D%1B%28%42 +PASS U+6216 或 %1B%24%42%30%3F%1B%28%42 +PASS U+621A 戚 %1B%24%42%40%4C%1B%28%42 +PASS U+621B 戛 %1B%24%42%58%7E%1B%28%42 +PASS U+621D 戝 %1B%24%42%6C%43%1B%28%42 +PASS U+621E 戞 %1B%24%42%59%21%1B%28%42 +PASS U+621F 戟 %1B%24%42%37%61%1B%28%42 +PASS U+6221 戡 %1B%24%42%59%22%1B%28%42 +PASS U+6226 戦 %1B%24%42%40%6F%1B%28%42 +PASS U+622A 截 %1B%24%42%59%23%1B%28%42 +PASS U+622E 戮 %1B%24%42%59%24%1B%28%42 +PASS U+622F 戯 %1B%24%42%35%3A%1B%28%42 +PASS U+6230 戰 %1B%24%42%59%25%1B%28%42 +PASS U+6232 戲 %1B%24%42%59%26%1B%28%42 +PASS U+6233 戳 %1B%24%42%59%27%1B%28%42 +PASS U+6234 戴 %1B%24%42%42%57%1B%28%42 +PASS U+6238 戸 %1B%24%42%38%4D%1B%28%42 +PASS U+623B 戻 %1B%24%42%4C%61%1B%28%42 +PASS U+623F 房 %1B%24%42%4B%3C%1B%28%42 +PASS U+6240 所 %1B%24%42%3D%6A%1B%28%42 +PASS U+6241 扁 %1B%24%42%59%28%1B%28%42 +PASS U+6247 扇 %1B%24%42%40%70%1B%28%42 +PASS U+6248 扈 %1B%24%42%6E%3D%1B%28%42 +PASS U+6249 扉 %1B%24%42%48%62%1B%28%42 +PASS U+624B 手 %1B%24%42%3C%6A%1B%28%42 +PASS U+624D 才 %1B%24%42%3A%4D%1B%28%42 +PASS U+624E 扎 %1B%24%42%59%29%1B%28%42 +PASS U+6253 打 %1B%24%42%42%47%1B%28%42 +PASS U+6255 払 %1B%24%42%4A%27%1B%28%42 +PASS U+6258 托 %1B%24%42%42%71%1B%28%42 +PASS U+625B 扛 %1B%24%42%59%2C%1B%28%42 +PASS U+625E 扞 %1B%24%42%59%2A%1B%28%42 +PASS U+6260 扠 %1B%24%42%59%2D%1B%28%42 +PASS U+6263 扣 %1B%24%42%59%2B%1B%28%42 +PASS U+6268 扨 %1B%24%42%59%2E%1B%28%42 +PASS U+626E 扮 %1B%24%42%4A%31%1B%28%42 +PASS U+6271 扱 %1B%24%42%30%37%1B%28%42 +PASS U+6276 扶 %1B%24%42%49%5E%1B%28%42 +PASS U+6279 批 %1B%24%42%48%63%1B%28%42 +PASS U+627C 扼 %1B%24%42%59%2F%1B%28%42 +PASS U+627E 找 %1B%24%42%59%32%1B%28%42 +PASS U+627F 承 %1B%24%42%3E%35%1B%28%42 +PASS U+6280 技 %1B%24%42%35%3B%1B%28%42 +PASS U+6282 抂 %1B%24%42%59%30%1B%28%42 +PASS U+6283 抃 %1B%24%42%59%37%1B%28%42 +PASS U+6284 抄 %1B%24%42%3E%36%1B%28%42 +PASS U+6289 抉 %1B%24%42%59%31%1B%28%42 +PASS U+628A 把 %1B%24%42%47%44%1B%28%42 +PASS U+6291 抑 %1B%24%42%4D%5E%1B%28%42 +PASS U+6292 抒 %1B%24%42%59%33%1B%28%42 +PASS U+6293 抓 %1B%24%42%59%34%1B%28%42 +PASS U+6294 抔 %1B%24%42%59%38%1B%28%42 +PASS U+6295 投 %1B%24%42%45%6A%1B%28%42 +PASS U+6296 抖 %1B%24%42%59%35%1B%28%42 +PASS U+6297 抗 %1B%24%42%39%33%1B%28%42 +PASS U+6298 折 %1B%24%42%40%5E%1B%28%42 +PASS U+629B 抛 %1B%24%42%59%46%1B%28%42 +PASS U+629C 抜 %1B%24%42%48%34%1B%28%42 +PASS U+629E 択 %1B%24%42%42%72%1B%28%42 +FAIL U+62A6 抦 %1B%24%42%7A%2E%1B%28%42 assert_equals: expected "%1B%24%42%7A%2E" but got "%26%23%32%35%32%35%34%3B" +PASS U+62AB 披 %1B%24%42%48%64%1B%28%42 +PASS U+62AC 抬 %1B%24%42%5A%2D%1B%28%42 +PASS U+62B1 抱 %1B%24%42%4A%7A%1B%28%42 +PASS U+62B5 抵 %1B%24%42%44%71%1B%28%42 +PASS U+62B9 抹 %1B%24%42%4B%75%1B%28%42 +PASS U+62BB 抻 %1B%24%42%59%3B%1B%28%42 +PASS U+62BC 押 %1B%24%42%32%21%1B%28%42 +PASS U+62BD 抽 %1B%24%42%43%6A%1B%28%42 +PASS U+62C2 拂 %1B%24%42%59%44%1B%28%42 +PASS U+62C5 担 %1B%24%42%43%34%1B%28%42 +PASS U+62C6 拆 %1B%24%42%59%3E%1B%28%42 +PASS U+62C7 拇 %1B%24%42%59%45%1B%28%42 +PASS U+62C8 拈 %1B%24%42%59%40%1B%28%42 +PASS U+62C9 拉 %1B%24%42%59%47%1B%28%42 +PASS U+62CA 拊 %1B%24%42%59%43%1B%28%42 +PASS U+62CC 拌 %1B%24%42%59%42%1B%28%42 +PASS U+62CD 拍 %1B%24%42%47%6F%1B%28%42 +PASS U+62CF 拏 %1B%24%42%59%3C%1B%28%42 +PASS U+62D0 拐 %1B%24%42%32%7D%1B%28%42 +PASS U+62D1 拑 %1B%24%42%59%3A%1B%28%42 +PASS U+62D2 拒 %1B%24%42%35%71%1B%28%42 +PASS U+62D3 拓 %1B%24%42%42%73%1B%28%42 +PASS U+62D4 拔 %1B%24%42%59%36%1B%28%42 +PASS U+62D7 拗 %1B%24%42%59%39%1B%28%42 +PASS U+62D8 拘 %1B%24%42%39%34%1B%28%42 +PASS U+62D9 拙 %1B%24%42%40%5B%1B%28%42 +PASS U+62DB 招 %1B%24%42%3E%37%1B%28%42 +PASS U+62DC 拜 %1B%24%42%59%41%1B%28%42 +PASS U+62DD 拝 %1B%24%42%47%52%1B%28%42 +PASS U+62E0 拠 %1B%24%42%35%72%1B%28%42 +PASS U+62E1 拡 %1B%24%42%33%48%1B%28%42 +PASS U+62EC 括 %1B%24%42%33%67%1B%28%42 +PASS U+62ED 拭 %1B%24%42%3F%21%1B%28%42 +PASS U+62EE 拮 %1B%24%42%59%49%1B%28%42 +PASS U+62EF 拯 %1B%24%42%59%4E%1B%28%42 +PASS U+62F1 拱 %1B%24%42%59%4A%1B%28%42 +PASS U+62F3 拳 %1B%24%42%37%7D%1B%28%42 +PASS U+62F5 拵 %1B%24%42%59%4F%1B%28%42 +PASS U+62F6 拶 %1B%24%42%3B%22%1B%28%42 +PASS U+62F7 拷 %1B%24%42%39%69%1B%28%42 +PASS U+62FE 拾 %1B%24%42%3D%26%1B%28%42 +PASS U+62FF 拿 %1B%24%42%59%3D%1B%28%42 +PASS U+6301 持 %1B%24%42%3B%7D%1B%28%42 +PASS U+6302 挂 %1B%24%42%59%4C%1B%28%42 +PASS U+6307 指 %1B%24%42%3B%58%1B%28%42 +PASS U+6308 挈 %1B%24%42%59%4D%1B%28%42 +PASS U+6309 按 %1B%24%42%30%44%1B%28%42 +PASS U+630C 挌 %1B%24%42%59%48%1B%28%42 +PASS U+6311 挑 %1B%24%42%44%29%1B%28%42 +PASS U+6319 挙 %1B%24%42%35%73%1B%28%42 +PASS U+631F 挟 %1B%24%42%36%34%1B%28%42 +PASS U+6327 挧 %1B%24%42%59%4B%1B%28%42 +PASS U+6328 挨 %1B%24%42%30%27%1B%28%42 +PASS U+632B 挫 %1B%24%42%3A%43%1B%28%42 +PASS U+632F 振 %1B%24%42%3F%36%1B%28%42 +PASS U+633A 挺 %1B%24%42%44%72%1B%28%42 +PASS U+633D 挽 %1B%24%42%48%54%1B%28%42 +PASS U+633E 挾 %1B%24%42%59%51%1B%28%42 +PASS U+633F 挿 %1B%24%42%41%5E%1B%28%42 +PASS U+6349 捉 %1B%24%42%42%2A%1B%28%42 +PASS U+634C 捌 %1B%24%42%3B%2B%1B%28%42 +PASS U+634D 捍 %1B%24%42%59%52%1B%28%42 +PASS U+634F 捏 %1B%24%42%59%54%1B%28%42 +PASS U+6350 捐 %1B%24%42%59%50%1B%28%42 +PASS U+6355 捕 %1B%24%42%4A%61%1B%28%42 +PASS U+6357 捗 %1B%24%42%44%3D%1B%28%42 +PASS U+635C 捜 %1B%24%42%41%5C%1B%28%42 +PASS U+6367 捧 %1B%24%42%4A%7B%1B%28%42 +PASS U+6368 捨 %1B%24%42%3C%4E%1B%28%42 +PASS U+6369 捩 %1B%24%42%59%60%1B%28%42 +PASS U+636B 捫 %1B%24%42%59%5F%1B%28%42 +PASS U+636E 据 %1B%24%42%3F%78%1B%28%42 +PASS U+6372 捲 %1B%24%42%37%7E%1B%28%42 +PASS U+6376 捶 %1B%24%42%59%59%1B%28%42 +PASS U+6377 捷 %1B%24%42%3E%39%1B%28%42 +PASS U+637A 捺 %1B%24%42%46%68%1B%28%42 +PASS U+637B 捻 %1B%24%42%47%31%1B%28%42 +PASS U+6380 掀 %1B%24%42%59%57%1B%28%42 +PASS U+6383 掃 %1B%24%42%41%5D%1B%28%42 +PASS U+6388 授 %1B%24%42%3C%78%1B%28%42 +PASS U+6389 掉 %1B%24%42%59%5C%1B%28%42 +PASS U+638C 掌 %1B%24%42%3E%38%1B%28%42 +PASS U+638E 掎 %1B%24%42%59%56%1B%28%42 +PASS U+638F 掏 %1B%24%42%59%5B%1B%28%42 +PASS U+6392 排 %1B%24%42%47%53%1B%28%42 +PASS U+6396 掖 %1B%24%42%59%55%1B%28%42 +PASS U+6398 掘 %1B%24%42%37%21%1B%28%42 +PASS U+639B 掛 %1B%24%42%33%5D%1B%28%42 +PASS U+639F 掟 %1B%24%42%59%5D%1B%28%42 +PASS U+63A0 掠 %1B%24%42%4E%2B%1B%28%42 +PASS U+63A1 採 %1B%24%42%3A%4E%1B%28%42 +PASS U+63A2 探 %1B%24%42%43%35%1B%28%42 +PASS U+63A3 掣 %1B%24%42%59%5A%1B%28%42 +PASS U+63A5 接 %1B%24%42%40%5C%1B%28%42 +PASS U+63A7 控 %1B%24%42%39%35%1B%28%42 +PASS U+63A8 推 %1B%24%42%3F%64%1B%28%42 +PASS U+63A9 掩 %1B%24%42%31%66%1B%28%42 +PASS U+63AA 措 %1B%24%42%41%3C%1B%28%42 +PASS U+63AB 掫 %1B%24%42%59%58%1B%28%42 +PASS U+63AC 掬 %1B%24%42%35%45%1B%28%42 +PASS U+63B2 掲 %1B%24%42%37%47%1B%28%42 +PASS U+63B4 掴 %1B%24%42%44%4F%1B%28%42 +PASS U+63B5 掵 %1B%24%42%59%5E%1B%28%42 +PASS U+63BB 掻 %1B%24%42%41%5F%1B%28%42 +PASS U+63BE 掾 %1B%24%42%59%61%1B%28%42 +PASS U+63C0 揀 %1B%24%42%59%63%1B%28%42 +PASS U+63C3 揃 %1B%24%42%42%37%1B%28%42 +PASS U+63C4 揄 %1B%24%42%59%69%1B%28%42 +PASS U+63C6 揆 %1B%24%42%59%64%1B%28%42 +PASS U+63C9 揉 %1B%24%42%59%66%1B%28%42 +PASS U+63CF 描 %1B%24%42%49%41%1B%28%42 +PASS U+63D0 提 %1B%24%42%44%73%1B%28%42 +PASS U+63D2 插 %1B%24%42%59%67%1B%28%42 +PASS U+63D6 揖 %1B%24%42%4D%2C%1B%28%42 +PASS U+63DA 揚 %1B%24%42%4D%48%1B%28%42 +PASS U+63DB 換 %1B%24%42%34%39%1B%28%42 +PASS U+63E1 握 %1B%24%42%30%2E%1B%28%42 +PASS U+63E3 揣 %1B%24%42%59%65%1B%28%42 +PASS U+63E9 揩 %1B%24%42%59%62%1B%28%42 +PASS U+63EE 揮 %1B%24%42%34%78%1B%28%42 +PASS U+63F4 援 %1B%24%42%31%67%1B%28%42 +FAIL U+63F5 揵 %1B%24%42%7A%2F%1B%28%42 assert_equals: expected "%1B%24%42%7A%2F" but got "%26%23%32%35%35%38%39%3B" +PASS U+63F6 揶 %1B%24%42%59%68%1B%28%42 +PASS U+63FA 揺 %1B%24%42%4D%49%1B%28%42 +PASS U+6406 搆 %1B%24%42%59%6C%1B%28%42 +PASS U+640D 損 %1B%24%42%42%3B%1B%28%42 +PASS U+640F 搏 %1B%24%42%59%73%1B%28%42 +PASS U+6413 搓 %1B%24%42%59%6D%1B%28%42 +PASS U+6416 搖 %1B%24%42%59%6A%1B%28%42 +PASS U+6417 搗 %1B%24%42%59%71%1B%28%42 +PASS U+641C 搜 %1B%24%42%59%53%1B%28%42 +PASS U+6426 搦 %1B%24%42%59%6E%1B%28%42 +PASS U+6428 搨 %1B%24%42%59%72%1B%28%42 +PASS U+642C 搬 %1B%24%42%48%42%1B%28%42 +PASS U+642D 搭 %1B%24%42%45%6B%1B%28%42 +PASS U+6434 搴 %1B%24%42%59%6B%1B%28%42 +PASS U+6436 搶 %1B%24%42%59%6F%1B%28%42 +PASS U+643A 携 %1B%24%42%37%48%1B%28%42 +PASS U+643E 搾 %1B%24%42%3A%71%1B%28%42 +PASS U+6442 摂 %1B%24%42%40%5D%1B%28%42 +PASS U+644E 摎 %1B%24%42%59%77%1B%28%42 +PASS U+6458 摘 %1B%24%42%45%26%1B%28%42 +FAIL U+6460 摠 %1B%24%42%7A%30%1B%28%42 assert_equals: expected "%1B%24%42%7A%30" but got "%26%23%32%35%36%39%36%3B" +PASS U+6467 摧 %1B%24%42%59%74%1B%28%42 +PASS U+6469 摩 %1B%24%42%4B%60%1B%28%42 +PASS U+646F 摯 %1B%24%42%59%75%1B%28%42 +PASS U+6476 摶 %1B%24%42%59%76%1B%28%42 +PASS U+6478 摸 %1B%24%42%4C%4E%1B%28%42 +PASS U+647A 摺 %1B%24%42%40%22%1B%28%42 +PASS U+6483 撃 %1B%24%42%37%62%1B%28%42 +PASS U+6488 撈 %1B%24%42%59%7D%1B%28%42 +PASS U+6492 撒 %1B%24%42%3B%35%1B%28%42 +PASS U+6493 撓 %1B%24%42%59%7A%1B%28%42 +PASS U+6495 撕 %1B%24%42%59%79%1B%28%42 +PASS U+649A 撚 %1B%24%42%47%32%1B%28%42 +FAIL U+649D 撝 %1B%24%42%7A%31%1B%28%42 assert_equals: expected "%1B%24%42%7A%31" but got "%26%23%32%35%37%35%37%3B" +PASS U+649E 撞 %1B%24%42%46%35%1B%28%42 +PASS U+64A4 撤 %1B%24%42%45%31%1B%28%42 +PASS U+64A5 撥 %1B%24%42%59%7B%1B%28%42 +PASS U+64A9 撩 %1B%24%42%59%7C%1B%28%42 +PASS U+64AB 撫 %1B%24%42%49%6F%1B%28%42 +PASS U+64AD 播 %1B%24%42%47%45%1B%28%42 +PASS U+64AE 撮 %1B%24%42%3B%23%1B%28%42 +PASS U+64B0 撰 %1B%24%42%40%71%1B%28%42 +PASS U+64B2 撲 %1B%24%42%4B%50%1B%28%42 +PASS U+64B9 撹 %1B%24%42%33%49%1B%28%42 +PASS U+64BB 撻 %1B%24%42%5A%25%1B%28%42 +PASS U+64BC 撼 %1B%24%42%59%7E%1B%28%42 +PASS U+64C1 擁 %1B%24%42%4D%4A%1B%28%42 +PASS U+64C2 擂 %1B%24%42%5A%27%1B%28%42 +PASS U+64C5 擅 %1B%24%42%5A%23%1B%28%42 +PASS U+64C7 擇 %1B%24%42%5A%24%1B%28%42 +PASS U+64CD 操 %1B%24%42%41%60%1B%28%42 +FAIL U+64CE 擎 %1B%24%42%7A%32%1B%28%42 assert_equals: expected "%1B%24%42%7A%32" but got "%26%23%32%35%38%30%36%3B" +PASS U+64D2 擒 %1B%24%42%5A%22%1B%28%42 +PASS U+64D4 擔 %1B%24%42%59%3F%1B%28%42 +PASS U+64D8 擘 %1B%24%42%5A%26%1B%28%42 +PASS U+64DA 據 %1B%24%42%5A%21%1B%28%42 +PASS U+64E0 擠 %1B%24%42%5A%2B%1B%28%42 +PASS U+64E1 擡 %1B%24%42%5A%2C%1B%28%42 +PASS U+64E2 擢 %1B%24%42%45%27%1B%28%42 +PASS U+64E3 擣 %1B%24%42%5A%2E%1B%28%42 +PASS U+64E6 擦 %1B%24%42%3B%24%1B%28%42 +PASS U+64E7 擧 %1B%24%42%5A%29%1B%28%42 +PASS U+64EC 擬 %1B%24%42%35%3C%1B%28%42 +PASS U+64EF 擯 %1B%24%42%5A%2F%1B%28%42 +PASS U+64F1 擱 %1B%24%42%5A%28%1B%28%42 +PASS U+64F2 擲 %1B%24%42%5A%33%1B%28%42 +PASS U+64F4 擴 %1B%24%42%5A%32%1B%28%42 +PASS U+64F6 擶 %1B%24%42%5A%31%1B%28%42 +PASS U+64FA 擺 %1B%24%42%5A%34%1B%28%42 +PASS U+64FD 擽 %1B%24%42%5A%36%1B%28%42 +PASS U+64FE 擾 %1B%24%42%3E%71%1B%28%42 +PASS U+6500 攀 %1B%24%42%5A%35%1B%28%42 +PASS U+6505 攅 %1B%24%42%5A%39%1B%28%42 +PASS U+6518 攘 %1B%24%42%5A%37%1B%28%42 +PASS U+651C 攜 %1B%24%42%5A%38%1B%28%42 +PASS U+651D 攝 %1B%24%42%59%70%1B%28%42 +PASS U+6523 攣 %1B%24%42%5A%3B%1B%28%42 +PASS U+6524 攤 %1B%24%42%5A%3A%1B%28%42 +PASS U+652A 攪 %1B%24%42%59%78%1B%28%42 +PASS U+652B 攫 %1B%24%42%5A%3C%1B%28%42 +PASS U+652C 攬 %1B%24%42%5A%30%1B%28%42 +PASS U+652F 支 %1B%24%42%3B%59%1B%28%42 +PASS U+6534 攴 %1B%24%42%5A%3D%1B%28%42 +PASS U+6535 攵 %1B%24%42%5A%3E%1B%28%42 +PASS U+6536 收 %1B%24%42%5A%40%1B%28%42 +PASS U+6537 攷 %1B%24%42%5A%3F%1B%28%42 +PASS U+6538 攸 %1B%24%42%5A%41%1B%28%42 +PASS U+6539 改 %1B%24%42%32%7E%1B%28%42 +PASS U+653B 攻 %1B%24%42%39%36%1B%28%42 +PASS U+653E 放 %1B%24%42%4A%7C%1B%28%42 +PASS U+653F 政 %1B%24%42%40%2F%1B%28%42 +PASS U+6545 故 %1B%24%42%38%4E%1B%28%42 +PASS U+6548 效 %1B%24%42%5A%43%1B%28%42 +PASS U+654D 敍 %1B%24%42%5A%46%1B%28%42 +FAIL U+654E 敎 %1B%24%42%7A%33%1B%28%42 assert_equals: expected "%1B%24%42%7A%33" but got "%26%23%32%35%39%33%34%3B" +PASS U+654F 敏 %1B%24%42%49%52%1B%28%42 +PASS U+6551 救 %1B%24%42%35%5F%1B%28%42 +PASS U+6555 敕 %1B%24%42%5A%45%1B%28%42 +PASS U+6556 敖 %1B%24%42%5A%44%1B%28%42 +PASS U+6557 敗 %1B%24%42%47%54%1B%28%42 +PASS U+6558 敘 %1B%24%42%5A%47%1B%28%42 +PASS U+6559 教 %1B%24%42%36%35%1B%28%42 +PASS U+655D 敝 %1B%24%42%5A%49%1B%28%42 +PASS U+655E 敞 %1B%24%42%5A%48%1B%28%42 +PASS U+6562 敢 %1B%24%42%34%3A%1B%28%42 +PASS U+6563 散 %1B%24%42%3B%36%1B%28%42 +PASS U+6566 敦 %1B%24%42%46%58%1B%28%42 +PASS U+656C 敬 %1B%24%42%37%49%1B%28%42 +PASS U+6570 数 %1B%24%42%3F%74%1B%28%42 +PASS U+6572 敲 %1B%24%42%5A%4A%1B%28%42 +PASS U+6574 整 %1B%24%42%40%30%1B%28%42 +PASS U+6575 敵 %1B%24%42%45%28%1B%28%42 +PASS U+6577 敷 %1B%24%42%49%5F%1B%28%42 +PASS U+6578 數 %1B%24%42%5A%4B%1B%28%42 +PASS U+6582 斂 %1B%24%42%5A%4C%1B%28%42 +PASS U+6583 斃 %1B%24%42%5A%4D%1B%28%42 +PASS U+6587 文 %1B%24%42%4A%38%1B%28%42 +PASS U+6588 斈 %1B%24%42%55%5D%1B%28%42 +PASS U+6589 斉 %1B%24%42%40%46%1B%28%42 +PASS U+658C 斌 %1B%24%42%49%4C%1B%28%42 +PASS U+658E 斎 %1B%24%42%3A%58%1B%28%42 +PASS U+6590 斐 %1B%24%42%48%65%1B%28%42 +PASS U+6591 斑 %1B%24%42%48%43%1B%28%42 +PASS U+6597 斗 %1B%24%42%45%4D%1B%28%42 +PASS U+6599 料 %1B%24%42%4E%41%1B%28%42 +PASS U+659B 斛 %1B%24%42%5A%4F%1B%28%42 +PASS U+659C 斜 %1B%24%42%3C%50%1B%28%42 +PASS U+659F 斟 %1B%24%42%5A%50%1B%28%42 +PASS U+65A1 斡 %1B%24%42%30%36%1B%28%42 +PASS U+65A4 斤 %1B%24%42%36%54%1B%28%42 +PASS U+65A5 斥 %1B%24%42%40%4D%1B%28%42 +PASS U+65A7 斧 %1B%24%42%49%60%1B%28%42 +PASS U+65AB 斫 %1B%24%42%5A%51%1B%28%42 +PASS U+65AC 斬 %1B%24%42%3B%42%1B%28%42 +PASS U+65AD 断 %1B%24%42%43%47%1B%28%42 +PASS U+65AF 斯 %1B%24%42%3B%5B%1B%28%42 +PASS U+65B0 新 %1B%24%42%3F%37%1B%28%42 +PASS U+65B7 斷 %1B%24%42%5A%52%1B%28%42 +PASS U+65B9 方 %1B%24%42%4A%7D%1B%28%42 +PASS U+65BC 於 %1B%24%42%31%77%1B%28%42 +PASS U+65BD 施 %1B%24%42%3B%5C%1B%28%42 +PASS U+65C1 旁 %1B%24%42%5A%55%1B%28%42 +PASS U+65C3 旃 %1B%24%42%5A%53%1B%28%42 +PASS U+65C4 旄 %1B%24%42%5A%56%1B%28%42 +PASS U+65C5 旅 %1B%24%42%4E%39%1B%28%42 +PASS U+65C6 旆 %1B%24%42%5A%54%1B%28%42 +PASS U+65CB 旋 %1B%24%42%40%7B%1B%28%42 +PASS U+65CC 旌 %1B%24%42%5A%57%1B%28%42 +PASS U+65CF 族 %1B%24%42%42%32%1B%28%42 +PASS U+65D2 旒 %1B%24%42%5A%58%1B%28%42 +PASS U+65D7 旗 %1B%24%42%34%7A%1B%28%42 +PASS U+65D9 旙 %1B%24%42%5A%5A%1B%28%42 +PASS U+65DB 旛 %1B%24%42%5A%59%1B%28%42 +PASS U+65E0 无 %1B%24%42%5A%5B%1B%28%42 +PASS U+65E1 旡 %1B%24%42%5A%5C%1B%28%42 +PASS U+65E2 既 %1B%24%42%34%7B%1B%28%42 +PASS U+65E5 日 %1B%24%42%46%7C%1B%28%42 +PASS U+65E6 旦 %1B%24%42%43%36%1B%28%42 +PASS U+65E7 旧 %1B%24%42%35%6C%1B%28%42 +PASS U+65E8 旨 %1B%24%42%3B%5D%1B%28%42 +PASS U+65E9 早 %1B%24%42%41%61%1B%28%42 +PASS U+65EC 旬 %1B%24%42%3D%5C%1B%28%42 +PASS U+65ED 旭 %1B%24%42%30%30%1B%28%42 +PASS U+65F1 旱 %1B%24%42%5A%5D%1B%28%42 +PASS U+65FA 旺 %1B%24%42%32%22%1B%28%42 +PASS U+65FB 旻 %1B%24%42%5A%61%1B%28%42 +FAIL U+6600 昀 %1B%24%42%7A%34%1B%28%42 assert_equals: expected "%1B%24%42%7A%34" but got "%26%23%32%36%31%31%32%3B" +PASS U+6602 昂 %1B%24%42%39%37%1B%28%42 +PASS U+6603 昃 %1B%24%42%5A%60%1B%28%42 +PASS U+6606 昆 %1B%24%42%3A%2B%1B%28%42 +PASS U+6607 昇 %1B%24%42%3E%3A%1B%28%42 +FAIL U+6609 昉 %1B%24%42%7A%37%1B%28%42 assert_equals: expected "%1B%24%42%7A%37" but got "%26%23%32%36%31%32%31%3B" +PASS U+660A 昊 %1B%24%42%5A%5F%1B%28%42 +PASS U+660C 昌 %1B%24%42%3E%3B%1B%28%42 +PASS U+660E 明 %1B%24%42%4C%40%1B%28%42 +PASS U+660F 昏 %1B%24%42%3A%2A%1B%28%42 +PASS U+6613 易 %1B%24%42%30%57%1B%28%42 +PASS U+6614 昔 %1B%24%42%40%4E%1B%28%42 +FAIL U+6615 昕 %1B%24%42%7A%35%1B%28%42 assert_equals: expected "%1B%24%42%7A%35" but got "%26%23%32%36%31%33%33%3B" +PASS U+661C 昜 %1B%24%42%5A%66%1B%28%42 +FAIL U+661E 昞 %1B%24%42%7A%39%1B%28%42 assert_equals: expected "%1B%24%42%7A%39" but got "%26%23%32%36%31%34%32%3B" +PASS U+661F 星 %1B%24%42%40%31%1B%28%42 +PASS U+6620 映 %1B%24%42%31%47%1B%28%42 +FAIL U+6624 昤 %1B%24%42%7A%3A%1B%28%42 assert_equals: expected "%1B%24%42%7A%3A" but got "%26%23%32%36%31%34%38%3B" +PASS U+6625 春 %1B%24%42%3D%55%1B%28%42 +PASS U+6627 昧 %1B%24%42%4B%66%1B%28%42 +PASS U+6628 昨 %1B%24%42%3A%72%1B%28%42 +PASS U+662D 昭 %1B%24%42%3E%3C%1B%28%42 +FAIL U+662E 昮 %1B%24%42%7A%38%1B%28%42 assert_equals: expected "%1B%24%42%7A%38" but got "%26%23%32%36%31%35%38%3B" +PASS U+662F 是 %1B%24%42%40%27%1B%28%42 +FAIL U+6631 昱 %1B%24%42%79%28%1B%28%42 assert_equals: expected "%1B%24%42%79%28" but got "%26%23%32%36%31%36%31%3B" +PASS U+6634 昴 %1B%24%42%5A%65%1B%28%42 +PASS U+6635 昵 %1B%24%42%5A%63%1B%28%42 +PASS U+6636 昶 %1B%24%42%5A%64%1B%28%42 +FAIL U+663B 昻 %1B%24%42%7A%36%1B%28%42 assert_equals: expected "%1B%24%42%7A%36" but got "%26%23%32%36%31%37%31%3B" +PASS U+663C 昼 %1B%24%42%43%6B%1B%28%42 +PASS U+663F 昿 %1B%24%42%5B%26%1B%28%42 +PASS U+6641 晁 %1B%24%42%5A%6A%1B%28%42 +PASS U+6642 時 %1B%24%42%3B%7E%1B%28%42 +PASS U+6643 晃 %1B%24%42%39%38%1B%28%42 +PASS U+6644 晄 %1B%24%42%5A%68%1B%28%42 +PASS U+6649 晉 %1B%24%42%5A%69%1B%28%42 +PASS U+664B 晋 %1B%24%42%3F%38%1B%28%42 +PASS U+664F 晏 %1B%24%42%5A%67%1B%28%42 +PASS U+6652 晒 %1B%24%42%3B%2F%1B%28%42 +FAIL U+6657 晗 %1B%24%42%7A%3C%1B%28%42 assert_equals: expected "%1B%24%42%7A%3C" but got "%26%23%32%36%31%39%39%3B" +FAIL U+6659 晙 %1B%24%42%7A%3D%1B%28%42 assert_equals: expected "%1B%24%42%7A%3D" but got "%26%23%32%36%32%30%31%3B" +PASS U+665D 晝 %1B%24%42%5A%6C%1B%28%42 +PASS U+665E 晞 %1B%24%42%5A%6B%1B%28%42 +PASS U+665F 晟 %1B%24%42%5A%70%1B%28%42 +PASS U+6662 晢 %1B%24%42%5A%71%1B%28%42 +PASS U+6664 晤 %1B%24%42%5A%6D%1B%28%42 +FAIL U+6665 晥 %1B%24%42%7A%3B%1B%28%42 assert_equals: expected "%1B%24%42%7A%3B" but got "%26%23%32%36%32%31%33%3B" +PASS U+6666 晦 %1B%24%42%33%22%1B%28%42 +PASS U+6667 晧 %1B%24%42%5A%6E%1B%28%42 +PASS U+6668 晨 %1B%24%42%5A%6F%1B%28%42 +PASS U+6669 晩 %1B%24%42%48%55%1B%28%42 +PASS U+666E 普 %1B%24%42%49%61%1B%28%42 +PASS U+666F 景 %1B%24%42%37%4A%1B%28%42 +PASS U+6670 晰 %1B%24%42%5A%72%1B%28%42 +FAIL U+6673 晳 %1B%24%42%7A%3F%1B%28%42 assert_equals: expected "%1B%24%42%7A%3F" but got "%26%23%32%36%32%32%37%3B" +PASS U+6674 晴 %1B%24%42%40%32%1B%28%42 +PASS U+6676 晶 %1B%24%42%3E%3D%1B%28%42 +PASS U+667A 智 %1B%24%42%43%52%1B%28%42 +PASS U+6681 暁 %1B%24%42%36%47%1B%28%42 +PASS U+6683 暃 %1B%24%42%5A%73%1B%28%42 +PASS U+6684 暄 %1B%24%42%5A%77%1B%28%42 +PASS U+6687 暇 %1B%24%42%32%4B%1B%28%42 +PASS U+6688 暈 %1B%24%42%5A%74%1B%28%42 +PASS U+6689 暉 %1B%24%42%5A%76%1B%28%42 +PASS U+668E 暎 %1B%24%42%5A%75%1B%28%42 +PASS U+6691 暑 %1B%24%42%3D%6B%1B%28%42 +PASS U+6696 暖 %1B%24%42%43%48%1B%28%42 +PASS U+6697 暗 %1B%24%42%30%45%1B%28%42 +PASS U+6698 暘 %1B%24%42%5A%78%1B%28%42 +FAIL U+6699 暙 %1B%24%42%7A%40%1B%28%42 assert_equals: expected "%1B%24%42%7A%40" but got "%26%23%32%36%32%36%35%3B" +PASS U+669D 暝 %1B%24%42%5A%79%1B%28%42 +FAIL U+66A0 暠 %1B%24%42%7A%41%1B%28%42 assert_equals: expected "%1B%24%42%7A%41" but got "%26%23%32%36%32%37%32%3B" +PASS U+66A2 暢 %1B%24%42%44%2A%1B%28%42 +PASS U+66A6 暦 %1B%24%42%4E%71%1B%28%42 +PASS U+66AB 暫 %1B%24%42%3B%43%1B%28%42 +PASS U+66AE 暮 %1B%24%42%4A%6B%1B%28%42 +FAIL U+66B2 暲 %1B%24%42%7A%42%1B%28%42 assert_equals: expected "%1B%24%42%7A%42" but got "%26%23%32%36%32%39%30%3B" +PASS U+66B4 暴 %1B%24%42%4B%3D%1B%28%42 +PASS U+66B8 暸 %1B%24%42%5B%22%1B%28%42 +PASS U+66B9 暹 %1B%24%42%5A%7B%1B%28%42 +PASS U+66BC 暼 %1B%24%42%5A%7E%1B%28%42 +PASS U+66BE 暾 %1B%24%42%5A%7D%1B%28%42 +FAIL U+66BF 暿 %1B%24%42%7A%43%1B%28%42 assert_equals: expected "%1B%24%42%7A%43" but got "%26%23%32%36%33%30%33%3B" +PASS U+66C1 曁 %1B%24%42%5A%7A%1B%28%42 +PASS U+66C4 曄 %1B%24%42%5B%21%1B%28%42 +PASS U+66C7 曇 %1B%24%42%46%5E%1B%28%42 +PASS U+66C9 曉 %1B%24%42%5A%7C%1B%28%42 +PASS U+66D6 曖 %1B%24%42%5B%23%1B%28%42 +PASS U+66D9 曙 %1B%24%42%3D%6C%1B%28%42 +PASS U+66DA 曚 %1B%24%42%5B%24%1B%28%42 +PASS U+66DC 曜 %1B%24%42%4D%4B%1B%28%42 +PASS U+66DD 曝 %1B%24%42%47%78%1B%28%42 +PASS U+66E0 曠 %1B%24%42%5B%25%1B%28%42 +PASS U+66E6 曦 %1B%24%42%5B%27%1B%28%42 +PASS U+66E9 曩 %1B%24%42%5B%28%1B%28%42 +PASS U+66F0 曰 %1B%24%42%5B%29%1B%28%42 +PASS U+66F2 曲 %1B%24%42%36%4A%1B%28%42 +PASS U+66F3 曳 %1B%24%42%31%48%1B%28%42 +PASS U+66F4 更 %1B%24%42%39%39%1B%28%42 +PASS U+66F5 曵 %1B%24%42%5B%2A%1B%28%42 +PASS U+66F7 曷 %1B%24%42%5B%2B%1B%28%42 +PASS U+66F8 書 %1B%24%42%3D%71%1B%28%42 +PASS U+66F9 曹 %1B%24%42%41%62%1B%28%42 +FAIL U+66FA 曺 %1B%24%42%7A%44%1B%28%42 assert_equals: expected "%1B%24%42%7A%44" but got "%26%23%32%36%33%36%32%3B" +FAIL U+66FB 曻 %1B%24%42%79%2B%1B%28%42 assert_equals: expected "%1B%24%42%79%2B" but got "%26%23%32%36%33%36%33%3B" +PASS U+66FC 曼 %1B%24%42%52%58%1B%28%42 +PASS U+66FD 曽 %1B%24%42%41%3E%1B%28%42 +PASS U+66FE 曾 %1B%24%42%41%3D%1B%28%42 +PASS U+66FF 替 %1B%24%42%42%58%1B%28%42 +PASS U+6700 最 %1B%24%42%3A%47%1B%28%42 +PASS U+6703 會 %1B%24%42%50%72%1B%28%42 +PASS U+6708 月 %1B%24%42%37%6E%1B%28%42 +PASS U+6709 有 %1B%24%42%4D%2D%1B%28%42 +PASS U+670B 朋 %1B%24%42%4A%7E%1B%28%42 +PASS U+670D 服 %1B%24%42%49%7E%1B%28%42 +FAIL U+670E 朎 %1B%24%42%7A%45%1B%28%42 assert_equals: expected "%1B%24%42%7A%45" but got "%26%23%32%36%33%38%32%3B" +PASS U+670F 朏 %1B%24%42%5B%2C%1B%28%42 +PASS U+6714 朔 %1B%24%42%3A%73%1B%28%42 +PASS U+6715 朕 %1B%24%42%44%3F%1B%28%42 +PASS U+6716 朖 %1B%24%42%5B%2D%1B%28%42 +PASS U+6717 朗 %1B%24%42%4F%2F%1B%28%42 +PASS U+671B 望 %1B%24%42%4B%3E%1B%28%42 +PASS U+671D 朝 %1B%24%42%44%2B%1B%28%42 +PASS U+671E 朞 %1B%24%42%5B%2E%1B%28%42 +PASS U+671F 期 %1B%24%42%34%7C%1B%28%42 +PASS U+6726 朦 %1B%24%42%5B%2F%1B%28%42 +PASS U+6727 朧 %1B%24%42%5B%30%1B%28%42 +PASS U+6728 木 %1B%24%42%4C%5A%1B%28%42 +PASS U+672A 未 %1B%24%42%4C%24%1B%28%42 +PASS U+672B 末 %1B%24%42%4B%76%1B%28%42 +PASS U+672C 本 %1B%24%42%4B%5C%1B%28%42 +PASS U+672D 札 %1B%24%42%3B%25%1B%28%42 +PASS U+672E 朮 %1B%24%42%5B%32%1B%28%42 +PASS U+6731 朱 %1B%24%42%3C%6B%1B%28%42 +PASS U+6734 朴 %1B%24%42%4B%51%1B%28%42 +PASS U+6736 朶 %1B%24%42%5B%34%1B%28%42 +PASS U+6737 朷 %1B%24%42%5B%37%1B%28%42 +PASS U+6738 朸 %1B%24%42%5B%36%1B%28%42 +PASS U+673A 机 %1B%24%42%34%79%1B%28%42 +PASS U+673D 朽 %1B%24%42%35%60%1B%28%42 +PASS U+673F 朿 %1B%24%42%5B%33%1B%28%42 +PASS U+6741 杁 %1B%24%42%5B%35%1B%28%42 +PASS U+6746 杆 %1B%24%42%5B%38%1B%28%42 +PASS U+6749 杉 %1B%24%42%3F%79%1B%28%42 +PASS U+674E 李 %1B%24%42%4D%7B%1B%28%42 +PASS U+674F 杏 %1B%24%42%30%49%1B%28%42 +PASS U+6750 材 %1B%24%42%3A%60%1B%28%42 +PASS U+6751 村 %1B%24%42%42%3C%1B%28%42 +PASS U+6753 杓 %1B%24%42%3C%5D%1B%28%42 +PASS U+6756 杖 %1B%24%42%3E%73%1B%28%42 +PASS U+6759 杙 %1B%24%42%5B%3B%1B%28%42 +PASS U+675C 杜 %1B%24%42%45%4E%1B%28%42 +PASS U+675E 杞 %1B%24%42%5B%39%1B%28%42 +PASS U+675F 束 %1B%24%42%42%2B%1B%28%42 +PASS U+6760 杠 %1B%24%42%5B%3A%1B%28%42 +PASS U+6761 条 %1B%24%42%3E%72%1B%28%42 +PASS U+6762 杢 %1B%24%42%4C%5D%1B%28%42 +PASS U+6763 杣 %1B%24%42%5B%3C%1B%28%42 +PASS U+6764 杤 %1B%24%42%5B%3D%1B%28%42 +PASS U+6765 来 %1B%24%42%4D%68%1B%28%42 +FAIL U+6766 杦 %1B%24%42%7A%47%1B%28%42 assert_equals: expected "%1B%24%42%7A%47" but got "%26%23%32%36%34%37%30%3B" +PASS U+676A 杪 %1B%24%42%5B%42%1B%28%42 +PASS U+676D 杭 %1B%24%42%39%3A%1B%28%42 +PASS U+676F 杯 %1B%24%42%47%55%1B%28%42 +PASS U+6770 杰 %1B%24%42%5B%3F%1B%28%42 +PASS U+6771 東 %1B%24%42%45%6C%1B%28%42 +PASS U+6772 杲 %1B%24%42%5A%5E%1B%28%42 +PASS U+6773 杳 %1B%24%42%5A%62%1B%28%42 +PASS U+6775 杵 %1B%24%42%35%4F%1B%28%42 +PASS U+6777 杷 %1B%24%42%47%47%1B%28%42 +PASS U+677C 杼 %1B%24%42%5B%41%1B%28%42 +PASS U+677E 松 %1B%24%42%3E%3E%1B%28%42 +PASS U+677F 板 %1B%24%42%48%44%1B%28%42 +PASS U+6785 枅 %1B%24%42%5B%47%1B%28%42 +PASS U+6787 枇 %1B%24%42%48%7A%1B%28%42 +PASS U+6789 枉 %1B%24%42%5B%3E%1B%28%42 +PASS U+678B 枋 %1B%24%42%5B%44%1B%28%42 +PASS U+678C 枌 %1B%24%42%5B%43%1B%28%42 +PASS U+6790 析 %1B%24%42%40%4F%1B%28%42 +PASS U+6795 枕 %1B%24%42%4B%6D%1B%28%42 +PASS U+6797 林 %1B%24%42%4E%53%1B%28%42 +PASS U+679A 枚 %1B%24%42%4B%67%1B%28%42 +PASS U+679C 果 %1B%24%42%32%4C%1B%28%42 +PASS U+679D 枝 %1B%24%42%3B%5E%1B%28%42 +PASS U+67A0 枠 %1B%24%42%4F%48%1B%28%42 +PASS U+67A1 枡 %1B%24%42%5B%46%1B%28%42 +PASS U+67A2 枢 %1B%24%42%3F%75%1B%28%42 +PASS U+67A6 枦 %1B%24%42%5B%45%1B%28%42 +PASS U+67A9 枩 %1B%24%42%5B%40%1B%28%42 +PASS U+67AF 枯 %1B%24%42%38%4F%1B%28%42 +PASS U+67B3 枳 %1B%24%42%5B%4C%1B%28%42 +PASS U+67B4 枴 %1B%24%42%5B%4A%1B%28%42 +PASS U+67B6 架 %1B%24%42%32%4D%1B%28%42 +PASS U+67B7 枷 %1B%24%42%5B%48%1B%28%42 +PASS U+67B8 枸 %1B%24%42%5B%4E%1B%28%42 +PASS U+67B9 枹 %1B%24%42%5B%54%1B%28%42 +FAIL U+67BB 枻 %1B%24%42%7A%48%1B%28%42 assert_equals: expected "%1B%24%42%7A%48" but got "%26%23%32%36%35%35%35%3B" +FAIL U+67C0 柀 %1B%24%42%7A%4A%1B%28%42 assert_equals: expected "%1B%24%42%7A%4A" but got "%26%23%32%36%35%36%30%3B" +PASS U+67C1 柁 %1B%24%42%42%48%1B%28%42 +PASS U+67C4 柄 %1B%24%42%4A%41%1B%28%42 +PASS U+67C6 柆 %1B%24%42%5B%56%1B%28%42 +PASS U+67CA 柊 %1B%24%42%49%22%1B%28%42 +PASS U+67CE 柎 %1B%24%42%5B%55%1B%28%42 +PASS U+67CF 柏 %1B%24%42%47%70%1B%28%42 +PASS U+67D0 某 %1B%24%42%4B%3F%1B%28%42 +PASS U+67D1 柑 %1B%24%42%34%3B%1B%28%42 +PASS U+67D3 染 %1B%24%42%40%77%1B%28%42 +PASS U+67D4 柔 %1B%24%42%3D%40%1B%28%42 +PASS U+67D8 柘 %1B%24%42%44%53%1B%28%42 +PASS U+67DA 柚 %1B%24%42%4D%2E%1B%28%42 +PASS U+67DD 柝 %1B%24%42%5B%51%1B%28%42 +PASS U+67DE 柞 %1B%24%42%5B%50%1B%28%42 +PASS U+67E2 柢 %1B%24%42%5B%52%1B%28%42 +PASS U+67E4 柤 %1B%24%42%5B%4F%1B%28%42 +PASS U+67E7 柧 %1B%24%42%5B%57%1B%28%42 +PASS U+67E9 柩 %1B%24%42%5B%4D%1B%28%42 +PASS U+67EC 柬 %1B%24%42%5B%4B%1B%28%42 +PASS U+67EE 柮 %1B%24%42%5B%53%1B%28%42 +PASS U+67EF 柯 %1B%24%42%5B%49%1B%28%42 +PASS U+67F1 柱 %1B%24%42%43%6C%1B%28%42 +PASS U+67F3 柳 %1B%24%42%4C%78%1B%28%42 +PASS U+67F4 柴 %1B%24%42%3C%46%1B%28%42 +PASS U+67F5 柵 %1B%24%42%3A%74%1B%28%42 +PASS U+67FB 査 %1B%24%42%3A%3A%1B%28%42 +PASS U+67FE 柾 %1B%24%42%4B%6F%1B%28%42 +PASS U+67FF 柿 %1B%24%42%33%41%1B%28%42 +FAIL U+6801 栁 %1B%24%42%7A%4B%1B%28%42 assert_equals: expected "%1B%24%42%7A%4B" but got "%26%23%32%36%36%32%35%3B" +PASS U+6802 栂 %1B%24%42%44%4E%1B%28%42 +PASS U+6803 栃 %1B%24%42%46%4A%1B%28%42 +PASS U+6804 栄 %1B%24%42%31%49%1B%28%42 +PASS U+6813 栓 %1B%24%42%40%72%1B%28%42 +PASS U+6816 栖 %1B%24%42%40%34%1B%28%42 +PASS U+6817 栗 %1B%24%42%37%2A%1B%28%42 +PASS U+681E 栞 %1B%24%42%5B%59%1B%28%42 +PASS U+6821 校 %1B%24%42%39%3B%1B%28%42 +PASS U+6822 栢 %1B%24%42%33%7C%1B%28%42 +PASS U+6829 栩 %1B%24%42%5B%5B%1B%28%42 +PASS U+682A 株 %1B%24%42%33%74%1B%28%42 +PASS U+682B 栫 %1B%24%42%5B%61%1B%28%42 +PASS U+6832 栲 %1B%24%42%5B%5E%1B%28%42 +PASS U+6834 栴 %1B%24%42%40%73%1B%28%42 +PASS U+6838 核 %1B%24%42%33%4B%1B%28%42 +PASS U+6839 根 %1B%24%42%3A%2C%1B%28%42 +PASS U+683C 格 %1B%24%42%33%4A%1B%28%42 +PASS U+683D 栽 %1B%24%42%3A%4F%1B%28%42 +PASS U+6840 桀 %1B%24%42%5B%5C%1B%28%42 +PASS U+6841 桁 %1B%24%42%37%65%1B%28%42 +PASS U+6842 桂 %1B%24%42%37%4B%1B%28%42 +PASS U+6843 桃 %1B%24%42%45%6D%1B%28%42 +FAIL U+6844 桄 %1B%24%42%7A%4C%1B%28%42 assert_equals: expected "%1B%24%42%7A%4C" but got "%26%23%32%36%36%39%32%3B" +PASS U+6846 框 %1B%24%42%5B%5A%1B%28%42 +PASS U+6848 案 %1B%24%42%30%46%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_3001-4000-expected.txt new file mode 100644 index 0000000..6d596fe16 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_3001-4000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 932 PASS, 68 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+684D 桍 %1B%24%42%5B%5D%1B%28%42 +PASS U+684E 桎 %1B%24%42%5B%5F%1B%28%42 +PASS U+6850 桐 %1B%24%42%36%4D%1B%28%42 +PASS U+6851 桑 %1B%24%42%37%2C%1B%28%42 +FAIL U+6852 桒 %1B%24%42%7A%49%1B%28%42 assert_equals: expected "%1B%24%42%7A%49" but got "%26%23%32%36%37%30%36%3B" +PASS U+6853 桓 %1B%24%42%34%3C%1B%28%42 +PASS U+6854 桔 %1B%24%42%35%4B%1B%28%42 +PASS U+6859 桙 %1B%24%42%5B%62%1B%28%42 +PASS U+685C 桜 %1B%24%42%3A%79%1B%28%42 +PASS U+685D 桝 %1B%24%42%4B%71%1B%28%42 +PASS U+685F 桟 %1B%24%42%3B%37%1B%28%42 +PASS U+6863 档 %1B%24%42%5B%63%1B%28%42 +PASS U+6867 桧 %1B%24%42%49%30%1B%28%42 +PASS U+6874 桴 %1B%24%42%5B%6F%1B%28%42 +PASS U+6876 桶 %1B%24%42%32%33%1B%28%42 +PASS U+6877 桷 %1B%24%42%5B%64%1B%28%42 +PASS U+687E 桾 %1B%24%42%5B%75%1B%28%42 +PASS U+687F 桿 %1B%24%42%5B%65%1B%28%42 +PASS U+6881 梁 %1B%24%42%4E%42%1B%28%42 +PASS U+6883 梃 %1B%24%42%5B%6C%1B%28%42 +PASS U+6885 梅 %1B%24%42%47%5F%1B%28%42 +PASS U+688D 梍 %1B%24%42%5B%74%1B%28%42 +PASS U+688F 梏 %1B%24%42%5B%67%1B%28%42 +PASS U+6893 梓 %1B%24%42%30%34%1B%28%42 +PASS U+6894 梔 %1B%24%42%5B%69%1B%28%42 +PASS U+6897 梗 %1B%24%42%39%3C%1B%28%42 +PASS U+689B 梛 %1B%24%42%5B%6B%1B%28%42 +PASS U+689D 條 %1B%24%42%5B%6A%1B%28%42 +PASS U+689F 梟 %1B%24%42%5B%66%1B%28%42 +PASS U+68A0 梠 %1B%24%42%5B%71%1B%28%42 +PASS U+68A2 梢 %1B%24%42%3E%3F%1B%28%42 +PASS U+68A6 梦 %1B%24%42%54%6D%1B%28%42 +PASS U+68A7 梧 %1B%24%42%38%68%1B%28%42 +PASS U+68A8 梨 %1B%24%42%4D%7C%1B%28%42 +PASS U+68AD 梭 %1B%24%42%5B%68%1B%28%42 +PASS U+68AF 梯 %1B%24%42%44%74%1B%28%42 +PASS U+68B0 械 %1B%24%42%33%23%1B%28%42 +PASS U+68B1 梱 %1B%24%42%3A%2D%1B%28%42 +PASS U+68B3 梳 %1B%24%42%5B%60%1B%28%42 +PASS U+68B5 梵 %1B%24%42%5B%70%1B%28%42 +PASS U+68B6 梶 %1B%24%42%33%61%1B%28%42 +PASS U+68B9 梹 %1B%24%42%5B%6E%1B%28%42 +PASS U+68BA 梺 %1B%24%42%5B%72%1B%28%42 +PASS U+68BC 梼 %1B%24%42%45%6E%1B%28%42 +PASS U+68C4 棄 %1B%24%42%34%7E%1B%28%42 +PASS U+68C6 棆 %1B%24%42%5C%32%1B%28%42 +FAIL U+68C8 棈 %1B%24%42%79%29%1B%28%42 assert_equals: expected "%1B%24%42%79%29" but got "%26%23%32%36%38%32%34%3B" +PASS U+68C9 棉 %1B%24%42%4C%49%1B%28%42 +PASS U+68CA 棊 %1B%24%42%5B%77%1B%28%42 +PASS U+68CB 棋 %1B%24%42%34%7D%1B%28%42 +PASS U+68CD 棍 %1B%24%42%5B%7E%1B%28%42 +FAIL U+68CF 棏 %1B%24%42%7A%4D%1B%28%42 assert_equals: expected "%1B%24%42%7A%4D" but got "%26%23%32%36%38%33%31%3B" +PASS U+68D2 棒 %1B%24%42%4B%40%1B%28%42 +PASS U+68D4 棔 %1B%24%42%5C%21%1B%28%42 +PASS U+68D5 棕 %1B%24%42%5C%23%1B%28%42 +PASS U+68D7 棗 %1B%24%42%5C%27%1B%28%42 +PASS U+68D8 棘 %1B%24%42%5B%79%1B%28%42 +PASS U+68DA 棚 %1B%24%42%43%2A%1B%28%42 +PASS U+68DF 棟 %1B%24%42%45%6F%1B%28%42 +PASS U+68E0 棠 %1B%24%42%5C%2B%1B%28%42 +PASS U+68E1 棡 %1B%24%42%5B%7C%1B%28%42 +PASS U+68E3 棣 %1B%24%42%5C%28%1B%28%42 +PASS U+68E7 棧 %1B%24%42%5C%22%1B%28%42 +PASS U+68EE 森 %1B%24%42%3F%39%1B%28%42 +PASS U+68EF 棯 %1B%24%42%5C%2C%1B%28%42 +PASS U+68F2 棲 %1B%24%42%40%33%1B%28%42 +PASS U+68F9 棹 %1B%24%42%5C%2A%1B%28%42 +PASS U+68FA 棺 %1B%24%42%34%3D%1B%28%42 +PASS U+6900 椀 %1B%24%42%4F%50%1B%28%42 +PASS U+6901 椁 %1B%24%42%5B%76%1B%28%42 +PASS U+6904 椄 %1B%24%42%5C%26%1B%28%42 +PASS U+6905 椅 %1B%24%42%30%58%1B%28%42 +PASS U+6908 椈 %1B%24%42%5B%78%1B%28%42 +PASS U+690B 椋 %1B%24%42%4C%3A%1B%28%42 +PASS U+690C 椌 %1B%24%42%5B%7D%1B%28%42 +PASS U+690D 植 %1B%24%42%3F%22%1B%28%42 +PASS U+690E 椎 %1B%24%42%44%47%1B%28%42 +PASS U+690F 椏 %1B%24%42%5B%73%1B%28%42 +PASS U+6912 椒 %1B%24%42%5C%25%1B%28%42 +PASS U+6919 椙 %1B%24%42%3F%7A%1B%28%42 +PASS U+691A 椚 %1B%24%42%5C%2F%1B%28%42 +PASS U+691B 椛 %1B%24%42%33%71%1B%28%42 +PASS U+691C 検 %1B%24%42%38%21%1B%28%42 +PASS U+6921 椡 %1B%24%42%5C%31%1B%28%42 +PASS U+6922 椢 %1B%24%42%5B%7A%1B%28%42 +PASS U+6923 椣 %1B%24%42%5C%30%1B%28%42 +PASS U+6925 椥 %1B%24%42%5C%29%1B%28%42 +PASS U+6926 椦 %1B%24%42%5B%7B%1B%28%42 +PASS U+6928 椨 %1B%24%42%5C%2D%1B%28%42 +PASS U+692A 椪 %1B%24%42%5C%2E%1B%28%42 +PASS U+6930 椰 %1B%24%42%5C%3F%1B%28%42 +PASS U+6934 椴 %1B%24%42%46%4E%1B%28%42 +PASS U+6936 椶 %1B%24%42%5C%24%1B%28%42 +PASS U+6939 椹 %1B%24%42%5C%3B%1B%28%42 +PASS U+693D 椽 %1B%24%42%5C%3D%1B%28%42 +PASS U+693F 椿 %1B%24%42%44%58%1B%28%42 +PASS U+694A 楊 %1B%24%42%4D%4C%1B%28%42 +PASS U+6953 楓 %1B%24%42%49%76%1B%28%42 +PASS U+6954 楔 %1B%24%42%5C%38%1B%28%42 +PASS U+6955 楕 %1B%24%42%42%4A%1B%28%42 +PASS U+6959 楙 %1B%24%42%5C%3E%1B%28%42 +PASS U+695A 楚 %1B%24%42%41%3F%1B%28%42 +PASS U+695C 楜 %1B%24%42%5C%35%1B%28%42 +PASS U+695D 楝 %1B%24%42%5C%42%1B%28%42 +PASS U+695E 楞 %1B%24%42%5C%41%1B%28%42 +PASS U+6960 楠 %1B%24%42%46%6F%1B%28%42 +PASS U+6961 楡 %1B%24%42%5C%40%1B%28%42 +PASS U+6962 楢 %1B%24%42%46%6A%1B%28%42 +FAIL U+6968 楨 %1B%24%42%7A%4F%1B%28%42 assert_equals: expected "%1B%24%42%7A%4F" but got "%26%23%32%36%39%38%34%3B" +PASS U+696A 楪 %1B%24%42%5C%44%1B%28%42 +PASS U+696B 楫 %1B%24%42%5C%37%1B%28%42 +PASS U+696D 業 %1B%24%42%36%48%1B%28%42 +PASS U+696E 楮 %1B%24%42%5C%3A%1B%28%42 +PASS U+696F 楯 %1B%24%42%3D%5D%1B%28%42 +PASS U+6973 楳 %1B%24%42%47%60%1B%28%42 +PASS U+6974 楴 %1B%24%42%5C%3C%1B%28%42 +PASS U+6975 極 %1B%24%42%36%4B%1B%28%42 +PASS U+6977 楷 %1B%24%42%5C%34%1B%28%42 +PASS U+6978 楸 %1B%24%42%5C%36%1B%28%42 +PASS U+6979 楹 %1B%24%42%5C%33%1B%28%42 +PASS U+697C 楼 %1B%24%42%4F%30%1B%28%42 +PASS U+697D 楽 %1B%24%42%33%5A%1B%28%42 +PASS U+697E 楾 %1B%24%42%5C%39%1B%28%42 +PASS U+6981 榁 %1B%24%42%5C%43%1B%28%42 +PASS U+6982 概 %1B%24%42%33%35%1B%28%42 +PASS U+698A 榊 %1B%24%42%3A%67%1B%28%42 +PASS U+698E 榎 %1B%24%42%31%5D%1B%28%42 +PASS U+6991 榑 %1B%24%42%5C%54%1B%28%42 +PASS U+6994 榔 %1B%24%42%4F%31%1B%28%42 +PASS U+6995 榕 %1B%24%42%5C%57%1B%28%42 +FAIL U+6998 榘 %1B%24%42%7A%51%1B%28%42 assert_equals: expected "%1B%24%42%7A%51" but got "%26%23%32%37%30%33%32%3B" +PASS U+699B 榛 %1B%24%42%3F%3A%1B%28%42 +PASS U+699C 榜 %1B%24%42%5C%56%1B%28%42 +PASS U+69A0 榠 %1B%24%42%5C%55%1B%28%42 +PASS U+69A7 榧 %1B%24%42%5C%52%1B%28%42 +PASS U+69AE 榮 %1B%24%42%5C%46%1B%28%42 +PASS U+69B1 榱 %1B%24%42%5C%63%1B%28%42 +PASS U+69B2 榲 %1B%24%42%5C%45%1B%28%42 +PASS U+69B4 榴 %1B%24%42%5C%58%1B%28%42 +PASS U+69BB 榻 %1B%24%42%5C%50%1B%28%42 +PASS U+69BE 榾 %1B%24%42%5C%4B%1B%28%42 +PASS U+69BF 榿 %1B%24%42%5C%48%1B%28%42 +PASS U+69C1 槁 %1B%24%42%5C%49%1B%28%42 +PASS U+69C3 槃 %1B%24%42%5C%51%1B%28%42 +PASS U+69C7 槇 %1B%24%42%74%22%1B%28%42 +PASS U+69CA 槊 %1B%24%42%5C%4E%1B%28%42 +PASS U+69CB 構 %1B%24%42%39%3D%1B%28%42 +PASS U+69CC 槌 %1B%24%42%44%48%1B%28%42 +PASS U+69CD 槍 %1B%24%42%41%64%1B%28%42 +PASS U+69CE 槎 %1B%24%42%5C%4C%1B%28%42 +PASS U+69D0 槐 %1B%24%42%5C%47%1B%28%42 +PASS U+69D3 槓 %1B%24%42%5C%4A%1B%28%42 +PASS U+69D8 様 %1B%24%42%4D%4D%1B%28%42 +PASS U+69D9 槙 %1B%24%42%4B%6A%1B%28%42 +PASS U+69DD 槝 %1B%24%42%5C%4F%1B%28%42 +PASS U+69DE 槞 %1B%24%42%5C%59%1B%28%42 +FAIL U+69E2 槢 %1B%24%42%7A%52%1B%28%42 assert_equals: expected "%1B%24%42%7A%52" but got "%26%23%32%37%31%30%36%3B" +PASS U+69E7 槧 %1B%24%42%5C%61%1B%28%42 +PASS U+69E8 槨 %1B%24%42%5C%5A%1B%28%42 +PASS U+69EB 槫 %1B%24%42%5C%67%1B%28%42 +PASS U+69ED 槭 %1B%24%42%5C%65%1B%28%42 +PASS U+69F2 槲 %1B%24%42%5C%60%1B%28%42 +PASS U+69F9 槹 %1B%24%42%5C%5F%1B%28%42 +PASS U+69FB 槻 %1B%24%42%44%50%1B%28%42 +PASS U+69FD 槽 %1B%24%42%41%65%1B%28%42 +PASS U+69FF 槿 %1B%24%42%5C%5D%1B%28%42 +PASS U+6A02 樂 %1B%24%42%5C%5B%1B%28%42 +PASS U+6A05 樅 %1B%24%42%5C%62%1B%28%42 +PASS U+6A0A 樊 %1B%24%42%5C%68%1B%28%42 +PASS U+6A0B 樋 %1B%24%42%48%75%1B%28%42 +PASS U+6A0C 樌 %1B%24%42%5C%6E%1B%28%42 +PASS U+6A12 樒 %1B%24%42%5C%69%1B%28%42 +PASS U+6A13 樓 %1B%24%42%5C%6C%1B%28%42 +PASS U+6A14 樔 %1B%24%42%5C%66%1B%28%42 +PASS U+6A17 樗 %1B%24%42%43%74%1B%28%42 +PASS U+6A19 標 %1B%24%42%49%38%1B%28%42 +PASS U+6A1B 樛 %1B%24%42%5C%5C%1B%28%42 +PASS U+6A1E 樞 %1B%24%42%5C%64%1B%28%42 +PASS U+6A1F 樟 %1B%24%42%3E%40%1B%28%42 +PASS U+6A21 模 %1B%24%42%4C%4F%1B%28%42 +PASS U+6A22 樢 %1B%24%42%5C%78%1B%28%42 +PASS U+6A23 樣 %1B%24%42%5C%6B%1B%28%42 +PASS U+6A29 権 %1B%24%42%38%22%1B%28%42 +PASS U+6A2A 横 %1B%24%42%32%23%1B%28%42 +PASS U+6A2B 樫 %1B%24%42%33%5F%1B%28%42 +PASS U+6A2E 樮 %1B%24%42%5C%53%1B%28%42 +FAIL U+6A30 樰 %1B%24%42%7A%53%1B%28%42 assert_equals: expected "%1B%24%42%7A%53" but got "%26%23%32%37%31%38%34%3B" +PASS U+6A35 樵 %1B%24%42%3E%41%1B%28%42 +PASS U+6A36 樶 %1B%24%42%5C%70%1B%28%42 +PASS U+6A38 樸 %1B%24%42%5C%77%1B%28%42 +PASS U+6A39 樹 %1B%24%42%3C%79%1B%28%42 +PASS U+6A3A 樺 %1B%24%42%33%72%1B%28%42 +PASS U+6A3D 樽 %1B%24%42%43%2E%1B%28%42 +PASS U+6A44 橄 %1B%24%42%5C%6D%1B%28%42 +FAIL U+6A46 橆 %1B%24%42%7A%55%1B%28%42 assert_equals: expected "%1B%24%42%7A%55" but got "%26%23%32%37%32%30%36%3B" +PASS U+6A47 橇 %1B%24%42%5C%72%1B%28%42 +PASS U+6A48 橈 %1B%24%42%5C%76%1B%28%42 +PASS U+6A4B 橋 %1B%24%42%36%36%1B%28%42 +PASS U+6A58 橘 %1B%24%42%35%4C%1B%28%42 +PASS U+6A59 橙 %1B%24%42%5C%74%1B%28%42 +PASS U+6A5F 機 %1B%24%42%35%21%1B%28%42 +PASS U+6A61 橡 %1B%24%42%46%4B%1B%28%42 +PASS U+6A62 橢 %1B%24%42%5C%73%1B%28%42 +PASS U+6A66 橦 %1B%24%42%5C%75%1B%28%42 +FAIL U+6A6B 橫 %1B%24%42%7A%54%1B%28%42 assert_equals: expected "%1B%24%42%7A%54" but got "%26%23%32%37%32%34%33%3B" +PASS U+6A72 橲 %1B%24%42%5C%6F%1B%28%42 +FAIL U+6A73 橳 %1B%24%42%7A%56%1B%28%42 assert_equals: expected "%1B%24%42%7A%56" but got "%26%23%32%37%32%35%31%3B" +PASS U+6A78 橸 %1B%24%42%5C%71%1B%28%42 +FAIL U+6A7E 橾 %1B%24%42%7A%57%1B%28%42 assert_equals: expected "%1B%24%42%7A%57" but got "%26%23%32%37%32%36%32%3B" +PASS U+6A7F 橿 %1B%24%42%33%60%1B%28%42 +PASS U+6A80 檀 %1B%24%42%43%49%1B%28%42 +PASS U+6A84 檄 %1B%24%42%5C%7C%1B%28%42 +PASS U+6A8D 檍 %1B%24%42%5C%7A%1B%28%42 +PASS U+6A8E 檎 %1B%24%42%38%69%1B%28%42 +PASS U+6A90 檐 %1B%24%42%5C%79%1B%28%42 +PASS U+6A97 檗 %1B%24%42%5D%21%1B%28%42 +PASS U+6A9C 檜 %1B%24%42%5B%58%1B%28%42 +PASS U+6AA0 檠 %1B%24%42%5C%7B%1B%28%42 +PASS U+6AA2 檢 %1B%24%42%5C%7D%1B%28%42 +PASS U+6AA3 檣 %1B%24%42%5C%7E%1B%28%42 +PASS U+6AAA 檪 %1B%24%42%5D%2C%1B%28%42 +PASS U+6AAC 檬 %1B%24%42%5D%28%1B%28%42 +PASS U+6AAE 檮 %1B%24%42%5B%6D%1B%28%42 +PASS U+6AB3 檳 %1B%24%42%5D%27%1B%28%42 +PASS U+6AB8 檸 %1B%24%42%5D%26%1B%28%42 +PASS U+6ABB 檻 %1B%24%42%5D%23%1B%28%42 +PASS U+6AC1 櫁 %1B%24%42%5C%6A%1B%28%42 +PASS U+6AC2 櫂 %1B%24%42%5D%25%1B%28%42 +PASS U+6AC3 櫃 %1B%24%42%5D%24%1B%28%42 +PASS U+6AD1 櫑 %1B%24%42%5D%2A%1B%28%42 +PASS U+6AD3 櫓 %1B%24%42%4F%26%1B%28%42 +PASS U+6ADA 櫚 %1B%24%42%5D%2D%1B%28%42 +PASS U+6ADB 櫛 %1B%24%42%36%7B%1B%28%42 +PASS U+6ADE 櫞 %1B%24%42%5D%29%1B%28%42 +PASS U+6ADF 櫟 %1B%24%42%5D%2B%1B%28%42 +FAIL U+6AE2 櫢 %1B%24%42%7A%58%1B%28%42 assert_equals: expected "%1B%24%42%7A%58" but got "%26%23%32%37%33%36%32%3B" +FAIL U+6AE4 櫤 %1B%24%42%7A%59%1B%28%42 assert_equals: expected "%1B%24%42%7A%59" but got "%26%23%32%37%33%36%34%3B" +PASS U+6AE8 櫨 %1B%24%42%48%27%1B%28%42 +PASS U+6AEA 櫪 %1B%24%42%5D%2E%1B%28%42 +PASS U+6AFA 櫺 %1B%24%42%5D%32%1B%28%42 +PASS U+6AFB 櫻 %1B%24%42%5D%2F%1B%28%42 +PASS U+6B04 欄 %1B%24%42%4D%73%1B%28%42 +PASS U+6B05 欅 %1B%24%42%5D%30%1B%28%42 +PASS U+6B0A 權 %1B%24%42%5C%5E%1B%28%42 +PASS U+6B12 欒 %1B%24%42%5D%33%1B%28%42 +PASS U+6B16 欖 %1B%24%42%5D%34%1B%28%42 +PASS U+6B1D 欝 %1B%24%42%31%35%1B%28%42 +PASS U+6B1F 欟 %1B%24%42%5D%36%1B%28%42 +PASS U+6B20 欠 %1B%24%42%37%67%1B%28%42 +PASS U+6B21 次 %1B%24%42%3C%21%1B%28%42 +PASS U+6B23 欣 %1B%24%42%36%55%1B%28%42 +PASS U+6B27 欧 %1B%24%42%32%24%1B%28%42 +PASS U+6B32 欲 %1B%24%42%4D%5F%1B%28%42 +PASS U+6B37 欷 %1B%24%42%5D%38%1B%28%42 +PASS U+6B38 欸 %1B%24%42%5D%37%1B%28%42 +PASS U+6B39 欹 %1B%24%42%5D%3A%1B%28%42 +PASS U+6B3A 欺 %1B%24%42%35%3D%1B%28%42 +PASS U+6B3D 欽 %1B%24%42%36%56%1B%28%42 +PASS U+6B3E 款 %1B%24%42%34%3E%1B%28%42 +PASS U+6B43 歃 %1B%24%42%5D%3D%1B%28%42 +PASS U+6B47 歇 %1B%24%42%5D%3C%1B%28%42 +PASS U+6B49 歉 %1B%24%42%5D%3E%1B%28%42 +PASS U+6B4C 歌 %1B%24%42%32%4E%1B%28%42 +PASS U+6B4E 歎 %1B%24%42%43%37%1B%28%42 +PASS U+6B50 歐 %1B%24%42%5D%3F%1B%28%42 +PASS U+6B53 歓 %1B%24%42%34%3F%1B%28%42 +PASS U+6B54 歔 %1B%24%42%5D%41%1B%28%42 +PASS U+6B59 歙 %1B%24%42%5D%40%1B%28%42 +PASS U+6B5B 歛 %1B%24%42%5D%42%1B%28%42 +PASS U+6B5F 歟 %1B%24%42%5D%43%1B%28%42 +PASS U+6B61 歡 %1B%24%42%5D%44%1B%28%42 +PASS U+6B62 止 %1B%24%42%3B%5F%1B%28%42 +PASS U+6B63 正 %1B%24%42%40%35%1B%28%42 +PASS U+6B64 此 %1B%24%42%3A%21%1B%28%42 +PASS U+6B66 武 %1B%24%42%49%70%1B%28%42 +PASS U+6B69 歩 %1B%24%42%4A%62%1B%28%42 +PASS U+6B6A 歪 %1B%24%42%4F%44%1B%28%42 +PASS U+6B6F 歯 %1B%24%42%3B%75%1B%28%42 +PASS U+6B73 歳 %1B%24%42%3A%50%1B%28%42 +PASS U+6B74 歴 %1B%24%42%4E%72%1B%28%42 +PASS U+6B78 歸 %1B%24%42%5D%45%1B%28%42 +PASS U+6B79 歹 %1B%24%42%5D%46%1B%28%42 +PASS U+6B7B 死 %1B%24%42%3B%60%1B%28%42 +PASS U+6B7F 歿 %1B%24%42%5D%47%1B%28%42 +PASS U+6B80 殀 %1B%24%42%5D%48%1B%28%42 +PASS U+6B83 殃 %1B%24%42%5D%4A%1B%28%42 +PASS U+6B84 殄 %1B%24%42%5D%49%1B%28%42 +PASS U+6B86 殆 %1B%24%42%4B%58%1B%28%42 +PASS U+6B89 殉 %1B%24%42%3D%5E%1B%28%42 +PASS U+6B8A 殊 %1B%24%42%3C%6C%1B%28%42 +PASS U+6B8B 残 %1B%24%42%3B%44%1B%28%42 +PASS U+6B8D 殍 %1B%24%42%5D%4B%1B%28%42 +PASS U+6B95 殕 %1B%24%42%5D%4D%1B%28%42 +PASS U+6B96 殖 %1B%24%42%3F%23%1B%28%42 +PASS U+6B98 殘 %1B%24%42%5D%4C%1B%28%42 +PASS U+6B9E 殞 %1B%24%42%5D%4E%1B%28%42 +PASS U+6BA4 殤 %1B%24%42%5D%4F%1B%28%42 +PASS U+6BAA 殪 %1B%24%42%5D%50%1B%28%42 +PASS U+6BAB 殫 %1B%24%42%5D%51%1B%28%42 +PASS U+6BAF 殯 %1B%24%42%5D%52%1B%28%42 +PASS U+6BB1 殱 %1B%24%42%5D%54%1B%28%42 +PASS U+6BB2 殲 %1B%24%42%5D%53%1B%28%42 +PASS U+6BB3 殳 %1B%24%42%5D%55%1B%28%42 +PASS U+6BB4 殴 %1B%24%42%32%25%1B%28%42 +PASS U+6BB5 段 %1B%24%42%43%4A%1B%28%42 +PASS U+6BB7 殷 %1B%24%42%5D%56%1B%28%42 +PASS U+6BBA 殺 %1B%24%42%3B%26%1B%28%42 +PASS U+6BBB 殻 %1B%24%42%33%4C%1B%28%42 +PASS U+6BBC 殼 %1B%24%42%5D%57%1B%28%42 +PASS U+6BBF 殿 %1B%24%42%45%42%1B%28%42 +PASS U+6BC0 毀 %1B%24%42%54%4C%1B%28%42 +PASS U+6BC5 毅 %1B%24%42%35%23%1B%28%42 +PASS U+6BC6 毆 %1B%24%42%5D%58%1B%28%42 +PASS U+6BCB 毋 %1B%24%42%5D%59%1B%28%42 +PASS U+6BCD 母 %1B%24%42%4A%6C%1B%28%42 +PASS U+6BCE 毎 %1B%24%42%4B%68%1B%28%42 +PASS U+6BD2 毒 %1B%24%42%46%47%1B%28%42 +PASS U+6BD3 毓 %1B%24%42%5D%5A%1B%28%42 +PASS U+6BD4 比 %1B%24%42%48%66%1B%28%42 +FAIL U+6BD6 毖 %1B%24%42%7A%5A%1B%28%42 assert_equals: expected "%1B%24%42%7A%5A" but got "%26%23%32%37%36%30%36%3B" +PASS U+6BD8 毘 %1B%24%42%48%7B%1B%28%42 +PASS U+6BDB 毛 %1B%24%42%4C%53%1B%28%42 +PASS U+6BDF 毟 %1B%24%42%5D%5B%1B%28%42 +PASS U+6BEB 毫 %1B%24%42%5D%5D%1B%28%42 +PASS U+6BEC 毬 %1B%24%42%5D%5C%1B%28%42 +PASS U+6BEF 毯 %1B%24%42%5D%5F%1B%28%42 +PASS U+6BF3 毳 %1B%24%42%5D%5E%1B%28%42 +PASS U+6C08 氈 %1B%24%42%5D%61%1B%28%42 +PASS U+6C0F 氏 %1B%24%42%3B%61%1B%28%42 +PASS U+6C11 民 %1B%24%42%4C%31%1B%28%42 +PASS U+6C13 氓 %1B%24%42%5D%62%1B%28%42 +PASS U+6C14 气 %1B%24%42%5D%63%1B%28%42 +PASS U+6C17 気 %1B%24%42%35%24%1B%28%42 +PASS U+6C1B 氛 %1B%24%42%5D%64%1B%28%42 +PASS U+6C23 氣 %1B%24%42%5D%66%1B%28%42 +PASS U+6C24 氤 %1B%24%42%5D%65%1B%28%42 +PASS U+6C34 水 %1B%24%42%3F%65%1B%28%42 +PASS U+6C37 氷 %1B%24%42%49%39%1B%28%42 +PASS U+6C38 永 %1B%24%42%31%4A%1B%28%42 +PASS U+6C3E 氾 %1B%24%42%48%45%1B%28%42 +FAIL U+6C3F 氿 %1B%24%42%7A%5B%1B%28%42 assert_equals: expected "%1B%24%42%7A%5B" but got "%26%23%32%37%37%31%31%3B" +PASS U+6C40 汀 %1B%24%42%44%75%1B%28%42 +PASS U+6C41 汁 %1B%24%42%3D%41%1B%28%42 +PASS U+6C42 求 %1B%24%42%35%61%1B%28%42 +PASS U+6C4E 汎 %1B%24%42%48%46%1B%28%42 +PASS U+6C50 汐 %1B%24%42%3C%2E%1B%28%42 +PASS U+6C55 汕 %1B%24%42%5D%68%1B%28%42 +PASS U+6C57 汗 %1B%24%42%34%40%1B%28%42 +PASS U+6C5A 汚 %1B%24%42%31%78%1B%28%42 +FAIL U+6C5C 汜 %1B%24%42%7A%5C%1B%28%42 assert_equals: expected "%1B%24%42%7A%5C" but got "%26%23%32%37%37%34%30%3B" +PASS U+6C5D 汝 %1B%24%42%46%72%1B%28%42 +PASS U+6C5E 汞 %1B%24%42%5D%67%1B%28%42 +PASS U+6C5F 江 %1B%24%42%39%3E%1B%28%42 +PASS U+6C60 池 %1B%24%42%43%53%1B%28%42 +PASS U+6C62 汢 %1B%24%42%5D%69%1B%28%42 +PASS U+6C68 汨 %1B%24%42%5D%71%1B%28%42 +PASS U+6C6A 汪 %1B%24%42%5D%6A%1B%28%42 +FAIL U+6C6F 汯 %1B%24%42%7A%5E%1B%28%42 assert_equals: expected "%1B%24%42%7A%5E" but got "%26%23%32%37%37%35%39%3B" +PASS U+6C70 汰 %1B%24%42%42%41%1B%28%42 +PASS U+6C72 汲 %1B%24%42%35%62%1B%28%42 +PASS U+6C73 汳 %1B%24%42%5D%72%1B%28%42 +PASS U+6C7A 決 %1B%24%42%37%68%1B%28%42 +PASS U+6C7D 汽 %1B%24%42%35%25%1B%28%42 +PASS U+6C7E 汾 %1B%24%42%5D%70%1B%28%42 +PASS U+6C81 沁 %1B%24%42%5D%6E%1B%28%42 +PASS U+6C82 沂 %1B%24%42%5D%6B%1B%28%42 +PASS U+6C83 沃 %1B%24%42%4D%60%1B%28%42 +FAIL U+6C86 沆 %1B%24%42%7A%5D%1B%28%42 assert_equals: expected "%1B%24%42%7A%5D" but got "%26%23%32%37%37%38%32%3B" +PASS U+6C88 沈 %1B%24%42%44%40%1B%28%42 +PASS U+6C8C 沌 %1B%24%42%46%59%1B%28%42 +PASS U+6C8D 沍 %1B%24%42%5D%6C%1B%28%42 +PASS U+6C90 沐 %1B%24%42%5D%74%1B%28%42 +PASS U+6C92 沒 %1B%24%42%5D%73%1B%28%42 +PASS U+6C93 沓 %1B%24%42%37%23%1B%28%42 +PASS U+6C96 沖 %1B%24%42%32%2D%1B%28%42 +PASS U+6C99 沙 %1B%24%42%3A%3B%1B%28%42 +PASS U+6C9A 沚 %1B%24%42%5D%6D%1B%28%42 +PASS U+6C9B 沛 %1B%24%42%5D%6F%1B%28%42 +PASS U+6CA1 没 %1B%24%42%4B%57%1B%28%42 +PASS U+6CA2 沢 %1B%24%42%42%74%1B%28%42 +PASS U+6CAB 沫 %1B%24%42%4B%77%1B%28%42 +PASS U+6CAE 沮 %1B%24%42%5D%7C%1B%28%42 +PASS U+6CB1 沱 %1B%24%42%5D%7D%1B%28%42 +PASS U+6CB3 河 %1B%24%42%32%4F%1B%28%42 +PASS U+6CB8 沸 %1B%24%42%4A%28%1B%28%42 +PASS U+6CB9 油 %1B%24%42%4C%7D%1B%28%42 +PASS U+6CBA 沺 %1B%24%42%5E%21%1B%28%42 +PASS U+6CBB 治 %1B%24%42%3C%23%1B%28%42 +PASS U+6CBC 沼 %1B%24%42%3E%42%1B%28%42 +PASS U+6CBD 沽 %1B%24%42%5D%78%1B%28%42 +PASS U+6CBE 沾 %1B%24%42%5D%7E%1B%28%42 +PASS U+6CBF 沿 %1B%24%42%31%68%1B%28%42 +PASS U+6CC1 況 %1B%24%42%36%37%1B%28%42 +PASS U+6CC4 泄 %1B%24%42%5D%75%1B%28%42 +PASS U+6CC5 泅 %1B%24%42%5D%7A%1B%28%42 +PASS U+6CC9 泉 %1B%24%42%40%74%1B%28%42 +PASS U+6CCA 泊 %1B%24%42%47%71%1B%28%42 +PASS U+6CCC 泌 %1B%24%42%48%67%1B%28%42 +PASS U+6CD3 泓 %1B%24%42%5D%77%1B%28%42 +PASS U+6CD5 法 %1B%24%42%4B%21%1B%28%42 +PASS U+6CD7 泗 %1B%24%42%5D%79%1B%28%42 +PASS U+6CD9 泙 %1B%24%42%5E%24%1B%28%42 +FAIL U+6CDA 泚 %1B%24%42%7A%5F%1B%28%42 assert_equals: expected "%1B%24%42%7A%5F" but got "%26%23%32%37%38%36%36%3B" +PASS U+6CDB 泛 %1B%24%42%5E%22%1B%28%42 +PASS U+6CDD 泝 %1B%24%42%5D%7B%1B%28%42 +PASS U+6CE1 泡 %1B%24%42%4B%22%1B%28%42 +PASS U+6CE2 波 %1B%24%42%47%48%1B%28%42 +PASS U+6CE3 泣 %1B%24%42%35%63%1B%28%42 +PASS U+6CE5 泥 %1B%24%42%45%25%1B%28%42 +PASS U+6CE8 注 %1B%24%42%43%6D%1B%28%42 +PASS U+6CEA 泪 %1B%24%42%5E%25%1B%28%42 +PASS U+6CEF 泯 %1B%24%42%5E%23%1B%28%42 +PASS U+6CF0 泰 %1B%24%42%42%59%1B%28%42 +PASS U+6CF1 泱 %1B%24%42%5D%76%1B%28%42 +PASS U+6CF3 泳 %1B%24%42%31%4B%1B%28%42 +FAIL U+6D04 洄 %1B%24%42%7A%60%1B%28%42 assert_equals: expected "%1B%24%42%7A%60" but got "%26%23%32%37%39%30%38%3B" +PASS U+6D0B 洋 %1B%24%42%4D%4E%1B%28%42 +PASS U+6D0C 洌 %1B%24%42%5E%30%1B%28%42 +PASS U+6D12 洒 %1B%24%42%5E%2F%1B%28%42 +PASS U+6D17 洗 %1B%24%42%40%76%1B%28%42 +PASS U+6D19 洙 %1B%24%42%5E%2C%1B%28%42 +PASS U+6D1B 洛 %1B%24%42%4D%6C%1B%28%42 +PASS U+6D1E 洞 %1B%24%42%46%36%1B%28%42 +PASS U+6D1F 洟 %1B%24%42%5E%26%1B%28%42 +PASS U+6D25 津 %1B%24%42%44%45%1B%28%42 +PASS U+6D29 洩 %1B%24%42%31%4C%1B%28%42 +PASS U+6D2A 洪 %1B%24%42%39%3F%1B%28%42 +PASS U+6D2B 洫 %1B%24%42%5E%29%1B%28%42 +PASS U+6D32 洲 %1B%24%42%3D%27%1B%28%42 +PASS U+6D33 洳 %1B%24%42%5E%2E%1B%28%42 +PASS U+6D35 洵 %1B%24%42%5E%2D%1B%28%42 +PASS U+6D36 洶 %1B%24%42%5E%28%1B%28%42 +PASS U+6D38 洸 %1B%24%42%5E%2B%1B%28%42 +PASS U+6D3B 活 %1B%24%42%33%68%1B%28%42 +PASS U+6D3D 洽 %1B%24%42%5E%2A%1B%28%42 +PASS U+6D3E 派 %1B%24%42%47%49%1B%28%42 +PASS U+6D41 流 %1B%24%42%4E%2E%1B%28%42 +PASS U+6D44 浄 %1B%24%42%3E%74%1B%28%42 +PASS U+6D45 浅 %1B%24%42%40%75%1B%28%42 +PASS U+6D59 浙 %1B%24%42%5E%36%1B%28%42 +PASS U+6D5A 浚 %1B%24%42%5E%34%1B%28%42 +PASS U+6D5C 浜 %1B%24%42%49%4D%1B%28%42 +PASS U+6D63 浣 %1B%24%42%5E%31%1B%28%42 +PASS U+6D64 浤 %1B%24%42%5E%33%1B%28%42 +PASS U+6D66 浦 %1B%24%42%31%3A%1B%28%42 +PASS U+6D69 浩 %1B%24%42%39%40%1B%28%42 +PASS U+6D6A 浪 %1B%24%42%4F%32%1B%28%42 +PASS U+6D6C 浬 %1B%24%42%33%3D%1B%28%42 +PASS U+6D6E 浮 %1B%24%42%49%62%1B%28%42 +FAIL U+6D6F 浯 %1B%24%42%7A%62%1B%28%42 assert_equals: expected "%1B%24%42%7A%62" but got "%26%23%32%38%30%31%35%3B" +PASS U+6D74 浴 %1B%24%42%4D%61%1B%28%42 +PASS U+6D77 海 %1B%24%42%33%24%1B%28%42 +PASS U+6D78 浸 %1B%24%42%3F%3B%1B%28%42 +PASS U+6D79 浹 %1B%24%42%5E%35%1B%28%42 +PASS U+6D85 涅 %1B%24%42%5E%3A%1B%28%42 +FAIL U+6D87 涇 %1B%24%42%7A%61%1B%28%42 assert_equals: expected "%1B%24%42%7A%61" but got "%26%23%32%38%30%33%39%3B" +PASS U+6D88 消 %1B%24%42%3E%43%1B%28%42 +PASS U+6D8C 涌 %1B%24%42%4D%30%1B%28%42 +PASS U+6D8E 涎 %1B%24%42%5E%37%1B%28%42 +PASS U+6D93 涓 %1B%24%42%5E%32%1B%28%42 +PASS U+6D95 涕 %1B%24%42%5E%38%1B%28%42 +FAIL U+6D96 涖 %1B%24%42%7A%63%1B%28%42 assert_equals: expected "%1B%24%42%7A%63" but got "%26%23%32%38%30%35%34%3B" +PASS U+6D99 涙 %1B%24%42%4E%5E%1B%28%42 +PASS U+6D9B 涛 %1B%24%42%45%73%1B%28%42 +PASS U+6D9C 涜 %1B%24%42%46%42%1B%28%42 +FAIL U+6DAC 涬 %1B%24%42%7A%64%1B%28%42 assert_equals: expected "%1B%24%42%7A%64" but got "%26%23%32%38%30%37%36%3B" +PASS U+6DAF 涯 %1B%24%42%33%36%1B%28%42 +PASS U+6DB2 液 %1B%24%42%31%55%1B%28%42 +PASS U+6DB5 涵 %1B%24%42%5E%3E%1B%28%42 +PASS U+6DB8 涸 %1B%24%42%5E%41%1B%28%42 +PASS U+6DBC 涼 %1B%24%42%4E%43%1B%28%42 +PASS U+6DC0 淀 %1B%24%42%4D%64%1B%28%42 +PASS U+6DC5 淅 %1B%24%42%5E%48%1B%28%42 +PASS U+6DC6 淆 %1B%24%42%5E%42%1B%28%42 +PASS U+6DC7 淇 %1B%24%42%5E%3F%1B%28%42 +PASS U+6DCB 淋 %1B%24%42%4E%54%1B%28%42 +PASS U+6DCC 淌 %1B%24%42%5E%45%1B%28%42 +FAIL U+6DCF 淏 %1B%24%42%7A%65%1B%28%42 assert_equals: expected "%1B%24%42%7A%65" but got "%26%23%32%38%31%31%31%3B" +PASS U+6DD1 淑 %1B%24%42%3D%4A%1B%28%42 +PASS U+6DD2 淒 %1B%24%42%5E%47%1B%28%42 +PASS U+6DD5 淕 %1B%24%42%5E%4C%1B%28%42 +PASS U+6DD8 淘 %1B%24%42%45%71%1B%28%42 +PASS U+6DD9 淙 %1B%24%42%5E%4A%1B%28%42 +PASS U+6DDE 淞 %1B%24%42%5E%44%1B%28%42 +PASS U+6DE1 淡 %1B%24%42%43%38%1B%28%42 +PASS U+6DE4 淤 %1B%24%42%5E%4B%1B%28%42 +PASS U+6DE6 淦 %1B%24%42%5E%40%1B%28%42 +PASS U+6DE8 淨 %1B%24%42%5E%46%1B%28%42 +PASS U+6DEA 淪 %1B%24%42%5E%4D%1B%28%42 +PASS U+6DEB 淫 %1B%24%42%30%7C%1B%28%42 +PASS U+6DEC 淬 %1B%24%42%5E%43%1B%28%42 +PASS U+6DEE 淮 %1B%24%42%5E%4E%1B%28%42 +PASS U+6DF1 深 %1B%24%42%3F%3C%1B%28%42 +FAIL U+6DF2 淲 %1B%24%42%7A%67%1B%28%42 assert_equals: expected "%1B%24%42%7A%67" but got "%26%23%32%38%31%34%36%3B" +PASS U+6DF3 淳 %1B%24%42%3D%5F%1B%28%42 +PASS U+6DF5 淵 %1B%24%42%4A%25%1B%28%42 +PASS U+6DF7 混 %1B%24%42%3A%2E%1B%28%42 +FAIL U+6DF8 淸 %1B%24%42%7A%66%1B%28%42 assert_equals: expected "%1B%24%42%7A%66" but got "%26%23%32%38%31%35%32%3B" +PASS U+6DF9 淹 %1B%24%42%5E%3B%1B%28%42 +PASS U+6DFA 淺 %1B%24%42%5E%49%1B%28%42 +PASS U+6DFB 添 %1B%24%42%45%3A%1B%28%42 +FAIL U+6DFC 淼 %1B%24%42%7A%68%1B%28%42 assert_equals: expected "%1B%24%42%7A%68" but got "%26%23%32%38%31%35%36%3B" +PASS U+6E05 清 %1B%24%42%40%36%1B%28%42 +PASS U+6E07 渇 %1B%24%42%33%69%1B%28%42 +PASS U+6E08 済 %1B%24%42%3A%51%1B%28%42 +PASS U+6E09 渉 %1B%24%42%3E%44%1B%28%42 +PASS U+6E0A 渊 %1B%24%42%5E%3D%1B%28%42 +PASS U+6E0B 渋 %1B%24%42%3D%42%1B%28%42 +PASS U+6E13 渓 %1B%24%42%37%4C%1B%28%42 +PASS U+6E15 渕 %1B%24%42%5E%3C%1B%28%42 +PASS U+6E19 渙 %1B%24%42%5E%52%1B%28%42 +PASS U+6E1A 渚 %1B%24%42%3D%6D%1B%28%42 +PASS U+6E1B 減 %1B%24%42%38%3A%1B%28%42 +PASS U+6E1D 渝 %1B%24%42%5E%61%1B%28%42 +PASS U+6E1F 渟 %1B%24%42%5E%5B%1B%28%42 +PASS U+6E20 渠 %1B%24%42%35%74%1B%28%42 +PASS U+6E21 渡 %1B%24%42%45%4F%1B%28%42 +PASS U+6E23 渣 %1B%24%42%5E%56%1B%28%42 +PASS U+6E24 渤 %1B%24%42%5E%5F%1B%28%42 +PASS U+6E25 渥 %1B%24%42%30%2F%1B%28%42 +PASS U+6E26 渦 %1B%24%42%31%32%1B%28%42 +FAIL U+6E27 渧 %1B%24%42%7A%6B%1B%28%42 assert_equals: expected "%1B%24%42%7A%6B" but got "%26%23%32%38%31%39%39%3B" +PASS U+6E29 温 %1B%24%42%32%39%1B%28%42 +PASS U+6E2B 渫 %1B%24%42%5E%58%1B%28%42 +PASS U+6E2C 測 %1B%24%42%42%2C%1B%28%42 +PASS U+6E2D 渭 %1B%24%42%5E%4F%1B%28%42 +PASS U+6E2E 渮 %1B%24%42%5E%51%1B%28%42 +PASS U+6E2F 港 %1B%24%42%39%41%1B%28%42 +PASS U+6E38 游 %1B%24%42%5E%62%1B%28%42 +FAIL U+6E39 渹 %1B%24%42%7A%69%1B%28%42 assert_equals: expected "%1B%24%42%7A%69" but got "%26%23%32%38%32%31%37%3B" +PASS U+6E3A 渺 %1B%24%42%5E%5D%1B%28%42 +FAIL U+6E3C 渼 %1B%24%42%7A%6C%1B%28%42 assert_equals: expected "%1B%24%42%7A%6C" but got "%26%23%32%38%32%32%30%3B" +PASS U+6E3E 渾 %1B%24%42%5E%55%1B%28%42 +PASS U+6E43 湃 %1B%24%42%5E%5C%1B%28%42 +PASS U+6E4A 湊 %1B%24%42%4C%2B%1B%28%42 +PASS U+6E4D 湍 %1B%24%42%5E%5A%1B%28%42 +PASS U+6E4E 湎 %1B%24%42%5E%5E%1B%28%42 +PASS U+6E56 湖 %1B%24%42%38%50%1B%28%42 +PASS U+6E58 湘 %1B%24%42%3E%45%1B%28%42 +PASS U+6E5B 湛 %1B%24%42%43%39%1B%28%42 +FAIL U+6E5C 湜 %1B%24%42%7A%6A%1B%28%42 assert_equals: expected "%1B%24%42%7A%6A" but got "%26%23%32%38%32%35%32%3B" +PASS U+6E5F 湟 %1B%24%42%5E%54%1B%28%42 +PASS U+6E67 湧 %1B%24%42%4D%2F%1B%28%42 +PASS U+6E6B 湫 %1B%24%42%5E%57%1B%28%42 +PASS U+6E6E 湮 %1B%24%42%5E%50%1B%28%42 +PASS U+6E6F 湯 %1B%24%42%45%72%1B%28%42 +PASS U+6E72 湲 %1B%24%42%5E%53%1B%28%42 +PASS U+6E76 湶 %1B%24%42%5E%59%1B%28%42 +PASS U+6E7E 湾 %1B%24%42%4F%51%1B%28%42 +PASS U+6E7F 湿 %1B%24%42%3C%3E%1B%28%42 +PASS U+6E80 満 %1B%24%42%4B%7E%1B%28%42 +PASS U+6E82 溂 %1B%24%42%5E%63%1B%28%42 +PASS U+6E8C 溌 %1B%24%42%48%2E%1B%28%42 +PASS U+6E8F 溏 %1B%24%42%5E%6F%1B%28%42 +PASS U+6E90 源 %1B%24%42%38%3B%1B%28%42 +PASS U+6E96 準 %1B%24%42%3D%60%1B%28%42 +PASS U+6E98 溘 %1B%24%42%5E%65%1B%28%42 +PASS U+6E9C 溜 %1B%24%42%4E%2F%1B%28%42 +PASS U+6E9D 溝 %1B%24%42%39%42%1B%28%42 +PASS U+6E9F 溟 %1B%24%42%5E%72%1B%28%42 +PASS U+6EA2 溢 %1B%24%42%30%6E%1B%28%42 +PASS U+6EA5 溥 %1B%24%42%5E%70%1B%28%42 +PASS U+6EAA 溪 %1B%24%42%5E%64%1B%28%42 +PASS U+6EAF 溯 %1B%24%42%5E%6A%1B%28%42 +PASS U+6EB2 溲 %1B%24%42%5E%6C%1B%28%42 +PASS U+6EB6 溶 %1B%24%42%4D%4F%1B%28%42 +PASS U+6EB7 溷 %1B%24%42%5E%67%1B%28%42 +PASS U+6EBA 溺 %1B%24%42%45%2E%1B%28%42 +PASS U+6EBD 溽 %1B%24%42%5E%69%1B%28%42 +FAIL U+6EBF 溿 %1B%24%42%7A%6D%1B%28%42 assert_equals: expected "%1B%24%42%7A%6D" but got "%26%23%32%38%33%35%31%3B" +PASS U+6EC2 滂 %1B%24%42%5E%71%1B%28%42 +PASS U+6EC4 滄 %1B%24%42%5E%6B%1B%28%42 +PASS U+6EC5 滅 %1B%24%42%4C%47%1B%28%42 +PASS U+6EC9 滉 %1B%24%42%5E%66%1B%28%42 +PASS U+6ECB 滋 %1B%24%42%3C%22%1B%28%42 +PASS U+6ECC 滌 %1B%24%42%5E%7E%1B%28%42 +PASS U+6ED1 滑 %1B%24%42%33%6A%1B%28%42 +PASS U+6ED3 滓 %1B%24%42%5E%68%1B%28%42 +PASS U+6ED4 滔 %1B%24%42%5E%6D%1B%28%42 +PASS U+6ED5 滕 %1B%24%42%5E%6E%1B%28%42 +PASS U+6EDD 滝 %1B%24%42%42%6C%1B%28%42 +PASS U+6EDE 滞 %1B%24%42%42%5A%1B%28%42 +PASS U+6EEC 滬 %1B%24%42%5E%76%1B%28%42 +PASS U+6EEF 滯 %1B%24%42%5E%7C%1B%28%42 +PASS U+6EF2 滲 %1B%24%42%5E%7A%1B%28%42 +PASS U+6EF4 滴 %1B%24%42%45%29%1B%28%42 +PASS U+6EF7 滷 %1B%24%42%5F%23%1B%28%42 +PASS U+6EF8 滸 %1B%24%42%5E%77%1B%28%42 +PASS U+6EFE 滾 %1B%24%42%5E%78%1B%28%42 +PASS U+6EFF 滿 %1B%24%42%5E%60%1B%28%42 +PASS U+6F01 漁 %1B%24%42%35%79%1B%28%42 +PASS U+6F02 漂 %1B%24%42%49%3A%1B%28%42 +PASS U+6F06 漆 %1B%24%42%3C%3F%1B%28%42 +PASS U+6F09 漉 %1B%24%42%39%77%1B%28%42 +PASS U+6F0F 漏 %1B%24%42%4F%33%1B%28%42 +PASS U+6F11 漑 %1B%24%42%5E%74%1B%28%42 +PASS U+6F13 漓 %1B%24%42%5F%22%1B%28%42 +PASS U+6F14 演 %1B%24%42%31%69%1B%28%42 +PASS U+6F15 漕 %1B%24%42%41%66%1B%28%42 +PASS U+6F20 漠 %1B%24%42%47%79%1B%28%42 +PASS U+6F22 漢 %1B%24%42%34%41%1B%28%42 +PASS U+6F23 漣 %1B%24%42%4E%7A%1B%28%42 +PASS U+6F2B 漫 %1B%24%42%4C%21%1B%28%42 +PASS U+6F2C 漬 %1B%24%42%44%52%1B%28%42 +PASS U+6F31 漱 %1B%24%42%5E%7B%1B%28%42 +PASS U+6F32 漲 %1B%24%42%5E%7D%1B%28%42 +PASS U+6F38 漸 %1B%24%42%41%32%1B%28%42 +PASS U+6F3E 漾 %1B%24%42%5F%21%1B%28%42 +PASS U+6F3F 漿 %1B%24%42%5E%79%1B%28%42 +PASS U+6F41 潁 %1B%24%42%5E%73%1B%28%42 +PASS U+6F45 潅 %1B%24%42%34%43%1B%28%42 +PASS U+6F54 潔 %1B%24%42%37%69%1B%28%42 +PASS U+6F58 潘 %1B%24%42%5F%2F%1B%28%42 +PASS U+6F5B 潛 %1B%24%42%5F%2A%1B%28%42 +PASS U+6F5C 潜 %1B%24%42%40%78%1B%28%42 +PASS U+6F5F 潟 %1B%24%42%33%63%1B%28%42 +PASS U+6F64 潤 %1B%24%42%3D%61%1B%28%42 +PASS U+6F66 潦 %1B%24%42%5F%33%1B%28%42 +PASS U+6F6D 潭 %1B%24%42%5F%2C%1B%28%42 +PASS U+6F6E 潮 %1B%24%42%44%2C%1B%28%42 +PASS U+6F6F 潯 %1B%24%42%5F%29%1B%28%42 +PASS U+6F70 潰 %1B%24%42%44%59%1B%28%42 +PASS U+6F74 潴 %1B%24%42%5F%4C%1B%28%42 +PASS U+6F78 潸 %1B%24%42%5F%26%1B%28%42 +PASS U+6F7A 潺 %1B%24%42%5F%25%1B%28%42 +PASS U+6F7C 潼 %1B%24%42%5F%2E%1B%28%42 +PASS U+6F80 澀 %1B%24%42%5F%28%1B%28%42 +PASS U+6F81 澁 %1B%24%42%5F%27%1B%28%42 +PASS U+6F82 澂 %1B%24%42%5F%2D%1B%28%42 +PASS U+6F84 澄 %1B%24%42%40%21%1B%28%42 +PASS U+6F86 澆 %1B%24%42%5F%24%1B%28%42 +FAIL U+6F88 澈 %1B%24%42%7A%6E%1B%28%42 assert_equals: expected "%1B%24%42%7A%6E" but got "%26%23%32%38%35%35%32%3B" +PASS U+6F8E 澎 %1B%24%42%5F%30%1B%28%42 +PASS U+6F91 澑 %1B%24%42%5F%31%1B%28%42 +PASS U+6F97 澗 %1B%24%42%34%42%1B%28%42 +PASS U+6FA1 澡 %1B%24%42%5F%36%1B%28%42 +PASS U+6FA3 澣 %1B%24%42%5F%35%1B%28%42 +PASS U+6FA4 澤 %1B%24%42%5F%37%1B%28%42 +PASS U+6FAA 澪 %1B%24%42%5F%3A%1B%28%42 +PASS U+6FB1 澱 %1B%24%42%45%43%1B%28%42 +PASS U+6FB3 澳 %1B%24%42%5F%34%1B%28%42 +FAIL U+6FB5 澵 %1B%24%42%7A%6F%1B%28%42 assert_equals: expected "%1B%24%42%7A%6F" but got "%26%23%32%38%35%39%37%3B" +PASS U+6FB9 澹 %1B%24%42%5F%38%1B%28%42 +PASS U+6FC0 激 %1B%24%42%37%63%1B%28%42 +PASS U+6FC1 濁 %1B%24%42%42%79%1B%28%42 +PASS U+6FC2 濂 %1B%24%42%5F%32%1B%28%42 +PASS U+6FC3 濃 %1B%24%42%47%3B%1B%28%42 +PASS U+6FC6 濆 %1B%24%42%5F%39%1B%28%42 +PASS U+6FD4 濔 %1B%24%42%5F%3E%1B%28%42 +PASS U+6FD5 濕 %1B%24%42%5F%3C%1B%28%42 +PASS U+6FD8 濘 %1B%24%42%5F%3F%1B%28%42 +PASS U+6FDB 濛 %1B%24%42%5F%42%1B%28%42 +PASS U+6FDF 濟 %1B%24%42%5F%3B%1B%28%42 +PASS U+6FE0 濠 %1B%24%42%39%6A%1B%28%42 +PASS U+6FE1 濡 %1B%24%42%47%28%1B%28%42 +PASS U+6FE4 濤 %1B%24%42%5E%39%1B%28%42 +PASS U+6FEB 濫 %1B%24%42%4D%74%1B%28%42 +PASS U+6FEC 濬 %1B%24%42%5F%3D%1B%28%42 +PASS U+6FEE 濮 %1B%24%42%5F%41%1B%28%42 +PASS U+6FEF 濯 %1B%24%42%42%75%1B%28%42 +PASS U+6FF1 濱 %1B%24%42%5F%40%1B%28%42 +PASS U+6FF3 濳 %1B%24%42%5F%2B%1B%28%42 +FAIL U+6FF5 濵 %1B%24%42%7A%70%1B%28%42 assert_equals: expected "%1B%24%42%7A%70" but got "%26%23%32%38%36%36%31%3B" +PASS U+6FF6 濶 %1B%24%42%6F%69%1B%28%42 +PASS U+6FFA 濺 %1B%24%42%5F%45%1B%28%42 +PASS U+6FFE 濾 %1B%24%42%5F%49%1B%28%42 +PASS U+7001 瀁 %1B%24%42%5F%47%1B%28%42 +FAIL U+7005 瀅 %1B%24%42%7A%71%1B%28%42 assert_equals: expected "%1B%24%42%7A%71" but got "%26%23%32%38%36%37%37%3B" +FAIL U+7007 瀇 %1B%24%42%7A%72%1B%28%42 assert_equals: expected "%1B%24%42%7A%72" but got "%26%23%32%38%36%37%39%3B" +PASS U+7009 瀉 %1B%24%42%5F%43%1B%28%42 +PASS U+700B 瀋 %1B%24%42%5F%44%1B%28%42 +PASS U+700F 瀏 %1B%24%42%5F%48%1B%28%42 +PASS U+7011 瀑 %1B%24%42%5F%46%1B%28%42 +PASS U+7015 瀕 %1B%24%42%49%4E%1B%28%42 +PASS U+7018 瀘 %1B%24%42%5F%4E%1B%28%42 +PASS U+701A 瀚 %1B%24%42%5F%4B%1B%28%42 +PASS U+701B 瀛 %1B%24%42%5F%4A%1B%28%42 +PASS U+701D 瀝 %1B%24%42%5F%4D%1B%28%42 +PASS U+701E 瀞 %1B%24%42%46%54%1B%28%42 +PASS U+701F 瀟 %1B%24%42%5F%4F%1B%28%42 +PASS U+7026 瀦 %1B%24%42%43%75%1B%28%42 +PASS U+7027 瀧 %1B%24%42%42%6D%1B%28%42 +FAIL U+7028 瀨 %1B%24%42%7A%73%1B%28%42 assert_equals: expected "%1B%24%42%7A%73" but got "%26%23%32%38%37%31%32%3B" +PASS U+702C 瀬 %1B%24%42%40%25%1B%28%42 +PASS U+7030 瀰 %1B%24%42%5F%50%1B%28%42 +PASS U+7032 瀲 %1B%24%42%5F%52%1B%28%42 +PASS U+703E 瀾 %1B%24%42%5F%51%1B%28%42 +PASS U+704C 灌 %1B%24%42%5E%75%1B%28%42 +PASS U+7051 灑 %1B%24%42%5F%53%1B%28%42 +PASS U+7058 灘 %1B%24%42%46%67%1B%28%42 +PASS U+7063 灣 %1B%24%42%5F%54%1B%28%42 +PASS U+706B 火 %1B%24%42%32%50%1B%28%42 +PASS U+706F 灯 %1B%24%42%45%74%1B%28%42 +PASS U+7070 灰 %1B%24%42%33%25%1B%28%42 +PASS U+7078 灸 %1B%24%42%35%64%1B%28%42 +PASS U+707C 灼 %1B%24%42%3C%5E%1B%28%42 +PASS U+707D 災 %1B%24%42%3A%52%1B%28%42 +FAIL U+7085 炅 %1B%24%42%7A%74%1B%28%42 assert_equals: expected "%1B%24%42%7A%74" but got "%26%23%32%38%38%30%35%3B" +PASS U+7089 炉 %1B%24%42%4F%27%1B%28%42 +PASS U+708A 炊 %1B%24%42%3F%66%1B%28%42 +PASS U+708E 炎 %1B%24%42%31%6A%1B%28%42 +PASS U+7092 炒 %1B%24%42%5F%56%1B%28%42 +PASS U+7099 炙 %1B%24%42%5F%55%1B%28%42 +FAIL U+70AB 炫 %1B%24%42%7A%75%1B%28%42 assert_equals: expected "%1B%24%42%7A%75" but got "%26%23%32%38%38%34%33%3B" +PASS U+70AC 炬 %1B%24%42%5F%59%1B%28%42 +PASS U+70AD 炭 %1B%24%42%43%3A%1B%28%42 +PASS U+70AE 炮 %1B%24%42%5F%5C%1B%28%42 +PASS U+70AF 炯 %1B%24%42%5F%57%1B%28%42 +PASS U+70B3 炳 %1B%24%42%5F%5B%1B%28%42 +PASS U+70B8 炸 %1B%24%42%5F%5A%1B%28%42 +PASS U+70B9 点 %1B%24%42%45%40%1B%28%42 +PASS U+70BA 為 %1B%24%42%30%59%1B%28%42 +FAIL U+70BB 炻 %1B%24%42%79%27%1B%28%42 assert_equals: expected "%1B%24%42%79%27" but got "%26%23%32%38%38%35%39%3B" +PASS U+70C8 烈 %1B%24%42%4E%75%1B%28%42 +PASS U+70CB 烋 %1B%24%42%5F%5E%1B%28%42 +PASS U+70CF 烏 %1B%24%42%31%28%1B%28%42 +PASS U+70D9 烙 %1B%24%42%5F%60%1B%28%42 +PASS U+70DD 烝 %1B%24%42%5F%5F%1B%28%42 +PASS U+70DF 烟 %1B%24%42%5F%5D%1B%28%42 +PASS U+70F1 烱 %1B%24%42%5F%58%1B%28%42 +PASS U+70F9 烹 %1B%24%42%4B%23%1B%28%42 +PASS U+70FD 烽 %1B%24%42%5F%62%1B%28%42 +FAIL U+7104 焄 %1B%24%42%7A%77%1B%28%42 assert_equals: expected "%1B%24%42%7A%77" but got "%26%23%32%38%39%33%32%3B" +PASS U+7109 焉 %1B%24%42%5F%61%1B%28%42 +FAIL U+710F 焏 %1B%24%42%7A%76%1B%28%42 assert_equals: expected "%1B%24%42%7A%76" but got "%26%23%32%38%39%34%33%3B" +PASS U+7114 焔 %1B%24%42%31%6B%1B%28%42 +PASS U+7119 焙 %1B%24%42%5F%64%1B%28%42 +PASS U+711A 焚 %1B%24%42%4A%32%1B%28%42 +PASS U+711C 焜 %1B%24%42%5F%63%1B%28%42 +PASS U+7121 無 %1B%24%42%4C%35%1B%28%42 +PASS U+7126 焦 %1B%24%42%3E%47%1B%28%42 +PASS U+7136 然 %1B%24%42%41%33%1B%28%42 +PASS U+713C 焼 %1B%24%42%3E%46%1B%28%42 +FAIL U+7146 煆 %1B%24%42%7A%79%1B%28%42 assert_equals: expected "%1B%24%42%7A%79" but got "%26%23%32%38%39%39%38%3B" +FAIL U+7147 煇 %1B%24%42%7A%7A%1B%28%42 assert_equals: expected "%1B%24%42%7A%7A" but got "%26%23%32%38%39%39%39%3B" +PASS U+7149 煉 %1B%24%42%4E%7B%1B%28%42 +PASS U+714C 煌 %1B%24%42%5F%6A%1B%28%42 +PASS U+714E 煎 %1B%24%42%40%79%1B%28%42 +PASS U+7155 煕 %1B%24%42%5F%66%1B%28%42 +PASS U+7156 煖 %1B%24%42%5F%6B%1B%28%42 +PASS U+7159 煙 %1B%24%42%31%6C%1B%28%42 +FAIL U+715C 煜 %1B%24%42%7A%78%1B%28%42 assert_equals: expected "%1B%24%42%7A%78" but got "%26%23%32%39%30%32%30%3B" +PASS U+7162 煢 %1B%24%42%5F%69%1B%28%42 +PASS U+7164 煤 %1B%24%42%47%61%1B%28%42 +PASS U+7165 煥 %1B%24%42%5F%65%1B%28%42 +PASS U+7166 煦 %1B%24%42%5F%68%1B%28%42 +PASS U+7167 照 %1B%24%42%3E%48%1B%28%42 +PASS U+7169 煩 %1B%24%42%48%51%1B%28%42 +PASS U+716C 煬 %1B%24%42%5F%6C%1B%28%42 +PASS U+716E 煮 %1B%24%42%3C%51%1B%28%42 +PASS U+717D 煽 %1B%24%42%40%7A%1B%28%42 +PASS U+7184 熄 %1B%24%42%5F%6F%1B%28%42 +PASS U+7188 熈 %1B%24%42%5F%67%1B%28%42 +PASS U+718A 熊 %1B%24%42%37%27%1B%28%42 +PASS U+718F 熏 %1B%24%42%5F%6D%1B%28%42 +PASS U+7194 熔 %1B%24%42%4D%50%1B%28%42 +PASS U+7195 熕 %1B%24%42%5F%70%1B%28%42 +PASS U+7199 熙 %1B%24%42%74%26%1B%28%42 +PASS U+719F 熟 %1B%24%42%3D%4F%1B%28%42 +PASS U+71A8 熨 %1B%24%42%5F%71%1B%28%42 +PASS U+71AC 熬 %1B%24%42%5F%72%1B%28%42 +PASS U+71B1 熱 %1B%24%42%47%2E%1B%28%42 +PASS U+71B9 熹 %1B%24%42%5F%74%1B%28%42 +PASS U+71BE 熾 %1B%24%42%5F%75%1B%28%42 +FAIL U+71C1 燁 %1B%24%42%7A%7C%1B%28%42 assert_equals: expected "%1B%24%42%7A%7C" but got "%26%23%32%39%31%32%31%3B" +PASS U+71C3 燃 %1B%24%42%47%33%1B%28%42 +PASS U+71C8 燈 %1B%24%42%45%75%1B%28%42 +PASS U+71C9 燉 %1B%24%42%5F%77%1B%28%42 +PASS U+71CE 燎 %1B%24%42%5F%79%1B%28%42 +PASS U+71D0 燐 %1B%24%42%4E%55%1B%28%42 +PASS U+71D2 燒 %1B%24%42%5F%76%1B%28%42 +PASS U+71D4 燔 %1B%24%42%5F%78%1B%28%42 +PASS U+71D5 燕 %1B%24%42%31%6D%1B%28%42 +PASS U+71D7 燗 %1B%24%42%5F%73%1B%28%42 +PASS U+71DF 營 %1B%24%42%53%5B%1B%28%42 +PASS U+71E0 燠 %1B%24%42%5F%7A%1B%28%42 +PASS U+71E5 燥 %1B%24%42%41%67%1B%28%42 +PASS U+71E6 燦 %1B%24%42%3B%38%1B%28%42 +PASS U+71E7 燧 %1B%24%42%5F%7C%1B%28%42 +PASS U+71EC 燬 %1B%24%42%5F%7B%1B%28%42 +PASS U+71ED 燭 %1B%24%42%3F%24%1B%28%42 +PASS U+71EE 燮 %1B%24%42%52%59%1B%28%42 +PASS U+71F5 燵 %1B%24%42%5F%7D%1B%28%42 +PASS U+71F9 燹 %1B%24%42%60%21%1B%28%42 +PASS U+71FB 燻 %1B%24%42%5F%6E%1B%28%42 +PASS U+71FC 燼 %1B%24%42%5F%7E%1B%28%42 +FAIL U+71FE 燾 %1B%24%42%7A%7D%1B%28%42 assert_equals: expected "%1B%24%42%7A%7D" but got "%26%23%32%39%31%38%32%3B" +PASS U+71FF 燿 %1B%24%42%60%22%1B%28%42 +PASS U+7206 爆 %1B%24%42%47%7A%1B%28%42 +PASS U+720D 爍 %1B%24%42%60%23%1B%28%42 +PASS U+7210 爐 %1B%24%42%60%24%1B%28%42 +PASS U+721B 爛 %1B%24%42%60%25%1B%28%42 +PASS U+7228 爨 %1B%24%42%60%26%1B%28%42 +PASS U+722A 爪 %1B%24%42%44%5E%1B%28%42 +PASS U+722C 爬 %1B%24%42%60%28%1B%28%42 +PASS U+722D 爭 %1B%24%42%60%27%1B%28%42 +PASS U+7230 爰 %1B%24%42%60%29%1B%28%42 +PASS U+7232 爲 %1B%24%42%60%2A%1B%28%42 +PASS U+7235 爵 %1B%24%42%3C%5F%1B%28%42 +PASS U+7236 父 %1B%24%42%49%63%1B%28%42 +PASS U+723A 爺 %1B%24%42%4C%6C%1B%28%42 +PASS U+723B 爻 %1B%24%42%60%2B%1B%28%42 +PASS U+723C 爼 %1B%24%42%60%2C%1B%28%42 +PASS U+723D 爽 %1B%24%42%41%56%1B%28%42 +PASS U+723E 爾 %1B%24%42%3C%24%1B%28%42 +PASS U+723F 爿 %1B%24%42%60%2D%1B%28%42 +PASS U+7240 牀 %1B%24%42%60%2E%1B%28%42 +PASS U+7246 牆 %1B%24%42%60%2F%1B%28%42 +PASS U+7247 片 %1B%24%42%4A%52%1B%28%42 +PASS U+7248 版 %1B%24%42%48%47%1B%28%42 +PASS U+724B 牋 %1B%24%42%60%30%1B%28%42 +PASS U+724C 牌 %1B%24%42%47%57%1B%28%42 +PASS U+7252 牒 %1B%24%42%44%2D%1B%28%42 +PASS U+7258 牘 %1B%24%42%60%31%1B%28%42 +PASS U+7259 牙 %1B%24%42%32%67%1B%28%42 +PASS U+725B 牛 %1B%24%42%35%6D%1B%28%42 +PASS U+725D 牝 %1B%24%42%4C%46%1B%28%42 +PASS U+725F 牟 %1B%24%42%4C%36%1B%28%42 +PASS U+7261 牡 %1B%24%42%32%34%1B%28%42 +PASS U+7262 牢 %1B%24%42%4F%34%1B%28%42 +PASS U+7267 牧 %1B%24%42%4B%52%1B%28%42 +PASS U+7269 物 %1B%24%42%4A%2A%1B%28%42 +PASS U+7272 牲 %1B%24%42%40%37%1B%28%42 +PASS U+7274 牴 %1B%24%42%60%32%1B%28%42 +PASS U+7279 特 %1B%24%42%46%43%1B%28%42 +PASS U+727D 牽 %1B%24%42%38%23%1B%28%42 +PASS U+727E 牾 %1B%24%42%60%33%1B%28%42 +PASS U+7280 犀 %1B%24%42%3A%54%1B%28%42 +PASS U+7281 犁 %1B%24%42%60%35%1B%28%42 +PASS U+7282 犂 %1B%24%42%60%34%1B%28%42 +PASS U+7287 犇 %1B%24%42%60%36%1B%28%42 +PASS U+7292 犒 %1B%24%42%60%37%1B%28%42 +PASS U+7296 犖 %1B%24%42%60%38%1B%28%42 +PASS U+72A0 犠 %1B%24%42%35%3E%1B%28%42 +PASS U+72A2 犢 %1B%24%42%60%39%1B%28%42 +PASS U+72A7 犧 %1B%24%42%60%3A%1B%28%42 +PASS U+72AC 犬 %1B%24%42%38%24%1B%28%42 +PASS U+72AF 犯 %1B%24%42%48%48%1B%28%42 +FAIL U+72B1 犱 %1B%24%42%7A%7E%1B%28%42 assert_equals: expected "%1B%24%42%7A%7E" but got "%26%23%32%39%33%36%31%3B" +PASS U+72B2 犲 %1B%24%42%60%3C%1B%28%42 +PASS U+72B6 状 %1B%24%42%3E%75%1B%28%42 +PASS U+72B9 犹 %1B%24%42%60%3B%1B%28%42 +FAIL U+72BE 犾 %1B%24%42%7B%21%1B%28%42 assert_equals: expected "%1B%24%42%7B%21" but got "%26%23%32%39%33%37%34%3B" +PASS U+72C2 狂 %1B%24%42%36%38%1B%28%42 +PASS U+72C3 狃 %1B%24%42%60%3D%1B%28%42 +PASS U+72C4 狄 %1B%24%42%60%3F%1B%28%42 +PASS U+72C6 狆 %1B%24%42%60%3E%1B%28%42 +PASS U+72CE 狎 %1B%24%42%60%40%1B%28%42 +PASS U+72D0 狐 %1B%24%42%38%51%1B%28%42 +PASS U+72D2 狒 %1B%24%42%60%41%1B%28%42 +PASS U+72D7 狗 %1B%24%42%36%69%1B%28%42 +PASS U+72D9 狙 %1B%24%42%41%40%1B%28%42 +PASS U+72DB 狛 %1B%24%42%39%7D%1B%28%42 +PASS U+72E0 狠 %1B%24%42%60%43%1B%28%42 +PASS U+72E1 狡 %1B%24%42%60%44%1B%28%42 +PASS U+72E2 狢 %1B%24%42%60%42%1B%28%42 +PASS U+72E9 狩 %1B%24%42%3C%6D%1B%28%42 +PASS U+72EC 独 %1B%24%42%46%48%1B%28%42 +PASS U+72ED 狭 %1B%24%42%36%39%1B%28%42 +PASS U+72F7 狷 %1B%24%42%60%46%1B%28%42 +PASS U+72F8 狸 %1B%24%42%43%2C%1B%28%42 +PASS U+72F9 狹 %1B%24%42%60%45%1B%28%42 +PASS U+72FC 狼 %1B%24%42%4F%35%1B%28%42 +PASS U+72FD 狽 %1B%24%42%47%62%1B%28%42 +PASS U+730A 猊 %1B%24%42%60%49%1B%28%42 +PASS U+7316 猖 %1B%24%42%60%4B%1B%28%42 +PASS U+7317 猗 %1B%24%42%60%48%1B%28%42 +PASS U+731B 猛 %1B%24%42%4C%54%1B%28%42 +PASS U+731C 猜 %1B%24%42%60%4A%1B%28%42 +PASS U+731D 猝 %1B%24%42%60%4C%1B%28%42 +PASS U+731F 猟 %1B%24%42%4E%44%1B%28%42 +FAIL U+7324 猤 %1B%24%42%7B%22%1B%28%42 assert_equals: expected "%1B%24%42%7B%22" but got "%26%23%32%39%34%37%36%3B" +PASS U+7325 猥 %1B%24%42%60%50%1B%28%42 +PASS U+7329 猩 %1B%24%42%60%4F%1B%28%42 +PASS U+732A 猪 %1B%24%42%43%76%1B%28%42 +PASS U+732B 猫 %1B%24%42%47%2D%1B%28%42 +PASS U+732E 献 %1B%24%42%38%25%1B%28%42 +PASS U+732F 猯 %1B%24%42%60%4E%1B%28%42 +PASS U+7334 猴 %1B%24%42%60%4D%1B%28%42 +PASS U+7336 猶 %1B%24%42%4D%31%1B%28%42 +PASS U+7337 猷 %1B%24%42%4D%32%1B%28%42 +PASS U+733E 猾 %1B%24%42%60%51%1B%28%42 +PASS U+733F 猿 %1B%24%42%31%6E%1B%28%42 +PASS U+7344 獄 %1B%24%42%39%76%1B%28%42 +PASS U+7345 獅 %1B%24%42%3B%62%1B%28%42 +PASS U+734E 獎 %1B%24%42%60%52%1B%28%42 +PASS U+734F 獏 %1B%24%42%60%53%1B%28%42 +PASS U+7357 獗 %1B%24%42%60%55%1B%28%42 +PASS U+7363 獣 %1B%24%42%3D%43%1B%28%42 +PASS U+7368 獨 %1B%24%42%60%57%1B%28%42 +PASS U+736A 獪 %1B%24%42%60%56%1B%28%42 +PASS U+7370 獰 %1B%24%42%60%58%1B%28%42 +PASS U+7372 獲 %1B%24%42%33%4D%1B%28%42 +PASS U+7375 獵 %1B%24%42%60%5A%1B%28%42 +FAIL U+7377 獷 %1B%24%42%7B%24%1B%28%42 assert_equals: expected "%1B%24%42%7B%24" but got "%26%23%32%39%35%35%39%3B" +PASS U+7378 獸 %1B%24%42%60%59%1B%28%42 +PASS U+737A 獺 %1B%24%42%60%5C%1B%28%42 +PASS U+737B 獻 %1B%24%42%60%5B%1B%28%42 +PASS U+7384 玄 %1B%24%42%38%3C%1B%28%42 +PASS U+7387 率 %1B%24%42%4E%28%1B%28%42 +PASS U+7389 玉 %1B%24%42%36%4C%1B%28%42 +PASS U+738B 王 %1B%24%42%32%26%1B%28%42 +PASS U+7396 玖 %1B%24%42%36%6A%1B%28%42 +PASS U+73A9 玩 %1B%24%42%34%61%1B%28%42 +PASS U+73B2 玲 %1B%24%42%4E%68%1B%28%42 +PASS U+73B3 玳 %1B%24%42%60%5E%1B%28%42 +PASS U+73BB 玻 %1B%24%42%60%60%1B%28%42 +FAIL U+73BD 玽 %1B%24%42%7B%25%1B%28%42 assert_equals: expected "%1B%24%42%7B%25" but got "%26%23%32%39%36%32%39%3B" +PASS U+73C0 珀 %1B%24%42%60%61%1B%28%42 +PASS U+73C2 珂 %1B%24%42%32%51%1B%28%42 +PASS U+73C8 珈 %1B%24%42%60%5D%1B%28%42 +FAIL U+73C9 珉 %1B%24%42%7B%26%1B%28%42 assert_equals: expected "%1B%24%42%7B%26" but got "%26%23%32%39%36%34%31%3B" +PASS U+73CA 珊 %1B%24%42%3B%39%1B%28%42 +PASS U+73CD 珍 %1B%24%42%44%41%1B%28%42 +PASS U+73CE 珎 %1B%24%42%60%5F%1B%28%42 +FAIL U+73D2 珒 %1B%24%42%7B%29%1B%28%42 assert_equals: expected "%1B%24%42%7B%29" but got "%26%23%32%39%36%35%30%3B" +FAIL U+73D6 珖 %1B%24%42%7B%27%1B%28%42 assert_equals: expected "%1B%24%42%7B%27" but got "%26%23%32%39%36%35%34%3B" +PASS U+73DE 珞 %1B%24%42%60%64%1B%28%42 +PASS U+73E0 珠 %1B%24%42%3C%6E%1B%28%42 +FAIL U+73E3 珣 %1B%24%42%7B%28%1B%28%42 assert_equals: expected "%1B%24%42%7B%28" but got "%26%23%32%39%36%36%37%3B" +PASS U+73E5 珥 %1B%24%42%60%62%1B%28%42 +PASS U+73EA 珪 %1B%24%42%37%3E%1B%28%42 +PASS U+73ED 班 %1B%24%42%48%49%1B%28%42 +PASS U+73EE 珮 %1B%24%42%60%63%1B%28%42 +PASS U+73F1 珱 %1B%24%42%60%7E%1B%28%42 +FAIL U+73F5 珵 %1B%24%42%7B%2B%1B%28%42 assert_equals: expected "%1B%24%42%7B%2B" but got "%26%23%32%39%36%38%35%3B" +PASS U+73F8 珸 %1B%24%42%60%69%1B%28%42 +PASS U+73FE 現 %1B%24%42%38%3D%1B%28%42 +PASS U+7403 球 %1B%24%42%35%65%1B%28%42 +PASS U+7405 琅 %1B%24%42%60%66%1B%28%42 +PASS U+7406 理 %1B%24%42%4D%7D%1B%28%42 +FAIL U+7407 琇 %1B%24%42%7B%2A%1B%28%42 assert_equals: expected "%1B%24%42%7B%2A" but got "%26%23%32%39%37%30%33%3B" +PASS U+7409 琉 %1B%24%42%4E%30%1B%28%42 +PASS U+7422 琢 %1B%24%42%42%76%1B%28%42 +PASS U+7425 琥 %1B%24%42%60%68%1B%28%42 +FAIL U+7426 琦 %1B%24%42%7B%2C%1B%28%42 assert_equals: expected "%1B%24%42%7B%2C" but got "%26%23%32%39%37%33%34%3B" +FAIL U+7429 琩 %1B%24%42%7B%2E%1B%28%42 assert_equals: expected "%1B%24%42%7B%2E" but got "%26%23%32%39%37%33%37%3B" +FAIL U+742A 琪 %1B%24%42%7B%2D%1B%28%42 assert_equals: expected "%1B%24%42%7B%2D" but got "%26%23%32%39%37%33%38%3B" +FAIL U+742E 琮 %1B%24%42%7B%2F%1B%28%42 assert_equals: expected "%1B%24%42%7B%2F" but got "%26%23%32%39%37%34%32%3B" +PASS U+7432 琲 %1B%24%42%60%6A%1B%28%42 +PASS U+7433 琳 %1B%24%42%4E%56%1B%28%42 +PASS U+7434 琴 %1B%24%42%36%57%1B%28%42 +PASS U+7435 琵 %1B%24%42%48%7C%1B%28%42 +PASS U+7436 琶 %1B%24%42%47%4A%1B%28%42 +PASS U+743A 琺 %1B%24%42%60%6B%1B%28%42 +PASS U+743F 琿 %1B%24%42%60%6D%1B%28%42 +PASS U+7441 瑁 %1B%24%42%60%70%1B%28%42 +PASS U+7455 瑕 %1B%24%42%60%6C%1B%28%42 +PASS U+7459 瑙 %1B%24%42%60%6F%1B%28%42 +PASS U+745A 瑚 %1B%24%42%38%6A%1B%28%42 +PASS U+745B 瑛 %1B%24%42%31%4D%1B%28%42 +PASS U+745C 瑜 %1B%24%42%60%71%1B%28%42 +PASS U+745E 瑞 %1B%24%42%3F%70%1B%28%42 +PASS U+745F 瑟 %1B%24%42%60%6E%1B%28%42 +PASS U+7460 瑠 %1B%24%42%4E%5C%1B%28%42 +FAIL U+7462 瑢 %1B%24%42%7B%30%1B%28%42 assert_equals: expected "%1B%24%42%7B%30" but got "%26%23%32%39%37%39%34%3B" +PASS U+7463 瑣 %1B%24%42%60%74%1B%28%42 +PASS U+7464 瑤 %1B%24%42%74%24%1B%28%42 +PASS U+7469 瑩 %1B%24%42%60%72%1B%28%42 +PASS U+746A 瑪 %1B%24%42%60%75%1B%28%42 +PASS U+746F 瑯 %1B%24%42%60%67%1B%28%42 +PASS U+7470 瑰 %1B%24%42%60%73%1B%28%42 +PASS U+7473 瑳 %1B%24%42%3A%3C%1B%28%42 +PASS U+7476 瑶 %1B%24%42%60%76%1B%28%42 +PASS U+747E 瑾 %1B%24%42%60%77%1B%28%42 +PASS U+7483 璃 %1B%24%42%4D%7E%1B%28%42 +FAIL U+7489 璉 %1B%24%42%7B%31%1B%28%42 assert_equals: expected "%1B%24%42%7B%31" but got "%26%23%32%39%38%33%33%3B" +PASS U+748B 璋 %1B%24%42%60%78%1B%28%42 +PASS U+749E 璞 %1B%24%42%60%79%1B%28%42 +FAIL U+749F 璟 %1B%24%42%7B%32%1B%28%42 assert_equals: expected "%1B%24%42%7B%32" but got "%26%23%32%39%38%35%35%3B" +PASS U+74A2 璢 %1B%24%42%60%65%1B%28%42 +PASS U+74A7 璧 %1B%24%42%60%7A%1B%28%42 +PASS U+74B0 環 %1B%24%42%34%44%1B%28%42 +PASS U+74BD 璽 %1B%24%42%3C%25%1B%28%42 +PASS U+74CA 瓊 %1B%24%42%60%7B%1B%28%42 +PASS U+74CF 瓏 %1B%24%42%60%7C%1B%28%42 +PASS U+74D4 瓔 %1B%24%42%60%7D%1B%28%42 +PASS U+74DC 瓜 %1B%24%42%31%3B%1B%28%42 +PASS U+74E0 瓠 %1B%24%42%61%21%1B%28%42 +PASS U+74E2 瓢 %1B%24%42%49%3B%1B%28%42 +PASS U+74E3 瓣 %1B%24%42%61%22%1B%28%42 +PASS U+74E6 瓦 %1B%24%42%34%24%1B%28%42 +PASS U+74E7 瓧 %1B%24%42%61%23%1B%28%42 +PASS U+74E9 瓩 %1B%24%42%61%24%1B%28%42 +PASS U+74EE 瓮 %1B%24%42%61%25%1B%28%42 +PASS U+74F0 瓰 %1B%24%42%61%27%1B%28%42 +PASS U+74F1 瓱 %1B%24%42%61%28%1B%28%42 +PASS U+74F2 瓲 %1B%24%42%61%26%1B%28%42 +PASS U+74F6 瓶 %1B%24%42%49%53%1B%28%42 +PASS U+74F7 瓷 %1B%24%42%61%2A%1B%28%42 +PASS U+74F8 瓸 %1B%24%42%61%29%1B%28%42 +FAIL U+7501 甁 %1B%24%42%7B%33%1B%28%42 assert_equals: expected "%1B%24%42%7B%33" but got "%26%23%32%39%39%35%33%3B" +PASS U+7503 甃 %1B%24%42%61%2C%1B%28%42 +PASS U+7504 甄 %1B%24%42%61%2B%1B%28%42 +PASS U+7505 甅 %1B%24%42%61%2D%1B%28%42 +PASS U+750C 甌 %1B%24%42%61%2E%1B%28%42 +PASS U+750D 甍 %1B%24%42%61%30%1B%28%42 +PASS U+750E 甎 %1B%24%42%61%2F%1B%28%42 +PASS U+7511 甑 %1B%24%42%39%79%1B%28%42 +PASS U+7513 甓 %1B%24%42%61%32%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_4001-5000-expected.txt new file mode 100644 index 0000000..0b0ed2e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_4001-5000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+7515 甕 %1B%24%42%61%31%1B%28%42 +PASS U+7518 甘 %1B%24%42%34%45%1B%28%42 +PASS U+751A 甚 %1B%24%42%3F%53%1B%28%42 +PASS U+751C 甜 %1B%24%42%45%3C%1B%28%42 +PASS U+751E 甞 %1B%24%42%61%33%1B%28%42 +PASS U+751F 生 %1B%24%42%40%38%1B%28%42 +PASS U+7523 産 %1B%24%42%3B%3A%1B%28%42 +PASS U+7525 甥 %1B%24%42%31%79%1B%28%42 +PASS U+7526 甦 %1B%24%42%61%34%1B%28%42 +PASS U+7528 用 %1B%24%42%4D%51%1B%28%42 +PASS U+752B 甫 %1B%24%42%4A%63%1B%28%42 +PASS U+752C 甬 %1B%24%42%61%35%1B%28%42 +FAIL U+752F 甯 %1B%24%42%79%6C%1B%28%42 assert_equals: expected "%1B%24%42%79%6C" but got "%26%23%32%39%39%39%39%3B" +PASS U+7530 田 %1B%24%42%45%44%1B%28%42 +PASS U+7531 由 %1B%24%42%4D%33%1B%28%42 +PASS U+7532 甲 %1B%24%42%39%43%1B%28%42 +PASS U+7533 申 %1B%24%42%3F%3D%1B%28%42 +PASS U+7537 男 %1B%24%42%43%4B%1B%28%42 +PASS U+7538 甸 %1B%24%42%52%34%1B%28%42 +PASS U+753A 町 %1B%24%42%44%2E%1B%28%42 +PASS U+753B 画 %1B%24%42%32%68%1B%28%42 +PASS U+753C 甼 %1B%24%42%61%36%1B%28%42 +PASS U+7544 畄 %1B%24%42%61%37%1B%28%42 +PASS U+7546 畆 %1B%24%42%61%3C%1B%28%42 +PASS U+7549 畉 %1B%24%42%61%3A%1B%28%42 +PASS U+754A 畊 %1B%24%42%61%39%1B%28%42 +PASS U+754B 畋 %1B%24%42%5A%42%1B%28%42 +PASS U+754C 界 %1B%24%42%33%26%1B%28%42 +PASS U+754D 畍 %1B%24%42%61%38%1B%28%42 +PASS U+754F 畏 %1B%24%42%30%5A%1B%28%42 +PASS U+7551 畑 %1B%24%42%48%2A%1B%28%42 +PASS U+7554 畔 %1B%24%42%48%4A%1B%28%42 +PASS U+7559 留 %1B%24%42%4E%31%1B%28%42 +PASS U+755A 畚 %1B%24%42%61%3D%1B%28%42 +PASS U+755B 畛 %1B%24%42%61%3B%1B%28%42 +PASS U+755C 畜 %1B%24%42%43%5C%1B%28%42 +PASS U+755D 畝 %1B%24%42%40%26%1B%28%42 +PASS U+7560 畠 %1B%24%42%48%2B%1B%28%42 +PASS U+7562 畢 %1B%24%42%49%2D%1B%28%42 +PASS U+7564 畤 %1B%24%42%61%3F%1B%28%42 +PASS U+7565 略 %1B%24%42%4E%2C%1B%28%42 +PASS U+7566 畦 %1B%24%42%37%4D%1B%28%42 +PASS U+7567 畧 %1B%24%42%61%40%1B%28%42 +PASS U+7569 畩 %1B%24%42%61%3E%1B%28%42 +PASS U+756A 番 %1B%24%42%48%56%1B%28%42 +PASS U+756B 畫 %1B%24%42%61%41%1B%28%42 +PASS U+756D 畭 %1B%24%42%61%42%1B%28%42 +FAIL U+756F 畯 %1B%24%42%7B%34%1B%28%42 assert_equals: expected "%1B%24%42%7B%34" but got "%26%23%33%30%30%36%33%3B" +PASS U+7570 異 %1B%24%42%30%5B%1B%28%42 +PASS U+7573 畳 %1B%24%42%3E%76%1B%28%42 +PASS U+7574 畴 %1B%24%42%61%47%1B%28%42 +PASS U+7576 當 %1B%24%42%61%44%1B%28%42 +PASS U+7577 畷 %1B%24%42%46%6D%1B%28%42 +PASS U+7578 畸 %1B%24%42%61%43%1B%28%42 +PASS U+757F 畿 %1B%24%42%35%26%1B%28%42 +PASS U+7582 疂 %1B%24%42%61%4A%1B%28%42 +PASS U+7586 疆 %1B%24%42%61%45%1B%28%42 +PASS U+7587 疇 %1B%24%42%61%46%1B%28%42 +PASS U+7589 疉 %1B%24%42%61%49%1B%28%42 +PASS U+758A 疊 %1B%24%42%61%48%1B%28%42 +PASS U+758B 疋 %1B%24%42%49%25%1B%28%42 +PASS U+758E 疎 %1B%24%42%41%42%1B%28%42 +PASS U+758F 疏 %1B%24%42%41%41%1B%28%42 +PASS U+7591 疑 %1B%24%42%35%3F%1B%28%42 +PASS U+7594 疔 %1B%24%42%61%4B%1B%28%42 +PASS U+759A 疚 %1B%24%42%61%4C%1B%28%42 +PASS U+759D 疝 %1B%24%42%61%4D%1B%28%42 +PASS U+75A3 疣 %1B%24%42%61%4F%1B%28%42 +PASS U+75A5 疥 %1B%24%42%61%4E%1B%28%42 +PASS U+75AB 疫 %1B%24%42%31%56%1B%28%42 +PASS U+75B1 疱 %1B%24%42%61%57%1B%28%42 +PASS U+75B2 疲 %1B%24%42%48%68%1B%28%42 +PASS U+75B3 疳 %1B%24%42%61%51%1B%28%42 +PASS U+75B5 疵 %1B%24%42%61%53%1B%28%42 +PASS U+75B8 疸 %1B%24%42%61%55%1B%28%42 +PASS U+75B9 疹 %1B%24%42%3F%3E%1B%28%42 +PASS U+75BC 疼 %1B%24%42%61%56%1B%28%42 +PASS U+75BD 疽 %1B%24%42%61%54%1B%28%42 +PASS U+75BE 疾 %1B%24%42%3C%40%1B%28%42 +PASS U+75C2 痂 %1B%24%42%61%50%1B%28%42 +PASS U+75C3 痃 %1B%24%42%61%52%1B%28%42 +PASS U+75C5 病 %1B%24%42%49%42%1B%28%42 +PASS U+75C7 症 %1B%24%42%3E%49%1B%28%42 +PASS U+75CA 痊 %1B%24%42%61%59%1B%28%42 +PASS U+75CD 痍 %1B%24%42%61%58%1B%28%42 +PASS U+75D2 痒 %1B%24%42%61%5A%1B%28%42 +PASS U+75D4 痔 %1B%24%42%3C%26%1B%28%42 +PASS U+75D5 痕 %1B%24%42%3A%2F%1B%28%42 +PASS U+75D8 痘 %1B%24%42%45%77%1B%28%42 +PASS U+75D9 痙 %1B%24%42%61%5B%1B%28%42 +PASS U+75DB 痛 %1B%24%42%44%4B%1B%28%42 +PASS U+75DE 痞 %1B%24%42%61%5D%1B%28%42 +PASS U+75E2 痢 %1B%24%42%4E%21%1B%28%42 +PASS U+75E3 痣 %1B%24%42%61%5C%1B%28%42 +PASS U+75E9 痩 %1B%24%42%41%69%1B%28%42 +PASS U+75F0 痰 %1B%24%42%61%62%1B%28%42 +PASS U+75F2 痲 %1B%24%42%61%64%1B%28%42 +PASS U+75F3 痳 %1B%24%42%61%65%1B%28%42 +PASS U+75F4 痴 %1B%24%42%43%54%1B%28%42 +PASS U+75FA 痺 %1B%24%42%61%63%1B%28%42 +PASS U+75FC 痼 %1B%24%42%61%60%1B%28%42 +PASS U+75FE 痾 %1B%24%42%61%5E%1B%28%42 +PASS U+75FF 痿 %1B%24%42%61%5F%1B%28%42 +PASS U+7601 瘁 %1B%24%42%61%61%1B%28%42 +PASS U+7609 瘉 %1B%24%42%61%68%1B%28%42 +PASS U+760B 瘋 %1B%24%42%61%66%1B%28%42 +PASS U+760D 瘍 %1B%24%42%61%67%1B%28%42 +PASS U+761F 瘟 %1B%24%42%61%69%1B%28%42 +PASS U+7620 瘠 %1B%24%42%61%6B%1B%28%42 +PASS U+7621 瘡 %1B%24%42%61%6C%1B%28%42 +PASS U+7622 瘢 %1B%24%42%61%6D%1B%28%42 +PASS U+7624 瘤 %1B%24%42%61%6E%1B%28%42 +PASS U+7627 瘧 %1B%24%42%61%6A%1B%28%42 +PASS U+7630 瘰 %1B%24%42%61%70%1B%28%42 +PASS U+7634 瘴 %1B%24%42%61%6F%1B%28%42 +PASS U+763B 瘻 %1B%24%42%61%71%1B%28%42 +PASS U+7642 療 %1B%24%42%4E%45%1B%28%42 +PASS U+7646 癆 %1B%24%42%61%74%1B%28%42 +PASS U+7647 癇 %1B%24%42%61%72%1B%28%42 +PASS U+7648 癈 %1B%24%42%61%73%1B%28%42 +PASS U+764C 癌 %1B%24%42%34%62%1B%28%42 +PASS U+7652 癒 %1B%24%42%4C%7E%1B%28%42 +PASS U+7656 癖 %1B%24%42%4A%4A%1B%28%42 +PASS U+7658 癘 %1B%24%42%61%76%1B%28%42 +PASS U+765C 癜 %1B%24%42%61%75%1B%28%42 +PASS U+7661 癡 %1B%24%42%61%77%1B%28%42 +PASS U+7662 癢 %1B%24%42%61%78%1B%28%42 +PASS U+7667 癧 %1B%24%42%61%7C%1B%28%42 +PASS U+7668 癨 %1B%24%42%61%79%1B%28%42 +PASS U+7669 癩 %1B%24%42%61%7A%1B%28%42 +PASS U+766A 癪 %1B%24%42%61%7B%1B%28%42 +PASS U+766C 癬 %1B%24%42%61%7D%1B%28%42 +PASS U+7670 癰 %1B%24%42%61%7E%1B%28%42 +PASS U+7672 癲 %1B%24%42%62%21%1B%28%42 +PASS U+7676 癶 %1B%24%42%62%22%1B%28%42 +PASS U+7678 癸 %1B%24%42%62%23%1B%28%42 +PASS U+767A 発 %1B%24%42%48%2F%1B%28%42 +PASS U+767B 登 %1B%24%42%45%50%1B%28%42 +PASS U+767C 發 %1B%24%42%62%24%1B%28%42 +PASS U+767D 白 %1B%24%42%47%72%1B%28%42 +PASS U+767E 百 %1B%24%42%49%34%1B%28%42 +PASS U+7680 皀 %1B%24%42%62%25%1B%28%42 +FAIL U+7682 皂 %1B%24%42%7B%35%1B%28%42 assert_equals: expected "%1B%24%42%7B%35" but got "%26%23%33%30%33%33%38%3B" +PASS U+7683 皃 %1B%24%42%62%26%1B%28%42 +PASS U+7684 的 %1B%24%42%45%2A%1B%28%42 +PASS U+7686 皆 %1B%24%42%33%27%1B%28%42 +PASS U+7687 皇 %1B%24%42%39%44%1B%28%42 +PASS U+7688 皈 %1B%24%42%62%27%1B%28%42 +PASS U+768B 皋 %1B%24%42%62%28%1B%28%42 +PASS U+768E 皎 %1B%24%42%62%29%1B%28%42 +PASS U+7690 皐 %1B%24%42%3B%29%1B%28%42 +PASS U+7693 皓 %1B%24%42%62%2B%1B%28%42 +PASS U+7696 皖 %1B%24%42%62%2A%1B%28%42 +PASS U+7699 皙 %1B%24%42%62%2C%1B%28%42 +PASS U+769A 皚 %1B%24%42%62%2D%1B%28%42 +FAIL U+769B 皛 %1B%24%42%7B%38%1B%28%42 assert_equals: expected "%1B%24%42%7B%38" but got "%26%23%33%30%33%36%33%3B" +FAIL U+769C 皜 %1B%24%42%7B%36%1B%28%42 assert_equals: expected "%1B%24%42%7B%36" but got "%26%23%33%30%33%36%34%3B" +FAIL U+769E 皞 %1B%24%42%7B%37%1B%28%42 assert_equals: expected "%1B%24%42%7B%37" but got "%26%23%33%30%33%36%36%3B" +FAIL U+76A6 皦 %1B%24%42%7B%39%1B%28%42 assert_equals: expected "%1B%24%42%7B%39" but got "%26%23%33%30%33%37%34%3B" +PASS U+76AE 皮 %1B%24%42%48%69%1B%28%42 +PASS U+76B0 皰 %1B%24%42%62%2E%1B%28%42 +PASS U+76B4 皴 %1B%24%42%62%2F%1B%28%42 +PASS U+76B7 皷 %1B%24%42%73%69%1B%28%42 +PASS U+76B8 皸 %1B%24%42%62%30%1B%28%42 +PASS U+76B9 皹 %1B%24%42%62%31%1B%28%42 +PASS U+76BA 皺 %1B%24%42%62%32%1B%28%42 +PASS U+76BF 皿 %1B%24%42%3B%2E%1B%28%42 +PASS U+76C2 盂 %1B%24%42%62%33%1B%28%42 +PASS U+76C3 盃 %1B%24%42%47%56%1B%28%42 +PASS U+76C6 盆 %1B%24%42%4B%5F%1B%28%42 +PASS U+76C8 盈 %1B%24%42%31%4E%1B%28%42 +PASS U+76CA 益 %1B%24%42%31%57%1B%28%42 +PASS U+76CD 盍 %1B%24%42%62%34%1B%28%42 +PASS U+76D2 盒 %1B%24%42%62%36%1B%28%42 +PASS U+76D6 盖 %1B%24%42%62%35%1B%28%42 +PASS U+76D7 盗 %1B%24%42%45%70%1B%28%42 +PASS U+76DB 盛 %1B%24%42%40%39%1B%28%42 +PASS U+76DC 盜 %1B%24%42%5D%39%1B%28%42 +PASS U+76DE 盞 %1B%24%42%62%37%1B%28%42 +PASS U+76DF 盟 %1B%24%42%4C%41%1B%28%42 +PASS U+76E1 盡 %1B%24%42%62%38%1B%28%42 +PASS U+76E3 監 %1B%24%42%34%46%1B%28%42 +PASS U+76E4 盤 %1B%24%42%48%57%1B%28%42 +PASS U+76E5 盥 %1B%24%42%62%39%1B%28%42 +PASS U+76E7 盧 %1B%24%42%62%3A%1B%28%42 +PASS U+76EA 盪 %1B%24%42%62%3B%1B%28%42 +PASS U+76EE 目 %1B%24%42%4C%5C%1B%28%42 +PASS U+76F2 盲 %1B%24%42%4C%55%1B%28%42 +PASS U+76F4 直 %1B%24%42%44%3E%1B%28%42 +PASS U+76F8 相 %1B%24%42%41%6A%1B%28%42 +PASS U+76FB 盻 %1B%24%42%62%3D%1B%28%42 +PASS U+76FE 盾 %1B%24%42%3D%62%1B%28%42 +PASS U+7701 省 %1B%24%42%3E%4A%1B%28%42 +PASS U+7704 眄 %1B%24%42%62%40%1B%28%42 +PASS U+7707 眇 %1B%24%42%62%3F%1B%28%42 +PASS U+7708 眈 %1B%24%42%62%3E%1B%28%42 +PASS U+7709 眉 %1B%24%42%48%7D%1B%28%42 +PASS U+770B 看 %1B%24%42%34%47%1B%28%42 +PASS U+770C 県 %1B%24%42%38%29%1B%28%42 +PASS U+771B 眛 %1B%24%42%62%46%1B%28%42 +PASS U+771E 眞 %1B%24%42%62%43%1B%28%42 +PASS U+771F 真 %1B%24%42%3F%3F%1B%28%42 +PASS U+7720 眠 %1B%24%42%4C%32%1B%28%42 +PASS U+7724 眤 %1B%24%42%62%42%1B%28%42 +PASS U+7725 眥 %1B%24%42%62%44%1B%28%42 +PASS U+7726 眦 %1B%24%42%62%45%1B%28%42 +PASS U+7729 眩 %1B%24%42%62%41%1B%28%42 +PASS U+7737 眷 %1B%24%42%62%47%1B%28%42 +PASS U+7738 眸 %1B%24%42%62%48%1B%28%42 +PASS U+773A 眺 %1B%24%42%44%2F%1B%28%42 +PASS U+773C 眼 %1B%24%42%34%63%1B%28%42 +PASS U+7740 着 %1B%24%42%43%65%1B%28%42 +FAIL U+7746 睆 %1B%24%42%7B%3B%1B%28%42 assert_equals: expected "%1B%24%42%7B%3B" but got "%26%23%33%30%35%33%34%3B" +PASS U+7747 睇 %1B%24%42%62%49%1B%28%42 +PASS U+775A 睚 %1B%24%42%62%4A%1B%28%42 +PASS U+775B 睛 %1B%24%42%62%4D%1B%28%42 +PASS U+7761 睡 %1B%24%42%3F%67%1B%28%42 +PASS U+7763 督 %1B%24%42%46%44%1B%28%42 +PASS U+7765 睥 %1B%24%42%62%4E%1B%28%42 +PASS U+7766 睦 %1B%24%42%4B%53%1B%28%42 +PASS U+7768 睨 %1B%24%42%62%4B%1B%28%42 +PASS U+776B 睫 %1B%24%42%62%4C%1B%28%42 +PASS U+7779 睹 %1B%24%42%62%51%1B%28%42 +PASS U+777E 睾 %1B%24%42%62%50%1B%28%42 +PASS U+777F 睿 %1B%24%42%62%4F%1B%28%42 +PASS U+778B 瞋 %1B%24%42%62%53%1B%28%42 +PASS U+778E 瞎 %1B%24%42%62%52%1B%28%42 +PASS U+7791 瞑 %1B%24%42%62%54%1B%28%42 +PASS U+779E 瞞 %1B%24%42%62%56%1B%28%42 +PASS U+77A0 瞠 %1B%24%42%62%55%1B%28%42 +PASS U+77A5 瞥 %1B%24%42%4A%4D%1B%28%42 +PASS U+77AC 瞬 %1B%24%42%3D%56%1B%28%42 +PASS U+77AD 瞭 %1B%24%42%4E%46%1B%28%42 +PASS U+77B0 瞰 %1B%24%42%62%57%1B%28%42 +PASS U+77B3 瞳 %1B%24%42%46%37%1B%28%42 +PASS U+77B6 瞶 %1B%24%42%62%58%1B%28%42 +PASS U+77B9 瞹 %1B%24%42%62%59%1B%28%42 +PASS U+77BB 瞻 %1B%24%42%62%5D%1B%28%42 +PASS U+77BC 瞼 %1B%24%42%62%5B%1B%28%42 +PASS U+77BD 瞽 %1B%24%42%62%5C%1B%28%42 +PASS U+77BF 瞿 %1B%24%42%62%5A%1B%28%42 +PASS U+77C7 矇 %1B%24%42%62%5E%1B%28%42 +PASS U+77CD 矍 %1B%24%42%62%5F%1B%28%42 +PASS U+77D7 矗 %1B%24%42%62%60%1B%28%42 +PASS U+77DA 矚 %1B%24%42%62%61%1B%28%42 +PASS U+77DB 矛 %1B%24%42%4C%37%1B%28%42 +PASS U+77DC 矜 %1B%24%42%62%62%1B%28%42 +PASS U+77E2 矢 %1B%24%42%4C%70%1B%28%42 +PASS U+77E3 矣 %1B%24%42%62%63%1B%28%42 +PASS U+77E5 知 %1B%24%42%43%4E%1B%28%42 +PASS U+77E7 矧 %1B%24%42%47%6A%1B%28%42 +PASS U+77E9 矩 %1B%24%42%36%6B%1B%28%42 +PASS U+77ED 短 %1B%24%42%43%3B%1B%28%42 +PASS U+77EE 矮 %1B%24%42%62%64%1B%28%42 +PASS U+77EF 矯 %1B%24%42%36%3A%1B%28%42 +PASS U+77F3 石 %1B%24%42%40%50%1B%28%42 +PASS U+77FC 矼 %1B%24%42%62%65%1B%28%42 +PASS U+7802 砂 %1B%24%42%3A%3D%1B%28%42 +PASS U+780C 砌 %1B%24%42%62%66%1B%28%42 +PASS U+7812 砒 %1B%24%42%62%67%1B%28%42 +PASS U+7814 研 %1B%24%42%38%26%1B%28%42 +PASS U+7815 砕 %1B%24%42%3A%55%1B%28%42 +PASS U+7820 砠 %1B%24%42%62%69%1B%28%42 +FAIL U+7821 砡 %1B%24%42%7B%3D%1B%28%42 assert_equals: expected "%1B%24%42%7B%3D" but got "%26%23%33%30%37%35%33%3B" +PASS U+7825 砥 %1B%24%42%45%56%1B%28%42 +PASS U+7826 砦 %1B%24%42%3A%56%1B%28%42 +PASS U+7827 砧 %1B%24%42%35%4E%1B%28%42 +PASS U+7832 砲 %1B%24%42%4B%24%1B%28%42 +PASS U+7834 破 %1B%24%42%47%4B%1B%28%42 +PASS U+783A 砺 %1B%24%42%45%57%1B%28%42 +PASS U+783F 砿 %1B%24%42%39%5C%1B%28%42 +PASS U+7845 硅 %1B%24%42%62%6B%1B%28%42 +FAIL U+784E 硎 %1B%24%42%7B%3E%1B%28%42 assert_equals: expected "%1B%24%42%7B%3E" but got "%26%23%33%30%37%39%38%3B" +PASS U+785D 硝 %1B%24%42%3E%4B%1B%28%42 +FAIL U+7864 硤 %1B%24%42%7B%3F%1B%28%42 assert_equals: expected "%1B%24%42%7B%3F" but got "%26%23%33%30%38%32%30%3B" +PASS U+786B 硫 %1B%24%42%4E%32%1B%28%42 +PASS U+786C 硬 %1B%24%42%39%45%1B%28%42 +PASS U+786F 硯 %1B%24%42%38%27%1B%28%42 +PASS U+7872 硲 %1B%24%42%48%23%1B%28%42 +PASS U+7874 硴 %1B%24%42%62%6D%1B%28%42 +FAIL U+787A 硺 %1B%24%42%7B%40%1B%28%42 assert_equals: expected "%1B%24%42%7B%40" but got "%26%23%33%30%38%34%32%3B" +PASS U+787C 硼 %1B%24%42%62%6F%1B%28%42 +PASS U+7881 碁 %1B%24%42%38%6B%1B%28%42 +PASS U+7886 碆 %1B%24%42%62%6E%1B%28%42 +PASS U+7887 碇 %1B%24%42%44%76%1B%28%42 +PASS U+788C 碌 %1B%24%42%62%71%1B%28%42 +PASS U+788D 碍 %1B%24%42%33%37%1B%28%42 +PASS U+788E 碎 %1B%24%42%62%6C%1B%28%42 +PASS U+7891 碑 %1B%24%42%48%6A%1B%28%42 +PASS U+7893 碓 %1B%24%42%31%30%1B%28%42 +PASS U+7895 碕 %1B%24%42%3A%6C%1B%28%42 +PASS U+7897 碗 %1B%24%42%4F%52%1B%28%42 +PASS U+789A 碚 %1B%24%42%62%70%1B%28%42 +PASS U+78A3 碣 %1B%24%42%62%72%1B%28%42 +PASS U+78A7 碧 %1B%24%42%4A%4B%1B%28%42 +PASS U+78A9 碩 %1B%24%42%40%59%1B%28%42 +PASS U+78AA 碪 %1B%24%42%62%74%1B%28%42 +PASS U+78AF 碯 %1B%24%42%62%75%1B%28%42 +PASS U+78B5 碵 %1B%24%42%62%73%1B%28%42 +PASS U+78BA 確 %1B%24%42%33%4E%1B%28%42 +PASS U+78BC 碼 %1B%24%42%62%7B%1B%28%42 +PASS U+78BE 碾 %1B%24%42%62%7A%1B%28%42 +PASS U+78C1 磁 %1B%24%42%3C%27%1B%28%42 +PASS U+78C5 磅 %1B%24%42%62%7C%1B%28%42 +PASS U+78C6 磆 %1B%24%42%62%77%1B%28%42 +PASS U+78CA 磊 %1B%24%42%62%7D%1B%28%42 +PASS U+78CB 磋 %1B%24%42%62%78%1B%28%42 +PASS U+78D0 磐 %1B%24%42%48%58%1B%28%42 +PASS U+78D1 磑 %1B%24%42%62%76%1B%28%42 +PASS U+78D4 磔 %1B%24%42%62%79%1B%28%42 +PASS U+78DA 磚 %1B%24%42%63%22%1B%28%42 +PASS U+78E7 磧 %1B%24%42%63%21%1B%28%42 +PASS U+78E8 磨 %1B%24%42%4B%61%1B%28%42 +PASS U+78EC 磬 %1B%24%42%62%7E%1B%28%42 +PASS U+78EF 磯 %1B%24%42%30%6B%1B%28%42 +PASS U+78F4 磴 %1B%24%42%63%24%1B%28%42 +PASS U+78FD 磽 %1B%24%42%63%23%1B%28%42 +PASS U+7901 礁 %1B%24%42%3E%4C%1B%28%42 +PASS U+7907 礇 %1B%24%42%63%25%1B%28%42 +PASS U+790E 礎 %1B%24%42%41%43%1B%28%42 +PASS U+7911 礑 %1B%24%42%63%27%1B%28%42 +PASS U+7912 礒 %1B%24%42%63%26%1B%28%42 +PASS U+7919 礙 %1B%24%42%63%28%1B%28%42 +PASS U+7926 礦 %1B%24%42%62%68%1B%28%42 +PASS U+792A 礪 %1B%24%42%62%6A%1B%28%42 +PASS U+792B 礫 %1B%24%42%63%2A%1B%28%42 +PASS U+792C 礬 %1B%24%42%63%29%1B%28%42 +FAIL U+7930 礰 %1B%24%42%7B%41%1B%28%42 assert_equals: expected "%1B%24%42%7B%41" but got "%26%23%33%31%30%32%34%3B" +PASS U+793A 示 %1B%24%42%3C%28%1B%28%42 +PASS U+793C 礼 %1B%24%42%4E%69%1B%28%42 +PASS U+793E 社 %1B%24%42%3C%52%1B%28%42 +PASS U+7940 祀 %1B%24%42%63%2B%1B%28%42 +PASS U+7941 祁 %1B%24%42%37%37%1B%28%42 +PASS U+7947 祇 %1B%24%42%35%40%1B%28%42 +PASS U+7948 祈 %1B%24%42%35%27%1B%28%42 +PASS U+7949 祉 %1B%24%42%3B%63%1B%28%42 +PASS U+7950 祐 %1B%24%42%4D%34%1B%28%42 +PASS U+7953 祓 %1B%24%42%63%31%1B%28%42 +PASS U+7955 祕 %1B%24%42%63%30%1B%28%42 +PASS U+7956 祖 %1B%24%42%41%44%1B%28%42 +PASS U+7957 祗 %1B%24%42%63%2D%1B%28%42 +PASS U+795A 祚 %1B%24%42%63%2F%1B%28%42 +PASS U+795D 祝 %1B%24%42%3D%4B%1B%28%42 +PASS U+795E 神 %1B%24%42%3F%40%1B%28%42 +PASS U+795F 祟 %1B%24%42%63%2E%1B%28%42 +PASS U+7960 祠 %1B%24%42%63%2C%1B%28%42 +PASS U+7962 祢 %1B%24%42%47%2A%1B%28%42 +PASS U+7965 祥 %1B%24%42%3E%4D%1B%28%42 +PASS U+7968 票 %1B%24%42%49%3C%1B%28%42 +PASS U+796D 祭 %1B%24%42%3A%57%1B%28%42 +PASS U+7977 祷 %1B%24%42%45%78%1B%28%42 +PASS U+797A 祺 %1B%24%42%63%32%1B%28%42 +PASS U+797F 祿 %1B%24%42%63%33%1B%28%42 +PASS U+7980 禀 %1B%24%42%63%49%1B%28%42 +PASS U+7981 禁 %1B%24%42%36%58%1B%28%42 +PASS U+7984 禄 %1B%24%42%4F%3D%1B%28%42 +PASS U+7985 禅 %1B%24%42%41%35%1B%28%42 +PASS U+798A 禊 %1B%24%42%63%34%1B%28%42 +PASS U+798D 禍 %1B%24%42%32%52%1B%28%42 +PASS U+798E 禎 %1B%24%42%44%77%1B%28%42 +PASS U+798F 福 %1B%24%42%4A%21%1B%28%42 +FAIL U+7994 禔 %1B%24%42%7B%45%1B%28%42 assert_equals: expected "%1B%24%42%7B%45" but got "%26%23%33%31%31%32%34%3B" +FAIL U+799B 禛 %1B%24%42%7B%47%1B%28%42 assert_equals: expected "%1B%24%42%7B%47" but got "%26%23%33%31%31%33%31%3B" +PASS U+799D 禝 %1B%24%42%63%35%1B%28%42 +PASS U+79A6 禦 %1B%24%42%35%7A%1B%28%42 +PASS U+79A7 禧 %1B%24%42%63%36%1B%28%42 +PASS U+79AA 禪 %1B%24%42%63%38%1B%28%42 +PASS U+79AE 禮 %1B%24%42%63%39%1B%28%42 +PASS U+79B0 禰 %1B%24%42%47%29%1B%28%42 +PASS U+79B3 禳 %1B%24%42%63%3A%1B%28%42 +PASS U+79B9 禹 %1B%24%42%63%3B%1B%28%42 +PASS U+79BA 禺 %1B%24%42%63%3C%1B%28%42 +PASS U+79BD 禽 %1B%24%42%36%59%1B%28%42 +PASS U+79BE 禾 %1B%24%42%32%53%1B%28%42 +PASS U+79BF 禿 %1B%24%42%46%45%1B%28%42 +PASS U+79C0 秀 %1B%24%42%3D%28%1B%28%42 +PASS U+79C1 私 %1B%24%42%3B%64%1B%28%42 +PASS U+79C9 秉 %1B%24%42%63%3D%1B%28%42 +PASS U+79CB 秋 %1B%24%42%3D%29%1B%28%42 +PASS U+79D1 科 %1B%24%42%32%4A%1B%28%42 +PASS U+79D2 秒 %1B%24%42%49%43%1B%28%42 +PASS U+79D5 秕 %1B%24%42%63%3E%1B%28%42 +PASS U+79D8 秘 %1B%24%42%48%6B%1B%28%42 +PASS U+79DF 租 %1B%24%42%41%45%1B%28%42 +PASS U+79E1 秡 %1B%24%42%63%41%1B%28%42 +PASS U+79E3 秣 %1B%24%42%63%42%1B%28%42 +PASS U+79E4 秤 %1B%24%42%47%69%1B%28%42 +PASS U+79E6 秦 %1B%24%42%3F%41%1B%28%42 +PASS U+79E7 秧 %1B%24%42%63%3F%1B%28%42 +PASS U+79E9 秩 %1B%24%42%43%61%1B%28%42 +PASS U+79EC 秬 %1B%24%42%63%40%1B%28%42 +PASS U+79F0 称 %1B%24%42%3E%4E%1B%28%42 +PASS U+79FB 移 %1B%24%42%30%5C%1B%28%42 +PASS U+7A00 稀 %1B%24%42%35%29%1B%28%42 +PASS U+7A08 稈 %1B%24%42%63%43%1B%28%42 +PASS U+7A0B 程 %1B%24%42%44%78%1B%28%42 +PASS U+7A0D 稍 %1B%24%42%63%44%1B%28%42 +PASS U+7A0E 税 %1B%24%42%40%47%1B%28%42 +PASS U+7A14 稔 %1B%24%42%4C%2D%1B%28%42 +PASS U+7A17 稗 %1B%24%42%49%23%1B%28%42 +PASS U+7A18 稘 %1B%24%42%63%45%1B%28%42 +PASS U+7A19 稙 %1B%24%42%63%46%1B%28%42 +PASS U+7A1A 稚 %1B%24%42%43%55%1B%28%42 +PASS U+7A1C 稜 %1B%24%42%4E%47%1B%28%42 +PASS U+7A1F 稟 %1B%24%42%63%48%1B%28%42 +PASS U+7A20 稠 %1B%24%42%63%47%1B%28%42 +PASS U+7A2E 種 %1B%24%42%3C%6F%1B%28%42 +PASS U+7A31 稱 %1B%24%42%63%4A%1B%28%42 +PASS U+7A32 稲 %1B%24%42%30%70%1B%28%42 +PASS U+7A37 稷 %1B%24%42%63%4D%1B%28%42 +PASS U+7A3B 稻 %1B%24%42%63%4B%1B%28%42 +PASS U+7A3C 稼 %1B%24%42%32%54%1B%28%42 +PASS U+7A3D 稽 %1B%24%42%37%4E%1B%28%42 +PASS U+7A3E 稾 %1B%24%42%63%4C%1B%28%42 +PASS U+7A3F 稿 %1B%24%42%39%46%1B%28%42 +PASS U+7A40 穀 %1B%24%42%39%72%1B%28%42 +PASS U+7A42 穂 %1B%24%42%4A%66%1B%28%42 +PASS U+7A43 穃 %1B%24%42%63%4E%1B%28%42 +PASS U+7A46 穆 %1B%24%42%4B%54%1B%28%42 +PASS U+7A49 穉 %1B%24%42%63%50%1B%28%42 +PASS U+7A4D 積 %1B%24%42%40%51%1B%28%42 +PASS U+7A4E 穎 %1B%24%42%31%4F%1B%28%42 +PASS U+7A4F 穏 %1B%24%42%32%3A%1B%28%42 +PASS U+7A50 穐 %1B%24%42%30%2C%1B%28%42 +PASS U+7A57 穗 %1B%24%42%63%4F%1B%28%42 +PASS U+7A61 穡 %1B%24%42%63%51%1B%28%42 +PASS U+7A62 穢 %1B%24%42%63%52%1B%28%42 +PASS U+7A63 穣 %1B%24%42%3E%77%1B%28%42 +PASS U+7A69 穩 %1B%24%42%63%53%1B%28%42 +PASS U+7A6B 穫 %1B%24%42%33%4F%1B%28%42 +PASS U+7A70 穰 %1B%24%42%63%55%1B%28%42 +PASS U+7A74 穴 %1B%24%42%37%6A%1B%28%42 +PASS U+7A76 究 %1B%24%42%35%66%1B%28%42 +PASS U+7A79 穹 %1B%24%42%63%56%1B%28%42 +PASS U+7A7A 空 %1B%24%42%36%75%1B%28%42 +PASS U+7A7D 穽 %1B%24%42%63%57%1B%28%42 +PASS U+7A7F 穿 %1B%24%42%40%7C%1B%28%42 +PASS U+7A81 突 %1B%24%42%46%4D%1B%28%42 +PASS U+7A83 窃 %1B%24%42%40%60%1B%28%42 +PASS U+7A84 窄 %1B%24%42%3A%75%1B%28%42 +PASS U+7A88 窈 %1B%24%42%63%58%1B%28%42 +PASS U+7A92 窒 %1B%24%42%43%62%1B%28%42 +PASS U+7A93 窓 %1B%24%42%41%6B%1B%28%42 +PASS U+7A95 窕 %1B%24%42%63%5A%1B%28%42 +PASS U+7A96 窖 %1B%24%42%63%5C%1B%28%42 +PASS U+7A97 窗 %1B%24%42%63%59%1B%28%42 +PASS U+7A98 窘 %1B%24%42%63%5B%1B%28%42 +PASS U+7A9F 窟 %1B%24%42%37%22%1B%28%42 +PASS U+7AA9 窩 %1B%24%42%63%5D%1B%28%42 +PASS U+7AAA 窪 %1B%24%42%37%26%1B%28%42 +PASS U+7AAE 窮 %1B%24%42%35%67%1B%28%42 +PASS U+7AAF 窯 %1B%24%42%4D%52%1B%28%42 +PASS U+7AB0 窰 %1B%24%42%63%5F%1B%28%42 +PASS U+7AB6 窶 %1B%24%42%63%60%1B%28%42 +PASS U+7ABA 窺 %1B%24%42%31%2E%1B%28%42 +PASS U+7ABF 窿 %1B%24%42%63%63%1B%28%42 +PASS U+7AC3 竃 %1B%24%42%33%76%1B%28%42 +PASS U+7AC4 竄 %1B%24%42%63%62%1B%28%42 +PASS U+7AC5 竅 %1B%24%42%63%61%1B%28%42 +PASS U+7AC7 竇 %1B%24%42%63%65%1B%28%42 +PASS U+7AC8 竈 %1B%24%42%63%5E%1B%28%42 +PASS U+7ACA 竊 %1B%24%42%63%66%1B%28%42 +PASS U+7ACB 立 %1B%24%42%4E%29%1B%28%42 +PASS U+7ACD 竍 %1B%24%42%63%67%1B%28%42 +PASS U+7ACF 竏 %1B%24%42%63%68%1B%28%42 +FAIL U+7AD1 竑 %1B%24%42%7B%48%1B%28%42 assert_equals: expected "%1B%24%42%7B%48" but got "%26%23%33%31%34%34%31%3B" +PASS U+7AD2 竒 %1B%24%42%54%74%1B%28%42 +PASS U+7AD3 竓 %1B%24%42%63%6A%1B%28%42 +PASS U+7AD5 竕 %1B%24%42%63%69%1B%28%42 +PASS U+7AD9 站 %1B%24%42%63%6B%1B%28%42 +PASS U+7ADA 竚 %1B%24%42%63%6C%1B%28%42 +PASS U+7ADC 竜 %1B%24%42%4E%35%1B%28%42 +PASS U+7ADD 竝 %1B%24%42%63%6D%1B%28%42 +PASS U+7ADF 竟 %1B%24%42%70%6F%1B%28%42 +PASS U+7AE0 章 %1B%24%42%3E%4F%1B%28%42 +PASS U+7AE1 竡 %1B%24%42%63%6E%1B%28%42 +PASS U+7AE2 竢 %1B%24%42%63%6F%1B%28%42 +PASS U+7AE3 竣 %1B%24%42%3D%57%1B%28%42 +PASS U+7AE5 童 %1B%24%42%46%38%1B%28%42 +PASS U+7AE6 竦 %1B%24%42%63%70%1B%28%42 +FAIL U+7AE7 竧 %1B%24%42%7B%49%1B%28%42 assert_equals: expected "%1B%24%42%7B%49" but got "%26%23%33%31%34%36%33%3B" +PASS U+7AEA 竪 %1B%24%42%43%28%1B%28%42 +FAIL U+7AEB 竫 %1B%24%42%7B%4B%1B%28%42 assert_equals: expected "%1B%24%42%7B%4B" but got "%26%23%33%31%34%36%37%3B" +PASS U+7AED 竭 %1B%24%42%63%71%1B%28%42 +PASS U+7AEF 端 %1B%24%42%43%3C%1B%28%42 +PASS U+7AF0 竰 %1B%24%42%63%72%1B%28%42 +PASS U+7AF6 競 %1B%24%42%36%25%1B%28%42 +PASS U+7AF8 竸 %1B%24%42%51%3F%1B%28%42 +PASS U+7AF9 竹 %1B%24%42%43%5D%1B%28%42 +PASS U+7AFA 竺 %1B%24%42%3C%33%1B%28%42 +PASS U+7AFF 竿 %1B%24%42%34%48%1B%28%42 +PASS U+7B02 笂 %1B%24%42%63%73%1B%28%42 +PASS U+7B04 笄 %1B%24%42%64%22%1B%28%42 +PASS U+7B06 笆 %1B%24%42%63%76%1B%28%42 +PASS U+7B08 笈 %1B%24%42%35%68%1B%28%42 +PASS U+7B0A 笊 %1B%24%42%63%75%1B%28%42 +PASS U+7B0B 笋 %1B%24%42%64%24%1B%28%42 +PASS U+7B0F 笏 %1B%24%42%63%74%1B%28%42 +PASS U+7B11 笑 %1B%24%42%3E%50%1B%28%42 +PASS U+7B18 笘 %1B%24%42%63%78%1B%28%42 +PASS U+7B19 笙 %1B%24%42%63%79%1B%28%42 +PASS U+7B1B 笛 %1B%24%42%45%2B%1B%28%42 +PASS U+7B1E 笞 %1B%24%42%63%7A%1B%28%42 +PASS U+7B20 笠 %1B%24%42%33%5E%1B%28%42 +PASS U+7B25 笥 %1B%24%42%3F%5A%1B%28%42 +PASS U+7B26 符 %1B%24%42%49%64%1B%28%42 +PASS U+7B28 笨 %1B%24%42%63%7C%1B%28%42 +PASS U+7B2C 第 %1B%24%42%42%68%1B%28%42 +PASS U+7B33 笳 %1B%24%42%63%77%1B%28%42 +PASS U+7B35 笵 %1B%24%42%63%7B%1B%28%42 +PASS U+7B36 笶 %1B%24%42%63%7D%1B%28%42 +PASS U+7B39 笹 %1B%24%42%3A%7B%1B%28%42 +PASS U+7B45 筅 %1B%24%42%64%26%1B%28%42 +PASS U+7B46 筆 %1B%24%42%49%2E%1B%28%42 +PASS U+7B48 筈 %1B%24%42%48%26%1B%28%42 +PASS U+7B49 等 %1B%24%42%45%79%1B%28%42 +PASS U+7B4B 筋 %1B%24%42%36%5A%1B%28%42 +PASS U+7B4C 筌 %1B%24%42%64%25%1B%28%42 +PASS U+7B4D 筍 %1B%24%42%64%23%1B%28%42 +PASS U+7B4F 筏 %1B%24%42%48%35%1B%28%42 +PASS U+7B50 筐 %1B%24%42%63%7E%1B%28%42 +PASS U+7B51 筑 %1B%24%42%43%5E%1B%28%42 +PASS U+7B52 筒 %1B%24%42%45%7B%1B%28%42 +PASS U+7B54 答 %1B%24%42%45%7A%1B%28%42 +PASS U+7B56 策 %1B%24%42%3A%76%1B%28%42 +PASS U+7B5D 筝 %1B%24%42%64%38%1B%28%42 +PASS U+7B65 筥 %1B%24%42%64%28%1B%28%42 +PASS U+7B67 筧 %1B%24%42%64%2A%1B%28%42 +PASS U+7B6C 筬 %1B%24%42%64%2D%1B%28%42 +PASS U+7B6E 筮 %1B%24%42%64%2E%1B%28%42 +PASS U+7B70 筰 %1B%24%42%64%2B%1B%28%42 +PASS U+7B71 筱 %1B%24%42%64%2C%1B%28%42 +PASS U+7B74 筴 %1B%24%42%64%29%1B%28%42 +PASS U+7B75 筵 %1B%24%42%64%27%1B%28%42 +PASS U+7B7A 筺 %1B%24%42%64%21%1B%28%42 +PASS U+7B86 箆 %1B%24%42%4A%4F%1B%28%42 +PASS U+7B87 箇 %1B%24%42%32%55%1B%28%42 +PASS U+7B8B 箋 %1B%24%42%64%35%1B%28%42 +PASS U+7B8D 箍 %1B%24%42%64%32%1B%28%42 +PASS U+7B8F 箏 %1B%24%42%64%37%1B%28%42 +PASS U+7B92 箒 %1B%24%42%64%36%1B%28%42 +PASS U+7B94 箔 %1B%24%42%47%73%1B%28%42 +PASS U+7B95 箕 %1B%24%42%4C%27%1B%28%42 +PASS U+7B97 算 %1B%24%42%3B%3B%1B%28%42 +PASS U+7B98 箘 %1B%24%42%64%30%1B%28%42 +PASS U+7B99 箙 %1B%24%42%64%39%1B%28%42 +PASS U+7B9A 箚 %1B%24%42%64%34%1B%28%42 +PASS U+7B9C 箜 %1B%24%42%64%33%1B%28%42 +PASS U+7B9D 箝 %1B%24%42%64%2F%1B%28%42 +FAIL U+7B9E 箞 %1B%24%42%7B%4C%1B%28%42 assert_equals: expected "%1B%24%42%7B%4C" but got "%26%23%33%31%36%34%36%3B" +PASS U+7B9F 箟 %1B%24%42%64%31%1B%28%42 +PASS U+7BA1 管 %1B%24%42%34%49%1B%28%42 +PASS U+7BAA 箪 %1B%24%42%43%3D%1B%28%42 +PASS U+7BAD 箭 %1B%24%42%40%7D%1B%28%42 +PASS U+7BB1 箱 %1B%24%42%48%22%1B%28%42 +PASS U+7BB4 箴 %1B%24%42%64%3E%1B%28%42 +PASS U+7BB8 箸 %1B%24%42%48%24%1B%28%42 +PASS U+7BC0 節 %1B%24%42%40%61%1B%28%42 +PASS U+7BC1 篁 %1B%24%42%64%3B%1B%28%42 +PASS U+7BC4 範 %1B%24%42%48%4F%1B%28%42 +PASS U+7BC6 篆 %1B%24%42%64%3F%1B%28%42 +PASS U+7BC7 篇 %1B%24%42%4A%53%1B%28%42 +PASS U+7BC9 築 %1B%24%42%43%5B%1B%28%42 +PASS U+7BCB 篋 %1B%24%42%64%3A%1B%28%42 +PASS U+7BCC 篌 %1B%24%42%64%3C%1B%28%42 +PASS U+7BCF 篏 %1B%24%42%64%3D%1B%28%42 +PASS U+7BDD 篝 %1B%24%42%64%40%1B%28%42 +PASS U+7BE0 篠 %1B%24%42%3C%44%1B%28%42 +PASS U+7BE4 篤 %1B%24%42%46%46%1B%28%42 +PASS U+7BE5 篥 %1B%24%42%64%45%1B%28%42 +PASS U+7BE6 篦 %1B%24%42%64%44%1B%28%42 +PASS U+7BE9 篩 %1B%24%42%64%41%1B%28%42 +PASS U+7BED 篭 %1B%24%42%4F%36%1B%28%42 +PASS U+7BF3 篳 %1B%24%42%64%4A%1B%28%42 +PASS U+7BF6 篶 %1B%24%42%64%4E%1B%28%42 +PASS U+7BF7 篷 %1B%24%42%64%4B%1B%28%42 +PASS U+7C00 簀 %1B%24%42%64%47%1B%28%42 +PASS U+7C07 簇 %1B%24%42%64%48%1B%28%42 +PASS U+7C0D 簍 %1B%24%42%64%4D%1B%28%42 +PASS U+7C11 簑 %1B%24%42%64%42%1B%28%42 +PASS U+7C12 簒 %1B%24%42%52%55%1B%28%42 +PASS U+7C13 簓 %1B%24%42%64%49%1B%28%42 +PASS U+7C14 簔 %1B%24%42%64%43%1B%28%42 +PASS U+7C17 簗 %1B%24%42%64%4C%1B%28%42 +PASS U+7C1F 簟 %1B%24%42%64%52%1B%28%42 +PASS U+7C21 簡 %1B%24%42%34%4A%1B%28%42 +PASS U+7C23 簣 %1B%24%42%64%4F%1B%28%42 +PASS U+7C27 簧 %1B%24%42%64%50%1B%28%42 +PASS U+7C2A 簪 %1B%24%42%64%51%1B%28%42 +PASS U+7C2B 簫 %1B%24%42%64%54%1B%28%42 +PASS U+7C37 簷 %1B%24%42%64%53%1B%28%42 +PASS U+7C38 簸 %1B%24%42%48%76%1B%28%42 +PASS U+7C3D 簽 %1B%24%42%64%55%1B%28%42 +PASS U+7C3E 簾 %1B%24%42%4E%7C%1B%28%42 +PASS U+7C3F 簿 %1B%24%42%4A%6D%1B%28%42 +PASS U+7C40 籀 %1B%24%42%64%5A%1B%28%42 +PASS U+7C43 籃 %1B%24%42%64%57%1B%28%42 +PASS U+7C4C 籌 %1B%24%42%64%56%1B%28%42 +PASS U+7C4D 籍 %1B%24%42%40%52%1B%28%42 +PASS U+7C4F 籏 %1B%24%42%64%59%1B%28%42 +PASS U+7C50 籐 %1B%24%42%64%5B%1B%28%42 +PASS U+7C54 籔 %1B%24%42%64%58%1B%28%42 +PASS U+7C56 籖 %1B%24%42%64%5F%1B%28%42 +PASS U+7C58 籘 %1B%24%42%64%5C%1B%28%42 +PASS U+7C5F 籟 %1B%24%42%64%5D%1B%28%42 +PASS U+7C60 籠 %1B%24%42%64%46%1B%28%42 +PASS U+7C64 籤 %1B%24%42%64%5E%1B%28%42 +PASS U+7C65 籥 %1B%24%42%64%60%1B%28%42 +PASS U+7C6C 籬 %1B%24%42%64%61%1B%28%42 +PASS U+7C73 米 %1B%24%42%4A%46%1B%28%42 +PASS U+7C75 籵 %1B%24%42%64%62%1B%28%42 +PASS U+7C7E 籾 %1B%24%42%4C%62%1B%28%42 +PASS U+7C81 粁 %1B%24%42%36%4E%1B%28%42 +PASS U+7C82 粂 %1B%24%42%37%29%1B%28%42 +PASS U+7C83 粃 %1B%24%42%64%63%1B%28%42 +PASS U+7C89 粉 %1B%24%42%4A%34%1B%28%42 +PASS U+7C8B 粋 %1B%24%42%3F%68%1B%28%42 +PASS U+7C8D 粍 %1B%24%42%4C%30%1B%28%42 +PASS U+7C90 粐 %1B%24%42%64%64%1B%28%42 +PASS U+7C92 粒 %1B%24%42%4E%33%1B%28%42 +PASS U+7C95 粕 %1B%24%42%47%74%1B%28%42 +PASS U+7C97 粗 %1B%24%42%41%46%1B%28%42 +PASS U+7C98 粘 %1B%24%42%47%34%1B%28%42 +PASS U+7C9B 粛 %1B%24%42%3D%4D%1B%28%42 +PASS U+7C9F 粟 %1B%24%42%30%40%1B%28%42 +PASS U+7CA1 粡 %1B%24%42%64%69%1B%28%42 +PASS U+7CA2 粢 %1B%24%42%64%67%1B%28%42 +PASS U+7CA4 粤 %1B%24%42%64%65%1B%28%42 +PASS U+7CA5 粥 %1B%24%42%34%21%1B%28%42 +PASS U+7CA7 粧 %1B%24%42%3E%51%1B%28%42 +PASS U+7CA8 粨 %1B%24%42%64%6A%1B%28%42 +PASS U+7CAB 粫 %1B%24%42%64%68%1B%28%42 +PASS U+7CAD 粭 %1B%24%42%64%66%1B%28%42 +PASS U+7CAE 粮 %1B%24%42%64%6E%1B%28%42 +PASS U+7CB1 粱 %1B%24%42%64%6D%1B%28%42 +PASS U+7CB2 粲 %1B%24%42%64%6C%1B%28%42 +PASS U+7CB3 粳 %1B%24%42%64%6B%1B%28%42 +PASS U+7CB9 粹 %1B%24%42%64%6F%1B%28%42 +PASS U+7CBD 粽 %1B%24%42%64%70%1B%28%42 +PASS U+7CBE 精 %1B%24%42%40%3A%1B%28%42 +PASS U+7CC0 糀 %1B%24%42%64%71%1B%28%42 +PASS U+7CC2 糂 %1B%24%42%64%73%1B%28%42 +PASS U+7CC5 糅 %1B%24%42%64%72%1B%28%42 +PASS U+7CCA 糊 %1B%24%42%38%52%1B%28%42 +PASS U+7CCE 糎 %1B%24%42%41%38%1B%28%42 +PASS U+7CD2 糒 %1B%24%42%64%75%1B%28%42 +PASS U+7CD6 糖 %1B%24%42%45%7C%1B%28%42 +PASS U+7CD8 糘 %1B%24%42%64%74%1B%28%42 +PASS U+7CDC 糜 %1B%24%42%64%76%1B%28%42 +PASS U+7CDE 糞 %1B%24%42%4A%35%1B%28%42 +PASS U+7CDF 糟 %1B%24%42%41%6C%1B%28%42 +PASS U+7CE0 糠 %1B%24%42%39%47%1B%28%42 +PASS U+7CE2 糢 %1B%24%42%64%77%1B%28%42 +PASS U+7CE7 糧 %1B%24%42%4E%48%1B%28%42 +PASS U+7CEF 糯 %1B%24%42%64%79%1B%28%42 +PASS U+7CF2 糲 %1B%24%42%64%7A%1B%28%42 +PASS U+7CF4 糴 %1B%24%42%64%7B%1B%28%42 +PASS U+7CF6 糶 %1B%24%42%64%7C%1B%28%42 +PASS U+7CF8 糸 %1B%24%42%3B%65%1B%28%42 +PASS U+7CFA 糺 %1B%24%42%64%7D%1B%28%42 +PASS U+7CFB 系 %1B%24%42%37%4F%1B%28%42 +PASS U+7CFE 糾 %1B%24%42%35%6A%1B%28%42 +PASS U+7D00 紀 %1B%24%42%35%2A%1B%28%42 +PASS U+7D02 紂 %1B%24%42%65%21%1B%28%42 +PASS U+7D04 約 %1B%24%42%4C%73%1B%28%42 +PASS U+7D05 紅 %1B%24%42%39%48%1B%28%42 +PASS U+7D06 紆 %1B%24%42%64%7E%1B%28%42 +PASS U+7D0A 紊 %1B%24%42%65%24%1B%28%42 +PASS U+7D0B 紋 %1B%24%42%4C%66%1B%28%42 +PASS U+7D0D 納 %1B%24%42%47%3C%1B%28%42 +PASS U+7D10 紐 %1B%24%42%49%33%1B%28%42 +PASS U+7D14 純 %1B%24%42%3D%63%1B%28%42 +PASS U+7D15 紕 %1B%24%42%65%23%1B%28%42 +PASS U+7D17 紗 %1B%24%42%3C%53%1B%28%42 +PASS U+7D18 紘 %1B%24%42%39%49%1B%28%42 +PASS U+7D19 紙 %1B%24%42%3B%66%1B%28%42 +PASS U+7D1A 級 %1B%24%42%35%69%1B%28%42 +PASS U+7D1B 紛 %1B%24%42%4A%36%1B%28%42 +PASS U+7D1C 紜 %1B%24%42%65%22%1B%28%42 +PASS U+7D20 素 %1B%24%42%41%47%1B%28%42 +PASS U+7D21 紡 %1B%24%42%4B%42%1B%28%42 +PASS U+7D22 索 %1B%24%42%3A%77%1B%28%42 +PASS U+7D2B 紫 %1B%24%42%3B%67%1B%28%42 +PASS U+7D2C 紬 %1B%24%42%44%5D%1B%28%42 +PASS U+7D2E 紮 %1B%24%42%65%27%1B%28%42 +PASS U+7D2F 累 %1B%24%42%4E%5F%1B%28%42 +PASS U+7D30 細 %1B%24%42%3A%59%1B%28%42 +PASS U+7D32 紲 %1B%24%42%65%28%1B%28%42 +PASS U+7D33 紳 %1B%24%42%3F%42%1B%28%42 +PASS U+7D35 紵 %1B%24%42%65%2A%1B%28%42 +PASS U+7D39 紹 %1B%24%42%3E%52%1B%28%42 +PASS U+7D3A 紺 %1B%24%42%3A%30%1B%28%42 +PASS U+7D3F 紿 %1B%24%42%65%29%1B%28%42 +PASS U+7D42 終 %1B%24%42%3D%2A%1B%28%42 +PASS U+7D43 絃 %1B%24%42%38%3E%1B%28%42 +PASS U+7D44 組 %1B%24%42%41%48%1B%28%42 +PASS U+7D45 絅 %1B%24%42%65%25%1B%28%42 +PASS U+7D46 絆 %1B%24%42%65%2B%1B%28%42 +FAIL U+7D48 絈 %1B%24%42%7B%4E%1B%28%42 assert_equals: expected "%1B%24%42%7B%4E" but got "%26%23%33%32%30%37%32%3B" +PASS U+7D4B 絋 %1B%24%42%65%26%1B%28%42 +PASS U+7D4C 経 %1B%24%42%37%50%1B%28%42 +PASS U+7D4E 絎 %1B%24%42%65%2E%1B%28%42 +PASS U+7D4F 絏 %1B%24%42%65%32%1B%28%42 +PASS U+7D50 結 %1B%24%42%37%6B%1B%28%42 +PASS U+7D56 絖 %1B%24%42%65%2D%1B%28%42 +PASS U+7D5B 絛 %1B%24%42%65%36%1B%28%42 +FAIL U+7D5C 絜 %1B%24%42%7B%4F%1B%28%42 assert_equals: expected "%1B%24%42%7B%4F" but got "%26%23%33%32%30%39%32%3B" +PASS U+7D5E 絞 %1B%24%42%39%4A%1B%28%42 +PASS U+7D61 絡 %1B%24%42%4D%6D%1B%28%42 +PASS U+7D62 絢 %1B%24%42%30%3C%1B%28%42 +PASS U+7D63 絣 %1B%24%42%65%33%1B%28%42 +PASS U+7D66 給 %1B%24%42%35%6B%1B%28%42 +PASS U+7D68 絨 %1B%24%42%65%30%1B%28%42 +PASS U+7D6E 絮 %1B%24%42%65%31%1B%28%42 +PASS U+7D71 統 %1B%24%42%45%7D%1B%28%42 +PASS U+7D72 絲 %1B%24%42%65%2F%1B%28%42 +PASS U+7D73 絳 %1B%24%42%65%2C%1B%28%42 +PASS U+7D75 絵 %1B%24%42%33%28%1B%28%42 +PASS U+7D76 絶 %1B%24%42%40%64%1B%28%42 +PASS U+7D79 絹 %1B%24%42%38%28%1B%28%42 +PASS U+7D7D 絽 %1B%24%42%65%38%1B%28%42 +PASS U+7D89 綉 %1B%24%42%65%35%1B%28%42 +PASS U+7D8F 綏 %1B%24%42%65%37%1B%28%42 +PASS U+7D93 經 %1B%24%42%65%34%1B%28%42 +PASS U+7D99 継 %1B%24%42%37%51%1B%28%42 +PASS U+7D9A 続 %1B%24%42%42%33%1B%28%42 +PASS U+7D9B 綛 %1B%24%42%65%39%1B%28%42 +PASS U+7D9C 綜 %1B%24%42%41%6E%1B%28%42 +PASS U+7D9F 綟 %1B%24%42%65%46%1B%28%42 +FAIL U+7DA0 綠 %1B%24%42%7B%51%1B%28%42 assert_equals: expected "%1B%24%42%7B%51" but got "%26%23%33%32%31%36%30%3B" +PASS U+7DA2 綢 %1B%24%42%65%42%1B%28%42 +PASS U+7DA3 綣 %1B%24%42%65%3C%1B%28%42 +PASS U+7DAB 綫 %1B%24%42%65%40%1B%28%42 +PASS U+7DAC 綬 %1B%24%42%3C%7A%1B%28%42 +PASS U+7DAD 維 %1B%24%42%30%5D%1B%28%42 +PASS U+7DAE 綮 %1B%24%42%65%3B%1B%28%42 +PASS U+7DAF 綯 %1B%24%42%65%43%1B%28%42 +PASS U+7DB0 綰 %1B%24%42%65%47%1B%28%42 +PASS U+7DB1 綱 %1B%24%42%39%4B%1B%28%42 +PASS U+7DB2 網 %1B%24%42%4C%56%1B%28%42 +PASS U+7DB4 綴 %1B%24%42%44%56%1B%28%42 +PASS U+7DB5 綵 %1B%24%42%65%3D%1B%28%42 +FAIL U+7DB7 綷 %1B%24%42%7B%50%1B%28%42 assert_equals: expected "%1B%24%42%7B%50" but got "%26%23%33%32%31%38%33%3B" +PASS U+7DB8 綸 %1B%24%42%65%45%1B%28%42 +PASS U+7DBA 綺 %1B%24%42%65%3A%1B%28%42 +PASS U+7DBB 綻 %1B%24%42%43%3E%1B%28%42 +PASS U+7DBD 綽 %1B%24%42%65%3F%1B%28%42 +PASS U+7DBE 綾 %1B%24%42%30%3D%1B%28%42 +PASS U+7DBF 綿 %1B%24%42%4C%4A%1B%28%42 +PASS U+7DC7 緇 %1B%24%42%65%3E%1B%28%42 +PASS U+7DCA 緊 %1B%24%42%36%5B%1B%28%42 +PASS U+7DCB 緋 %1B%24%42%48%6C%1B%28%42 +PASS U+7DCF 総 %1B%24%42%41%6D%1B%28%42 +PASS U+7DD1 緑 %1B%24%42%4E%50%1B%28%42 +PASS U+7DD2 緒 %1B%24%42%3D%6F%1B%28%42 +PASS U+7DD5 緕 %1B%24%42%65%6E%1B%28%42 +FAIL U+7DD6 緖 %1B%24%42%7B%52%1B%28%42 assert_equals: expected "%1B%24%42%7B%52" but got "%26%23%33%32%32%31%34%3B" +PASS U+7DD8 緘 %1B%24%42%65%48%1B%28%42 +PASS U+7DDA 線 %1B%24%42%40%7E%1B%28%42 +PASS U+7DDC 緜 %1B%24%42%65%44%1B%28%42 +PASS U+7DDD 緝 %1B%24%42%65%49%1B%28%42 +PASS U+7DDE 緞 %1B%24%42%65%4B%1B%28%42 +PASS U+7DE0 締 %1B%24%42%44%79%1B%28%42 +PASS U+7DE1 緡 %1B%24%42%65%4E%1B%28%42 +PASS U+7DE4 緤 %1B%24%42%65%4A%1B%28%42 +PASS U+7DE8 編 %1B%24%42%4A%54%1B%28%42 +PASS U+7DE9 緩 %1B%24%42%34%4B%1B%28%42 +PASS U+7DEC 緬 %1B%24%42%4C%4B%1B%28%42 +PASS U+7DEF 緯 %1B%24%42%30%5E%1B%28%42 +PASS U+7DF2 緲 %1B%24%42%65%4D%1B%28%42 +PASS U+7DF4 練 %1B%24%42%4E%7D%1B%28%42 +PASS U+7DFB 緻 %1B%24%42%65%4C%1B%28%42 +PASS U+7E01 縁 %1B%24%42%31%6F%1B%28%42 +PASS U+7E04 縄 %1B%24%42%46%6C%1B%28%42 +PASS U+7E05 縅 %1B%24%42%65%4F%1B%28%42 +PASS U+7E09 縉 %1B%24%42%65%56%1B%28%42 +PASS U+7E0A 縊 %1B%24%42%65%50%1B%28%42 +PASS U+7E0B 縋 %1B%24%42%65%57%1B%28%42 +PASS U+7E12 縒 %1B%24%42%65%53%1B%28%42 +PASS U+7E1B 縛 %1B%24%42%47%7B%1B%28%42 +PASS U+7E1E 縞 %1B%24%42%3C%4A%1B%28%42 +PASS U+7E1F 縟 %1B%24%42%65%55%1B%28%42 +PASS U+7E21 縡 %1B%24%42%65%52%1B%28%42 +PASS U+7E22 縢 %1B%24%42%65%58%1B%28%42 +PASS U+7E23 縣 %1B%24%42%65%51%1B%28%42 +PASS U+7E26 縦 %1B%24%42%3D%44%1B%28%42 +PASS U+7E2B 縫 %1B%24%42%4B%25%1B%28%42 +PASS U+7E2E 縮 %1B%24%42%3D%4C%1B%28%42 +PASS U+7E31 縱 %1B%24%42%65%54%1B%28%42 +PASS U+7E32 縲 %1B%24%42%65%60%1B%28%42 +PASS U+7E35 縵 %1B%24%42%65%5C%1B%28%42 +PASS U+7E37 縷 %1B%24%42%65%5F%1B%28%42 +PASS U+7E39 縹 %1B%24%42%65%5D%1B%28%42 +PASS U+7E3A 縺 %1B%24%42%65%61%1B%28%42 +PASS U+7E3B 縻 %1B%24%42%65%5B%1B%28%42 +PASS U+7E3D 總 %1B%24%42%65%41%1B%28%42 +PASS U+7E3E 績 %1B%24%42%40%53%1B%28%42 +PASS U+7E41 繁 %1B%24%42%48%4B%1B%28%42 +PASS U+7E43 繃 %1B%24%42%65%5E%1B%28%42 +PASS U+7E46 繆 %1B%24%42%65%59%1B%28%42 +PASS U+7E4A 繊 %1B%24%42%41%21%1B%28%42 +PASS U+7E4B 繋 %1B%24%42%37%52%1B%28%42 +PASS U+7E4D 繍 %1B%24%42%3D%2B%1B%28%42 +FAIL U+7E52 繒 %1B%24%42%7B%53%1B%28%42 assert_equals: expected "%1B%24%42%7B%53" but got "%26%23%33%32%33%33%38%3B" +PASS U+7E54 織 %1B%24%42%3F%25%1B%28%42 +PASS U+7E55 繕 %1B%24%42%41%36%1B%28%42 +PASS U+7E56 繖 %1B%24%42%65%64%1B%28%42 +PASS U+7E59 繙 %1B%24%42%65%66%1B%28%42 +PASS U+7E5A 繚 %1B%24%42%65%67%1B%28%42 +PASS U+7E5D 繝 %1B%24%42%65%63%1B%28%42 +PASS U+7E5E 繞 %1B%24%42%65%65%1B%28%42 +PASS U+7E66 繦 %1B%24%42%65%5A%1B%28%42 +PASS U+7E67 繧 %1B%24%42%65%62%1B%28%42 +PASS U+7E69 繩 %1B%24%42%65%6A%1B%28%42 +PASS U+7E6A 繪 %1B%24%42%65%69%1B%28%42 +PASS U+7E6D 繭 %1B%24%42%4B%7A%1B%28%42 +PASS U+7E70 繰 %1B%24%42%37%2B%1B%28%42 +PASS U+7E79 繹 %1B%24%42%65%68%1B%28%42 +PASS U+7E7B 繻 %1B%24%42%65%6C%1B%28%42 +PASS U+7E7C 繼 %1B%24%42%65%6B%1B%28%42 +PASS U+7E7D 繽 %1B%24%42%65%6F%1B%28%42 +PASS U+7E7F 繿 %1B%24%42%65%71%1B%28%42 +PASS U+7E82 纂 %1B%24%42%3B%3C%1B%28%42 +PASS U+7E83 纃 %1B%24%42%65%6D%1B%28%42 +PASS U+7E88 纈 %1B%24%42%65%72%1B%28%42 +PASS U+7E89 纉 %1B%24%42%65%73%1B%28%42 +FAIL U+7E8A 纊 %1B%24%42%79%21%1B%28%42 assert_equals: expected "%1B%24%42%79%21" but got "%26%23%33%32%33%39%34%3B" +PASS U+7E8C 續 %1B%24%42%65%74%1B%28%42 +PASS U+7E8E 纎 %1B%24%42%65%7A%1B%28%42 +PASS U+7E8F 纏 %1B%24%42%45%3B%1B%28%42 +PASS U+7E90 纐 %1B%24%42%65%76%1B%28%42 +PASS U+7E92 纒 %1B%24%42%65%75%1B%28%42 +PASS U+7E93 纓 %1B%24%42%65%77%1B%28%42 +PASS U+7E94 纔 %1B%24%42%65%78%1B%28%42 +PASS U+7E96 纖 %1B%24%42%65%79%1B%28%42 +PASS U+7E9B 纛 %1B%24%42%65%7B%1B%28%42 +PASS U+7E9C 纜 %1B%24%42%65%7C%1B%28%42 +PASS U+7F36 缶 %1B%24%42%34%4C%1B%28%42 +PASS U+7F38 缸 %1B%24%42%65%7D%1B%28%42 +PASS U+7F3A 缺 %1B%24%42%65%7E%1B%28%42 +PASS U+7F45 罅 %1B%24%42%66%21%1B%28%42 +FAIL U+7F47 罇 %1B%24%42%7B%54%1B%28%42 assert_equals: expected "%1B%24%42%7B%54" but got "%26%23%33%32%35%38%33%3B" +PASS U+7F4C 罌 %1B%24%42%66%22%1B%28%42 +PASS U+7F4D 罍 %1B%24%42%66%23%1B%28%42 +PASS U+7F4E 罎 %1B%24%42%66%24%1B%28%42 +PASS U+7F50 罐 %1B%24%42%66%25%1B%28%42 +PASS U+7F51 网 %1B%24%42%66%26%1B%28%42 +PASS U+7F54 罔 %1B%24%42%66%28%1B%28%42 +PASS U+7F55 罕 %1B%24%42%66%27%1B%28%42 +PASS U+7F58 罘 %1B%24%42%66%29%1B%28%42 +PASS U+7F5F 罟 %1B%24%42%66%2A%1B%28%42 +PASS U+7F60 罠 %1B%24%42%66%2B%1B%28%42 +PASS U+7F67 罧 %1B%24%42%66%2E%1B%28%42 +PASS U+7F68 罨 %1B%24%42%66%2C%1B%28%42 +PASS U+7F69 罩 %1B%24%42%66%2D%1B%28%42 +PASS U+7F6A 罪 %1B%24%42%3A%61%1B%28%42 +PASS U+7F6B 罫 %1B%24%42%37%53%1B%28%42 +PASS U+7F6E 置 %1B%24%42%43%56%1B%28%42 +PASS U+7F70 罰 %1B%24%42%48%33%1B%28%42 +PASS U+7F72 署 %1B%24%42%3D%70%1B%28%42 +PASS U+7F75 罵 %1B%24%42%47%4D%1B%28%42 +PASS U+7F77 罷 %1B%24%42%48%6D%1B%28%42 +PASS U+7F78 罸 %1B%24%42%66%2F%1B%28%42 +PASS U+7F79 罹 %1B%24%42%58%6D%1B%28%42 +PASS U+7F82 羂 %1B%24%42%66%30%1B%28%42 +PASS U+7F83 羃 %1B%24%42%66%32%1B%28%42 +PASS U+7F85 羅 %1B%24%42%4D%65%1B%28%42 +PASS U+7F86 羆 %1B%24%42%66%31%1B%28%42 +PASS U+7F87 羇 %1B%24%42%66%34%1B%28%42 +PASS U+7F88 羈 %1B%24%42%66%33%1B%28%42 +PASS U+7F8A 羊 %1B%24%42%4D%53%1B%28%42 +PASS U+7F8C 羌 %1B%24%42%66%35%1B%28%42 +PASS U+7F8E 美 %1B%24%42%48%7E%1B%28%42 +PASS U+7F94 羔 %1B%24%42%66%36%1B%28%42 +PASS U+7F9A 羚 %1B%24%42%66%39%1B%28%42 +PASS U+7F9D 羝 %1B%24%42%66%38%1B%28%42 +PASS U+7F9E 羞 %1B%24%42%66%37%1B%28%42 +FAIL U+7FA1 羡 %1B%24%42%7B%55%1B%28%42 assert_equals: expected "%1B%24%42%7B%55" but got "%26%23%33%32%36%37%33%3B" +PASS U+7FA3 羣 %1B%24%42%66%3A%1B%28%42 +PASS U+7FA4 群 %1B%24%42%37%32%1B%28%42 +PASS U+7FA8 羨 %1B%24%42%41%22%1B%28%42 +PASS U+7FA9 義 %1B%24%42%35%41%1B%28%42 +PASS U+7FAE 羮 %1B%24%42%66%3E%1B%28%42 +PASS U+7FAF 羯 %1B%24%42%66%3B%1B%28%42 +PASS U+7FB2 羲 %1B%24%42%66%3C%1B%28%42 +PASS U+7FB6 羶 %1B%24%42%66%3F%1B%28%42 +PASS U+7FB8 羸 %1B%24%42%66%40%1B%28%42 +PASS U+7FB9 羹 %1B%24%42%66%3D%1B%28%42 +PASS U+7FBD 羽 %1B%24%42%31%29%1B%28%42 +PASS U+7FC1 翁 %1B%24%42%32%27%1B%28%42 +PASS U+7FC5 翅 %1B%24%42%66%42%1B%28%42 +PASS U+7FC6 翆 %1B%24%42%66%43%1B%28%42 +PASS U+7FCA 翊 %1B%24%42%66%44%1B%28%42 +PASS U+7FCC 翌 %1B%24%42%4D%62%1B%28%42 +PASS U+7FD2 習 %1B%24%42%3D%2C%1B%28%42 +PASS U+7FD4 翔 %1B%24%42%66%46%1B%28%42 +PASS U+7FD5 翕 %1B%24%42%66%45%1B%28%42 +PASS U+7FE0 翠 %1B%24%42%3F%69%1B%28%42 +PASS U+7FE1 翡 %1B%24%42%66%47%1B%28%42 +PASS U+7FE6 翦 %1B%24%42%66%48%1B%28%42 +PASS U+7FE9 翩 %1B%24%42%66%49%1B%28%42 +PASS U+7FEB 翫 %1B%24%42%34%65%1B%28%42 +PASS U+7FF0 翰 %1B%24%42%34%4D%1B%28%42 +PASS U+7FF3 翳 %1B%24%42%66%4A%1B%28%42 +PASS U+7FF9 翹 %1B%24%42%66%4B%1B%28%42 +PASS U+7FFB 翻 %1B%24%42%4B%5D%1B%28%42 +PASS U+7FFC 翼 %1B%24%42%4D%63%1B%28%42 +PASS U+8000 耀 %1B%24%42%4D%54%1B%28%42 +PASS U+8001 老 %1B%24%42%4F%37%1B%28%42 +PASS U+8003 考 %1B%24%42%39%4D%1B%28%42 +PASS U+8004 耄 %1B%24%42%66%4E%1B%28%42 +PASS U+8005 者 %1B%24%42%3C%54%1B%28%42 +PASS U+8006 耆 %1B%24%42%66%4D%1B%28%42 +PASS U+800B 耋 %1B%24%42%66%4F%1B%28%42 +PASS U+800C 而 %1B%24%42%3C%29%1B%28%42 +PASS U+8010 耐 %1B%24%42%42%51%1B%28%42 +PASS U+8012 耒 %1B%24%42%66%50%1B%28%42 +PASS U+8015 耕 %1B%24%42%39%4C%1B%28%42 +PASS U+8017 耗 %1B%24%42%4C%57%1B%28%42 +PASS U+8018 耘 %1B%24%42%66%51%1B%28%42 +PASS U+8019 耙 %1B%24%42%66%52%1B%28%42 +PASS U+801C 耜 %1B%24%42%66%53%1B%28%42 +PASS U+8021 耡 %1B%24%42%66%54%1B%28%42 +PASS U+8028 耨 %1B%24%42%66%55%1B%28%42 +PASS U+8033 耳 %1B%24%42%3C%2A%1B%28%42 +PASS U+8036 耶 %1B%24%42%4C%6D%1B%28%42 +PASS U+803B 耻 %1B%24%42%66%57%1B%28%42 +PASS U+803D 耽 %1B%24%42%43%3F%1B%28%42 +PASS U+803F 耿 %1B%24%42%66%56%1B%28%42 +PASS U+8046 聆 %1B%24%42%66%59%1B%28%42 +PASS U+804A 聊 %1B%24%42%66%58%1B%28%42 +PASS U+8052 聒 %1B%24%42%66%5A%1B%28%42 +PASS U+8056 聖 %1B%24%42%40%3B%1B%28%42 +PASS U+8058 聘 %1B%24%42%66%5B%1B%28%42 +PASS U+805A 聚 %1B%24%42%66%5C%1B%28%42 +PASS U+805E 聞 %1B%24%42%4A%39%1B%28%42 +PASS U+805F 聟 %1B%24%42%66%5D%1B%28%42 +PASS U+8061 聡 %1B%24%42%41%6F%1B%28%42 +PASS U+8062 聢 %1B%24%42%66%5E%1B%28%42 +PASS U+8068 聨 %1B%24%42%66%5F%1B%28%42 +PASS U+806F 聯 %1B%24%42%4E%7E%1B%28%42 +PASS U+8070 聰 %1B%24%42%66%62%1B%28%42 +PASS U+8072 聲 %1B%24%42%66%61%1B%28%42 +PASS U+8073 聳 %1B%24%42%66%60%1B%28%42 +PASS U+8074 聴 %1B%24%42%44%30%1B%28%42 +PASS U+8076 聶 %1B%24%42%66%63%1B%28%42 +PASS U+8077 職 %1B%24%42%3F%26%1B%28%42 +PASS U+8079 聹 %1B%24%42%66%64%1B%28%42 +PASS U+807D 聽 %1B%24%42%66%65%1B%28%42 +PASS U+807E 聾 %1B%24%42%4F%38%1B%28%42 +PASS U+807F 聿 %1B%24%42%66%66%1B%28%42 +PASS U+8084 肄 %1B%24%42%66%67%1B%28%42 +PASS U+8085 肅 %1B%24%42%66%69%1B%28%42 +PASS U+8086 肆 %1B%24%42%66%68%1B%28%42 +PASS U+8087 肇 %1B%24%42%48%25%1B%28%42 +PASS U+8089 肉 %1B%24%42%46%79%1B%28%42 +PASS U+808B 肋 %1B%24%42%4F%3E%1B%28%42 +PASS U+808C 肌 %1B%24%42%48%29%1B%28%42 +PASS U+8093 肓 %1B%24%42%66%6B%1B%28%42 +PASS U+8096 肖 %1B%24%42%3E%53%1B%28%42 +PASS U+8098 肘 %1B%24%42%49%2A%1B%28%42 +PASS U+809A 肚 %1B%24%42%66%6C%1B%28%42 +PASS U+809B 肛 %1B%24%42%66%6A%1B%28%42 +PASS U+809D 肝 %1B%24%42%34%4E%1B%28%42 +PASS U+80A1 股 %1B%24%42%38%54%1B%28%42 +PASS U+80A2 肢 %1B%24%42%3B%68%1B%28%42 +PASS U+80A5 肥 %1B%24%42%48%6E%1B%28%42 +PASS U+80A9 肩 %1B%24%42%38%2A%1B%28%42 +PASS U+80AA 肪 %1B%24%42%4B%43%1B%28%42 +PASS U+80AC 肬 %1B%24%42%66%6F%1B%28%42 +PASS U+80AD 肭 %1B%24%42%66%6D%1B%28%42 +PASS U+80AF 肯 %1B%24%42%39%4E%1B%28%42 +PASS U+80B1 肱 %1B%24%42%39%4F%1B%28%42 +PASS U+80B2 育 %1B%24%42%30%69%1B%28%42 +PASS U+80B4 肴 %1B%24%42%3A%68%1B%28%42 +PASS U+80BA 肺 %1B%24%42%47%59%1B%28%42 +PASS U+80C3 胃 %1B%24%42%30%5F%1B%28%42 +PASS U+80C4 胄 %1B%24%42%66%74%1B%28%42 +PASS U+80C6 胆 %1B%24%42%43%40%1B%28%42 +PASS U+80CC 背 %1B%24%42%47%58%1B%28%42 +PASS U+80CE 胎 %1B%24%42%42%5B%1B%28%42 +PASS U+80D6 胖 %1B%24%42%66%76%1B%28%42 +PASS U+80D9 胙 %1B%24%42%66%72%1B%28%42 +PASS U+80DA 胚 %1B%24%42%66%75%1B%28%42 +PASS U+80DB 胛 %1B%24%42%66%70%1B%28%42 +PASS U+80DD 胝 %1B%24%42%66%73%1B%28%42 +PASS U+80DE 胞 %1B%24%42%4B%26%1B%28%42 +PASS U+80E1 胡 %1B%24%42%38%55%1B%28%42 +PASS U+80E4 胤 %1B%24%42%30%7D%1B%28%42 +PASS U+80E5 胥 %1B%24%42%66%71%1B%28%42 +PASS U+80EF 胯 %1B%24%42%66%78%1B%28%42 +PASS U+80F1 胱 %1B%24%42%66%79%1B%28%42 +PASS U+80F4 胴 %1B%24%42%46%39%1B%28%42 +PASS U+80F8 胸 %1B%24%42%36%3B%1B%28%42 +PASS U+80FC 胼 %1B%24%42%67%26%1B%28%42 +PASS U+80FD 能 %1B%24%42%47%3D%1B%28%42 +PASS U+8102 脂 %1B%24%42%3B%69%1B%28%42 +PASS U+8105 脅 %1B%24%42%36%3C%1B%28%42 +PASS U+8106 脆 %1B%24%42%40%48%1B%28%42 +PASS U+8107 脇 %1B%24%42%4F%46%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_5001-6000-expected.txt new file mode 100644 index 0000000..8afe542 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_5001-6000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8108 脈 %1B%24%42%4C%2E%1B%28%42 +PASS U+8109 脉 %1B%24%42%66%77%1B%28%42 +PASS U+810A 脊 %1B%24%42%40%54%1B%28%42 +PASS U+811A 脚 %1B%24%42%35%53%1B%28%42 +PASS U+811B 脛 %1B%24%42%66%7A%1B%28%42 +PASS U+8123 脣 %1B%24%42%66%7C%1B%28%42 +PASS U+8129 脩 %1B%24%42%66%7B%1B%28%42 +PASS U+812F 脯 %1B%24%42%66%7D%1B%28%42 +PASS U+8131 脱 %1B%24%42%43%26%1B%28%42 +PASS U+8133 脳 %1B%24%42%47%3E%1B%28%42 +PASS U+8139 脹 %1B%24%42%44%31%1B%28%42 +PASS U+813E 脾 %1B%24%42%67%23%1B%28%42 +PASS U+8146 腆 %1B%24%42%67%22%1B%28%42 +PASS U+814B 腋 %1B%24%42%66%7E%1B%28%42 +PASS U+814E 腎 %1B%24%42%3F%55%1B%28%42 +PASS U+8150 腐 %1B%24%42%49%65%1B%28%42 +PASS U+8151 腑 %1B%24%42%67%25%1B%28%42 +PASS U+8153 腓 %1B%24%42%67%24%1B%28%42 +PASS U+8154 腔 %1B%24%42%39%50%1B%28%42 +PASS U+8155 腕 %1B%24%42%4F%53%1B%28%42 +PASS U+815F 腟 %1B%24%42%67%35%1B%28%42 +PASS U+8165 腥 %1B%24%42%67%29%1B%28%42 +PASS U+8166 腦 %1B%24%42%67%2A%1B%28%42 +PASS U+816B 腫 %1B%24%42%3C%70%1B%28%42 +PASS U+816E 腮 %1B%24%42%67%28%1B%28%42 +PASS U+8170 腰 %1B%24%42%39%78%1B%28%42 +PASS U+8171 腱 %1B%24%42%67%27%1B%28%42 +PASS U+8174 腴 %1B%24%42%67%2B%1B%28%42 +PASS U+8178 腸 %1B%24%42%44%32%1B%28%42 +PASS U+8179 腹 %1B%24%42%4A%22%1B%28%42 +PASS U+817A 腺 %1B%24%42%41%23%1B%28%42 +PASS U+817F 腿 %1B%24%42%42%5C%1B%28%42 +PASS U+8180 膀 %1B%24%42%67%2F%1B%28%42 +PASS U+8182 膂 %1B%24%42%67%30%1B%28%42 +PASS U+8183 膃 %1B%24%42%67%2C%1B%28%42 +PASS U+8188 膈 %1B%24%42%67%2D%1B%28%42 +PASS U+818A 膊 %1B%24%42%67%2E%1B%28%42 +PASS U+818F 膏 %1B%24%42%39%51%1B%28%42 +PASS U+8193 膓 %1B%24%42%67%36%1B%28%42 +PASS U+8195 膕 %1B%24%42%67%32%1B%28%42 +PASS U+819A 膚 %1B%24%42%49%66%1B%28%42 +PASS U+819C 膜 %1B%24%42%4B%6C%1B%28%42 +PASS U+819D 膝 %1B%24%42%49%28%1B%28%42 +PASS U+81A0 膠 %1B%24%42%67%31%1B%28%42 +PASS U+81A3 膣 %1B%24%42%67%34%1B%28%42 +PASS U+81A4 膤 %1B%24%42%67%33%1B%28%42 +PASS U+81A8 膨 %1B%24%42%4B%44%1B%28%42 +PASS U+81A9 膩 %1B%24%42%67%37%1B%28%42 +PASS U+81B0 膰 %1B%24%42%67%38%1B%28%42 +PASS U+81B3 膳 %1B%24%42%41%37%1B%28%42 +PASS U+81B5 膵 %1B%24%42%67%39%1B%28%42 +PASS U+81B8 膸 %1B%24%42%67%3B%1B%28%42 +PASS U+81BA 膺 %1B%24%42%67%3F%1B%28%42 +PASS U+81BD 膽 %1B%24%42%67%3C%1B%28%42 +PASS U+81BE 膾 %1B%24%42%67%3A%1B%28%42 +PASS U+81BF 膿 %1B%24%42%47%3F%1B%28%42 +PASS U+81C0 臀 %1B%24%42%67%3D%1B%28%42 +PASS U+81C2 臂 %1B%24%42%67%3E%1B%28%42 +PASS U+81C6 臆 %1B%24%42%32%32%1B%28%42 +PASS U+81C8 臈 %1B%24%42%67%45%1B%28%42 +PASS U+81C9 臉 %1B%24%42%67%40%1B%28%42 +PASS U+81CD 臍 %1B%24%42%67%41%1B%28%42 +PASS U+81D1 臑 %1B%24%42%67%42%1B%28%42 +PASS U+81D3 臓 %1B%24%42%42%21%1B%28%42 +PASS U+81D8 臘 %1B%24%42%67%44%1B%28%42 +PASS U+81D9 臙 %1B%24%42%67%43%1B%28%42 +PASS U+81DA 臚 %1B%24%42%67%46%1B%28%42 +PASS U+81DF 臟 %1B%24%42%67%47%1B%28%42 +PASS U+81E0 臠 %1B%24%42%67%48%1B%28%42 +PASS U+81E3 臣 %1B%24%42%3F%43%1B%28%42 +PASS U+81E5 臥 %1B%24%42%32%69%1B%28%42 +PASS U+81E7 臧 %1B%24%42%67%49%1B%28%42 +PASS U+81E8 臨 %1B%24%42%4E%57%1B%28%42 +PASS U+81EA 自 %1B%24%42%3C%2B%1B%28%42 +PASS U+81ED 臭 %1B%24%42%3D%2D%1B%28%42 +PASS U+81F3 至 %1B%24%42%3B%6A%1B%28%42 +PASS U+81F4 致 %1B%24%42%43%57%1B%28%42 +PASS U+81FA 臺 %1B%24%42%67%4A%1B%28%42 +PASS U+81FB 臻 %1B%24%42%67%4B%1B%28%42 +PASS U+81FC 臼 %1B%24%42%31%31%1B%28%42 +PASS U+81FE 臾 %1B%24%42%67%4C%1B%28%42 +PASS U+8201 舁 %1B%24%42%67%4D%1B%28%42 +PASS U+8202 舂 %1B%24%42%67%4E%1B%28%42 +PASS U+8205 舅 %1B%24%42%67%4F%1B%28%42 +PASS U+8207 與 %1B%24%42%67%50%1B%28%42 +PASS U+8208 興 %1B%24%42%36%3D%1B%28%42 +PASS U+8209 舉 %1B%24%42%5A%2A%1B%28%42 +PASS U+820A 舊 %1B%24%42%67%51%1B%28%42 +PASS U+820C 舌 %1B%24%42%40%65%1B%28%42 +PASS U+820D 舍 %1B%24%42%67%52%1B%28%42 +PASS U+820E 舎 %1B%24%42%3C%4B%1B%28%42 +PASS U+8210 舐 %1B%24%42%67%53%1B%28%42 +PASS U+8212 舒 %1B%24%42%50%30%1B%28%42 +PASS U+8216 舖 %1B%24%42%67%54%1B%28%42 +PASS U+8217 舗 %1B%24%42%4A%5E%1B%28%42 +PASS U+8218 舘 %1B%24%42%34%5C%1B%28%42 +PASS U+821B 舛 %1B%24%42%41%24%1B%28%42 +PASS U+821C 舜 %1B%24%42%3D%58%1B%28%42 +PASS U+821E 舞 %1B%24%42%49%71%1B%28%42 +PASS U+821F 舟 %1B%24%42%3D%2E%1B%28%42 +PASS U+8229 舩 %1B%24%42%67%55%1B%28%42 +PASS U+822A 航 %1B%24%42%39%52%1B%28%42 +PASS U+822B 舫 %1B%24%42%67%56%1B%28%42 +PASS U+822C 般 %1B%24%42%48%4C%1B%28%42 +PASS U+822E 舮 %1B%24%42%67%64%1B%28%42 +PASS U+8233 舳 %1B%24%42%67%58%1B%28%42 +PASS U+8235 舵 %1B%24%42%42%49%1B%28%42 +PASS U+8236 舶 %1B%24%42%47%75%1B%28%42 +PASS U+8237 舷 %1B%24%42%38%3F%1B%28%42 +PASS U+8238 舸 %1B%24%42%67%57%1B%28%42 +PASS U+8239 船 %1B%24%42%41%25%1B%28%42 +PASS U+8240 艀 %1B%24%42%67%59%1B%28%42 +PASS U+8247 艇 %1B%24%42%44%7A%1B%28%42 +PASS U+8258 艘 %1B%24%42%67%5B%1B%28%42 +PASS U+8259 艙 %1B%24%42%67%5A%1B%28%42 +PASS U+825A 艚 %1B%24%42%67%5D%1B%28%42 +PASS U+825D 艝 %1B%24%42%67%5C%1B%28%42 +PASS U+825F 艟 %1B%24%42%67%5E%1B%28%42 +PASS U+8262 艢 %1B%24%42%67%60%1B%28%42 +PASS U+8264 艤 %1B%24%42%67%5F%1B%28%42 +PASS U+8266 艦 %1B%24%42%34%4F%1B%28%42 +PASS U+8268 艨 %1B%24%42%67%61%1B%28%42 +PASS U+826A 艪 %1B%24%42%67%62%1B%28%42 +PASS U+826B 艫 %1B%24%42%67%63%1B%28%42 +PASS U+826E 艮 %1B%24%42%3A%31%1B%28%42 +PASS U+826F 良 %1B%24%42%4E%49%1B%28%42 +PASS U+8271 艱 %1B%24%42%67%65%1B%28%42 +PASS U+8272 色 %1B%24%42%3F%27%1B%28%42 +PASS U+8276 艶 %1B%24%42%31%70%1B%28%42 +PASS U+8277 艷 %1B%24%42%67%66%1B%28%42 +PASS U+8278 艸 %1B%24%42%67%67%1B%28%42 +PASS U+827E 艾 %1B%24%42%67%68%1B%28%42 +PASS U+828B 芋 %1B%24%42%30%72%1B%28%42 +PASS U+828D 芍 %1B%24%42%67%69%1B%28%42 +PASS U+8292 芒 %1B%24%42%67%6A%1B%28%42 +PASS U+8299 芙 %1B%24%42%49%67%1B%28%42 +PASS U+829D 芝 %1B%24%42%3C%47%1B%28%42 +PASS U+829F 芟 %1B%24%42%67%6C%1B%28%42 +PASS U+82A5 芥 %1B%24%42%33%29%1B%28%42 +PASS U+82A6 芦 %1B%24%42%30%32%1B%28%42 +PASS U+82AB 芫 %1B%24%42%67%6B%1B%28%42 +PASS U+82AC 芬 %1B%24%42%67%6E%1B%28%42 +PASS U+82AD 芭 %1B%24%42%47%4E%1B%28%42 +PASS U+82AF 芯 %1B%24%42%3F%44%1B%28%42 +PASS U+82B1 花 %1B%24%42%32%56%1B%28%42 +PASS U+82B3 芳 %1B%24%42%4B%27%1B%28%42 +PASS U+82B8 芸 %1B%24%42%37%5D%1B%28%42 +PASS U+82B9 芹 %1B%24%42%36%5C%1B%28%42 +PASS U+82BB 芻 %1B%24%42%67%6D%1B%28%42 +PASS U+82BD 芽 %1B%24%42%32%6A%1B%28%42 +PASS U+82C5 苅 %1B%24%42%34%23%1B%28%42 +PASS U+82D1 苑 %1B%24%42%31%71%1B%28%42 +PASS U+82D2 苒 %1B%24%42%67%72%1B%28%42 +PASS U+82D3 苓 %1B%24%42%4E%6A%1B%28%42 +PASS U+82D4 苔 %1B%24%42%42%5D%1B%28%42 +PASS U+82D7 苗 %1B%24%42%49%44%1B%28%42 +PASS U+82D9 苙 %1B%24%42%67%7E%1B%28%42 +PASS U+82DB 苛 %1B%24%42%32%57%1B%28%42 +PASS U+82DC 苜 %1B%24%42%67%7C%1B%28%42 +PASS U+82DE 苞 %1B%24%42%67%7A%1B%28%42 +PASS U+82DF 苟 %1B%24%42%67%71%1B%28%42 +PASS U+82E1 苡 %1B%24%42%67%6F%1B%28%42 +PASS U+82E3 苣 %1B%24%42%67%70%1B%28%42 +PASS U+82E5 若 %1B%24%42%3C%63%1B%28%42 +PASS U+82E6 苦 %1B%24%42%36%6C%1B%28%42 +PASS U+82E7 苧 %1B%24%42%43%77%1B%28%42 +PASS U+82EB 苫 %1B%24%42%46%51%1B%28%42 +PASS U+82F1 英 %1B%24%42%31%51%1B%28%42 +PASS U+82F3 苳 %1B%24%42%67%74%1B%28%42 +PASS U+82F4 苴 %1B%24%42%67%73%1B%28%42 +PASS U+82F9 苹 %1B%24%42%67%79%1B%28%42 +PASS U+82FA 苺 %1B%24%42%67%75%1B%28%42 +PASS U+82FB 苻 %1B%24%42%67%78%1B%28%42 +FAIL U+8301 茁 %1B%24%42%7B%57%1B%28%42 assert_equals: expected "%1B%24%42%7B%57" but got "%26%23%33%33%35%33%37%3B" +PASS U+8302 茂 %1B%24%42%4C%50%1B%28%42 +PASS U+8303 范 %1B%24%42%67%77%1B%28%42 +PASS U+8304 茄 %1B%24%42%32%58%1B%28%42 +PASS U+8305 茅 %1B%24%42%33%7D%1B%28%42 +PASS U+8306 茆 %1B%24%42%67%7B%1B%28%42 +PASS U+8309 茉 %1B%24%42%67%7D%1B%28%42 +PASS U+830E 茎 %1B%24%42%37%54%1B%28%42 +PASS U+8316 茖 %1B%24%42%68%23%1B%28%42 +PASS U+8317 茗 %1B%24%42%68%2C%1B%28%42 +PASS U+8318 茘 %1B%24%42%68%2D%1B%28%42 +PASS U+831C 茜 %1B%24%42%30%2B%1B%28%42 +PASS U+8323 茣 %1B%24%42%68%34%1B%28%42 +PASS U+8328 茨 %1B%24%42%30%71%1B%28%42 +PASS U+832B 茫 %1B%24%42%68%2B%1B%28%42 +PASS U+832F 茯 %1B%24%42%68%2A%1B%28%42 +PASS U+8331 茱 %1B%24%42%68%25%1B%28%42 +PASS U+8332 茲 %1B%24%42%68%24%1B%28%42 +PASS U+8334 茴 %1B%24%42%68%22%1B%28%42 +PASS U+8335 茵 %1B%24%42%68%21%1B%28%42 +PASS U+8336 茶 %1B%24%42%43%63%1B%28%42 +PASS U+8338 茸 %1B%24%42%42%7B%1B%28%42 +PASS U+8339 茹 %1B%24%42%68%27%1B%28%42 +PASS U+8340 荀 %1B%24%42%68%26%1B%28%42 +PASS U+8345 荅 %1B%24%42%68%29%1B%28%42 +PASS U+8349 草 %1B%24%42%41%70%1B%28%42 +PASS U+834A 荊 %1B%24%42%37%55%1B%28%42 +PASS U+834F 荏 %1B%24%42%31%41%1B%28%42 +PASS U+8350 荐 %1B%24%42%68%28%1B%28%42 +PASS U+8352 荒 %1B%24%42%39%53%1B%28%42 +PASS U+8358 荘 %1B%24%42%41%71%1B%28%42 +FAIL U+8362 荢 %1B%24%42%7B%58%1B%28%42 assert_equals: expected "%1B%24%42%7B%58" but got "%26%23%33%33%36%33%34%3B" +PASS U+8373 荳 %1B%24%42%68%3A%1B%28%42 +PASS U+8375 荵 %1B%24%42%68%3B%1B%28%42 +PASS U+8377 荷 %1B%24%42%32%59%1B%28%42 +PASS U+837B 荻 %1B%24%42%32%2E%1B%28%42 +PASS U+837C 荼 %1B%24%42%68%38%1B%28%42 +FAIL U+837F 荿 %1B%24%42%7B%59%1B%28%42 assert_equals: expected "%1B%24%42%7B%59" but got "%26%23%33%33%36%36%33%3B" +PASS U+8385 莅 %1B%24%42%68%2E%1B%28%42 +PASS U+8387 莇 %1B%24%42%68%36%1B%28%42 +PASS U+8389 莉 %1B%24%42%68%3D%1B%28%42 +PASS U+838A 莊 %1B%24%42%68%37%1B%28%42 +PASS U+838E 莎 %1B%24%42%68%35%1B%28%42 +PASS U+8393 莓 %1B%24%42%67%76%1B%28%42 +PASS U+8396 莖 %1B%24%42%68%33%1B%28%42 +PASS U+839A 莚 %1B%24%42%68%2F%1B%28%42 +PASS U+839E 莞 %1B%24%42%34%50%1B%28%42 +PASS U+839F 莟 %1B%24%42%68%31%1B%28%42 +PASS U+83A0 莠 %1B%24%42%68%3C%1B%28%42 +PASS U+83A2 莢 %1B%24%42%68%32%1B%28%42 +PASS U+83A8 莨 %1B%24%42%68%3E%1B%28%42 +PASS U+83AA 莪 %1B%24%42%68%30%1B%28%42 +PASS U+83AB 莫 %1B%24%42%47%7C%1B%28%42 +PASS U+83B1 莱 %1B%24%42%4D%69%1B%28%42 +PASS U+83B5 莵 %1B%24%42%68%39%1B%28%42 +PASS U+83BD 莽 %1B%24%42%68%4F%1B%28%42 +PASS U+83C1 菁 %1B%24%42%68%47%1B%28%42 +PASS U+83C5 菅 %1B%24%42%3F%7B%1B%28%42 +FAIL U+83C7 菇 %1B%24%42%7B%5A%1B%28%42 assert_equals: expected "%1B%24%42%7B%5A" but got "%26%23%33%33%37%33%35%3B" +PASS U+83CA 菊 %1B%24%42%35%46%1B%28%42 +PASS U+83CC 菌 %1B%24%42%36%5D%1B%28%42 +PASS U+83CE 菎 %1B%24%42%68%42%1B%28%42 +PASS U+83D3 菓 %1B%24%42%32%5B%1B%28%42 +PASS U+83D6 菖 %1B%24%42%3E%54%1B%28%42 +PASS U+83D8 菘 %1B%24%42%68%45%1B%28%42 +PASS U+83DC 菜 %1B%24%42%3A%5A%1B%28%42 +PASS U+83DF 菟 %1B%24%42%45%51%1B%28%42 +PASS U+83E0 菠 %1B%24%42%68%4A%1B%28%42 +PASS U+83E9 菩 %1B%24%42%4A%6E%1B%28%42 +PASS U+83EB 菫 %1B%24%42%68%41%1B%28%42 +PASS U+83EF 華 %1B%24%42%32%5A%1B%28%42 +PASS U+83F0 菰 %1B%24%42%38%56%1B%28%42 +PASS U+83F1 菱 %1B%24%42%49%29%1B%28%42 +PASS U+83F2 菲 %1B%24%42%68%4B%1B%28%42 +PASS U+83F4 菴 %1B%24%42%68%3F%1B%28%42 +FAIL U+83F6 菶 %1B%24%42%7B%5B%1B%28%42 assert_equals: expected "%1B%24%42%7B%5B" but got "%26%23%33%33%37%38%32%3B" +PASS U+83F7 菷 %1B%24%42%68%48%1B%28%42 +PASS U+83FB 菻 %1B%24%42%68%52%1B%28%42 +PASS U+83FD 菽 %1B%24%42%68%43%1B%28%42 +PASS U+8403 萃 %1B%24%42%68%44%1B%28%42 +PASS U+8404 萄 %1B%24%42%46%3A%1B%28%42 +PASS U+8407 萇 %1B%24%42%68%49%1B%28%42 +PASS U+840B 萋 %1B%24%42%68%46%1B%28%42 +PASS U+840C 萌 %1B%24%42%4B%28%1B%28%42 +PASS U+840D 萍 %1B%24%42%68%4C%1B%28%42 +PASS U+840E 萎 %1B%24%42%30%60%1B%28%42 +PASS U+8413 萓 %1B%24%42%68%40%1B%28%42 +PASS U+8420 萠 %1B%24%42%68%4E%1B%28%42 +PASS U+8422 萢 %1B%24%42%68%4D%1B%28%42 +PASS U+8429 萩 %1B%24%42%47%6B%1B%28%42 +PASS U+842A 萪 %1B%24%42%68%54%1B%28%42 +PASS U+842C 萬 %1B%24%42%68%5F%1B%28%42 +PASS U+8431 萱 %1B%24%42%33%7E%1B%28%42 +PASS U+8435 萵 %1B%24%42%68%62%1B%28%42 +PASS U+8438 萸 %1B%24%42%68%50%1B%28%42 +PASS U+843C 萼 %1B%24%42%68%55%1B%28%42 +PASS U+843D 落 %1B%24%42%4D%6E%1B%28%42 +PASS U+8446 葆 %1B%24%42%68%5E%1B%28%42 +FAIL U+8448 葈 %1B%24%42%7B%5C%1B%28%42 assert_equals: expected "%1B%24%42%7B%5C" but got "%26%23%33%33%38%36%34%3B" +PASS U+8449 葉 %1B%24%42%4D%55%1B%28%42 +PASS U+844E 葎 %1B%24%42%4E%2A%1B%28%42 +PASS U+8457 著 %1B%24%42%43%78%1B%28%42 +PASS U+845B 葛 %1B%24%42%33%6B%1B%28%42 +PASS U+8461 葡 %1B%24%42%49%72%1B%28%42 +PASS U+8462 葢 %1B%24%42%68%64%1B%28%42 +PASS U+8463 董 %1B%24%42%46%21%1B%28%42 +PASS U+8466 葦 %1B%24%42%30%31%1B%28%42 +PASS U+8469 葩 %1B%24%42%68%5D%1B%28%42 +PASS U+846B 葫 %1B%24%42%68%59%1B%28%42 +PASS U+846C 葬 %1B%24%42%41%72%1B%28%42 +PASS U+846D 葭 %1B%24%42%68%53%1B%28%42 +PASS U+846E 葮 %1B%24%42%68%5B%1B%28%42 +PASS U+846F 葯 %1B%24%42%68%60%1B%28%42 +PASS U+8471 葱 %1B%24%42%47%2C%1B%28%42 +PASS U+8475 葵 %1B%24%42%30%2A%1B%28%42 +PASS U+8477 葷 %1B%24%42%68%58%1B%28%42 +PASS U+8479 葹 %1B%24%42%68%61%1B%28%42 +PASS U+847A 葺 %1B%24%42%49%78%1B%28%42 +PASS U+8482 蒂 %1B%24%42%68%5C%1B%28%42 +PASS U+8484 蒄 %1B%24%42%68%57%1B%28%42 +PASS U+848B 蒋 %1B%24%42%3E%55%1B%28%42 +PASS U+8490 蒐 %1B%24%42%3D%2F%1B%28%42 +PASS U+8494 蒔 %1B%24%42%3C%2C%1B%28%42 +PASS U+8499 蒙 %1B%24%42%4C%58%1B%28%42 +PASS U+849C 蒜 %1B%24%42%49%47%1B%28%42 +PASS U+849F 蒟 %1B%24%42%68%67%1B%28%42 +PASS U+84A1 蒡 %1B%24%42%68%70%1B%28%42 +PASS U+84AD 蒭 %1B%24%42%68%5A%1B%28%42 +PASS U+84B2 蒲 %1B%24%42%33%77%1B%28%42 +FAIL U+84B4 蒴 %1B%24%42%7B%5D%1B%28%42 assert_equals: expected "%1B%24%42%7B%5D" but got "%26%23%33%33%39%37%32%3B" +PASS U+84B8 蒸 %1B%24%42%3E%78%1B%28%42 +PASS U+84B9 蒹 %1B%24%42%68%65%1B%28%42 +PASS U+84BB 蒻 %1B%24%42%68%6A%1B%28%42 +PASS U+84BC 蒼 %1B%24%42%41%73%1B%28%42 +PASS U+84BF 蒿 %1B%24%42%68%66%1B%28%42 +PASS U+84C1 蓁 %1B%24%42%68%6D%1B%28%42 +PASS U+84C4 蓄 %1B%24%42%43%5F%1B%28%42 +PASS U+84C6 蓆 %1B%24%42%68%6E%1B%28%42 +PASS U+84C9 蓉 %1B%24%42%4D%56%1B%28%42 +PASS U+84CA 蓊 %1B%24%42%68%63%1B%28%42 +PASS U+84CB 蓋 %1B%24%42%33%38%1B%28%42 +PASS U+84CD 蓍 %1B%24%42%68%69%1B%28%42 +PASS U+84D0 蓐 %1B%24%42%68%6C%1B%28%42 +PASS U+84D1 蓑 %1B%24%42%4C%2C%1B%28%42 +PASS U+84D6 蓖 %1B%24%42%68%6F%1B%28%42 +PASS U+84D9 蓙 %1B%24%42%68%68%1B%28%42 +PASS U+84DA 蓚 %1B%24%42%68%6B%1B%28%42 +FAIL U+84DC 蓜 %1B%24%42%79%25%1B%28%42 assert_equals: expected "%1B%24%42%79%25" but got "%26%23%33%34%30%31%32%3B" +PASS U+84EC 蓬 %1B%24%42%4B%29%1B%28%42 +PASS U+84EE 蓮 %1B%24%42%4F%21%1B%28%42 +PASS U+84F4 蓴 %1B%24%42%68%73%1B%28%42 +PASS U+84FC 蓼 %1B%24%42%68%7A%1B%28%42 +PASS U+84FF 蓿 %1B%24%42%68%72%1B%28%42 +PASS U+8500 蔀 %1B%24%42%3C%43%1B%28%42 +PASS U+8506 蔆 %1B%24%42%68%51%1B%28%42 +PASS U+8511 蔑 %1B%24%42%4A%4E%1B%28%42 +PASS U+8513 蔓 %1B%24%42%4C%22%1B%28%42 +PASS U+8514 蔔 %1B%24%42%68%79%1B%28%42 +PASS U+8515 蔕 %1B%24%42%68%78%1B%28%42 +PASS U+8517 蔗 %1B%24%42%68%74%1B%28%42 +PASS U+8518 蔘 %1B%24%42%68%75%1B%28%42 +PASS U+851A 蔚 %1B%24%42%31%36%1B%28%42 +PASS U+851F 蔟 %1B%24%42%68%77%1B%28%42 +PASS U+8521 蔡 %1B%24%42%68%71%1B%28%42 +PASS U+8526 蔦 %1B%24%42%44%55%1B%28%42 +PASS U+852C 蔬 %1B%24%42%68%76%1B%28%42 +PASS U+852D 蔭 %1B%24%42%30%7E%1B%28%42 +PASS U+8535 蔵 %1B%24%42%42%22%1B%28%42 +PASS U+853D 蔽 %1B%24%42%4A%43%1B%28%42 +PASS U+8540 蕀 %1B%24%42%68%7B%1B%28%42 +PASS U+8541 蕁 %1B%24%42%69%21%1B%28%42 +PASS U+8543 蕃 %1B%24%42%48%59%1B%28%42 +PASS U+8548 蕈 %1B%24%42%68%7E%1B%28%42 +PASS U+8549 蕉 %1B%24%42%3E%56%1B%28%42 +PASS U+854A 蕊 %1B%24%42%3C%49%1B%28%42 +PASS U+854B 蕋 %1B%24%42%69%23%1B%28%42 +PASS U+854E 蕎 %1B%24%42%36%3E%1B%28%42 +FAIL U+8553 蕓 %1B%24%42%7B%5E%1B%28%42 assert_equals: expected "%1B%24%42%7B%5E" but got "%26%23%33%34%31%33%31%3B" +PASS U+8555 蕕 %1B%24%42%69%24%1B%28%42 +PASS U+8557 蕗 %1B%24%42%49%79%1B%28%42 +PASS U+8558 蕘 %1B%24%42%68%7D%1B%28%42 +FAIL U+8559 蕙 %1B%24%42%7B%5F%1B%28%42 assert_equals: expected "%1B%24%42%7B%5F" but got "%26%23%33%34%31%33%37%3B" +PASS U+855A 蕚 %1B%24%42%68%56%1B%28%42 +PASS U+8563 蕣 %1B%24%42%68%7C%1B%28%42 +PASS U+8568 蕨 %1B%24%42%4F%4F%1B%28%42 +PASS U+8569 蕩 %1B%24%42%46%22%1B%28%42 +PASS U+856A 蕪 %1B%24%42%49%73%1B%28%42 +FAIL U+856B 蕫 %1B%24%42%7B%60%1B%28%42 assert_equals: expected "%1B%24%42%7B%60" but got "%26%23%33%34%31%35%35%3B" +PASS U+856D 蕭 %1B%24%42%69%2B%1B%28%42 +PASS U+8577 蕷 %1B%24%42%69%31%1B%28%42 +PASS U+857E 蕾 %1B%24%42%69%32%1B%28%42 +PASS U+8580 薀 %1B%24%42%69%25%1B%28%42 +PASS U+8584 薄 %1B%24%42%47%76%1B%28%42 +PASS U+8587 薇 %1B%24%42%69%2F%1B%28%42 +PASS U+8588 薈 %1B%24%42%69%27%1B%28%42 +PASS U+858A 薊 %1B%24%42%69%29%1B%28%42 +PASS U+8590 薐 %1B%24%42%69%33%1B%28%42 +PASS U+8591 薑 %1B%24%42%69%28%1B%28%42 +PASS U+8594 薔 %1B%24%42%69%2C%1B%28%42 +PASS U+8597 薗 %1B%24%42%31%72%1B%28%42 +PASS U+8599 薙 %1B%24%42%46%65%1B%28%42 +PASS U+859B 薛 %1B%24%42%69%2D%1B%28%42 +PASS U+859C 薜 %1B%24%42%69%30%1B%28%42 +PASS U+85A4 薤 %1B%24%42%69%26%1B%28%42 +PASS U+85A6 薦 %1B%24%42%41%26%1B%28%42 +PASS U+85A8 薨 %1B%24%42%69%2A%1B%28%42 +PASS U+85A9 薩 %1B%24%42%3B%27%1B%28%42 +PASS U+85AA 薪 %1B%24%42%3F%45%1B%28%42 +PASS U+85AB 薫 %1B%24%42%37%30%1B%28%42 +PASS U+85AC 薬 %1B%24%42%4C%74%1B%28%42 +PASS U+85AE 薮 %1B%24%42%4C%79%1B%28%42 +PASS U+85AF 薯 %1B%24%42%3D%72%1B%28%42 +FAIL U+85B0 薰 %1B%24%42%7B%62%1B%28%42 assert_equals: expected "%1B%24%42%7B%62" but got "%26%23%33%34%32%32%34%3B" +PASS U+85B9 薹 %1B%24%42%69%37%1B%28%42 +PASS U+85BA 薺 %1B%24%42%69%35%1B%28%42 +PASS U+85C1 藁 %1B%24%42%4F%4E%1B%28%42 +PASS U+85C9 藉 %1B%24%42%69%34%1B%28%42 +PASS U+85CD 藍 %1B%24%42%4D%75%1B%28%42 +PASS U+85CF 藏 %1B%24%42%69%36%1B%28%42 +PASS U+85D0 藐 %1B%24%42%69%38%1B%28%42 +PASS U+85D5 藕 %1B%24%42%69%39%1B%28%42 +PASS U+85DC 藜 %1B%24%42%69%3C%1B%28%42 +PASS U+85DD 藝 %1B%24%42%69%3A%1B%28%42 +PASS U+85E4 藤 %1B%24%42%46%23%1B%28%42 +PASS U+85E5 藥 %1B%24%42%69%3B%1B%28%42 +PASS U+85E9 藩 %1B%24%42%48%4D%1B%28%42 +PASS U+85EA 藪 %1B%24%42%69%2E%1B%28%42 +PASS U+85F7 藷 %1B%24%42%3D%73%1B%28%42 +PASS U+85F9 藹 %1B%24%42%69%3D%1B%28%42 +PASS U+85FA 藺 %1B%24%42%69%42%1B%28%42 +PASS U+85FB 藻 %1B%24%42%41%74%1B%28%42 +PASS U+85FE 藾 %1B%24%42%69%41%1B%28%42 +PASS U+8602 蘂 %1B%24%42%69%22%1B%28%42 +PASS U+8606 蘆 %1B%24%42%69%43%1B%28%42 +PASS U+8607 蘇 %1B%24%42%41%49%1B%28%42 +PASS U+860A 蘊 %1B%24%42%69%3E%1B%28%42 +PASS U+860B 蘋 %1B%24%42%69%40%1B%28%42 +PASS U+8613 蘓 %1B%24%42%69%3F%1B%28%42 +PASS U+8616 蘖 %1B%24%42%5D%31%1B%28%42 +PASS U+8617 蘗 %1B%24%42%5D%22%1B%28%42 +PASS U+861A 蘚 %1B%24%42%69%45%1B%28%42 +PASS U+8622 蘢 %1B%24%42%69%44%1B%28%42 +PASS U+862D 蘭 %1B%24%42%4D%76%1B%28%42 +PASS U+862F 蘯 %1B%24%42%62%3C%1B%28%42 +PASS U+8630 蘰 %1B%24%42%69%46%1B%28%42 +PASS U+863F 蘿 %1B%24%42%69%47%1B%28%42 +PASS U+864D 虍 %1B%24%42%69%48%1B%28%42 +PASS U+864E 虎 %1B%24%42%38%57%1B%28%42 +PASS U+8650 虐 %1B%24%42%35%54%1B%28%42 +PASS U+8654 虔 %1B%24%42%69%4A%1B%28%42 +PASS U+8655 處 %1B%24%42%51%5D%1B%28%42 +PASS U+865A 虚 %1B%24%42%35%75%1B%28%42 +PASS U+865C 虜 %1B%24%42%4E%3A%1B%28%42 +PASS U+865E 虞 %1B%24%42%36%73%1B%28%42 +PASS U+865F 號 %1B%24%42%69%4B%1B%28%42 +PASS U+8667 虧 %1B%24%42%69%4C%1B%28%42 +PASS U+866B 虫 %1B%24%42%43%6E%1B%28%42 +PASS U+8671 虱 %1B%24%42%69%4D%1B%28%42 +PASS U+8679 虹 %1B%24%42%46%7A%1B%28%42 +PASS U+867B 虻 %1B%24%42%30%3A%1B%28%42 +PASS U+868A 蚊 %1B%24%42%32%63%1B%28%42 +PASS U+868B 蚋 %1B%24%42%69%52%1B%28%42 +PASS U+868C 蚌 %1B%24%42%69%53%1B%28%42 +PASS U+8693 蚓 %1B%24%42%69%4E%1B%28%42 +PASS U+8695 蚕 %1B%24%42%3B%3D%1B%28%42 +PASS U+86A3 蚣 %1B%24%42%69%4F%1B%28%42 +PASS U+86A4 蚤 %1B%24%42%47%42%1B%28%42 +PASS U+86A9 蚩 %1B%24%42%69%50%1B%28%42 +PASS U+86AA 蚪 %1B%24%42%69%51%1B%28%42 +PASS U+86AB 蚫 %1B%24%42%69%5B%1B%28%42 +PASS U+86AF 蚯 %1B%24%42%69%55%1B%28%42 +PASS U+86B0 蚰 %1B%24%42%69%58%1B%28%42 +PASS U+86B6 蚶 %1B%24%42%69%54%1B%28%42 +PASS U+86C4 蛄 %1B%24%42%69%56%1B%28%42 +PASS U+86C6 蛆 %1B%24%42%69%57%1B%28%42 +PASS U+86C7 蛇 %1B%24%42%3C%58%1B%28%42 +PASS U+86C9 蛉 %1B%24%42%69%59%1B%28%42 +PASS U+86CB 蛋 %1B%24%42%43%41%1B%28%42 +PASS U+86CD 蛍 %1B%24%42%37%56%1B%28%42 +PASS U+86CE 蛎 %1B%24%42%33%42%1B%28%42 +PASS U+86D4 蛔 %1B%24%42%69%5C%1B%28%42 +PASS U+86D9 蛙 %1B%24%42%33%3F%1B%28%42 +PASS U+86DB 蛛 %1B%24%42%69%61%1B%28%42 +PASS U+86DE 蛞 %1B%24%42%69%5D%1B%28%42 +PASS U+86DF 蛟 %1B%24%42%69%60%1B%28%42 +PASS U+86E4 蛤 %1B%24%42%48%3A%1B%28%42 +PASS U+86E9 蛩 %1B%24%42%69%5E%1B%28%42 +PASS U+86EC 蛬 %1B%24%42%69%5F%1B%28%42 +PASS U+86ED 蛭 %1B%24%42%49%48%1B%28%42 +PASS U+86EE 蛮 %1B%24%42%48%5A%1B%28%42 +PASS U+86EF 蛯 %1B%24%42%69%62%1B%28%42 +PASS U+86F8 蛸 %1B%24%42%42%7D%1B%28%42 +PASS U+86F9 蛹 %1B%24%42%69%6C%1B%28%42 +PASS U+86FB 蛻 %1B%24%42%69%68%1B%28%42 +PASS U+86FE 蛾 %1B%24%42%32%6B%1B%28%42 +PASS U+8700 蜀 %1B%24%42%69%66%1B%28%42 +PASS U+8702 蜂 %1B%24%42%4B%2A%1B%28%42 +PASS U+8703 蜃 %1B%24%42%69%67%1B%28%42 +PASS U+8706 蜆 %1B%24%42%69%64%1B%28%42 +PASS U+8708 蜈 %1B%24%42%69%65%1B%28%42 +PASS U+8709 蜉 %1B%24%42%69%6A%1B%28%42 +PASS U+870A 蜊 %1B%24%42%69%6D%1B%28%42 +PASS U+870D 蜍 %1B%24%42%69%6B%1B%28%42 +PASS U+8711 蜑 %1B%24%42%69%69%1B%28%42 +PASS U+8712 蜒 %1B%24%42%69%63%1B%28%42 +PASS U+8718 蜘 %1B%24%42%43%58%1B%28%42 +PASS U+871A 蜚 %1B%24%42%69%74%1B%28%42 +PASS U+871C 蜜 %1B%24%42%4C%2A%1B%28%42 +PASS U+8725 蜥 %1B%24%42%69%72%1B%28%42 +PASS U+8729 蜩 %1B%24%42%69%73%1B%28%42 +PASS U+8734 蜴 %1B%24%42%69%6E%1B%28%42 +PASS U+8737 蜷 %1B%24%42%69%70%1B%28%42 +PASS U+873B 蜻 %1B%24%42%69%71%1B%28%42 +PASS U+873F 蜿 %1B%24%42%69%6F%1B%28%42 +PASS U+8749 蝉 %1B%24%42%40%66%1B%28%42 +PASS U+874B 蝋 %1B%24%42%4F%39%1B%28%42 +PASS U+874C 蝌 %1B%24%42%69%78%1B%28%42 +PASS U+874E 蝎 %1B%24%42%69%79%1B%28%42 +PASS U+8753 蝓 %1B%24%42%6A%21%1B%28%42 +PASS U+8755 蝕 %1B%24%42%3F%2A%1B%28%42 +PASS U+8757 蝗 %1B%24%42%69%7B%1B%28%42 +PASS U+8759 蝙 %1B%24%42%69%7E%1B%28%42 +PASS U+875F 蝟 %1B%24%42%69%76%1B%28%42 +PASS U+8760 蝠 %1B%24%42%69%75%1B%28%42 +PASS U+8763 蝣 %1B%24%42%6A%22%1B%28%42 +PASS U+8766 蝦 %1B%24%42%32%5C%1B%28%42 +PASS U+8768 蝨 %1B%24%42%69%7C%1B%28%42 +PASS U+876A 蝪 %1B%24%42%6A%23%1B%28%42 +PASS U+876E 蝮 %1B%24%42%69%7D%1B%28%42 +PASS U+8774 蝴 %1B%24%42%69%7A%1B%28%42 +PASS U+8776 蝶 %1B%24%42%44%33%1B%28%42 +PASS U+8778 蝸 %1B%24%42%69%77%1B%28%42 +PASS U+877F 蝿 %1B%24%42%47%68%1B%28%42 +PASS U+8782 螂 %1B%24%42%6A%27%1B%28%42 +PASS U+878D 融 %1B%24%42%4D%3B%1B%28%42 +PASS U+879F 螟 %1B%24%42%6A%26%1B%28%42 +PASS U+87A2 螢 %1B%24%42%6A%25%1B%28%42 +PASS U+87AB 螫 %1B%24%42%6A%2E%1B%28%42 +PASS U+87AF 螯 %1B%24%42%6A%28%1B%28%42 +PASS U+87B3 螳 %1B%24%42%6A%30%1B%28%42 +PASS U+87BA 螺 %1B%24%42%4D%66%1B%28%42 +PASS U+87BB 螻 %1B%24%42%6A%33%1B%28%42 +PASS U+87BD 螽 %1B%24%42%6A%2A%1B%28%42 +PASS U+87C0 蟀 %1B%24%42%6A%2B%1B%28%42 +PASS U+87C4 蟄 %1B%24%42%6A%2F%1B%28%42 +PASS U+87C6 蟆 %1B%24%42%6A%32%1B%28%42 +PASS U+87C7 蟇 %1B%24%42%6A%31%1B%28%42 +PASS U+87CB 蟋 %1B%24%42%6A%29%1B%28%42 +PASS U+87D0 蟐 %1B%24%42%6A%2C%1B%28%42 +PASS U+87D2 蟒 %1B%24%42%6A%3D%1B%28%42 +PASS U+87E0 蟠 %1B%24%42%6A%36%1B%28%42 +PASS U+87EF 蟯 %1B%24%42%6A%34%1B%28%42 +PASS U+87F2 蟲 %1B%24%42%6A%35%1B%28%42 +PASS U+87F6 蟶 %1B%24%42%6A%3A%1B%28%42 +PASS U+87F7 蟷 %1B%24%42%6A%3B%1B%28%42 +PASS U+87F9 蟹 %1B%24%42%33%2A%1B%28%42 +PASS U+87FB 蟻 %1B%24%42%35%42%1B%28%42 +PASS U+87FE 蟾 %1B%24%42%6A%39%1B%28%42 +PASS U+8805 蠅 %1B%24%42%6A%24%1B%28%42 +FAIL U+8807 蠇 %1B%24%42%7B%65%1B%28%42 assert_equals: expected "%1B%24%42%7B%65" but got "%26%23%33%34%38%32%33%3B" +PASS U+880D 蠍 %1B%24%42%6A%38%1B%28%42 +PASS U+880E 蠎 %1B%24%42%6A%3C%1B%28%42 +PASS U+880F 蠏 %1B%24%42%6A%37%1B%28%42 +PASS U+8811 蠑 %1B%24%42%6A%3E%1B%28%42 +PASS U+8815 蠕 %1B%24%42%6A%40%1B%28%42 +PASS U+8816 蠖 %1B%24%42%6A%3F%1B%28%42 +PASS U+8821 蠡 %1B%24%42%6A%42%1B%28%42 +PASS U+8822 蠢 %1B%24%42%6A%41%1B%28%42 +PASS U+8823 蠣 %1B%24%42%69%5A%1B%28%42 +PASS U+8827 蠧 %1B%24%42%6A%46%1B%28%42 +PASS U+8831 蠱 %1B%24%42%6A%43%1B%28%42 +PASS U+8836 蠶 %1B%24%42%6A%44%1B%28%42 +PASS U+8839 蠹 %1B%24%42%6A%45%1B%28%42 +PASS U+883B 蠻 %1B%24%42%6A%47%1B%28%42 +PASS U+8840 血 %1B%24%42%37%6C%1B%28%42 +PASS U+8842 衂 %1B%24%42%6A%49%1B%28%42 +PASS U+8844 衄 %1B%24%42%6A%48%1B%28%42 +PASS U+8846 衆 %1B%24%42%3D%30%1B%28%42 +PASS U+884C 行 %1B%24%42%39%54%1B%28%42 +PASS U+884D 衍 %1B%24%42%5E%27%1B%28%42 +PASS U+8852 衒 %1B%24%42%6A%4A%1B%28%42 +PASS U+8853 術 %1B%24%42%3D%51%1B%28%42 +PASS U+8857 街 %1B%24%42%33%39%1B%28%42 +PASS U+8859 衙 %1B%24%42%6A%4B%1B%28%42 +PASS U+885B 衛 %1B%24%42%31%52%1B%28%42 +PASS U+885D 衝 %1B%24%42%3E%57%1B%28%42 +PASS U+885E 衞 %1B%24%42%6A%4C%1B%28%42 +PASS U+8861 衡 %1B%24%42%39%55%1B%28%42 +PASS U+8862 衢 %1B%24%42%6A%4D%1B%28%42 +PASS U+8863 衣 %1B%24%42%30%61%1B%28%42 +PASS U+8868 表 %1B%24%42%49%3D%1B%28%42 +PASS U+886B 衫 %1B%24%42%6A%4E%1B%28%42 +PASS U+8870 衰 %1B%24%42%3F%6A%1B%28%42 +PASS U+8872 衲 %1B%24%42%6A%55%1B%28%42 +PASS U+8875 衵 %1B%24%42%6A%52%1B%28%42 +PASS U+8877 衷 %1B%24%42%43%6F%1B%28%42 +PASS U+887D 衽 %1B%24%42%6A%53%1B%28%42 +PASS U+887E 衾 %1B%24%42%6A%50%1B%28%42 +PASS U+887F 衿 %1B%24%42%36%5E%1B%28%42 +PASS U+8881 袁 %1B%24%42%6A%4F%1B%28%42 +PASS U+8882 袂 %1B%24%42%6A%56%1B%28%42 +PASS U+8888 袈 %1B%24%42%37%36%1B%28%42 +PASS U+888B 袋 %1B%24%42%42%5E%1B%28%42 +PASS U+888D 袍 %1B%24%42%6A%5C%1B%28%42 +PASS U+8892 袒 %1B%24%42%6A%58%1B%28%42 +PASS U+8896 袖 %1B%24%42%42%35%1B%28%42 +PASS U+8897 袗 %1B%24%42%6A%57%1B%28%42 +PASS U+8899 袙 %1B%24%42%6A%5A%1B%28%42 +PASS U+889E 袞 %1B%24%42%6A%51%1B%28%42 +PASS U+88A2 袢 %1B%24%42%6A%5B%1B%28%42 +PASS U+88A4 袤 %1B%24%42%6A%5D%1B%28%42 +PASS U+88AB 被 %1B%24%42%48%6F%1B%28%42 +PASS U+88AE 袮 %1B%24%42%6A%59%1B%28%42 +PASS U+88B0 袰 %1B%24%42%6A%5E%1B%28%42 +PASS U+88B1 袱 %1B%24%42%6A%60%1B%28%42 +PASS U+88B4 袴 %1B%24%42%38%53%1B%28%42 +PASS U+88B5 袵 %1B%24%42%6A%54%1B%28%42 +PASS U+88B7 袷 %1B%24%42%30%41%1B%28%42 +PASS U+88BF 袿 %1B%24%42%6A%5F%1B%28%42 +PASS U+88C1 裁 %1B%24%42%3A%5B%1B%28%42 +PASS U+88C2 裂 %1B%24%42%4E%76%1B%28%42 +PASS U+88C3 裃 %1B%24%42%6A%61%1B%28%42 +PASS U+88C4 裄 %1B%24%42%6A%62%1B%28%42 +PASS U+88C5 装 %1B%24%42%41%75%1B%28%42 +PASS U+88CF 裏 %1B%24%42%4E%22%1B%28%42 +PASS U+88D4 裔 %1B%24%42%6A%63%1B%28%42 +PASS U+88D5 裕 %1B%24%42%4D%35%1B%28%42 +PASS U+88D8 裘 %1B%24%42%6A%64%1B%28%42 +PASS U+88D9 裙 %1B%24%42%6A%65%1B%28%42 +PASS U+88DC 補 %1B%24%42%4A%64%1B%28%42 +PASS U+88DD 裝 %1B%24%42%6A%66%1B%28%42 +PASS U+88DF 裟 %1B%24%42%3A%40%1B%28%42 +PASS U+88E1 裡 %1B%24%42%4E%23%1B%28%42 +PASS U+88E8 裨 %1B%24%42%6A%6B%1B%28%42 +PASS U+88F2 裲 %1B%24%42%6A%6C%1B%28%42 +PASS U+88F3 裳 %1B%24%42%3E%58%1B%28%42 +PASS U+88F4 裴 %1B%24%42%6A%6A%1B%28%42 +FAIL U+88F5 裵 %1B%24%42%7B%66%1B%28%42 assert_equals: expected "%1B%24%42%7B%66" but got "%26%23%33%35%30%36%31%3B" +PASS U+88F8 裸 %1B%24%42%4D%67%1B%28%42 +PASS U+88F9 裹 %1B%24%42%6A%67%1B%28%42 +PASS U+88FC 裼 %1B%24%42%6A%69%1B%28%42 +PASS U+88FD 製 %1B%24%42%40%3D%1B%28%42 +PASS U+88FE 裾 %1B%24%42%3F%7E%1B%28%42 +PASS U+8902 褂 %1B%24%42%6A%68%1B%28%42 +PASS U+8904 褄 %1B%24%42%6A%6D%1B%28%42 +PASS U+8907 複 %1B%24%42%4A%23%1B%28%42 +PASS U+890A 褊 %1B%24%42%6A%6F%1B%28%42 +PASS U+890C 褌 %1B%24%42%6A%6E%1B%28%42 +PASS U+8910 褐 %1B%24%42%33%6C%1B%28%42 +PASS U+8912 褒 %1B%24%42%4B%2B%1B%28%42 +PASS U+8913 褓 %1B%24%42%6A%70%1B%28%42 +FAIL U+891C 褜 %1B%24%42%79%22%1B%28%42 assert_equals: expected "%1B%24%42%79%22" but got "%26%23%33%35%31%30%30%3B" +PASS U+891D 褝 %1B%24%42%6A%7C%1B%28%42 +PASS U+891E 褞 %1B%24%42%6A%72%1B%28%42 +PASS U+8925 褥 %1B%24%42%6A%73%1B%28%42 +PASS U+892A 褪 %1B%24%42%6A%74%1B%28%42 +PASS U+892B 褫 %1B%24%42%6A%75%1B%28%42 +PASS U+8936 褶 %1B%24%42%6A%79%1B%28%42 +PASS U+8938 褸 %1B%24%42%6A%7A%1B%28%42 +PASS U+893B 褻 %1B%24%42%6A%78%1B%28%42 +PASS U+8941 襁 %1B%24%42%6A%76%1B%28%42 +PASS U+8943 襃 %1B%24%42%6A%71%1B%28%42 +PASS U+8944 襄 %1B%24%42%6A%77%1B%28%42 +PASS U+894C 襌 %1B%24%42%6A%7B%1B%28%42 +PASS U+894D 襍 %1B%24%42%70%37%1B%28%42 +PASS U+8956 襖 %1B%24%42%32%28%1B%28%42 +PASS U+895E 襞 %1B%24%42%6A%7E%1B%28%42 +PASS U+895F 襟 %1B%24%42%36%5F%1B%28%42 +PASS U+8960 襠 %1B%24%42%6A%7D%1B%28%42 +PASS U+8964 襤 %1B%24%42%6B%22%1B%28%42 +PASS U+8966 襦 %1B%24%42%6B%21%1B%28%42 +PASS U+896A 襪 %1B%24%42%6B%24%1B%28%42 +PASS U+896D 襭 %1B%24%42%6B%23%1B%28%42 +PASS U+896F 襯 %1B%24%42%6B%25%1B%28%42 +PASS U+8972 襲 %1B%24%42%3D%31%1B%28%42 +PASS U+8974 襴 %1B%24%42%6B%26%1B%28%42 +PASS U+8977 襷 %1B%24%42%6B%27%1B%28%42 +PASS U+897E 襾 %1B%24%42%6B%28%1B%28%42 +PASS U+897F 西 %1B%24%42%40%3E%1B%28%42 +PASS U+8981 要 %1B%24%42%4D%57%1B%28%42 +PASS U+8983 覃 %1B%24%42%6B%29%1B%28%42 +PASS U+8986 覆 %1B%24%42%4A%24%1B%28%42 +PASS U+8987 覇 %1B%24%42%47%46%1B%28%42 +PASS U+8988 覈 %1B%24%42%6B%2A%1B%28%42 +PASS U+898A 覊 %1B%24%42%6B%2B%1B%28%42 +PASS U+898B 見 %1B%24%42%38%2B%1B%28%42 +PASS U+898F 規 %1B%24%42%35%2C%1B%28%42 +PASS U+8993 覓 %1B%24%42%6B%2C%1B%28%42 +PASS U+8996 視 %1B%24%42%3B%6B%1B%28%42 +PASS U+8997 覗 %1B%24%42%47%41%1B%28%42 +PASS U+8998 覘 %1B%24%42%6B%2D%1B%28%42 +PASS U+899A 覚 %1B%24%42%33%50%1B%28%42 +PASS U+89A1 覡 %1B%24%42%6B%2E%1B%28%42 +PASS U+89A6 覦 %1B%24%42%6B%30%1B%28%42 +PASS U+89A7 覧 %1B%24%42%4D%77%1B%28%42 +PASS U+89A9 覩 %1B%24%42%6B%2F%1B%28%42 +PASS U+89AA 親 %1B%24%42%3F%46%1B%28%42 +PASS U+89AC 覬 %1B%24%42%6B%31%1B%28%42 +PASS U+89AF 覯 %1B%24%42%6B%32%1B%28%42 +PASS U+89B2 覲 %1B%24%42%6B%33%1B%28%42 +PASS U+89B3 観 %1B%24%42%34%51%1B%28%42 +PASS U+89BA 覺 %1B%24%42%6B%34%1B%28%42 +PASS U+89BD 覽 %1B%24%42%6B%35%1B%28%42 +PASS U+89BF 覿 %1B%24%42%6B%36%1B%28%42 +PASS U+89C0 觀 %1B%24%42%6B%37%1B%28%42 +PASS U+89D2 角 %1B%24%42%33%51%1B%28%42 +PASS U+89DA 觚 %1B%24%42%6B%38%1B%28%42 +PASS U+89DC 觜 %1B%24%42%6B%39%1B%28%42 +PASS U+89DD 觝 %1B%24%42%6B%3A%1B%28%42 +PASS U+89E3 解 %1B%24%42%32%72%1B%28%42 +PASS U+89E6 触 %1B%24%42%3F%28%1B%28%42 +PASS U+89E7 觧 %1B%24%42%6B%3B%1B%28%42 +PASS U+89F4 觴 %1B%24%42%6B%3C%1B%28%42 +PASS U+89F8 觸 %1B%24%42%6B%3D%1B%28%42 +PASS U+8A00 言 %1B%24%42%38%40%1B%28%42 +PASS U+8A02 訂 %1B%24%42%44%7B%1B%28%42 +PASS U+8A03 訃 %1B%24%42%6B%3E%1B%28%42 +PASS U+8A08 計 %1B%24%42%37%57%1B%28%42 +PASS U+8A0A 訊 %1B%24%42%3F%56%1B%28%42 +PASS U+8A0C 訌 %1B%24%42%6B%41%1B%28%42 +PASS U+8A0E 討 %1B%24%42%46%24%1B%28%42 +PASS U+8A10 訐 %1B%24%42%6B%40%1B%28%42 +FAIL U+8A12 訒 %1B%24%42%7B%67%1B%28%42 assert_equals: expected "%1B%24%42%7B%67" but got "%26%23%33%35%33%34%36%3B" +PASS U+8A13 訓 %1B%24%42%37%31%1B%28%42 +PASS U+8A16 訖 %1B%24%42%6B%3F%1B%28%42 +PASS U+8A17 託 %1B%24%42%42%77%1B%28%42 +PASS U+8A18 記 %1B%24%42%35%2D%1B%28%42 +PASS U+8A1B 訛 %1B%24%42%6B%42%1B%28%42 +PASS U+8A1D 訝 %1B%24%42%6B%43%1B%28%42 +PASS U+8A1F 訟 %1B%24%42%3E%59%1B%28%42 +PASS U+8A23 訣 %1B%24%42%37%6D%1B%28%42 +PASS U+8A25 訥 %1B%24%42%6B%44%1B%28%42 +PASS U+8A2A 訪 %1B%24%42%4B%2C%1B%28%42 +PASS U+8A2D 設 %1B%24%42%40%5F%1B%28%42 +PASS U+8A31 許 %1B%24%42%35%76%1B%28%42 +PASS U+8A33 訳 %1B%24%42%4C%75%1B%28%42 +PASS U+8A34 訴 %1B%24%42%41%4A%1B%28%42 +PASS U+8A36 訶 %1B%24%42%6B%45%1B%28%42 +FAIL U+8A37 訷 %1B%24%42%7B%68%1B%28%42 assert_equals: expected "%1B%24%42%7B%68" but got "%26%23%33%35%33%38%33%3B" +PASS U+8A3A 診 %1B%24%42%3F%47%1B%28%42 +PASS U+8A3B 註 %1B%24%42%43%70%1B%28%42 +PASS U+8A3C 証 %1B%24%42%3E%5A%1B%28%42 +PASS U+8A41 詁 %1B%24%42%6B%46%1B%28%42 +PASS U+8A46 詆 %1B%24%42%6B%49%1B%28%42 +PASS U+8A48 詈 %1B%24%42%6B%4A%1B%28%42 +PASS U+8A50 詐 %1B%24%42%3A%3E%1B%28%42 +PASS U+8A51 詑 %1B%24%42%42%42%1B%28%42 +PASS U+8A52 詒 %1B%24%42%6B%48%1B%28%42 +PASS U+8A54 詔 %1B%24%42%3E%5B%1B%28%42 +PASS U+8A55 評 %1B%24%42%49%3E%1B%28%42 +PASS U+8A5B 詛 %1B%24%42%6B%47%1B%28%42 +PASS U+8A5E 詞 %1B%24%42%3B%6C%1B%28%42 +PASS U+8A60 詠 %1B%24%42%31%53%1B%28%42 +PASS U+8A62 詢 %1B%24%42%6B%4E%1B%28%42 +PASS U+8A63 詣 %1B%24%42%37%58%1B%28%42 +PASS U+8A66 試 %1B%24%42%3B%6E%1B%28%42 +PASS U+8A69 詩 %1B%24%42%3B%6D%1B%28%42 +PASS U+8A6B 詫 %1B%24%42%4F%4D%1B%28%42 +PASS U+8A6C 詬 %1B%24%42%6B%4D%1B%28%42 +PASS U+8A6D 詭 %1B%24%42%6B%4C%1B%28%42 +PASS U+8A6E 詮 %1B%24%42%41%27%1B%28%42 +PASS U+8A70 詰 %1B%24%42%35%4D%1B%28%42 +PASS U+8A71 話 %1B%24%42%4F%43%1B%28%42 +PASS U+8A72 該 %1B%24%42%33%3A%1B%28%42 +PASS U+8A73 詳 %1B%24%42%3E%5C%1B%28%42 +FAIL U+8A79 詹 %1B%24%42%7B%69%1B%28%42 assert_equals: expected "%1B%24%42%7B%69" but got "%26%23%33%35%34%34%39%3B" +PASS U+8A7C 詼 %1B%24%42%6B%4B%1B%28%42 +PASS U+8A82 誂 %1B%24%42%6B%50%1B%28%42 +PASS U+8A84 誄 %1B%24%42%6B%51%1B%28%42 +PASS U+8A85 誅 %1B%24%42%6B%4F%1B%28%42 +PASS U+8A87 誇 %1B%24%42%38%58%1B%28%42 +PASS U+8A89 誉 %1B%24%42%4D%40%1B%28%42 +PASS U+8A8C 誌 %1B%24%42%3B%6F%1B%28%42 +PASS U+8A8D 認 %1B%24%42%47%27%1B%28%42 +PASS U+8A91 誑 %1B%24%42%6B%54%1B%28%42 +PASS U+8A93 誓 %1B%24%42%40%40%1B%28%42 +PASS U+8A95 誕 %1B%24%42%43%42%1B%28%42 +PASS U+8A98 誘 %1B%24%42%4D%36%1B%28%42 +PASS U+8A9A 誚 %1B%24%42%6B%57%1B%28%42 +PASS U+8A9E 語 %1B%24%42%38%6C%1B%28%42 +PASS U+8AA0 誠 %1B%24%42%40%3F%1B%28%42 +PASS U+8AA1 誡 %1B%24%42%6B%53%1B%28%42 +PASS U+8AA3 誣 %1B%24%42%6B%58%1B%28%42 +PASS U+8AA4 誤 %1B%24%42%38%6D%1B%28%42 +PASS U+8AA5 誥 %1B%24%42%6B%55%1B%28%42 +PASS U+8AA6 誦 %1B%24%42%6B%56%1B%28%42 +FAIL U+8AA7 誧 %1B%24%42%7B%6A%1B%28%42 assert_equals: expected "%1B%24%42%7B%6A" but got "%26%23%33%35%34%39%35%3B" +PASS U+8AA8 誨 %1B%24%42%6B%52%1B%28%42 +PASS U+8AAC 説 %1B%24%42%40%62%1B%28%42 +PASS U+8AAD 読 %1B%24%42%46%49%1B%28%42 +PASS U+8AB0 誰 %1B%24%42%43%2F%1B%28%42 +PASS U+8AB2 課 %1B%24%42%32%5D%1B%28%42 +PASS U+8AB9 誹 %1B%24%42%48%70%1B%28%42 +PASS U+8ABC 誼 %1B%24%42%35%43%1B%28%42 +FAIL U+8ABE 誾 %1B%24%42%7B%6B%1B%28%42 assert_equals: expected "%1B%24%42%7B%6B" but got "%26%23%33%35%35%31%38%3B" +PASS U+8ABF 調 %1B%24%42%44%34%1B%28%42 +PASS U+8AC2 諂 %1B%24%42%6B%5B%1B%28%42 +PASS U+8AC4 諄 %1B%24%42%6B%59%1B%28%42 +PASS U+8AC7 談 %1B%24%42%43%4C%1B%28%42 +PASS U+8ACB 請 %1B%24%42%40%41%1B%28%42 +PASS U+8ACC 諌 %1B%24%42%34%52%1B%28%42 +PASS U+8ACD 諍 %1B%24%42%6B%5A%1B%28%42 +PASS U+8ACF 諏 %1B%24%42%3F%5B%1B%28%42 +PASS U+8AD2 諒 %1B%24%42%4E%4A%1B%28%42 +PASS U+8AD6 論 %1B%24%42%4F%40%1B%28%42 +PASS U+8ADA 諚 %1B%24%42%6B%5C%1B%28%42 +PASS U+8ADB 諛 %1B%24%42%6B%67%1B%28%42 +PASS U+8ADC 諜 %1B%24%42%44%35%1B%28%42 +PASS U+8ADE 諞 %1B%24%42%6B%66%1B%28%42 +FAIL U+8ADF 諟 %1B%24%42%7B%6C%1B%28%42 assert_equals: expected "%1B%24%42%7B%6C" but got "%26%23%33%35%35%35%31%3B" +PASS U+8AE0 諠 %1B%24%42%6B%63%1B%28%42 +PASS U+8AE1 諡 %1B%24%42%6B%6B%1B%28%42 +PASS U+8AE2 諢 %1B%24%42%6B%64%1B%28%42 +PASS U+8AE4 諤 %1B%24%42%6B%60%1B%28%42 +PASS U+8AE6 諦 %1B%24%42%44%7C%1B%28%42 +PASS U+8AE7 諧 %1B%24%42%6B%5F%1B%28%42 +PASS U+8AEB 諫 %1B%24%42%6B%5D%1B%28%42 +PASS U+8AED 諭 %1B%24%42%4D%21%1B%28%42 +PASS U+8AEE 諮 %1B%24%42%3B%70%1B%28%42 +PASS U+8AF1 諱 %1B%24%42%6B%61%1B%28%42 +PASS U+8AF3 諳 %1B%24%42%6B%5E%1B%28%42 +FAIL U+8AF6 諶 %1B%24%42%7B%6E%1B%28%42 assert_equals: expected "%1B%24%42%7B%6E" but got "%26%23%33%35%35%37%34%3B" +PASS U+8AF7 諷 %1B%24%42%6B%65%1B%28%42 +PASS U+8AF8 諸 %1B%24%42%3D%74%1B%28%42 +PASS U+8AFA 諺 %1B%24%42%38%41%1B%28%42 +PASS U+8AFE 諾 %1B%24%42%42%7A%1B%28%42 +PASS U+8B00 謀 %1B%24%42%4B%45%1B%28%42 +PASS U+8B01 謁 %1B%24%42%31%5A%1B%28%42 +PASS U+8B02 謂 %1B%24%42%30%62%1B%28%42 +PASS U+8B04 謄 %1B%24%42%46%25%1B%28%42 +PASS U+8B07 謇 %1B%24%42%6B%69%1B%28%42 +PASS U+8B0C 謌 %1B%24%42%6B%68%1B%28%42 +PASS U+8B0E 謎 %1B%24%42%46%66%1B%28%42 +PASS U+8B10 謐 %1B%24%42%6B%6D%1B%28%42 +PASS U+8B14 謔 %1B%24%42%6B%62%1B%28%42 +PASS U+8B16 謖 %1B%24%42%6B%6C%1B%28%42 +PASS U+8B17 謗 %1B%24%42%6B%6E%1B%28%42 +PASS U+8B19 謙 %1B%24%42%38%2C%1B%28%42 +PASS U+8B1A 謚 %1B%24%42%6B%6A%1B%28%42 +PASS U+8B1B 講 %1B%24%42%39%56%1B%28%42 +PASS U+8B1D 謝 %1B%24%42%3C%55%1B%28%42 +PASS U+8B20 謠 %1B%24%42%6B%6F%1B%28%42 +PASS U+8B21 謡 %1B%24%42%4D%58%1B%28%42 +PASS U+8B26 謦 %1B%24%42%6B%72%1B%28%42 +PASS U+8B28 謨 %1B%24%42%6B%75%1B%28%42 +PASS U+8B2B 謫 %1B%24%42%6B%73%1B%28%42 +PASS U+8B2C 謬 %1B%24%42%49%35%1B%28%42 +PASS U+8B33 謳 %1B%24%42%6B%70%1B%28%42 +PASS U+8B39 謹 %1B%24%42%36%60%1B%28%42 +PASS U+8B3E 謾 %1B%24%42%6B%74%1B%28%42 +PASS U+8B41 譁 %1B%24%42%6B%76%1B%28%42 +PASS U+8B49 證 %1B%24%42%6B%7A%1B%28%42 +PASS U+8B4C 譌 %1B%24%42%6B%77%1B%28%42 +PASS U+8B4E 譎 %1B%24%42%6B%79%1B%28%42 +PASS U+8B4F 譏 %1B%24%42%6B%78%1B%28%42 +FAIL U+8B53 譓 %1B%24%42%7B%6F%1B%28%42 assert_equals: expected "%1B%24%42%7B%6F" but got "%26%23%33%35%36%36%37%3B" +PASS U+8B56 譖 %1B%24%42%6B%7B%1B%28%42 +PASS U+8B58 識 %1B%24%42%3C%31%1B%28%42 +PASS U+8B5A 譚 %1B%24%42%6B%7D%1B%28%42 +PASS U+8B5B 譛 %1B%24%42%6B%7C%1B%28%42 +PASS U+8B5C 譜 %1B%24%42%49%68%1B%28%42 +PASS U+8B5F 譟 %1B%24%42%6C%21%1B%28%42 +PASS U+8B66 警 %1B%24%42%37%59%1B%28%42 +PASS U+8B6B 譫 %1B%24%42%6B%7E%1B%28%42 +PASS U+8B6C 譬 %1B%24%42%6C%22%1B%28%42 +PASS U+8B6F 譯 %1B%24%42%6C%23%1B%28%42 +PASS U+8B70 議 %1B%24%42%35%44%1B%28%42 +PASS U+8B71 譱 %1B%24%42%66%41%1B%28%42 +PASS U+8B72 譲 %1B%24%42%3E%79%1B%28%42 +PASS U+8B74 譴 %1B%24%42%6C%24%1B%28%42 +PASS U+8B77 護 %1B%24%42%38%6E%1B%28%42 +PASS U+8B7D 譽 %1B%24%42%6C%25%1B%28%42 +FAIL U+8B7F 譿 %1B%24%42%7B%70%1B%28%42 assert_equals: expected "%1B%24%42%7B%70" but got "%26%23%33%35%37%31%31%3B" +PASS U+8B80 讀 %1B%24%42%6C%26%1B%28%42 +PASS U+8B83 讃 %1B%24%42%3B%3E%1B%28%42 +PASS U+8B8A 變 %1B%24%42%5A%4E%1B%28%42 +PASS U+8B8C 讌 %1B%24%42%6C%27%1B%28%42 +PASS U+8B8E 讎 %1B%24%42%6C%28%1B%28%42 +PASS U+8B90 讐 %1B%24%42%3D%32%1B%28%42 +PASS U+8B92 讒 %1B%24%42%6C%29%1B%28%42 +PASS U+8B93 讓 %1B%24%42%6C%2A%1B%28%42 +PASS U+8B96 讖 %1B%24%42%6C%2B%1B%28%42 +PASS U+8B99 讙 %1B%24%42%6C%2C%1B%28%42 +PASS U+8B9A 讚 %1B%24%42%6C%2D%1B%28%42 +PASS U+8C37 谷 %1B%24%42%43%2B%1B%28%42 +PASS U+8C3A 谺 %1B%24%42%6C%2E%1B%28%42 +PASS U+8C3F 谿 %1B%24%42%6C%30%1B%28%42 +PASS U+8C41 豁 %1B%24%42%6C%2F%1B%28%42 +PASS U+8C46 豆 %1B%24%42%46%26%1B%28%42 +PASS U+8C48 豈 %1B%24%42%6C%31%1B%28%42 +PASS U+8C4A 豊 %1B%24%42%4B%2D%1B%28%42 +PASS U+8C4C 豌 %1B%24%42%6C%32%1B%28%42 +PASS U+8C4E 豎 %1B%24%42%6C%33%1B%28%42 +PASS U+8C50 豐 %1B%24%42%6C%34%1B%28%42 +PASS U+8C55 豕 %1B%24%42%6C%35%1B%28%42 +PASS U+8C5A 豚 %1B%24%42%46%5A%1B%28%42 +PASS U+8C61 象 %1B%24%42%3E%5D%1B%28%42 +PASS U+8C62 豢 %1B%24%42%6C%36%1B%28%42 +PASS U+8C6A 豪 %1B%24%42%39%6B%1B%28%42 +PASS U+8C6B 豫 %1B%24%42%50%2E%1B%28%42 +PASS U+8C6C 豬 %1B%24%42%6C%37%1B%28%42 +PASS U+8C78 豸 %1B%24%42%6C%38%1B%28%42 +PASS U+8C79 豹 %1B%24%42%49%3F%1B%28%42 +PASS U+8C7A 豺 %1B%24%42%6C%39%1B%28%42 +PASS U+8C7C 豼 %1B%24%42%6C%41%1B%28%42 +PASS U+8C82 貂 %1B%24%42%6C%3A%1B%28%42 +PASS U+8C85 貅 %1B%24%42%6C%3C%1B%28%42 +PASS U+8C89 貉 %1B%24%42%6C%3B%1B%28%42 +PASS U+8C8A 貊 %1B%24%42%6C%3D%1B%28%42 +PASS U+8C8C 貌 %1B%24%42%4B%46%1B%28%42 +PASS U+8C8D 貍 %1B%24%42%6C%3E%1B%28%42 +PASS U+8C8E 貎 %1B%24%42%6C%3F%1B%28%42 +PASS U+8C94 貔 %1B%24%42%6C%40%1B%28%42 +PASS U+8C98 貘 %1B%24%42%6C%42%1B%28%42 +PASS U+8C9D 貝 %1B%24%42%33%2D%1B%28%42 +PASS U+8C9E 貞 %1B%24%42%44%67%1B%28%42 +PASS U+8CA0 負 %1B%24%42%49%69%1B%28%42 +PASS U+8CA1 財 %1B%24%42%3A%62%1B%28%42 +PASS U+8CA2 貢 %1B%24%42%39%57%1B%28%42 +PASS U+8CA7 貧 %1B%24%42%49%4F%1B%28%42 +PASS U+8CA8 貨 %1B%24%42%32%5F%1B%28%42 +PASS U+8CA9 販 %1B%24%42%48%4E%1B%28%42 +PASS U+8CAA 貪 %1B%24%42%6C%45%1B%28%42 +PASS U+8CAB 貫 %1B%24%42%34%53%1B%28%42 +PASS U+8CAC 責 %1B%24%42%40%55%1B%28%42 +PASS U+8CAD 貭 %1B%24%42%6C%44%1B%28%42 +PASS U+8CAE 貮 %1B%24%42%6C%49%1B%28%42 +PASS U+8CAF 貯 %1B%24%42%43%79%1B%28%42 +PASS U+8CB0 貰 %1B%24%42%4C%63%1B%28%42 +PASS U+8CB2 貲 %1B%24%42%6C%47%1B%28%42 +PASS U+8CB3 貳 %1B%24%42%6C%48%1B%28%42 +PASS U+8CB4 貴 %1B%24%42%35%2E%1B%28%42 +PASS U+8CB6 貶 %1B%24%42%6C%4A%1B%28%42 +PASS U+8CB7 買 %1B%24%42%47%63%1B%28%42 +PASS U+8CB8 貸 %1B%24%42%42%5F%1B%28%42 +PASS U+8CBB 費 %1B%24%42%48%71%1B%28%42 +PASS U+8CBC 貼 %1B%24%42%45%3D%1B%28%42 +PASS U+8CBD 貽 %1B%24%42%6C%46%1B%28%42 +PASS U+8CBF 貿 %1B%24%42%4B%47%1B%28%42 +PASS U+8CC0 賀 %1B%24%42%32%6C%1B%28%42 +PASS U+8CC1 賁 %1B%24%42%6C%4C%1B%28%42 +PASS U+8CC2 賂 %1B%24%42%4F%28%1B%28%42 +PASS U+8CC3 賃 %1B%24%42%44%42%1B%28%42 +PASS U+8CC4 賄 %1B%24%42%4F%45%1B%28%42 +PASS U+8CC7 資 %1B%24%42%3B%71%1B%28%42 +PASS U+8CC8 賈 %1B%24%42%6C%4B%1B%28%42 +PASS U+8CCA 賊 %1B%24%42%42%31%1B%28%42 +PASS U+8CCD 賍 %1B%24%42%6C%5C%1B%28%42 +PASS U+8CCE 賎 %1B%24%42%41%28%1B%28%42 +PASS U+8CD1 賑 %1B%24%42%46%78%1B%28%42 +PASS U+8CD3 賓 %1B%24%42%49%50%1B%28%42 +PASS U+8CDA 賚 %1B%24%42%6C%4F%1B%28%42 +PASS U+8CDB 賛 %1B%24%42%3B%3F%1B%28%42 +PASS U+8CDC 賜 %1B%24%42%3B%72%1B%28%42 +PASS U+8CDE 賞 %1B%24%42%3E%5E%1B%28%42 +PASS U+8CE0 賠 %1B%24%42%47%65%1B%28%42 +PASS U+8CE2 賢 %1B%24%42%38%2D%1B%28%42 +PASS U+8CE3 賣 %1B%24%42%6C%4E%1B%28%42 +PASS U+8CE4 賤 %1B%24%42%6C%4D%1B%28%42 +PASS U+8CE6 賦 %1B%24%42%49%6A%1B%28%42 +PASS U+8CEA 質 %1B%24%42%3C%41%1B%28%42 +PASS U+8CED 賭 %1B%24%42%45%52%1B%28%42 +FAIL U+8CF0 賰 %1B%24%42%7B%71%1B%28%42 assert_equals: expected "%1B%24%42%7B%71" but got "%26%23%33%36%30%38%30%3B" +FAIL U+8CF4 賴 %1B%24%42%7B%72%1B%28%42 assert_equals: expected "%1B%24%42%7B%72" but got "%26%23%33%36%30%38%34%3B" +PASS U+8CFA 賺 %1B%24%42%6C%51%1B%28%42 +PASS U+8CFB 賻 %1B%24%42%6C%52%1B%28%42 +PASS U+8CFC 購 %1B%24%42%39%58%1B%28%42 +PASS U+8CFD 賽 %1B%24%42%6C%50%1B%28%42 +PASS U+8D04 贄 %1B%24%42%6C%53%1B%28%42 +PASS U+8D05 贅 %1B%24%42%6C%54%1B%28%42 +PASS U+8D07 贇 %1B%24%42%6C%56%1B%28%42 +PASS U+8D08 贈 %1B%24%42%42%23%1B%28%42 +PASS U+8D0A 贊 %1B%24%42%6C%55%1B%28%42 +PASS U+8D0B 贋 %1B%24%42%34%66%1B%28%42 +PASS U+8D0D 贍 %1B%24%42%6C%58%1B%28%42 +PASS U+8D0F 贏 %1B%24%42%6C%57%1B%28%42 +PASS U+8D10 贐 %1B%24%42%6C%59%1B%28%42 +FAIL U+8D12 贒 %1B%24%42%7B%73%1B%28%42 assert_equals: expected "%1B%24%42%7B%73" but got "%26%23%33%36%31%31%34%3B" +PASS U+8D13 贓 %1B%24%42%6C%5B%1B%28%42 +PASS U+8D14 贔 %1B%24%42%6C%5D%1B%28%42 +PASS U+8D16 贖 %1B%24%42%6C%5E%1B%28%42 +PASS U+8D64 赤 %1B%24%42%40%56%1B%28%42 +PASS U+8D66 赦 %1B%24%42%3C%4F%1B%28%42 +PASS U+8D67 赧 %1B%24%42%6C%5F%1B%28%42 +PASS U+8D6B 赫 %1B%24%42%33%52%1B%28%42 +PASS U+8D6D 赭 %1B%24%42%6C%60%1B%28%42 +PASS U+8D70 走 %1B%24%42%41%76%1B%28%42 +PASS U+8D71 赱 %1B%24%42%6C%61%1B%28%42 +PASS U+8D73 赳 %1B%24%42%6C%62%1B%28%42 +PASS U+8D74 赴 %1B%24%42%49%6B%1B%28%42 +FAIL U+8D76 赶 %1B%24%42%7B%74%1B%28%42 assert_equals: expected "%1B%24%42%7B%74" but got "%26%23%33%36%32%31%34%3B" +PASS U+8D77 起 %1B%24%42%35%2F%1B%28%42 +PASS U+8D81 趁 %1B%24%42%6C%63%1B%28%42 +PASS U+8D85 超 %1B%24%42%44%36%1B%28%42 +PASS U+8D8A 越 %1B%24%42%31%5B%1B%28%42 +PASS U+8D99 趙 %1B%24%42%6C%64%1B%28%42 +PASS U+8DA3 趣 %1B%24%42%3C%71%1B%28%42 +PASS U+8DA8 趨 %1B%24%42%3F%76%1B%28%42 +PASS U+8DB3 足 %1B%24%42%42%2D%1B%28%42 +PASS U+8DBA 趺 %1B%24%42%6C%67%1B%28%42 +PASS U+8DBE 趾 %1B%24%42%6C%66%1B%28%42 +PASS U+8DC2 跂 %1B%24%42%6C%65%1B%28%42 +PASS U+8DCB 跋 %1B%24%42%6C%6D%1B%28%42 +PASS U+8DCC 跌 %1B%24%42%6C%6B%1B%28%42 +PASS U+8DCF 跏 %1B%24%42%6C%68%1B%28%42 +PASS U+8DD6 跖 %1B%24%42%6C%6A%1B%28%42 +PASS U+8DDA 跚 %1B%24%42%6C%69%1B%28%42 +PASS U+8DDB 跛 %1B%24%42%6C%6C%1B%28%42 +PASS U+8DDD 距 %1B%24%42%35%77%1B%28%42 +PASS U+8DDF 跟 %1B%24%42%6C%70%1B%28%42 +PASS U+8DE1 跡 %1B%24%42%40%57%1B%28%42 +PASS U+8DE3 跣 %1B%24%42%6C%71%1B%28%42 +PASS U+8DE8 跨 %1B%24%42%38%59%1B%28%42 +PASS U+8DEA 跪 %1B%24%42%6C%6E%1B%28%42 +PASS U+8DEB 跫 %1B%24%42%6C%6F%1B%28%42 +PASS U+8DEF 路 %1B%24%42%4F%29%1B%28%42 +PASS U+8DF3 跳 %1B%24%42%44%37%1B%28%42 +PASS U+8DF5 践 %1B%24%42%41%29%1B%28%42 +PASS U+8DFC 跼 %1B%24%42%6C%72%1B%28%42 +PASS U+8DFF 跿 %1B%24%42%6C%75%1B%28%42 +PASS U+8E08 踈 %1B%24%42%6C%73%1B%28%42 +PASS U+8E09 踉 %1B%24%42%6C%74%1B%28%42 +PASS U+8E0A 踊 %1B%24%42%4D%59%1B%28%42 +PASS U+8E0F 踏 %1B%24%42%46%27%1B%28%42 +PASS U+8E10 踐 %1B%24%42%6C%78%1B%28%42 +PASS U+8E1D 踝 %1B%24%42%6C%76%1B%28%42 +PASS U+8E1E 踞 %1B%24%42%6C%77%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_6001-7000-expected.txt new file mode 100644 index 0000000..ae45d73e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_6001-7000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 925 PASS, 75 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8E1F 踟 %1B%24%42%6C%79%1B%28%42 +PASS U+8E2A 踪 %1B%24%42%6D%29%1B%28%42 +PASS U+8E30 踰 %1B%24%42%6C%7C%1B%28%42 +PASS U+8E34 踴 %1B%24%42%6C%7D%1B%28%42 +PASS U+8E35 踵 %1B%24%42%6C%7B%1B%28%42 +PASS U+8E42 蹂 %1B%24%42%6C%7A%1B%28%42 +PASS U+8E44 蹄 %1B%24%42%44%7D%1B%28%42 +PASS U+8E47 蹇 %1B%24%42%6D%21%1B%28%42 +PASS U+8E48 蹈 %1B%24%42%6D%25%1B%28%42 +PASS U+8E49 蹉 %1B%24%42%6D%22%1B%28%42 +PASS U+8E4A 蹊 %1B%24%42%6C%7E%1B%28%42 +PASS U+8E4C 蹌 %1B%24%42%6D%23%1B%28%42 +PASS U+8E50 蹐 %1B%24%42%6D%24%1B%28%42 +PASS U+8E55 蹕 %1B%24%42%6D%2B%1B%28%42 +PASS U+8E59 蹙 %1B%24%42%6D%26%1B%28%42 +PASS U+8E5F 蹟 %1B%24%42%40%58%1B%28%42 +PASS U+8E60 蹠 %1B%24%42%6D%28%1B%28%42 +PASS U+8E63 蹣 %1B%24%42%6D%2A%1B%28%42 +PASS U+8E64 蹤 %1B%24%42%6D%27%1B%28%42 +PASS U+8E72 蹲 %1B%24%42%6D%2D%1B%28%42 +PASS U+8E74 蹴 %1B%24%42%3D%33%1B%28%42 +PASS U+8E76 蹶 %1B%24%42%6D%2C%1B%28%42 +PASS U+8E7C 蹼 %1B%24%42%6D%2E%1B%28%42 +PASS U+8E81 躁 %1B%24%42%6D%2F%1B%28%42 +PASS U+8E84 躄 %1B%24%42%6D%32%1B%28%42 +PASS U+8E85 躅 %1B%24%42%6D%31%1B%28%42 +PASS U+8E87 躇 %1B%24%42%6D%30%1B%28%42 +PASS U+8E8A 躊 %1B%24%42%6D%34%1B%28%42 +PASS U+8E8B 躋 %1B%24%42%6D%33%1B%28%42 +PASS U+8E8D 躍 %1B%24%42%4C%76%1B%28%42 +PASS U+8E91 躑 %1B%24%42%6D%36%1B%28%42 +PASS U+8E93 躓 %1B%24%42%6D%35%1B%28%42 +PASS U+8E94 躔 %1B%24%42%6D%37%1B%28%42 +PASS U+8E99 躙 %1B%24%42%6D%38%1B%28%42 +PASS U+8EA1 躡 %1B%24%42%6D%3A%1B%28%42 +PASS U+8EAA 躪 %1B%24%42%6D%39%1B%28%42 +PASS U+8EAB 身 %1B%24%42%3F%48%1B%28%42 +PASS U+8EAC 躬 %1B%24%42%6D%3B%1B%28%42 +PASS U+8EAF 躯 %1B%24%42%36%6D%1B%28%42 +PASS U+8EB0 躰 %1B%24%42%6D%3C%1B%28%42 +PASS U+8EB1 躱 %1B%24%42%6D%3E%1B%28%42 +PASS U+8EBE 躾 %1B%24%42%6D%3F%1B%28%42 +PASS U+8EC5 軅 %1B%24%42%6D%40%1B%28%42 +PASS U+8EC6 軆 %1B%24%42%6D%3D%1B%28%42 +PASS U+8EC8 軈 %1B%24%42%6D%41%1B%28%42 +PASS U+8ECA 車 %1B%24%42%3C%56%1B%28%42 +PASS U+8ECB 軋 %1B%24%42%6D%42%1B%28%42 +PASS U+8ECC 軌 %1B%24%42%35%30%1B%28%42 +PASS U+8ECD 軍 %1B%24%42%37%33%1B%28%42 +FAIL U+8ECF 軏 %1B%24%42%7B%76%1B%28%42 assert_equals: expected "%1B%24%42%7B%76" but got "%26%23%33%36%35%35%39%3B" +PASS U+8ED2 軒 %1B%24%42%38%2E%1B%28%42 +PASS U+8EDB 軛 %1B%24%42%6D%43%1B%28%42 +PASS U+8EDF 軟 %1B%24%42%46%70%1B%28%42 +PASS U+8EE2 転 %1B%24%42%45%3E%1B%28%42 +PASS U+8EE3 軣 %1B%24%42%6D%44%1B%28%42 +PASS U+8EEB 軫 %1B%24%42%6D%47%1B%28%42 +PASS U+8EF8 軸 %1B%24%42%3C%34%1B%28%42 +PASS U+8EFB 軻 %1B%24%42%6D%46%1B%28%42 +PASS U+8EFC 軼 %1B%24%42%6D%45%1B%28%42 +PASS U+8EFD 軽 %1B%24%42%37%5A%1B%28%42 +PASS U+8EFE 軾 %1B%24%42%6D%48%1B%28%42 +PASS U+8F03 較 %1B%24%42%33%53%1B%28%42 +PASS U+8F05 輅 %1B%24%42%6D%4A%1B%28%42 +PASS U+8F09 載 %1B%24%42%3A%5C%1B%28%42 +PASS U+8F0A 輊 %1B%24%42%6D%49%1B%28%42 +PASS U+8F0C 輌 %1B%24%42%6D%52%1B%28%42 +PASS U+8F12 輒 %1B%24%42%6D%4C%1B%28%42 +PASS U+8F13 輓 %1B%24%42%6D%4E%1B%28%42 +PASS U+8F14 輔 %1B%24%42%4A%65%1B%28%42 +PASS U+8F15 輕 %1B%24%42%6D%4B%1B%28%42 +PASS U+8F19 輙 %1B%24%42%6D%4D%1B%28%42 +PASS U+8F1B 輛 %1B%24%42%6D%51%1B%28%42 +PASS U+8F1C 輜 %1B%24%42%6D%4F%1B%28%42 +PASS U+8F1D 輝 %1B%24%42%35%31%1B%28%42 +PASS U+8F1F 輟 %1B%24%42%6D%50%1B%28%42 +PASS U+8F26 輦 %1B%24%42%6D%53%1B%28%42 +PASS U+8F29 輩 %1B%24%42%47%5A%1B%28%42 +PASS U+8F2A 輪 %1B%24%42%4E%58%1B%28%42 +PASS U+8F2F 輯 %1B%24%42%3D%34%1B%28%42 +PASS U+8F33 輳 %1B%24%42%6D%54%1B%28%42 +PASS U+8F38 輸 %1B%24%42%4D%22%1B%28%42 +PASS U+8F39 輹 %1B%24%42%6D%56%1B%28%42 +PASS U+8F3B 輻 %1B%24%42%6D%55%1B%28%42 +PASS U+8F3E 輾 %1B%24%42%6D%59%1B%28%42 +PASS U+8F3F 輿 %1B%24%42%4D%41%1B%28%42 +PASS U+8F42 轂 %1B%24%42%6D%58%1B%28%42 +PASS U+8F44 轄 %1B%24%42%33%6D%1B%28%42 +PASS U+8F45 轅 %1B%24%42%6D%57%1B%28%42 +PASS U+8F46 轆 %1B%24%42%6D%5C%1B%28%42 +PASS U+8F49 轉 %1B%24%42%6D%5B%1B%28%42 +PASS U+8F4C 轌 %1B%24%42%6D%5A%1B%28%42 +PASS U+8F4D 轍 %1B%24%42%45%32%1B%28%42 +PASS U+8F4E 轎 %1B%24%42%6D%5D%1B%28%42 +PASS U+8F57 轗 %1B%24%42%6D%5E%1B%28%42 +PASS U+8F5C 轜 %1B%24%42%6D%5F%1B%28%42 +PASS U+8F5F 轟 %1B%24%42%39%6C%1B%28%42 +PASS U+8F61 轡 %1B%24%42%37%25%1B%28%42 +PASS U+8F62 轢 %1B%24%42%6D%60%1B%28%42 +PASS U+8F63 轣 %1B%24%42%6D%61%1B%28%42 +PASS U+8F64 轤 %1B%24%42%6D%62%1B%28%42 +PASS U+8F9B 辛 %1B%24%42%3F%49%1B%28%42 +PASS U+8F9C 辜 %1B%24%42%6D%63%1B%28%42 +PASS U+8F9E 辞 %1B%24%42%3C%2D%1B%28%42 +PASS U+8F9F 辟 %1B%24%42%6D%64%1B%28%42 +PASS U+8FA3 辣 %1B%24%42%6D%65%1B%28%42 +PASS U+8FA7 辧 %1B%24%42%52%21%1B%28%42 +PASS U+8FA8 辨 %1B%24%42%51%7E%1B%28%42 +PASS U+8FAD 辭 %1B%24%42%6D%66%1B%28%42 +PASS U+8FAE 辮 %1B%24%42%65%70%1B%28%42 +PASS U+8FAF 辯 %1B%24%42%6D%67%1B%28%42 +PASS U+8FB0 辰 %1B%24%42%43%24%1B%28%42 +PASS U+8FB1 辱 %1B%24%42%3F%2B%1B%28%42 +PASS U+8FB2 農 %1B%24%42%47%40%1B%28%42 +PASS U+8FB7 辷 %1B%24%42%6D%68%1B%28%42 +PASS U+8FBA 辺 %1B%24%42%4A%55%1B%28%42 +PASS U+8FBB 辻 %1B%24%42%44%54%1B%28%42 +PASS U+8FBC 込 %1B%24%42%39%7E%1B%28%42 +PASS U+8FBF 辿 %1B%24%42%43%29%1B%28%42 +PASS U+8FC2 迂 %1B%24%42%31%2A%1B%28%42 +PASS U+8FC4 迄 %1B%24%42%4B%78%1B%28%42 +PASS U+8FC5 迅 %1B%24%42%3F%57%1B%28%42 +PASS U+8FCE 迎 %1B%24%42%37%5E%1B%28%42 +PASS U+8FD1 近 %1B%24%42%36%61%1B%28%42 +PASS U+8FD4 返 %1B%24%42%4A%56%1B%28%42 +PASS U+8FDA 迚 %1B%24%42%6D%69%1B%28%42 +PASS U+8FE2 迢 %1B%24%42%6D%6B%1B%28%42 +PASS U+8FE5 迥 %1B%24%42%6D%6A%1B%28%42 +PASS U+8FE6 迦 %1B%24%42%32%60%1B%28%42 +PASS U+8FE9 迩 %1B%24%42%46%76%1B%28%42 +PASS U+8FEA 迪 %1B%24%42%6D%6C%1B%28%42 +PASS U+8FEB 迫 %1B%24%42%47%77%1B%28%42 +PASS U+8FED 迭 %1B%24%42%45%33%1B%28%42 +PASS U+8FEF 迯 %1B%24%42%6D%6D%1B%28%42 +PASS U+8FF0 述 %1B%24%42%3D%52%1B%28%42 +PASS U+8FF4 迴 %1B%24%42%6D%6F%1B%28%42 +PASS U+8FF7 迷 %1B%24%42%4C%42%1B%28%42 +PASS U+8FF8 迸 %1B%24%42%6D%7E%1B%28%42 +PASS U+8FF9 迹 %1B%24%42%6D%71%1B%28%42 +PASS U+8FFA 迺 %1B%24%42%6D%72%1B%28%42 +PASS U+8FFD 追 %1B%24%42%44%49%1B%28%42 +PASS U+9000 退 %1B%24%42%42%60%1B%28%42 +PASS U+9001 送 %1B%24%42%41%77%1B%28%42 +PASS U+9003 逃 %1B%24%42%46%28%1B%28%42 +PASS U+9005 逅 %1B%24%42%6D%70%1B%28%42 +PASS U+9006 逆 %1B%24%42%35%55%1B%28%42 +PASS U+900B 逋 %1B%24%42%6D%79%1B%28%42 +PASS U+900D 逍 %1B%24%42%6D%76%1B%28%42 +PASS U+900E 逎 %1B%24%42%6E%25%1B%28%42 +PASS U+900F 透 %1B%24%42%46%29%1B%28%42 +PASS U+9010 逐 %1B%24%42%43%60%1B%28%42 +PASS U+9011 逑 %1B%24%42%6D%73%1B%28%42 +PASS U+9013 逓 %1B%24%42%44%7E%1B%28%42 +PASS U+9014 途 %1B%24%42%45%53%1B%28%42 +PASS U+9015 逕 %1B%24%42%6D%74%1B%28%42 +PASS U+9016 逖 %1B%24%42%6D%78%1B%28%42 +PASS U+9017 逗 %1B%24%42%3F%60%1B%28%42 +PASS U+9019 這 %1B%24%42%47%67%1B%28%42 +PASS U+901A 通 %1B%24%42%44%4C%1B%28%42 +PASS U+901D 逝 %1B%24%42%40%42%1B%28%42 +PASS U+901E 逞 %1B%24%42%6D%77%1B%28%42 +PASS U+901F 速 %1B%24%42%42%2E%1B%28%42 +PASS U+9020 造 %1B%24%42%42%24%1B%28%42 +PASS U+9021 逡 %1B%24%42%6D%75%1B%28%42 +PASS U+9022 逢 %1B%24%42%30%29%1B%28%42 +PASS U+9023 連 %1B%24%42%4F%22%1B%28%42 +PASS U+9027 逧 %1B%24%42%6D%7A%1B%28%42 +PASS U+902E 逮 %1B%24%42%42%61%1B%28%42 +PASS U+9031 週 %1B%24%42%3D%35%1B%28%42 +PASS U+9032 進 %1B%24%42%3F%4A%1B%28%42 +PASS U+9035 逵 %1B%24%42%6D%7C%1B%28%42 +PASS U+9036 逶 %1B%24%42%6D%7B%1B%28%42 +PASS U+9038 逸 %1B%24%42%30%6F%1B%28%42 +PASS U+9039 逹 %1B%24%42%6D%7D%1B%28%42 +PASS U+903C 逼 %1B%24%42%49%2F%1B%28%42 +PASS U+903E 逾 %1B%24%42%6E%27%1B%28%42 +PASS U+9041 遁 %1B%24%42%46%5B%1B%28%42 +PASS U+9042 遂 %1B%24%42%3F%6B%1B%28%42 +PASS U+9045 遅 %1B%24%42%43%59%1B%28%42 +PASS U+9047 遇 %1B%24%42%36%78%1B%28%42 +PASS U+9049 遉 %1B%24%42%6E%26%1B%28%42 +PASS U+904A 遊 %1B%24%42%4D%37%1B%28%42 +PASS U+904B 運 %1B%24%42%31%3F%1B%28%42 +PASS U+904D 遍 %1B%24%42%4A%57%1B%28%42 +PASS U+904E 過 %1B%24%42%32%61%1B%28%42 +PASS U+904F 遏 %1B%24%42%6E%21%1B%28%42 +PASS U+9050 遐 %1B%24%42%6E%22%1B%28%42 +PASS U+9051 遑 %1B%24%42%6E%23%1B%28%42 +PASS U+9052 遒 %1B%24%42%6E%24%1B%28%42 +PASS U+9053 道 %1B%24%42%46%3B%1B%28%42 +PASS U+9054 達 %1B%24%42%43%23%1B%28%42 +PASS U+9055 違 %1B%24%42%30%63%1B%28%42 +PASS U+9056 遖 %1B%24%42%6E%28%1B%28%42 +PASS U+9058 遘 %1B%24%42%6E%29%1B%28%42 +PASS U+9059 遙 %1B%24%42%74%23%1B%28%42 +PASS U+905C 遜 %1B%24%42%42%3D%1B%28%42 +PASS U+905E 遞 %1B%24%42%6E%2A%1B%28%42 +PASS U+9060 遠 %1B%24%42%31%73%1B%28%42 +PASS U+9061 遡 %1B%24%42%41%4C%1B%28%42 +PASS U+9063 遣 %1B%24%42%38%2F%1B%28%42 +PASS U+9065 遥 %1B%24%42%4D%5A%1B%28%42 +FAIL U+9067 遧 %1B%24%42%7B%79%1B%28%42 assert_equals: expected "%1B%24%42%7B%79" but got "%26%23%33%36%39%36%37%3B" +PASS U+9068 遨 %1B%24%42%6E%2B%1B%28%42 +PASS U+9069 適 %1B%24%42%45%2C%1B%28%42 +PASS U+906D 遭 %1B%24%42%41%78%1B%28%42 +PASS U+906E 遮 %1B%24%42%3C%57%1B%28%42 +PASS U+906F 遯 %1B%24%42%6E%2C%1B%28%42 +PASS U+9072 遲 %1B%24%42%6E%2F%1B%28%42 +PASS U+9075 遵 %1B%24%42%3D%65%1B%28%42 +PASS U+9076 遶 %1B%24%42%6E%2D%1B%28%42 +PASS U+9077 遷 %1B%24%42%41%2B%1B%28%42 +PASS U+9078 選 %1B%24%42%41%2A%1B%28%42 +PASS U+907A 遺 %1B%24%42%30%64%1B%28%42 +PASS U+907C 遼 %1B%24%42%4E%4B%1B%28%42 +PASS U+907D 遽 %1B%24%42%6E%31%1B%28%42 +PASS U+907F 避 %1B%24%42%48%72%1B%28%42 +PASS U+9080 邀 %1B%24%42%6E%33%1B%28%42 +PASS U+9081 邁 %1B%24%42%6E%32%1B%28%42 +PASS U+9082 邂 %1B%24%42%6E%30%1B%28%42 +PASS U+9083 邃 %1B%24%42%63%64%1B%28%42 +PASS U+9084 還 %1B%24%42%34%54%1B%28%42 +PASS U+9087 邇 %1B%24%42%6D%6E%1B%28%42 +PASS U+9089 邉 %1B%24%42%6E%35%1B%28%42 +PASS U+908A 邊 %1B%24%42%6E%34%1B%28%42 +PASS U+908F 邏 %1B%24%42%6E%36%1B%28%42 +PASS U+9091 邑 %1B%24%42%4D%38%1B%28%42 +PASS U+90A3 那 %1B%24%42%46%61%1B%28%42 +PASS U+90A6 邦 %1B%24%42%4B%2E%1B%28%42 +PASS U+90A8 邨 %1B%24%42%6E%37%1B%28%42 +PASS U+90AA 邪 %1B%24%42%3C%59%1B%28%42 +PASS U+90AF 邯 %1B%24%42%6E%38%1B%28%42 +PASS U+90B1 邱 %1B%24%42%6E%39%1B%28%42 +PASS U+90B5 邵 %1B%24%42%6E%3A%1B%28%42 +PASS U+90B8 邸 %1B%24%42%45%21%1B%28%42 +PASS U+90C1 郁 %1B%24%42%30%6A%1B%28%42 +PASS U+90CA 郊 %1B%24%42%39%59%1B%28%42 +PASS U+90CE 郎 %1B%24%42%4F%3A%1B%28%42 +PASS U+90DB 郛 %1B%24%42%6E%3E%1B%28%42 +FAIL U+90DE 郞 %1B%24%42%7B%7A%1B%28%42 assert_equals: expected "%1B%24%42%7B%7A" but got "%26%23%33%37%30%38%36%3B" +PASS U+90E1 郡 %1B%24%42%37%34%1B%28%42 +PASS U+90E2 郢 %1B%24%42%6E%3B%1B%28%42 +PASS U+90E4 郤 %1B%24%42%6E%3C%1B%28%42 +PASS U+90E8 部 %1B%24%42%49%74%1B%28%42 +PASS U+90ED 郭 %1B%24%42%33%54%1B%28%42 +PASS U+90F5 郵 %1B%24%42%4D%39%1B%28%42 +PASS U+90F7 郷 %1B%24%42%36%3F%1B%28%42 +PASS U+90FD 都 %1B%24%42%45%54%1B%28%42 +PASS U+9102 鄂 %1B%24%42%6E%3F%1B%28%42 +PASS U+9112 鄒 %1B%24%42%6E%40%1B%28%42 +FAIL U+9115 鄕 %1B%24%42%7B%7C%1B%28%42 assert_equals: expected "%1B%24%42%7B%7C" but got "%26%23%33%37%31%34%31%3B" +PASS U+9119 鄙 %1B%24%42%6E%41%1B%28%42 +FAIL U+9127 鄧 %1B%24%42%7B%7D%1B%28%42 assert_equals: expected "%1B%24%42%7B%7D" but got "%26%23%33%37%31%35%39%3B" +PASS U+912D 鄭 %1B%24%42%45%22%1B%28%42 +PASS U+9130 鄰 %1B%24%42%6E%43%1B%28%42 +PASS U+9132 鄲 %1B%24%42%6E%42%1B%28%42 +PASS U+9149 酉 %1B%24%42%46%53%1B%28%42 +PASS U+914A 酊 %1B%24%42%6E%44%1B%28%42 +PASS U+914B 酋 %1B%24%42%3D%36%1B%28%42 +PASS U+914C 酌 %1B%24%42%3C%60%1B%28%42 +PASS U+914D 配 %1B%24%42%47%5B%1B%28%42 +PASS U+914E 酎 %1B%24%42%43%71%1B%28%42 +PASS U+9152 酒 %1B%24%42%3C%72%1B%28%42 +PASS U+9154 酔 %1B%24%42%3F%6C%1B%28%42 +PASS U+9156 酖 %1B%24%42%6E%45%1B%28%42 +PASS U+9158 酘 %1B%24%42%6E%46%1B%28%42 +PASS U+9162 酢 %1B%24%42%3F%5D%1B%28%42 +PASS U+9163 酣 %1B%24%42%6E%47%1B%28%42 +PASS U+9165 酥 %1B%24%42%6E%48%1B%28%42 +PASS U+9169 酩 %1B%24%42%6E%49%1B%28%42 +PASS U+916A 酪 %1B%24%42%4D%6F%1B%28%42 +PASS U+916C 酬 %1B%24%42%3D%37%1B%28%42 +PASS U+9172 酲 %1B%24%42%6E%4B%1B%28%42 +PASS U+9173 酳 %1B%24%42%6E%4A%1B%28%42 +PASS U+9175 酵 %1B%24%42%39%5A%1B%28%42 +PASS U+9177 酷 %1B%24%42%39%73%1B%28%42 +PASS U+9178 酸 %1B%24%42%3B%40%1B%28%42 +PASS U+9182 醂 %1B%24%42%6E%4E%1B%28%42 +PASS U+9187 醇 %1B%24%42%3D%66%1B%28%42 +PASS U+9189 醉 %1B%24%42%6E%4D%1B%28%42 +PASS U+918B 醋 %1B%24%42%6E%4C%1B%28%42 +PASS U+918D 醍 %1B%24%42%42%69%1B%28%42 +PASS U+9190 醐 %1B%24%42%38%6F%1B%28%42 +PASS U+9192 醒 %1B%24%42%40%43%1B%28%42 +PASS U+9197 醗 %1B%24%42%48%30%1B%28%42 +PASS U+919C 醜 %1B%24%42%3D%39%1B%28%42 +PASS U+91A2 醢 %1B%24%42%6E%4F%1B%28%42 +PASS U+91A4 醤 %1B%24%42%3E%5F%1B%28%42 +PASS U+91AA 醪 %1B%24%42%6E%52%1B%28%42 +PASS U+91AB 醫 %1B%24%42%6E%50%1B%28%42 +PASS U+91AF 醯 %1B%24%42%6E%51%1B%28%42 +PASS U+91B4 醴 %1B%24%42%6E%54%1B%28%42 +PASS U+91B5 醵 %1B%24%42%6E%53%1B%28%42 +PASS U+91B8 醸 %1B%24%42%3E%7A%1B%28%42 +PASS U+91BA 醺 %1B%24%42%6E%55%1B%28%42 +PASS U+91C0 釀 %1B%24%42%6E%56%1B%28%42 +PASS U+91C1 釁 %1B%24%42%6E%57%1B%28%42 +PASS U+91C6 釆 %1B%24%42%48%50%1B%28%42 +PASS U+91C7 采 %1B%24%42%3A%53%1B%28%42 +PASS U+91C8 釈 %1B%24%42%3C%61%1B%28%42 +PASS U+91C9 釉 %1B%24%42%6E%58%1B%28%42 +PASS U+91CB 釋 %1B%24%42%6E%59%1B%28%42 +PASS U+91CC 里 %1B%24%42%4E%24%1B%28%42 +PASS U+91CD 重 %1B%24%42%3D%45%1B%28%42 +PASS U+91CE 野 %1B%24%42%4C%6E%1B%28%42 +PASS U+91CF 量 %1B%24%42%4E%4C%1B%28%42 +PASS U+91D0 釐 %1B%24%42%6E%5A%1B%28%42 +PASS U+91D1 金 %1B%24%42%36%62%1B%28%42 +PASS U+91D6 釖 %1B%24%42%6E%5B%1B%28%42 +FAIL U+91D7 釗 %1B%24%42%7C%21%1B%28%42 assert_equals: expected "%1B%24%42%7C%21" but got "%26%23%33%37%33%33%35%3B" +PASS U+91D8 釘 %1B%24%42%45%23%1B%28%42 +FAIL U+91DA 釚 %1B%24%42%7B%7E%1B%28%42 assert_equals: expected "%1B%24%42%7B%7E" but got "%26%23%33%37%33%33%38%3B" +PASS U+91DB 釛 %1B%24%42%6E%5E%1B%28%42 +PASS U+91DC 釜 %1B%24%42%33%78%1B%28%42 +PASS U+91DD 針 %1B%24%42%3F%4B%1B%28%42 +FAIL U+91DE 釞 %1B%24%42%7C%22%1B%28%42 assert_equals: expected "%1B%24%42%7C%22" but got "%26%23%33%37%33%34%32%3B" +PASS U+91DF 釟 %1B%24%42%6E%5C%1B%28%42 +PASS U+91E1 釡 %1B%24%42%6E%5D%1B%28%42 +PASS U+91E3 釣 %1B%24%42%44%60%1B%28%42 +FAIL U+91E4 釤 %1B%24%42%7C%25%1B%28%42 assert_equals: expected "%1B%24%42%7C%25" but got "%26%23%33%37%33%34%38%3B" +FAIL U+91E5 釥 %1B%24%42%7C%26%1B%28%42 assert_equals: expected "%1B%24%42%7C%26" but got "%26%23%33%37%33%34%39%3B" +PASS U+91E6 釦 %1B%24%42%4B%55%1B%28%42 +PASS U+91E7 釧 %1B%24%42%36%7C%1B%28%42 +FAIL U+91ED 釭 %1B%24%42%7C%23%1B%28%42 assert_equals: expected "%1B%24%42%7C%23" but got "%26%23%33%37%33%35%37%3B" +FAIL U+91EE 釮 %1B%24%42%7C%24%1B%28%42 assert_equals: expected "%1B%24%42%7C%24" but got "%26%23%33%37%33%35%38%3B" +PASS U+91F5 釵 %1B%24%42%6E%60%1B%28%42 +PASS U+91F6 釶 %1B%24%42%6E%61%1B%28%42 +PASS U+91FC 釼 %1B%24%42%6E%5F%1B%28%42 +PASS U+91FF 釿 %1B%24%42%6E%63%1B%28%42 +FAIL U+9206 鈆 %1B%24%42%7C%27%1B%28%42 assert_equals: expected "%1B%24%42%7C%27" but got "%26%23%33%37%33%38%32%3B" +FAIL U+920A 鈊 %1B%24%42%7C%29%1B%28%42 assert_equals: expected "%1B%24%42%7C%29" but got "%26%23%33%37%33%38%36%3B" +PASS U+920D 鈍 %1B%24%42%46%5F%1B%28%42 +PASS U+920E 鈎 %1B%24%42%33%43%1B%28%42 +FAIL U+9210 鈐 %1B%24%42%7C%28%1B%28%42 assert_equals: expected "%1B%24%42%7C%28" but got "%26%23%33%37%33%39%32%3B" +PASS U+9211 鈑 %1B%24%42%6E%67%1B%28%42 +PASS U+9214 鈔 %1B%24%42%6E%64%1B%28%42 +PASS U+9215 鈕 %1B%24%42%6E%66%1B%28%42 +PASS U+921E 鈞 %1B%24%42%6E%62%1B%28%42 +PASS U+9229 鈩 %1B%24%42%6F%4F%1B%28%42 +PASS U+922C 鈬 %1B%24%42%6E%65%1B%28%42 +PASS U+9234 鈴 %1B%24%42%4E%6B%1B%28%42 +PASS U+9237 鈷 %1B%24%42%38%5A%1B%28%42 +FAIL U+9239 鈹 %1B%24%42%7C%30%1B%28%42 assert_equals: expected "%1B%24%42%7C%30" but got "%26%23%33%37%34%33%33%3B" +FAIL U+923A 鈺 %1B%24%42%7C%2A%1B%28%42 assert_equals: expected "%1B%24%42%7C%2A" but got "%26%23%33%37%34%33%34%3B" +FAIL U+923C 鈼 %1B%24%42%7C%2C%1B%28%42 assert_equals: expected "%1B%24%42%7C%2C" but got "%26%23%33%37%34%33%36%3B" +PASS U+923F 鈿 %1B%24%42%6E%6F%1B%28%42 +FAIL U+9240 鉀 %1B%24%42%7C%2B%1B%28%42 assert_equals: expected "%1B%24%42%7C%2B" but got "%26%23%33%37%34%34%30%3B" +PASS U+9244 鉄 %1B%24%42%45%34%1B%28%42 +PASS U+9245 鉅 %1B%24%42%6E%6A%1B%28%42 +PASS U+9248 鉈 %1B%24%42%6E%6D%1B%28%42 +PASS U+9249 鉉 %1B%24%42%6E%6B%1B%28%42 +PASS U+924B 鉋 %1B%24%42%6E%70%1B%28%42 +FAIL U+924E 鉎 %1B%24%42%7C%2D%1B%28%42 assert_equals: expected "%1B%24%42%7C%2D" but got "%26%23%33%37%34%35%34%3B" +PASS U+9250 鉐 %1B%24%42%6E%71%1B%28%42 +FAIL U+9251 鉑 %1B%24%42%7C%2F%1B%28%42 assert_equals: expected "%1B%24%42%7C%2F" but got "%26%23%33%37%34%35%37%3B" +PASS U+9257 鉗 %1B%24%42%6E%69%1B%28%42 +FAIL U+9259 鉙 %1B%24%42%7C%2E%1B%28%42 assert_equals: expected "%1B%24%42%7C%2E" but got "%26%23%33%37%34%36%35%3B" +PASS U+925A 鉚 %1B%24%42%6E%76%1B%28%42 +PASS U+925B 鉛 %1B%24%42%31%74%1B%28%42 +PASS U+925E 鉞 %1B%24%42%6E%68%1B%28%42 +PASS U+9262 鉢 %1B%24%42%48%2D%1B%28%42 +PASS U+9264 鉤 %1B%24%42%6E%6C%1B%28%42 +PASS U+9266 鉦 %1B%24%42%3E%60%1B%28%42 +FAIL U+9267 鉧 %1B%24%42%7C%31%1B%28%42 assert_equals: expected "%1B%24%42%7C%31" but got "%26%23%33%37%34%37%39%3B" +PASS U+9271 鉱 %1B%24%42%39%5B%1B%28%42 +FAIL U+9277 鉷 %1B%24%42%7C%33%1B%28%42 assert_equals: expected "%1B%24%42%7C%33" but got "%26%23%33%37%34%39%35%3B" +FAIL U+9278 鉸 %1B%24%42%7C%34%1B%28%42 assert_equals: expected "%1B%24%42%7C%34" but got "%26%23%33%37%34%39%36%3B" +PASS U+927E 鉾 %1B%24%42%4B%48%1B%28%42 +PASS U+9280 銀 %1B%24%42%36%64%1B%28%42 +PASS U+9283 銃 %1B%24%42%3D%46%1B%28%42 +PASS U+9285 銅 %1B%24%42%46%3C%1B%28%42 +FAIL U+9288 銈 %1B%24%42%79%24%1B%28%42 assert_equals: expected "%1B%24%42%79%24" but got "%26%23%33%37%35%31%32%3B" +PASS U+9291 銑 %1B%24%42%41%2D%1B%28%42 +PASS U+9293 銓 %1B%24%42%6E%74%1B%28%42 +PASS U+9295 銕 %1B%24%42%6E%6E%1B%28%42 +PASS U+9296 銖 %1B%24%42%6E%73%1B%28%42 +PASS U+9298 銘 %1B%24%42%4C%43%1B%28%42 +PASS U+929A 銚 %1B%24%42%44%38%1B%28%42 +PASS U+929B 銛 %1B%24%42%6E%75%1B%28%42 +PASS U+929C 銜 %1B%24%42%6E%72%1B%28%42 +FAIL U+92A7 銧 %1B%24%42%7C%32%1B%28%42 assert_equals: expected "%1B%24%42%7C%32" but got "%26%23%33%37%35%34%33%3B" +PASS U+92AD 銭 %1B%24%42%41%2C%1B%28%42 +PASS U+92B7 銷 %1B%24%42%6E%79%1B%28%42 +PASS U+92B9 銹 %1B%24%42%6E%78%1B%28%42 +PASS U+92CF 鋏 %1B%24%42%6E%77%1B%28%42 +FAIL U+92D0 鋐 %1B%24%42%7C%38%1B%28%42 assert_equals: expected "%1B%24%42%7C%38" but got "%26%23%33%37%35%38%34%3B" +PASS U+92D2 鋒 %1B%24%42%4B%2F%1B%28%42 +FAIL U+92D3 鋓 %1B%24%42%7C%3C%1B%28%42 assert_equals: expected "%1B%24%42%7C%3C" but got "%26%23%33%37%35%38%37%3B" +FAIL U+92D5 鋕 %1B%24%42%7C%3A%1B%28%42 assert_equals: expected "%1B%24%42%7C%3A" but got "%26%23%33%37%35%38%39%3B" +FAIL U+92D7 鋗 %1B%24%42%7C%36%1B%28%42 assert_equals: expected "%1B%24%42%7C%36" but got "%26%23%33%37%35%39%31%3B" +FAIL U+92D9 鋙 %1B%24%42%7C%37%1B%28%42 assert_equals: expected "%1B%24%42%7C%37" but got "%26%23%33%37%35%39%33%3B" +FAIL U+92E0 鋠 %1B%24%42%7C%3B%1B%28%42 assert_equals: expected "%1B%24%42%7C%3B" but got "%26%23%33%37%36%30%30%3B" +PASS U+92E4 鋤 %1B%24%42%3D%7B%1B%28%42 +FAIL U+92E7 鋧 %1B%24%42%7C%35%1B%28%42 assert_equals: expected "%1B%24%42%7C%35" but got "%26%23%33%37%36%30%37%3B" +PASS U+92E9 鋩 %1B%24%42%6E%7A%1B%28%42 +PASS U+92EA 鋪 %1B%24%42%4A%5F%1B%28%42 +PASS U+92ED 鋭 %1B%24%42%31%54%1B%28%42 +PASS U+92F2 鋲 %1B%24%42%49%46%1B%28%42 +PASS U+92F3 鋳 %1B%24%42%43%72%1B%28%42 +PASS U+92F8 鋸 %1B%24%42%35%78%1B%28%42 +FAIL U+92F9 鋹 %1B%24%42%79%2A%1B%28%42 assert_equals: expected "%1B%24%42%79%2A" but got "%26%23%33%37%36%32%35%3B" +PASS U+92FA 鋺 %1B%24%42%6E%7C%1B%28%42 +FAIL U+92FB 鋻 %1B%24%42%7C%3F%1B%28%42 assert_equals: expected "%1B%24%42%7C%3F" but got "%26%23%33%37%36%32%37%3B" +PASS U+92FC 鋼 %1B%24%42%39%5D%1B%28%42 +FAIL U+92FF 鋿 %1B%24%42%7C%42%1B%28%42 assert_equals: expected "%1B%24%42%7C%42" but got "%26%23%33%37%36%33%31%3B" +FAIL U+9302 錂 %1B%24%42%7C%44%1B%28%42 assert_equals: expected "%1B%24%42%7C%44" but got "%26%23%33%37%36%33%34%3B" +PASS U+9306 錆 %1B%24%42%3B%2C%1B%28%42 +PASS U+930F 錏 %1B%24%42%6E%7B%1B%28%42 +PASS U+9310 錐 %1B%24%42%3F%6D%1B%28%42 +PASS U+9318 錘 %1B%24%42%3F%6E%1B%28%42 +PASS U+9319 錙 %1B%24%42%6F%21%1B%28%42 +PASS U+931A 錚 %1B%24%42%6F%23%1B%28%42 +FAIL U+931D 錝 %1B%24%42%7C%43%1B%28%42 assert_equals: expected "%1B%24%42%7C%43" but got "%26%23%33%37%36%36%31%3B" +FAIL U+931E 錞 %1B%24%42%7C%41%1B%28%42 assert_equals: expected "%1B%24%42%7C%41" but got "%26%23%33%37%36%36%32%3B" +PASS U+9320 錠 %1B%24%42%3E%7B%1B%28%42 +FAIL U+9321 錡 %1B%24%42%7C%3E%1B%28%42 assert_equals: expected "%1B%24%42%7C%3E" but got "%26%23%33%37%36%36%35%3B" +PASS U+9322 錢 %1B%24%42%6F%22%1B%28%42 +PASS U+9323 錣 %1B%24%42%6F%24%1B%28%42 +FAIL U+9325 錥 %1B%24%42%7C%3D%1B%28%42 assert_equals: expected "%1B%24%42%7C%3D" but got "%26%23%33%37%36%36%39%3B" +PASS U+9326 錦 %1B%24%42%36%53%1B%28%42 +PASS U+9328 錨 %1B%24%42%49%45%1B%28%42 +PASS U+932B 錫 %1B%24%42%3C%62%1B%28%42 +PASS U+932C 錬 %1B%24%42%4F%23%1B%28%42 +PASS U+932E 錮 %1B%24%42%6E%7E%1B%28%42 +PASS U+932F 錯 %1B%24%42%3A%78%1B%28%42 +PASS U+9332 録 %1B%24%42%4F%3F%1B%28%42 +PASS U+9335 錵 %1B%24%42%6F%26%1B%28%42 +PASS U+933A 錺 %1B%24%42%6F%25%1B%28%42 +PASS U+933B 錻 %1B%24%42%6F%27%1B%28%42 +PASS U+9344 鍄 %1B%24%42%6E%7D%1B%28%42 +FAIL U+9348 鍈 %1B%24%42%79%23%1B%28%42 assert_equals: expected "%1B%24%42%79%23" but got "%26%23%33%37%37%30%34%3B" +PASS U+934B 鍋 %1B%24%42%46%69%1B%28%42 +PASS U+934D 鍍 %1B%24%42%45%55%1B%28%42 +PASS U+9354 鍔 %1B%24%42%44%57%1B%28%42 +PASS U+9356 鍖 %1B%24%42%6F%2C%1B%28%42 +FAIL U+9357 鍗 %1B%24%42%7C%46%1B%28%42 assert_equals: expected "%1B%24%42%7C%46" but got "%26%23%33%37%37%31%39%3B" +PASS U+935B 鍛 %1B%24%42%43%43%1B%28%42 +PASS U+935C 鍜 %1B%24%42%6F%28%1B%28%42 +PASS U+9360 鍠 %1B%24%42%6F%29%1B%28%42 +PASS U+936C 鍬 %1B%24%42%37%2D%1B%28%42 +PASS U+936E 鍮 %1B%24%42%6F%2B%1B%28%42 +FAIL U+9370 鍰 %1B%24%42%7C%45%1B%28%42 assert_equals: expected "%1B%24%42%7C%45" but got "%26%23%33%37%37%34%34%3B" +PASS U+9375 鍵 %1B%24%42%38%30%1B%28%42 +PASS U+937C 鍼 %1B%24%42%6F%2A%1B%28%42 +PASS U+937E 鍾 %1B%24%42%3E%61%1B%28%42 +PASS U+938C 鎌 %1B%24%42%33%79%1B%28%42 +PASS U+9394 鎔 %1B%24%42%6F%30%1B%28%42 +PASS U+9396 鎖 %1B%24%42%3A%3F%1B%28%42 +PASS U+9397 鎗 %1B%24%42%41%79%1B%28%42 +PASS U+939A 鎚 %1B%24%42%44%4A%1B%28%42 +FAIL U+93A4 鎤 %1B%24%42%7C%47%1B%28%42 assert_equals: expected "%1B%24%42%7C%47" but got "%26%23%33%37%37%39%36%3B" +PASS U+93A7 鎧 %1B%24%42%33%3B%1B%28%42 +PASS U+93AC 鎬 %1B%24%42%6F%2E%1B%28%42 +PASS U+93AD 鎭 %1B%24%42%6F%2F%1B%28%42 +PASS U+93AE 鎮 %1B%24%42%44%43%1B%28%42 +PASS U+93B0 鎰 %1B%24%42%6F%2D%1B%28%42 +PASS U+93B9 鎹 %1B%24%42%6F%31%1B%28%42 +PASS U+93C3 鏃 %1B%24%42%6F%37%1B%28%42 +FAIL U+93C6 鏆 %1B%24%42%7C%48%1B%28%42 assert_equals: expected "%1B%24%42%7C%48" but got "%26%23%33%37%38%33%30%3B" +PASS U+93C8 鏈 %1B%24%42%6F%3A%1B%28%42 +PASS U+93D0 鏐 %1B%24%42%6F%39%1B%28%42 +PASS U+93D1 鏑 %1B%24%42%45%2D%1B%28%42 +PASS U+93D6 鏖 %1B%24%42%6F%32%1B%28%42 +PASS U+93D7 鏗 %1B%24%42%6F%33%1B%28%42 +PASS U+93D8 鏘 %1B%24%42%6F%36%1B%28%42 +PASS U+93DD 鏝 %1B%24%42%6F%38%1B%28%42 +FAIL U+93DE 鏞 %1B%24%42%7C%49%1B%28%42 assert_equals: expected "%1B%24%42%7C%49" but got "%26%23%33%37%38%35%34%3B" +PASS U+93E1 鏡 %1B%24%42%36%40%1B%28%42 +PASS U+93E4 鏤 %1B%24%42%6F%3B%1B%28%42 +PASS U+93E5 鏥 %1B%24%42%6F%35%1B%28%42 +PASS U+93E8 鏨 %1B%24%42%6F%34%1B%28%42 +FAIL U+93F8 鏸 %1B%24%42%7C%4A%1B%28%42 assert_equals: expected "%1B%24%42%7C%4A" but got "%26%23%33%37%38%38%30%3B" +PASS U+9403 鐃 %1B%24%42%6F%3F%1B%28%42 +PASS U+9407 鐇 %1B%24%42%6F%40%1B%28%42 +PASS U+9410 鐐 %1B%24%42%6F%41%1B%28%42 +PASS U+9413 鐓 %1B%24%42%6F%3E%1B%28%42 +PASS U+9414 鐔 %1B%24%42%6F%3D%1B%28%42 +PASS U+9418 鐘 %1B%24%42%3E%62%1B%28%42 +PASS U+9419 鐙 %1B%24%42%46%2A%1B%28%42 +PASS U+941A 鐚 %1B%24%42%6F%3C%1B%28%42 +PASS U+9421 鐡 %1B%24%42%6F%45%1B%28%42 +PASS U+942B 鐫 %1B%24%42%6F%43%1B%28%42 +FAIL U+9431 鐱 %1B%24%42%7C%4B%1B%28%42 assert_equals: expected "%1B%24%42%7C%4B" but got "%26%23%33%37%39%33%37%3B" +PASS U+9435 鐵 %1B%24%42%6F%44%1B%28%42 +PASS U+9436 鐶 %1B%24%42%6F%42%1B%28%42 +PASS U+9438 鐸 %1B%24%42%42%78%1B%28%42 +PASS U+943A 鐺 %1B%24%42%6F%46%1B%28%42 +PASS U+9441 鑁 %1B%24%42%6F%47%1B%28%42 +PASS U+9444 鑄 %1B%24%42%6F%49%1B%28%42 +FAIL U+9445 鑅 %1B%24%42%7C%4C%1B%28%42 assert_equals: expected "%1B%24%42%7C%4C" but got "%26%23%33%37%39%35%37%3B" +FAIL U+9448 鑈 %1B%24%42%7C%4D%1B%28%42 assert_equals: expected "%1B%24%42%7C%4D" but got "%26%23%33%37%39%36%30%3B" +PASS U+9451 鑑 %1B%24%42%34%55%1B%28%42 +PASS U+9452 鑒 %1B%24%42%6F%48%1B%28%42 +PASS U+9453 鑓 %1B%24%42%4C%7A%1B%28%42 +PASS U+945A 鑚 %1B%24%42%6F%54%1B%28%42 +PASS U+945B 鑛 %1B%24%42%6F%4A%1B%28%42 +PASS U+945E 鑞 %1B%24%42%6F%4D%1B%28%42 +PASS U+9460 鑠 %1B%24%42%6F%4B%1B%28%42 +PASS U+9462 鑢 %1B%24%42%6F%4C%1B%28%42 +PASS U+946A 鑪 %1B%24%42%6F%4E%1B%28%42 +PASS U+9470 鑰 %1B%24%42%6F%50%1B%28%42 +PASS U+9475 鑵 %1B%24%42%6F%51%1B%28%42 +PASS U+9477 鑷 %1B%24%42%6F%52%1B%28%42 +PASS U+947C 鑼 %1B%24%42%6F%55%1B%28%42 +PASS U+947D 鑽 %1B%24%42%6F%53%1B%28%42 +PASS U+947E 鑾 %1B%24%42%6F%56%1B%28%42 +PASS U+947F 鑿 %1B%24%42%6F%58%1B%28%42 +PASS U+9481 钁 %1B%24%42%6F%57%1B%28%42 +PASS U+9577 長 %1B%24%42%44%39%1B%28%42 +PASS U+9580 門 %1B%24%42%4C%67%1B%28%42 +PASS U+9582 閂 %1B%24%42%6F%59%1B%28%42 +PASS U+9583 閃 %1B%24%42%41%2E%1B%28%42 +PASS U+9587 閇 %1B%24%42%6F%5A%1B%28%42 +PASS U+9589 閉 %1B%24%42%4A%44%1B%28%42 +PASS U+958A 閊 %1B%24%42%6F%5B%1B%28%42 +PASS U+958B 開 %1B%24%42%33%2B%1B%28%42 +PASS U+958F 閏 %1B%24%42%31%3C%1B%28%42 +PASS U+9591 閑 %1B%24%42%34%57%1B%28%42 +FAIL U+9592 閒 %1B%24%42%7C%4E%1B%28%42 assert_equals: expected "%1B%24%42%7C%4E" but got "%26%23%33%38%32%39%30%3B" +PASS U+9593 間 %1B%24%42%34%56%1B%28%42 +PASS U+9594 閔 %1B%24%42%6F%5C%1B%28%42 +PASS U+9596 閖 %1B%24%42%6F%5D%1B%28%42 +PASS U+9598 閘 %1B%24%42%6F%5E%1B%28%42 +PASS U+9599 閙 %1B%24%42%6F%5F%1B%28%42 +PASS U+95A0 閠 %1B%24%42%6F%60%1B%28%42 +PASS U+95A2 関 %1B%24%42%34%58%1B%28%42 +PASS U+95A3 閣 %1B%24%42%33%55%1B%28%42 +PASS U+95A4 閤 %1B%24%42%39%5E%1B%28%42 +PASS U+95A5 閥 %1B%24%42%48%36%1B%28%42 +PASS U+95A7 閧 %1B%24%42%6F%62%1B%28%42 +PASS U+95A8 閨 %1B%24%42%6F%61%1B%28%42 +PASS U+95AD 閭 %1B%24%42%6F%63%1B%28%42 +PASS U+95B2 閲 %1B%24%42%31%5C%1B%28%42 +PASS U+95B9 閹 %1B%24%42%6F%66%1B%28%42 +PASS U+95BB 閻 %1B%24%42%6F%65%1B%28%42 +PASS U+95BC 閼 %1B%24%42%6F%64%1B%28%42 +PASS U+95BE 閾 %1B%24%42%6F%67%1B%28%42 +PASS U+95C3 闃 %1B%24%42%6F%6A%1B%28%42 +PASS U+95C7 闇 %1B%24%42%30%47%1B%28%42 +PASS U+95CA 闊 %1B%24%42%6F%68%1B%28%42 +PASS U+95CC 闌 %1B%24%42%6F%6C%1B%28%42 +PASS U+95CD 闍 %1B%24%42%6F%6B%1B%28%42 +PASS U+95D4 闔 %1B%24%42%6F%6E%1B%28%42 +PASS U+95D5 闕 %1B%24%42%6F%6D%1B%28%42 +PASS U+95D6 闖 %1B%24%42%6F%6F%1B%28%42 +PASS U+95D8 闘 %1B%24%42%46%2E%1B%28%42 +PASS U+95DC 關 %1B%24%42%6F%70%1B%28%42 +PASS U+95E1 闡 %1B%24%42%6F%71%1B%28%42 +PASS U+95E2 闢 %1B%24%42%6F%73%1B%28%42 +PASS U+95E5 闥 %1B%24%42%6F%72%1B%28%42 +PASS U+961C 阜 %1B%24%42%49%6C%1B%28%42 +PASS U+9621 阡 %1B%24%42%6F%74%1B%28%42 +PASS U+9628 阨 %1B%24%42%6F%75%1B%28%42 +PASS U+962A 阪 %1B%24%42%3A%65%1B%28%42 +PASS U+962E 阮 %1B%24%42%6F%76%1B%28%42 +PASS U+962F 阯 %1B%24%42%6F%77%1B%28%42 +PASS U+9632 防 %1B%24%42%4B%49%1B%28%42 +PASS U+963B 阻 %1B%24%42%41%4B%1B%28%42 +PASS U+963F 阿 %1B%24%42%30%24%1B%28%42 +PASS U+9640 陀 %1B%24%42%42%4B%1B%28%42 +PASS U+9642 陂 %1B%24%42%6F%78%1B%28%42 +PASS U+9644 附 %1B%24%42%49%6D%1B%28%42 +PASS U+964B 陋 %1B%24%42%6F%7B%1B%28%42 +PASS U+964C 陌 %1B%24%42%6F%79%1B%28%42 +PASS U+964D 降 %1B%24%42%39%5F%1B%28%42 +PASS U+964F 陏 %1B%24%42%6F%7A%1B%28%42 +PASS U+9650 限 %1B%24%42%38%42%1B%28%42 +PASS U+965B 陛 %1B%24%42%4A%45%1B%28%42 +PASS U+965C 陜 %1B%24%42%6F%7D%1B%28%42 +PASS U+965D 陝 %1B%24%42%70%21%1B%28%42 +PASS U+965E 陞 %1B%24%42%6F%7E%1B%28%42 +PASS U+965F 陟 %1B%24%42%70%22%1B%28%42 +PASS U+9662 院 %1B%24%42%31%21%1B%28%42 +PASS U+9663 陣 %1B%24%42%3F%58%1B%28%42 +PASS U+9664 除 %1B%24%42%3D%7C%1B%28%42 +PASS U+9665 陥 %1B%24%42%34%59%1B%28%42 +PASS U+9666 陦 %1B%24%42%70%23%1B%28%42 +PASS U+966A 陪 %1B%24%42%47%66%1B%28%42 +PASS U+966C 陬 %1B%24%42%70%25%1B%28%42 +PASS U+9670 陰 %1B%24%42%31%22%1B%28%42 +PASS U+9672 陲 %1B%24%42%70%24%1B%28%42 +PASS U+9673 陳 %1B%24%42%44%44%1B%28%42 +PASS U+9675 陵 %1B%24%42%4E%4D%1B%28%42 +PASS U+9676 陶 %1B%24%42%46%2B%1B%28%42 +PASS U+9677 陷 %1B%24%42%6F%7C%1B%28%42 +PASS U+9678 陸 %1B%24%42%4E%26%1B%28%42 +PASS U+967A 険 %1B%24%42%38%31%1B%28%42 +PASS U+967D 陽 %1B%24%42%4D%5B%1B%28%42 +PASS U+9685 隅 %1B%24%42%36%79%1B%28%42 +PASS U+9686 隆 %1B%24%42%4E%34%1B%28%42 +PASS U+9688 隈 %1B%24%42%37%28%1B%28%42 +PASS U+968A 隊 %1B%24%42%42%62%1B%28%42 +PASS U+968B 隋 %1B%24%42%67%21%1B%28%42 +PASS U+968D 隍 %1B%24%42%70%26%1B%28%42 +PASS U+968E 階 %1B%24%42%33%2C%1B%28%42 +PASS U+968F 随 %1B%24%42%3F%6F%1B%28%42 +PASS U+9694 隔 %1B%24%42%33%56%1B%28%42 +PASS U+9695 隕 %1B%24%42%70%28%1B%28%42 +PASS U+9697 隗 %1B%24%42%70%29%1B%28%42 +PASS U+9698 隘 %1B%24%42%70%27%1B%28%42 +PASS U+9699 隙 %1B%24%42%37%64%1B%28%42 +PASS U+969B 際 %1B%24%42%3A%5D%1B%28%42 +PASS U+969C 障 %1B%24%42%3E%63%1B%28%42 +FAIL U+969D 隝 %1B%24%42%7C%51%1B%28%42 assert_equals: expected "%1B%24%42%7C%51" but got "%26%23%33%38%35%35%37%3B" +PASS U+96A0 隠 %1B%24%42%31%23%1B%28%42 +PASS U+96A3 隣 %1B%24%42%4E%59%1B%28%42 +PASS U+96A7 隧 %1B%24%42%70%2B%1B%28%42 +PASS U+96A8 隨 %1B%24%42%6E%2E%1B%28%42 +PASS U+96AA 險 %1B%24%42%70%2A%1B%28%42 +FAIL U+96AF 隯 %1B%24%42%7C%52%1B%28%42 assert_equals: expected "%1B%24%42%7C%52" but got "%26%23%33%38%35%37%35%3B" +PASS U+96B0 隰 %1B%24%42%70%2E%1B%28%42 +PASS U+96B1 隱 %1B%24%42%70%2C%1B%28%42 +PASS U+96B2 隲 %1B%24%42%70%2D%1B%28%42 +PASS U+96B4 隴 %1B%24%42%70%2F%1B%28%42 +PASS U+96B6 隶 %1B%24%42%70%30%1B%28%42 +PASS U+96B7 隷 %1B%24%42%4E%6C%1B%28%42 +PASS U+96B8 隸 %1B%24%42%70%31%1B%28%42 +PASS U+96B9 隹 %1B%24%42%70%32%1B%28%42 +PASS U+96BB 隻 %1B%24%42%40%49%1B%28%42 +PASS U+96BC 隼 %1B%24%42%48%3B%1B%28%42 +PASS U+96C0 雀 %1B%24%42%3F%7D%1B%28%42 +PASS U+96C1 雁 %1B%24%42%34%67%1B%28%42 +PASS U+96C4 雄 %1B%24%42%4D%3A%1B%28%42 +PASS U+96C5 雅 %1B%24%42%32%6D%1B%28%42 +PASS U+96C6 集 %1B%24%42%3D%38%1B%28%42 +PASS U+96C7 雇 %1B%24%42%38%5B%1B%28%42 +PASS U+96C9 雉 %1B%24%42%70%35%1B%28%42 +PASS U+96CB 雋 %1B%24%42%70%34%1B%28%42 +PASS U+96CC 雌 %1B%24%42%3B%73%1B%28%42 +PASS U+96CD 雍 %1B%24%42%70%36%1B%28%42 +PASS U+96CE 雎 %1B%24%42%70%33%1B%28%42 +PASS U+96D1 雑 %1B%24%42%3B%28%1B%28%42 +PASS U+96D5 雕 %1B%24%42%70%3A%1B%28%42 +PASS U+96D6 雖 %1B%24%42%6A%2D%1B%28%42 +PASS U+96D9 雙 %1B%24%42%52%56%1B%28%42 +PASS U+96DB 雛 %1B%24%42%3F%77%1B%28%42 +PASS U+96DC 雜 %1B%24%42%70%38%1B%28%42 +PASS U+96E2 離 %1B%24%42%4E%25%1B%28%42 +PASS U+96E3 難 %1B%24%42%46%71%1B%28%42 +PASS U+96E8 雨 %1B%24%42%31%2B%1B%28%42 +PASS U+96EA 雪 %1B%24%42%40%63%1B%28%42 +PASS U+96EB 雫 %1B%24%42%3C%36%1B%28%42 +PASS U+96F0 雰 %1B%24%42%4A%37%1B%28%42 +PASS U+96F2 雲 %1B%24%42%31%40%1B%28%42 +PASS U+96F6 零 %1B%24%42%4E%6D%1B%28%42 +PASS U+96F7 雷 %1B%24%42%4D%6B%1B%28%42 +PASS U+96F9 雹 %1B%24%42%70%3B%1B%28%42 +PASS U+96FB 電 %1B%24%42%45%45%1B%28%42 +PASS U+9700 需 %1B%24%42%3C%7B%1B%28%42 +PASS U+9704 霄 %1B%24%42%70%3C%1B%28%42 +PASS U+9706 霆 %1B%24%42%70%3D%1B%28%42 +PASS U+9707 震 %1B%24%42%3F%4C%1B%28%42 +PASS U+9708 霈 %1B%24%42%70%3E%1B%28%42 +PASS U+970A 霊 %1B%24%42%4E%6E%1B%28%42 +PASS U+970D 霍 %1B%24%42%70%39%1B%28%42 +PASS U+970E 霎 %1B%24%42%70%40%1B%28%42 +PASS U+970F 霏 %1B%24%42%70%42%1B%28%42 +PASS U+9711 霑 %1B%24%42%70%41%1B%28%42 +PASS U+9713 霓 %1B%24%42%70%3F%1B%28%42 +PASS U+9716 霖 %1B%24%42%70%43%1B%28%42 +PASS U+9719 霙 %1B%24%42%70%44%1B%28%42 +PASS U+971C 霜 %1B%24%42%41%7A%1B%28%42 +PASS U+971E 霞 %1B%24%42%32%62%1B%28%42 +PASS U+9724 霤 %1B%24%42%70%45%1B%28%42 +PASS U+9727 霧 %1B%24%42%4C%38%1B%28%42 +PASS U+972A 霪 %1B%24%42%70%46%1B%28%42 +PASS U+9730 霰 %1B%24%42%70%47%1B%28%42 +PASS U+9732 露 %1B%24%42%4F%2A%1B%28%42 +FAIL U+9733 霳 %1B%24%42%7C%53%1B%28%42 assert_equals: expected "%1B%24%42%7C%53" but got "%26%23%33%38%37%30%37%3B" +PASS U+9738 霸 %1B%24%42%5B%31%1B%28%42 +PASS U+9739 霹 %1B%24%42%70%48%1B%28%42 +FAIL U+973B 霻 %1B%24%42%7C%54%1B%28%42 assert_equals: expected "%1B%24%42%7C%54" but got "%26%23%33%38%37%31%35%3B" +PASS U+973D 霽 %1B%24%42%70%49%1B%28%42 +PASS U+973E 霾 %1B%24%42%70%4A%1B%28%42 +PASS U+9742 靂 %1B%24%42%70%4E%1B%28%42 +FAIL U+9743 靃 %1B%24%42%7C%55%1B%28%42 assert_equals: expected "%1B%24%42%7C%55" but got "%26%23%33%38%37%32%33%3B" +PASS U+9744 靄 %1B%24%42%70%4B%1B%28%42 +PASS U+9746 靆 %1B%24%42%70%4C%1B%28%42 +PASS U+9748 靈 %1B%24%42%70%4D%1B%28%42 +PASS U+9749 靉 %1B%24%42%70%4F%1B%28%42 +FAIL U+974D 靍 %1B%24%42%7C%56%1B%28%42 assert_equals: expected "%1B%24%42%7C%56" but got "%26%23%33%38%37%33%33%3B" +FAIL U+974F 靏 %1B%24%42%7C%57%1B%28%42 assert_equals: expected "%1B%24%42%7C%57" but got "%26%23%33%38%37%33%35%3B" +FAIL U+9751 靑 %1B%24%42%7C%58%1B%28%42 assert_equals: expected "%1B%24%42%7C%58" but got "%26%23%33%38%37%33%37%3B" +PASS U+9752 青 %1B%24%42%40%44%1B%28%42 +FAIL U+9755 靕 %1B%24%42%7C%59%1B%28%42 assert_equals: expected "%1B%24%42%7C%59" but got "%26%23%33%38%37%34%31%3B" +PASS U+9756 靖 %1B%24%42%4C%77%1B%28%42 +PASS U+9759 静 %1B%24%42%40%45%1B%28%42 +PASS U+975C 靜 %1B%24%42%70%50%1B%28%42 +PASS U+975E 非 %1B%24%42%48%73%1B%28%42 +PASS U+9760 靠 %1B%24%42%70%51%1B%28%42 +PASS U+9761 靡 %1B%24%42%73%53%1B%28%42 +PASS U+9762 面 %1B%24%42%4C%4C%1B%28%42 +PASS U+9764 靤 %1B%24%42%70%52%1B%28%42 +PASS U+9766 靦 %1B%24%42%70%53%1B%28%42 +PASS U+9768 靨 %1B%24%42%70%54%1B%28%42 +PASS U+9769 革 %1B%24%42%33%57%1B%28%42 +PASS U+976B 靫 %1B%24%42%70%56%1B%28%42 +PASS U+976D 靭 %1B%24%42%3F%59%1B%28%42 +PASS U+9771 靱 %1B%24%42%70%57%1B%28%42 +PASS U+9774 靴 %1B%24%42%37%24%1B%28%42 +PASS U+9779 靹 %1B%24%42%70%58%1B%28%42 +PASS U+977A 靺 %1B%24%42%70%5C%1B%28%42 +PASS U+977C 靼 %1B%24%42%70%5A%1B%28%42 +PASS U+9781 鞁 %1B%24%42%70%5B%1B%28%42 +PASS U+9784 鞄 %1B%24%42%33%73%1B%28%42 +PASS U+9785 鞅 %1B%24%42%70%59%1B%28%42 +PASS U+9786 鞆 %1B%24%42%70%5D%1B%28%42 +PASS U+978B 鞋 %1B%24%42%70%5E%1B%28%42 +PASS U+978D 鞍 %1B%24%42%30%48%1B%28%42 +PASS U+978F 鞏 %1B%24%42%70%5F%1B%28%42 +PASS U+9790 鞐 %1B%24%42%70%60%1B%28%42 +PASS U+9798 鞘 %1B%24%42%3E%64%1B%28%42 +PASS U+979C 鞜 %1B%24%42%70%61%1B%28%42 +PASS U+97A0 鞠 %1B%24%42%35%47%1B%28%42 +PASS U+97A3 鞣 %1B%24%42%70%64%1B%28%42 +PASS U+97A6 鞦 %1B%24%42%70%63%1B%28%42 +PASS U+97A8 鞨 %1B%24%42%70%62%1B%28%42 +PASS U+97AB 鞫 %1B%24%42%6B%71%1B%28%42 +PASS U+97AD 鞭 %1B%24%42%4A%5C%1B%28%42 +PASS U+97B3 鞳 %1B%24%42%70%65%1B%28%42 +PASS U+97B4 鞴 %1B%24%42%70%66%1B%28%42 +PASS U+97C3 韃 %1B%24%42%70%67%1B%28%42 +PASS U+97C6 韆 %1B%24%42%70%68%1B%28%42 +PASS U+97C8 韈 %1B%24%42%70%69%1B%28%42 +PASS U+97CB 韋 %1B%24%42%70%6A%1B%28%42 +PASS U+97D3 韓 %1B%24%42%34%5A%1B%28%42 +PASS U+97DC 韜 %1B%24%42%70%6B%1B%28%42 +PASS U+97ED 韭 %1B%24%42%70%6C%1B%28%42 +PASS U+97EE 韮 %1B%24%42%47%23%1B%28%42 +PASS U+97F2 韲 %1B%24%42%70%6E%1B%28%42 +PASS U+97F3 音 %1B%24%42%32%3B%1B%28%42 +PASS U+97F5 韵 %1B%24%42%70%71%1B%28%42 +PASS U+97F6 韶 %1B%24%42%70%70%1B%28%42 +PASS U+97FB 韻 %1B%24%42%31%24%1B%28%42 +PASS U+97FF 響 %1B%24%42%36%41%1B%28%42 +PASS U+9801 頁 %1B%24%42%4A%47%1B%28%42 +PASS U+9802 頂 %1B%24%42%44%3A%1B%28%42 +PASS U+9803 頃 %1B%24%42%3A%22%1B%28%42 +PASS U+9805 項 %1B%24%42%39%60%1B%28%42 +PASS U+9806 順 %1B%24%42%3D%67%1B%28%42 +PASS U+9808 須 %1B%24%42%3F%5C%1B%28%42 +PASS U+980C 頌 %1B%24%42%70%73%1B%28%42 +PASS U+980F 頏 %1B%24%42%70%72%1B%28%42 +PASS U+9810 預 %1B%24%42%4D%42%1B%28%42 +PASS U+9811 頑 %1B%24%42%34%68%1B%28%42 +PASS U+9812 頒 %1B%24%42%48%52%1B%28%42 +PASS U+9813 頓 %1B%24%42%46%5C%1B%28%42 +PASS U+9817 頗 %1B%24%42%3F%7C%1B%28%42 +PASS U+9818 領 %1B%24%42%4E%4E%1B%28%42 +PASS U+981A 頚 %1B%24%42%37%5B%1B%28%42 +PASS U+9821 頡 %1B%24%42%70%76%1B%28%42 +PASS U+9824 頤 %1B%24%42%70%75%1B%28%42 +PASS U+982C 頬 %1B%24%42%4B%4B%1B%28%42 +PASS U+982D 頭 %1B%24%42%46%2C%1B%28%42 +PASS U+9834 頴 %1B%24%42%31%50%1B%28%42 +PASS U+9837 頷 %1B%24%42%70%77%1B%28%42 +PASS U+9838 頸 %1B%24%42%70%74%1B%28%42 +PASS U+983B 頻 %1B%24%42%49%51%1B%28%42 +PASS U+983C 頼 %1B%24%42%4D%6A%1B%28%42 +PASS U+983D 頽 %1B%24%42%70%78%1B%28%42 +PASS U+9846 顆 %1B%24%42%70%79%1B%28%42 +PASS U+984B 顋 %1B%24%42%70%7B%1B%28%42 +PASS U+984C 題 %1B%24%42%42%6A%1B%28%42 +PASS U+984D 額 %1B%24%42%33%5B%1B%28%42 +PASS U+984E 顎 %1B%24%42%33%5C%1B%28%42 +PASS U+984F 顏 %1B%24%42%70%7A%1B%28%42 +PASS U+9854 顔 %1B%24%42%34%69%1B%28%42 +PASS U+9855 顕 %1B%24%42%38%32%1B%28%42 +FAIL U+9857 顗 %1B%24%42%7C%5A%1B%28%42 assert_equals: expected "%1B%24%42%7C%5A" but got "%26%23%33%38%39%39%39%3B" +PASS U+9858 願 %1B%24%42%34%6A%1B%28%42 +PASS U+985B 顛 %1B%24%42%45%3F%1B%28%42 +PASS U+985E 類 %1B%24%42%4E%60%1B%28%42 +FAIL U+9865 顥 %1B%24%42%7C%5B%1B%28%42 assert_equals: expected "%1B%24%42%7C%5B" but got "%26%23%33%39%30%31%33%3B" +PASS U+9867 顧 %1B%24%42%38%5C%1B%28%42 +PASS U+986B 顫 %1B%24%42%70%7C%1B%28%42 +PASS U+986F 顯 %1B%24%42%70%7D%1B%28%42 +PASS U+9870 顰 %1B%24%42%70%7E%1B%28%42 +PASS U+9871 顱 %1B%24%42%71%21%1B%28%42 +PASS U+9873 顳 %1B%24%42%71%23%1B%28%42 +PASS U+9874 顴 %1B%24%42%71%22%1B%28%42 +PASS U+98A8 風 %1B%24%42%49%77%1B%28%42 +PASS U+98AA 颪 %1B%24%42%71%24%1B%28%42 +PASS U+98AF 颯 %1B%24%42%71%25%1B%28%42 +PASS U+98B1 颱 %1B%24%42%71%26%1B%28%42 +PASS U+98B6 颶 %1B%24%42%71%27%1B%28%42 +PASS U+98C3 飃 %1B%24%42%71%29%1B%28%42 +PASS U+98C4 飄 %1B%24%42%71%28%1B%28%42 +PASS U+98C6 飆 %1B%24%42%71%2A%1B%28%42 +PASS U+98DB 飛 %1B%24%42%48%74%1B%28%42 +PASS U+98DC 飜 %1B%24%42%66%4C%1B%28%42 +PASS U+98DF 食 %1B%24%42%3F%29%1B%28%42 +PASS U+98E2 飢 %1B%24%42%35%32%1B%28%42 +PASS U+98E9 飩 %1B%24%42%71%2B%1B%28%42 +PASS U+98EB 飫 %1B%24%42%71%2C%1B%28%42 +PASS U+98ED 飭 %1B%24%42%52%2C%1B%28%42 +PASS U+98EE 飮 %1B%24%42%5D%3B%1B%28%42 +PASS U+98EF 飯 %1B%24%42%48%53%1B%28%42 +PASS U+98F2 飲 %1B%24%42%30%7B%1B%28%42 +PASS U+98F4 飴 %1B%24%42%30%3B%1B%28%42 +PASS U+98FC 飼 %1B%24%42%3B%74%1B%28%42 +PASS U+98FD 飽 %1B%24%42%4B%30%1B%28%42 +PASS U+98FE 飾 %1B%24%42%3E%7E%1B%28%42 +PASS U+9903 餃 %1B%24%42%71%2D%1B%28%42 +PASS U+9905 餅 %1B%24%42%4C%5F%1B%28%42 +PASS U+9909 餉 %1B%24%42%71%2E%1B%28%42 +PASS U+990A 養 %1B%24%42%4D%5C%1B%28%42 +PASS U+990C 餌 %1B%24%42%31%42%1B%28%42 +PASS U+9910 餐 %1B%24%42%3B%41%1B%28%42 +PASS U+9912 餒 %1B%24%42%71%2F%1B%28%42 +PASS U+9913 餓 %1B%24%42%32%6E%1B%28%42 +PASS U+9914 餔 %1B%24%42%71%30%1B%28%42 +PASS U+9918 餘 %1B%24%42%71%31%1B%28%42 +PASS U+991D 餝 %1B%24%42%71%33%1B%28%42 +PASS U+991E 餞 %1B%24%42%71%34%1B%28%42 +PASS U+9920 餠 %1B%24%42%71%36%1B%28%42 +PASS U+9921 餡 %1B%24%42%71%32%1B%28%42 +PASS U+9924 餤 %1B%24%42%71%35%1B%28%42 +FAIL U+9927 餧 %1B%24%42%7C%5E%1B%28%42 assert_equals: expected "%1B%24%42%7C%5E" but got "%26%23%33%39%32%30%37%3B" +PASS U+9928 館 %1B%24%42%34%5B%1B%28%42 +PASS U+992C 餬 %1B%24%42%71%37%1B%28%42 +PASS U+992E 餮 %1B%24%42%71%38%1B%28%42 +PASS U+993D 餽 %1B%24%42%71%39%1B%28%42 +PASS U+993E 餾 %1B%24%42%71%3A%1B%28%42 +PASS U+9942 饂 %1B%24%42%71%3B%1B%28%42 +PASS U+9945 饅 %1B%24%42%71%3D%1B%28%42 +PASS U+9949 饉 %1B%24%42%71%3C%1B%28%42 +PASS U+994B 饋 %1B%24%42%71%3F%1B%28%42 +PASS U+994C 饌 %1B%24%42%71%42%1B%28%42 +PASS U+9950 饐 %1B%24%42%71%3E%1B%28%42 +PASS U+9951 饑 %1B%24%42%71%40%1B%28%42 +PASS U+9952 饒 %1B%24%42%71%41%1B%28%42 +PASS U+9955 饕 %1B%24%42%71%43%1B%28%42 +PASS U+9957 饗 %1B%24%42%36%42%1B%28%42 +PASS U+9996 首 %1B%24%42%3C%73%1B%28%42 +PASS U+9997 馗 %1B%24%42%71%44%1B%28%42 +PASS U+9998 馘 %1B%24%42%71%45%1B%28%42 +PASS U+9999 香 %1B%24%42%39%61%1B%28%42 +FAIL U+999E 馞 %1B%24%42%7C%60%1B%28%42 assert_equals: expected "%1B%24%42%7C%60" but got "%26%23%33%39%33%32%36%3B" +PASS U+99A5 馥 %1B%24%42%71%46%1B%28%42 +PASS U+99A8 馨 %1B%24%42%33%3E%1B%28%42 +PASS U+99AC 馬 %1B%24%42%47%4F%1B%28%42 +PASS U+99AD 馭 %1B%24%42%71%47%1B%28%42 +PASS U+99AE 馮 %1B%24%42%71%48%1B%28%42 +PASS U+99B3 馳 %1B%24%42%43%5A%1B%28%42 +PASS U+99B4 馴 %1B%24%42%46%6B%1B%28%42 +PASS U+99BC 馼 %1B%24%42%71%49%1B%28%42 +PASS U+99C1 駁 %1B%24%42%47%7D%1B%28%42 +PASS U+99C4 駄 %1B%24%42%42%4C%1B%28%42 +PASS U+99C5 駅 %1B%24%42%31%58%1B%28%42 +PASS U+99C6 駆 %1B%24%42%36%6E%1B%28%42 +PASS U+99C8 駈 %1B%24%42%36%6F%1B%28%42 +PASS U+99D0 駐 %1B%24%42%43%73%1B%28%42 +PASS U+99D1 駑 %1B%24%42%71%4E%1B%28%42 +PASS U+99D2 駒 %1B%24%42%36%70%1B%28%42 +PASS U+99D5 駕 %1B%24%42%32%6F%1B%28%42 +PASS U+99D8 駘 %1B%24%42%71%4D%1B%28%42 +PASS U+99DB 駛 %1B%24%42%71%4B%1B%28%42 +PASS U+99DD 駝 %1B%24%42%71%4C%1B%28%42 +PASS U+99DF 駟 %1B%24%42%71%4A%1B%28%42 +PASS U+99E2 駢 %1B%24%42%71%58%1B%28%42 +PASS U+99ED 駭 %1B%24%42%71%4F%1B%28%42 +PASS U+99EE 駮 %1B%24%42%71%50%1B%28%42 +PASS U+99F1 駱 %1B%24%42%71%51%1B%28%42 +PASS U+99F2 駲 %1B%24%42%71%52%1B%28%42 +PASS U+99F8 駸 %1B%24%42%71%54%1B%28%42 +PASS U+99FB 駻 %1B%24%42%71%53%1B%28%42 +PASS U+99FF 駿 %1B%24%42%3D%59%1B%28%42 +PASS U+9A01 騁 %1B%24%42%71%55%1B%28%42 +PASS U+9A05 騅 %1B%24%42%71%57%1B%28%42 +PASS U+9A0E 騎 %1B%24%42%35%33%1B%28%42 +PASS U+9A0F 騏 %1B%24%42%71%56%1B%28%42 +PASS U+9A12 騒 %1B%24%42%41%7B%1B%28%42 +PASS U+9A13 験 %1B%24%42%38%33%1B%28%42 +PASS U+9A19 騙 %1B%24%42%71%59%1B%28%42 +PASS U+9A28 騨 %1B%24%42%42%4D%1B%28%42 +PASS U+9A2B 騫 %1B%24%42%71%5A%1B%28%42 +PASS U+9A30 騰 %1B%24%42%46%2D%1B%28%42 +PASS U+9A37 騷 %1B%24%42%71%5B%1B%28%42 +PASS U+9A3E 騾 %1B%24%42%71%60%1B%28%42 +PASS U+9A40 驀 %1B%24%42%71%5E%1B%28%42 +PASS U+9A42 驂 %1B%24%42%71%5D%1B%28%42 +PASS U+9A43 驃 %1B%24%42%71%5F%1B%28%42 +PASS U+9A45 驅 %1B%24%42%71%5C%1B%28%42 +PASS U+9A4D 驍 %1B%24%42%71%62%1B%28%42 +FAIL U+9A4E 驎 %1B%24%42%7C%61%1B%28%42 assert_equals: expected "%1B%24%42%7C%61" but got "%26%23%33%39%35%30%32%3B" +PASS U+9A55 驕 %1B%24%42%71%61%1B%28%42 +PASS U+9A57 驗 %1B%24%42%71%64%1B%28%42 +PASS U+9A5A 驚 %1B%24%42%36%43%1B%28%42 +PASS U+9A5B 驛 %1B%24%42%71%63%1B%28%42 +PASS U+9A5F 驟 %1B%24%42%71%65%1B%28%42 +PASS U+9A62 驢 %1B%24%42%71%66%1B%28%42 +PASS U+9A64 驤 %1B%24%42%71%68%1B%28%42 +PASS U+9A65 驥 %1B%24%42%71%67%1B%28%42 +PASS U+9A69 驩 %1B%24%42%71%69%1B%28%42 +PASS U+9A6A 驪 %1B%24%42%71%6B%1B%28%42 +PASS U+9A6B 驫 %1B%24%42%71%6A%1B%28%42 +PASS U+9AA8 骨 %1B%24%42%39%7C%1B%28%42 +PASS U+9AAD 骭 %1B%24%42%71%6C%1B%28%42 +PASS U+9AB0 骰 %1B%24%42%71%6D%1B%28%42 +PASS U+9AB8 骸 %1B%24%42%33%3C%1B%28%42 +PASS U+9ABC 骼 %1B%24%42%71%6E%1B%28%42 +PASS U+9AC0 髀 %1B%24%42%71%6F%1B%28%42 +PASS U+9AC4 髄 %1B%24%42%3F%71%1B%28%42 +PASS U+9ACF 髏 %1B%24%42%71%70%1B%28%42 +PASS U+9AD1 髑 %1B%24%42%71%71%1B%28%42 +PASS U+9AD3 髓 %1B%24%42%71%72%1B%28%42 +PASS U+9AD4 體 %1B%24%42%71%73%1B%28%42 +PASS U+9AD8 高 %1B%24%42%39%62%1B%28%42 +FAIL U+9AD9 髙 %1B%24%42%7C%62%1B%28%42 assert_equals: expected "%1B%24%42%7C%62" but got "%26%23%33%39%36%34%31%3B" +FAIL U+9ADC 髜 %1B%24%42%7C%63%1B%28%42 assert_equals: expected "%1B%24%42%7C%63" but got "%26%23%33%39%36%34%34%3B" +PASS U+9ADE 髞 %1B%24%42%71%74%1B%28%42 +PASS U+9ADF 髟 %1B%24%42%71%75%1B%28%42 +PASS U+9AE2 髢 %1B%24%42%71%76%1B%28%42 +PASS U+9AE3 髣 %1B%24%42%71%77%1B%28%42 +PASS U+9AE6 髦 %1B%24%42%71%78%1B%28%42 +PASS U+9AEA 髪 %1B%24%42%48%31%1B%28%42 +PASS U+9AEB 髫 %1B%24%42%71%7A%1B%28%42 +PASS U+9AED 髭 %1B%24%42%49%26%1B%28%42 +PASS U+9AEE 髮 %1B%24%42%71%7B%1B%28%42 +PASS U+9AEF 髯 %1B%24%42%71%79%1B%28%42 +PASS U+9AF1 髱 %1B%24%42%71%7D%1B%28%42 +PASS U+9AF4 髴 %1B%24%42%71%7C%1B%28%42 +PASS U+9AF7 髷 %1B%24%42%71%7E%1B%28%42 +PASS U+9AFB 髻 %1B%24%42%72%21%1B%28%42 +PASS U+9B06 鬆 %1B%24%42%72%22%1B%28%42 +PASS U+9B18 鬘 %1B%24%42%72%23%1B%28%42 +PASS U+9B1A 鬚 %1B%24%42%72%24%1B%28%42 +PASS U+9B1F 鬟 %1B%24%42%72%25%1B%28%42 +PASS U+9B22 鬢 %1B%24%42%72%26%1B%28%42 +PASS U+9B23 鬣 %1B%24%42%72%27%1B%28%42 +PASS U+9B25 鬥 %1B%24%42%72%28%1B%28%42 +PASS U+9B27 鬧 %1B%24%42%72%29%1B%28%42 +PASS U+9B28 鬨 %1B%24%42%72%2A%1B%28%42 +PASS U+9B29 鬩 %1B%24%42%72%2B%1B%28%42 +PASS U+9B2A 鬪 %1B%24%42%72%2C%1B%28%42 +PASS U+9B2E 鬮 %1B%24%42%72%2D%1B%28%42 +PASS U+9B2F 鬯 %1B%24%42%72%2E%1B%28%42 +PASS U+9B31 鬱 %1B%24%42%5D%35%1B%28%42 +PASS U+9B32 鬲 %1B%24%42%72%2F%1B%28%42 +PASS U+9B3B 鬻 %1B%24%42%64%78%1B%28%42 +PASS U+9B3C 鬼 %1B%24%42%35%34%1B%28%42 +PASS U+9B41 魁 %1B%24%42%33%21%1B%28%42 +PASS U+9B42 魂 %1B%24%42%3A%32%1B%28%42 +PASS U+9B43 魃 %1B%24%42%72%31%1B%28%42 +PASS U+9B44 魄 %1B%24%42%72%30%1B%28%42 +PASS U+9B45 魅 %1B%24%42%4C%25%1B%28%42 +PASS U+9B4D 魍 %1B%24%42%72%33%1B%28%42 +PASS U+9B4E 魎 %1B%24%42%72%34%1B%28%42 +PASS U+9B4F 魏 %1B%24%42%72%32%1B%28%42 +PASS U+9B51 魑 %1B%24%42%72%35%1B%28%42 +PASS U+9B54 魔 %1B%24%42%4B%62%1B%28%42 +PASS U+9B58 魘 %1B%24%42%72%36%1B%28%42 +PASS U+9B5A 魚 %1B%24%42%35%7B%1B%28%42 +PASS U+9B6F 魯 %1B%24%42%4F%25%1B%28%42 +FAIL U+9B72 魲 %1B%24%42%7C%65%1B%28%42 assert_equals: expected "%1B%24%42%7C%65" but got "%26%23%33%39%37%39%34%3B" +PASS U+9B74 魴 %1B%24%42%72%37%1B%28%42 +FAIL U+9B75 魵 %1B%24%42%7C%64%1B%28%42 assert_equals: expected "%1B%24%42%7C%64" but got "%26%23%33%39%37%39%37%3B" +PASS U+9B83 鮃 %1B%24%42%72%39%1B%28%42 +PASS U+9B8E 鮎 %1B%24%42%30%3E%1B%28%42 +FAIL U+9B8F 鮏 %1B%24%42%7C%66%1B%28%42 assert_equals: expected "%1B%24%42%7C%66" but got "%26%23%33%39%38%32%33%3B" +PASS U+9B91 鮑 %1B%24%42%72%3A%1B%28%42 +PASS U+9B92 鮒 %1B%24%42%4A%2B%1B%28%42 +PASS U+9B93 鮓 %1B%24%42%72%38%1B%28%42 +PASS U+9B96 鮖 %1B%24%42%72%3B%1B%28%42 +PASS U+9B97 鮗 %1B%24%42%72%3C%1B%28%42 +PASS U+9B9F 鮟 %1B%24%42%72%3D%1B%28%42 +PASS U+9BA0 鮠 %1B%24%42%72%3E%1B%28%42 +PASS U+9BA8 鮨 %1B%24%42%72%3F%1B%28%42 +PASS U+9BAA 鮪 %1B%24%42%4B%6E%1B%28%42 +PASS U+9BAB 鮫 %1B%24%42%3B%2D%1B%28%42 +PASS U+9BAD 鮭 %1B%24%42%3A%7A%1B%28%42 +PASS U+9BAE 鮮 %1B%24%42%41%2F%1B%28%42 +FAIL U+9BB1 鮱 %1B%24%42%7C%67%1B%28%42 assert_equals: expected "%1B%24%42%7C%67" but got "%26%23%33%39%38%35%37%3B" +PASS U+9BB4 鮴 %1B%24%42%72%40%1B%28%42 +PASS U+9BB9 鮹 %1B%24%42%72%43%1B%28%42 +FAIL U+9BBB 鮻 %1B%24%42%7C%68%1B%28%42 assert_equals: expected "%1B%24%42%7C%68" but got "%26%23%33%39%38%36%37%3B" +PASS U+9BC0 鯀 %1B%24%42%72%41%1B%28%42 +PASS U+9BC6 鯆 %1B%24%42%72%44%1B%28%42 +PASS U+9BC9 鯉 %1B%24%42%38%71%1B%28%42 +PASS U+9BCA 鯊 %1B%24%42%72%42%1B%28%42 +PASS U+9BCF 鯏 %1B%24%42%72%45%1B%28%42 +PASS U+9BD1 鯑 %1B%24%42%72%46%1B%28%42 +PASS U+9BD2 鯒 %1B%24%42%72%47%1B%28%42 +PASS U+9BD4 鯔 %1B%24%42%72%4B%1B%28%42 +PASS U+9BD6 鯖 %1B%24%42%3B%2A%1B%28%42 +PASS U+9BDB 鯛 %1B%24%42%42%64%1B%28%42 +PASS U+9BE1 鯡 %1B%24%42%72%4C%1B%28%42 +PASS U+9BE2 鯢 %1B%24%42%72%49%1B%28%42 +PASS U+9BE3 鯣 %1B%24%42%72%48%1B%28%42 +PASS U+9BE4 鯤 %1B%24%42%72%4A%1B%28%42 +PASS U+9BE8 鯨 %1B%24%42%37%5F%1B%28%42 +PASS U+9BF0 鯰 %1B%24%42%72%50%1B%28%42 +PASS U+9BF1 鯱 %1B%24%42%72%4F%1B%28%42 +PASS U+9BF2 鯲 %1B%24%42%72%4E%1B%28%42 +PASS U+9BF5 鯵 %1B%24%42%30%33%1B%28%42 +FAIL U+9C00 鰀 %1B%24%42%7C%69%1B%28%42 assert_equals: expected "%1B%24%42%7C%69" but got "%26%23%33%39%39%33%36%3B" +PASS U+9C04 鰄 %1B%24%42%72%5A%1B%28%42 +PASS U+9C06 鰆 %1B%24%42%72%56%1B%28%42 +PASS U+9C08 鰈 %1B%24%42%72%57%1B%28%42 +PASS U+9C09 鰉 %1B%24%42%72%53%1B%28%42 +PASS U+9C0A 鰊 %1B%24%42%72%59%1B%28%42 +PASS U+9C0C 鰌 %1B%24%42%72%55%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_7001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_7001-last-expected.txt new file mode 100644 index 0000000..250a5107 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp_7001-last-expected.txt
@@ -0,0 +1,333 @@ +This is a testharness.js-based test. +Found 329 tests; 288 PASS, 41 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+9C0D 鰍 %1B%24%42%33%62%1B%28%42 +PASS U+9C10 鰐 %1B%24%42%4F%4C%1B%28%42 +PASS U+9C12 鰒 %1B%24%42%72%58%1B%28%42 +PASS U+9C13 鰓 %1B%24%42%72%54%1B%28%42 +PASS U+9C14 鰔 %1B%24%42%72%52%1B%28%42 +PASS U+9C15 鰕 %1B%24%42%72%51%1B%28%42 +PASS U+9C1B 鰛 %1B%24%42%72%5C%1B%28%42 +PASS U+9C21 鰡 %1B%24%42%72%5F%1B%28%42 +PASS U+9C24 鰤 %1B%24%42%72%5E%1B%28%42 +PASS U+9C25 鰥 %1B%24%42%72%5D%1B%28%42 +PASS U+9C2D 鰭 %1B%24%42%49%49%1B%28%42 +PASS U+9C2E 鰮 %1B%24%42%72%5B%1B%28%42 +PASS U+9C2F 鰯 %1B%24%42%30%73%1B%28%42 +PASS U+9C30 鰰 %1B%24%42%72%60%1B%28%42 +PASS U+9C32 鰲 %1B%24%42%72%62%1B%28%42 +PASS U+9C39 鰹 %1B%24%42%33%6F%1B%28%42 +PASS U+9C3A 鰺 %1B%24%42%72%4D%1B%28%42 +PASS U+9C3B 鰻 %1B%24%42%31%37%1B%28%42 +PASS U+9C3E 鰾 %1B%24%42%72%64%1B%28%42 +PASS U+9C46 鱆 %1B%24%42%72%63%1B%28%42 +PASS U+9C47 鱇 %1B%24%42%72%61%1B%28%42 +PASS U+9C48 鱈 %1B%24%42%43%2D%1B%28%42 +PASS U+9C52 鱒 %1B%24%42%4B%70%1B%28%42 +PASS U+9C57 鱗 %1B%24%42%4E%5A%1B%28%42 +PASS U+9C5A 鱚 %1B%24%42%72%65%1B%28%42 +PASS U+9C60 鱠 %1B%24%42%72%66%1B%28%42 +PASS U+9C67 鱧 %1B%24%42%72%67%1B%28%42 +PASS U+9C76 鱶 %1B%24%42%72%68%1B%28%42 +PASS U+9C78 鱸 %1B%24%42%72%69%1B%28%42 +PASS U+9CE5 鳥 %1B%24%42%44%3B%1B%28%42 +PASS U+9CE7 鳧 %1B%24%42%72%6A%1B%28%42 +PASS U+9CE9 鳩 %1B%24%42%48%37%1B%28%42 +PASS U+9CEB 鳫 %1B%24%42%72%6F%1B%28%42 +PASS U+9CEC 鳬 %1B%24%42%72%6B%1B%28%42 +PASS U+9CF0 鳰 %1B%24%42%72%6C%1B%28%42 +PASS U+9CF3 鳳 %1B%24%42%4B%31%1B%28%42 +PASS U+9CF4 鳴 %1B%24%42%4C%44%1B%28%42 +PASS U+9CF6 鳶 %1B%24%42%46%50%1B%28%42 +PASS U+9D03 鴃 %1B%24%42%72%70%1B%28%42 +PASS U+9D06 鴆 %1B%24%42%72%71%1B%28%42 +PASS U+9D07 鴇 %1B%24%42%46%3E%1B%28%42 +PASS U+9D08 鴈 %1B%24%42%72%6E%1B%28%42 +PASS U+9D09 鴉 %1B%24%42%72%6D%1B%28%42 +PASS U+9D0E 鴎 %1B%24%42%32%2A%1B%28%42 +PASS U+9D12 鴒 %1B%24%42%72%79%1B%28%42 +PASS U+9D15 鴕 %1B%24%42%72%78%1B%28%42 +PASS U+9D1B 鴛 %1B%24%42%31%75%1B%28%42 +PASS U+9D1F 鴟 %1B%24%42%72%76%1B%28%42 +PASS U+9D23 鴣 %1B%24%42%72%75%1B%28%42 +PASS U+9D26 鴦 %1B%24%42%72%73%1B%28%42 +PASS U+9D28 鴨 %1B%24%42%33%7B%1B%28%42 +PASS U+9D2A 鴪 %1B%24%42%72%72%1B%28%42 +PASS U+9D2B 鴫 %1B%24%42%3C%32%1B%28%42 +PASS U+9D2C 鴬 %1B%24%42%32%29%1B%28%42 +PASS U+9D3B 鴻 %1B%24%42%39%63%1B%28%42 +PASS U+9D3E 鴾 %1B%24%42%72%7C%1B%28%42 +PASS U+9D3F 鴿 %1B%24%42%72%7B%1B%28%42 +PASS U+9D41 鵁 %1B%24%42%72%7A%1B%28%42 +PASS U+9D44 鵄 %1B%24%42%72%77%1B%28%42 +PASS U+9D46 鵆 %1B%24%42%72%7D%1B%28%42 +PASS U+9D48 鵈 %1B%24%42%72%7E%1B%28%42 +PASS U+9D50 鵐 %1B%24%42%73%25%1B%28%42 +PASS U+9D51 鵑 %1B%24%42%73%24%1B%28%42 +PASS U+9D59 鵙 %1B%24%42%73%26%1B%28%42 +PASS U+9D5C 鵜 %1B%24%42%31%2D%1B%28%42 +PASS U+9D5D 鵝 %1B%24%42%73%21%1B%28%42 +PASS U+9D5E 鵞 %1B%24%42%73%22%1B%28%42 +PASS U+9D60 鵠 %1B%24%42%39%74%1B%28%42 +PASS U+9D61 鵡 %1B%24%42%4C%39%1B%28%42 +PASS U+9D64 鵤 %1B%24%42%73%23%1B%28%42 +FAIL U+9D6B 鵫 %1B%24%42%7C%6B%1B%28%42 assert_equals: expected "%1B%24%42%7C%6B" but got "%26%23%34%30%32%39%39%3B" +PASS U+9D6C 鵬 %1B%24%42%4B%32%1B%28%42 +PASS U+9D6F 鵯 %1B%24%42%73%2B%1B%28%42 +FAIL U+9D70 鵰 %1B%24%42%7C%6A%1B%28%42 assert_equals: expected "%1B%24%42%7C%6A" but got "%26%23%34%30%33%30%34%3B" +PASS U+9D72 鵲 %1B%24%42%73%27%1B%28%42 +PASS U+9D7A 鵺 %1B%24%42%73%2C%1B%28%42 +PASS U+9D87 鶇 %1B%24%42%73%29%1B%28%42 +PASS U+9D89 鶉 %1B%24%42%73%28%1B%28%42 +PASS U+9D8F 鶏 %1B%24%42%37%5C%1B%28%42 +PASS U+9D9A 鶚 %1B%24%42%73%2D%1B%28%42 +PASS U+9DA4 鶤 %1B%24%42%73%2E%1B%28%42 +PASS U+9DA9 鶩 %1B%24%42%73%2F%1B%28%42 +PASS U+9DAB 鶫 %1B%24%42%73%2A%1B%28%42 +PASS U+9DAF 鶯 %1B%24%42%72%74%1B%28%42 +PASS U+9DB2 鶲 %1B%24%42%73%30%1B%28%42 +PASS U+9DB4 鶴 %1B%24%42%44%61%1B%28%42 +PASS U+9DB8 鶸 %1B%24%42%73%34%1B%28%42 +PASS U+9DBA 鶺 %1B%24%42%73%35%1B%28%42 +PASS U+9DBB 鶻 %1B%24%42%73%33%1B%28%42 +PASS U+9DC1 鷁 %1B%24%42%73%32%1B%28%42 +PASS U+9DC2 鷂 %1B%24%42%73%38%1B%28%42 +PASS U+9DC4 鷄 %1B%24%42%73%31%1B%28%42 +PASS U+9DC6 鷆 %1B%24%42%73%36%1B%28%42 +PASS U+9DCF 鷏 %1B%24%42%73%37%1B%28%42 +PASS U+9DD3 鷓 %1B%24%42%73%3A%1B%28%42 +PASS U+9DD9 鷙 %1B%24%42%73%39%1B%28%42 +PASS U+9DE6 鷦 %1B%24%42%73%3C%1B%28%42 +PASS U+9DED 鷭 %1B%24%42%73%3D%1B%28%42 +PASS U+9DEF 鷯 %1B%24%42%73%3E%1B%28%42 +PASS U+9DF2 鷲 %1B%24%42%4F%49%1B%28%42 +PASS U+9DF8 鷸 %1B%24%42%73%3B%1B%28%42 +PASS U+9DF9 鷹 %1B%24%42%42%6B%1B%28%42 +PASS U+9DFA 鷺 %1B%24%42%3A%6D%1B%28%42 +PASS U+9DFD 鷽 %1B%24%42%73%3F%1B%28%42 +FAIL U+9E19 鸙 %1B%24%42%7C%6D%1B%28%42 assert_equals: expected "%1B%24%42%7C%6D" but got "%26%23%34%30%34%37%33%3B" +PASS U+9E1A 鸚 %1B%24%42%73%40%1B%28%42 +PASS U+9E1B 鸛 %1B%24%42%73%41%1B%28%42 +PASS U+9E1E 鸞 %1B%24%42%73%42%1B%28%42 +PASS U+9E75 鹵 %1B%24%42%73%43%1B%28%42 +PASS U+9E78 鹸 %1B%24%42%38%34%1B%28%42 +PASS U+9E79 鹹 %1B%24%42%73%44%1B%28%42 +PASS U+9E7D 鹽 %1B%24%42%73%45%1B%28%42 +PASS U+9E7F 鹿 %1B%24%42%3C%2F%1B%28%42 +PASS U+9E81 麁 %1B%24%42%73%46%1B%28%42 +PASS U+9E88 麈 %1B%24%42%73%47%1B%28%42 +PASS U+9E8B 麋 %1B%24%42%73%48%1B%28%42 +PASS U+9E8C 麌 %1B%24%42%73%49%1B%28%42 +PASS U+9E91 麑 %1B%24%42%73%4C%1B%28%42 +PASS U+9E92 麒 %1B%24%42%73%4A%1B%28%42 +PASS U+9E93 麓 %1B%24%42%4F%3C%1B%28%42 +PASS U+9E95 麕 %1B%24%42%73%4B%1B%28%42 +PASS U+9E97 麗 %1B%24%42%4E%6F%1B%28%42 +PASS U+9E9D 麝 %1B%24%42%73%4D%1B%28%42 +PASS U+9E9F 麟 %1B%24%42%4E%5B%1B%28%42 +PASS U+9EA5 麥 %1B%24%42%73%4E%1B%28%42 +PASS U+9EA6 麦 %1B%24%42%47%7E%1B%28%42 +PASS U+9EA9 麩 %1B%24%42%73%4F%1B%28%42 +PASS U+9EAA 麪 %1B%24%42%73%51%1B%28%42 +PASS U+9EAD 麭 %1B%24%42%73%52%1B%28%42 +PASS U+9EB8 麸 %1B%24%42%73%50%1B%28%42 +PASS U+9EB9 麹 %1B%24%42%39%6D%1B%28%42 +PASS U+9EBA 麺 %1B%24%42%4C%4D%1B%28%42 +PASS U+9EBB 麻 %1B%24%42%4B%63%1B%28%42 +PASS U+9EBC 麼 %1B%24%42%56%77%1B%28%42 +PASS U+9EBE 麾 %1B%24%42%5D%60%1B%28%42 +PASS U+9EBF 麿 %1B%24%42%4B%7B%1B%28%42 +PASS U+9EC4 黄 %1B%24%42%32%2B%1B%28%42 +PASS U+9ECC 黌 %1B%24%42%73%54%1B%28%42 +PASS U+9ECD 黍 %1B%24%42%35%50%1B%28%42 +PASS U+9ECE 黎 %1B%24%42%73%55%1B%28%42 +PASS U+9ECF 黏 %1B%24%42%73%56%1B%28%42 +PASS U+9ED0 黐 %1B%24%42%73%57%1B%28%42 +FAIL U+9ED1 黑 %1B%24%42%7C%6E%1B%28%42 assert_equals: expected "%1B%24%42%7C%6E" but got "%26%23%34%30%36%35%37%3B" +PASS U+9ED2 黒 %1B%24%42%39%75%1B%28%42 +PASS U+9ED4 黔 %1B%24%42%73%58%1B%28%42 +PASS U+9ED8 默 %1B%24%42%60%54%1B%28%42 +PASS U+9ED9 黙 %1B%24%42%4C%5B%1B%28%42 +PASS U+9EDB 黛 %1B%24%42%42%63%1B%28%42 +PASS U+9EDC 黜 %1B%24%42%73%59%1B%28%42 +PASS U+9EDD 黝 %1B%24%42%73%5B%1B%28%42 +PASS U+9EDE 點 %1B%24%42%73%5A%1B%28%42 +PASS U+9EE0 黠 %1B%24%42%73%5C%1B%28%42 +PASS U+9EE5 黥 %1B%24%42%73%5D%1B%28%42 +PASS U+9EE8 黨 %1B%24%42%73%5E%1B%28%42 +PASS U+9EEF 黯 %1B%24%42%73%5F%1B%28%42 +PASS U+9EF4 黴 %1B%24%42%73%60%1B%28%42 +PASS U+9EF6 黶 %1B%24%42%73%61%1B%28%42 +PASS U+9EF7 黷 %1B%24%42%73%62%1B%28%42 +PASS U+9EF9 黹 %1B%24%42%73%63%1B%28%42 +PASS U+9EFB 黻 %1B%24%42%73%64%1B%28%42 +PASS U+9EFC 黼 %1B%24%42%73%65%1B%28%42 +PASS U+9EFD 黽 %1B%24%42%73%66%1B%28%42 +PASS U+9F07 鼇 %1B%24%42%73%67%1B%28%42 +PASS U+9F08 鼈 %1B%24%42%73%68%1B%28%42 +PASS U+9F0E 鼎 %1B%24%42%45%24%1B%28%42 +PASS U+9F13 鼓 %1B%24%42%38%5D%1B%28%42 +PASS U+9F15 鼕 %1B%24%42%73%6A%1B%28%42 +PASS U+9F20 鼠 %1B%24%42%41%4D%1B%28%42 +PASS U+9F21 鼡 %1B%24%42%73%6B%1B%28%42 +PASS U+9F2C 鼬 %1B%24%42%73%6C%1B%28%42 +PASS U+9F3B 鼻 %1B%24%42%49%21%1B%28%42 +PASS U+9F3E 鼾 %1B%24%42%73%6D%1B%28%42 +PASS U+9F4A 齊 %1B%24%42%73%6E%1B%28%42 +PASS U+9F4B 齋 %1B%24%42%63%37%1B%28%42 +PASS U+9F4E 齎 %1B%24%42%6C%5A%1B%28%42 +PASS U+9F4F 齏 %1B%24%42%70%6D%1B%28%42 +PASS U+9F52 齒 %1B%24%42%73%6F%1B%28%42 +PASS U+9F54 齔 %1B%24%42%73%70%1B%28%42 +PASS U+9F5F 齟 %1B%24%42%73%72%1B%28%42 +PASS U+9F60 齠 %1B%24%42%73%73%1B%28%42 +PASS U+9F61 齡 %1B%24%42%73%74%1B%28%42 +PASS U+9F62 齢 %1B%24%42%4E%70%1B%28%42 +PASS U+9F63 齣 %1B%24%42%73%71%1B%28%42 +PASS U+9F66 齦 %1B%24%42%73%75%1B%28%42 +PASS U+9F67 齧 %1B%24%42%73%76%1B%28%42 +PASS U+9F6A 齪 %1B%24%42%73%78%1B%28%42 +PASS U+9F6C 齬 %1B%24%42%73%77%1B%28%42 +PASS U+9F72 齲 %1B%24%42%73%7A%1B%28%42 +PASS U+9F76 齶 %1B%24%42%73%7B%1B%28%42 +PASS U+9F77 齷 %1B%24%42%73%79%1B%28%42 +PASS U+9F8D 龍 %1B%24%42%4E%36%1B%28%42 +PASS U+9F95 龕 %1B%24%42%73%7C%1B%28%42 +PASS U+9F9C 龜 %1B%24%42%73%7D%1B%28%42 +PASS U+9F9D 龝 %1B%24%42%63%54%1B%28%42 +PASS U+9FA0 龠 %1B%24%42%73%7E%1B%28%42 +FAIL U+F929 朗 %1B%24%42%7A%46%1B%28%42 assert_equals: expected "%1B%24%42%7A%46" but got "%26%23%36%33%37%38%35%3B" +FAIL U+F9DC 隆 %1B%24%42%7C%4F%1B%28%42 assert_equals: expected "%1B%24%42%7C%4F" but got "%26%23%36%33%39%36%34%3B" +FAIL U+FA0E 﨎 %1B%24%42%79%54%1B%28%42 assert_equals: expected "%1B%24%42%79%54" but got "%26%23%36%34%30%31%34%3B" +FAIL U+FA0F 﨏 %1B%24%42%79%5F%1B%28%42 assert_equals: expected "%1B%24%42%79%5F" but got "%26%23%36%34%30%31%35%3B" +FAIL U+FA10 塚 %1B%24%42%79%60%1B%28%42 assert_equals: expected "%1B%24%42%79%60" but got "%26%23%36%34%30%31%36%3B" +FAIL U+FA11 﨑 %1B%24%42%79%75%1B%28%42 assert_equals: expected "%1B%24%42%79%75" but got "%26%23%36%34%30%31%37%3B" +FAIL U+FA12 晴 %1B%24%42%7A%3E%1B%28%42 assert_equals: expected "%1B%24%42%7A%3E" but got "%26%23%36%34%30%31%38%3B" +FAIL U+FA13 﨓 %1B%24%42%7A%4E%1B%28%42 assert_equals: expected "%1B%24%42%7A%4E" but got "%26%23%36%34%30%31%39%3B" +FAIL U+FA14 﨔 %1B%24%42%7A%50%1B%28%42 assert_equals: expected "%1B%24%42%7A%50" but got "%26%23%36%34%30%32%30%3B" +FAIL U+FA15 凞 %1B%24%42%7A%7B%1B%28%42 assert_equals: expected "%1B%24%42%7A%7B" but got "%26%23%36%34%30%32%31%3B" +FAIL U+FA16 猪 %1B%24%42%7B%23%1B%28%42 assert_equals: expected "%1B%24%42%7B%23" but got "%26%23%36%34%30%32%32%3B" +FAIL U+FA17 益 %1B%24%42%7B%3A%1B%28%42 assert_equals: expected "%1B%24%42%7B%3A" but got "%26%23%36%34%30%32%33%3B" +FAIL U+FA18 礼 %1B%24%42%7B%42%1B%28%42 assert_equals: expected "%1B%24%42%7B%42" but got "%26%23%36%34%30%32%34%3B" +FAIL U+FA19 神 %1B%24%42%7B%43%1B%28%42 assert_equals: expected "%1B%24%42%7B%43" but got "%26%23%36%34%30%32%35%3B" +FAIL U+FA1A 祥 %1B%24%42%7B%44%1B%28%42 assert_equals: expected "%1B%24%42%7B%44" but got "%26%23%36%34%30%32%36%3B" +FAIL U+FA1B 福 %1B%24%42%7B%46%1B%28%42 assert_equals: expected "%1B%24%42%7B%46" but got "%26%23%36%34%30%32%37%3B" +FAIL U+FA1C 靖 %1B%24%42%7B%4A%1B%28%42 assert_equals: expected "%1B%24%42%7B%4A" but got "%26%23%36%34%30%32%38%3B" +FAIL U+FA1D 精 %1B%24%42%7B%4D%1B%28%42 assert_equals: expected "%1B%24%42%7B%4D" but got "%26%23%36%34%30%32%39%3B" +FAIL U+FA1E 羽 %1B%24%42%7B%56%1B%28%42 assert_equals: expected "%1B%24%42%7B%56" but got "%26%23%36%34%30%33%30%3B" +FAIL U+FA1F 﨟 %1B%24%42%7B%61%1B%28%42 assert_equals: expected "%1B%24%42%7B%61" but got "%26%23%36%34%30%33%31%3B" +FAIL U+FA20 蘒 %1B%24%42%7B%63%1B%28%42 assert_equals: expected "%1B%24%42%7B%63" but got "%26%23%36%34%30%33%32%3B" +FAIL U+FA21 﨡 %1B%24%42%7B%64%1B%28%42 assert_equals: expected "%1B%24%42%7B%64" but got "%26%23%36%34%30%33%33%3B" +FAIL U+FA22 諸 %1B%24%42%7B%6D%1B%28%42 assert_equals: expected "%1B%24%42%7B%6D" but got "%26%23%36%34%30%33%34%3B" +FAIL U+FA23 﨣 %1B%24%42%7B%75%1B%28%42 assert_equals: expected "%1B%24%42%7B%75" but got "%26%23%36%34%30%33%35%3B" +FAIL U+FA24 﨤 %1B%24%42%7B%77%1B%28%42 assert_equals: expected "%1B%24%42%7B%77" but got "%26%23%36%34%30%33%36%3B" +FAIL U+FA25 逸 %1B%24%42%7B%78%1B%28%42 assert_equals: expected "%1B%24%42%7B%78" but got "%26%23%36%34%30%33%37%3B" +FAIL U+FA26 都 %1B%24%42%7B%7B%1B%28%42 assert_equals: expected "%1B%24%42%7B%7B" but got "%26%23%36%34%30%33%38%3B" +FAIL U+FA27 﨧 %1B%24%42%7C%39%1B%28%42 assert_equals: expected "%1B%24%42%7C%39" but got "%26%23%36%34%30%33%39%3B" +FAIL U+FA28 﨨 %1B%24%42%7C%40%1B%28%42 assert_equals: expected "%1B%24%42%7C%40" but got "%26%23%36%34%30%34%30%3B" +FAIL U+FA29 﨩 %1B%24%42%7C%50%1B%28%42 assert_equals: expected "%1B%24%42%7C%50" but got "%26%23%36%34%30%34%31%3B" +FAIL U+FA2A 飯 %1B%24%42%7C%5C%1B%28%42 assert_equals: expected "%1B%24%42%7C%5C" but got "%26%23%36%34%30%34%32%3B" +FAIL U+FA2B 飼 %1B%24%42%7C%5D%1B%28%42 assert_equals: expected "%1B%24%42%7C%5D" but got "%26%23%36%34%30%34%33%3B" +FAIL U+FA2C 館 %1B%24%42%7C%5F%1B%28%42 assert_equals: expected "%1B%24%42%7C%5F" but got "%26%23%36%34%30%34%34%3B" +FAIL U+FA2D 鶴 %1B%24%42%7C%6C%1B%28%42 assert_equals: expected "%1B%24%42%7C%6C" but got "%26%23%36%34%30%34%35%3B" +PASS U+FF01 ! %1B%24%42%21%2A%1B%28%42 +FAIL U+FF02 " %1B%24%42%7C%7E%1B%28%42 assert_equals: expected "%1B%24%42%7C%7E" but got "%26%23%36%35%32%38%32%3B" +PASS U+FF03 # %1B%24%42%21%74%1B%28%42 +PASS U+FF04 $ %1B%24%42%21%70%1B%28%42 +PASS U+FF05 % %1B%24%42%21%73%1B%28%42 +PASS U+FF06 & %1B%24%42%21%75%1B%28%42 +FAIL U+FF07 ' %1B%24%42%7C%7D%1B%28%42 assert_equals: expected "%1B%24%42%7C%7D" but got "%26%23%36%35%32%38%37%3B" +PASS U+FF08 ( %1B%24%42%21%4A%1B%28%42 +PASS U+FF09 ) %1B%24%42%21%4B%1B%28%42 +PASS U+FF0A * %1B%24%42%21%76%1B%28%42 +PASS U+FF0B + %1B%24%42%21%5C%1B%28%42 +PASS U+FF0C , %1B%24%42%21%24%1B%28%42 +PASS U+FF0D - %1B%24%42%21%5D%1B%28%42 +PASS U+FF0E . %1B%24%42%21%25%1B%28%42 +PASS U+FF0F / %1B%24%42%21%3F%1B%28%42 +PASS U+FF10 0 %1B%24%42%23%30%1B%28%42 +PASS U+FF11 1 %1B%24%42%23%31%1B%28%42 +PASS U+FF12 2 %1B%24%42%23%32%1B%28%42 +PASS U+FF13 3 %1B%24%42%23%33%1B%28%42 +PASS U+FF14 4 %1B%24%42%23%34%1B%28%42 +PASS U+FF15 5 %1B%24%42%23%35%1B%28%42 +PASS U+FF16 6 %1B%24%42%23%36%1B%28%42 +PASS U+FF17 7 %1B%24%42%23%37%1B%28%42 +PASS U+FF18 8 %1B%24%42%23%38%1B%28%42 +PASS U+FF19 9 %1B%24%42%23%39%1B%28%42 +PASS U+FF1A : %1B%24%42%21%27%1B%28%42 +PASS U+FF1B ; %1B%24%42%21%28%1B%28%42 +PASS U+FF1C < %1B%24%42%21%63%1B%28%42 +PASS U+FF1D = %1B%24%42%21%61%1B%28%42 +PASS U+FF1E > %1B%24%42%21%64%1B%28%42 +PASS U+FF1F ? %1B%24%42%21%29%1B%28%42 +PASS U+FF20 @ %1B%24%42%21%77%1B%28%42 +PASS U+FF21 A %1B%24%42%23%41%1B%28%42 +PASS U+FF22 B %1B%24%42%23%42%1B%28%42 +PASS U+FF23 C %1B%24%42%23%43%1B%28%42 +PASS U+FF24 D %1B%24%42%23%44%1B%28%42 +PASS U+FF25 E %1B%24%42%23%45%1B%28%42 +PASS U+FF26 F %1B%24%42%23%46%1B%28%42 +PASS U+FF27 G %1B%24%42%23%47%1B%28%42 +PASS U+FF28 H %1B%24%42%23%48%1B%28%42 +PASS U+FF29 I %1B%24%42%23%49%1B%28%42 +PASS U+FF2A J %1B%24%42%23%4A%1B%28%42 +PASS U+FF2B K %1B%24%42%23%4B%1B%28%42 +PASS U+FF2C L %1B%24%42%23%4C%1B%28%42 +PASS U+FF2D M %1B%24%42%23%4D%1B%28%42 +PASS U+FF2E N %1B%24%42%23%4E%1B%28%42 +PASS U+FF2F O %1B%24%42%23%4F%1B%28%42 +PASS U+FF30 P %1B%24%42%23%50%1B%28%42 +PASS U+FF31 Q %1B%24%42%23%51%1B%28%42 +PASS U+FF32 R %1B%24%42%23%52%1B%28%42 +PASS U+FF33 S %1B%24%42%23%53%1B%28%42 +PASS U+FF34 T %1B%24%42%23%54%1B%28%42 +PASS U+FF35 U %1B%24%42%23%55%1B%28%42 +PASS U+FF36 V %1B%24%42%23%56%1B%28%42 +PASS U+FF37 W %1B%24%42%23%57%1B%28%42 +PASS U+FF38 X %1B%24%42%23%58%1B%28%42 +PASS U+FF39 Y %1B%24%42%23%59%1B%28%42 +PASS U+FF3A Z %1B%24%42%23%5A%1B%28%42 +PASS U+FF3B [ %1B%24%42%21%4E%1B%28%42 +PASS U+FF3C \ %1B%24%42%21%40%1B%28%42 +PASS U+FF3D ] %1B%24%42%21%4F%1B%28%42 +PASS U+FF3E ^ %1B%24%42%21%30%1B%28%42 +PASS U+FF3F _ %1B%24%42%21%32%1B%28%42 +PASS U+FF40 ` %1B%24%42%21%2E%1B%28%42 +PASS U+FF41 a %1B%24%42%23%61%1B%28%42 +PASS U+FF42 b %1B%24%42%23%62%1B%28%42 +PASS U+FF43 c %1B%24%42%23%63%1B%28%42 +PASS U+FF44 d %1B%24%42%23%64%1B%28%42 +PASS U+FF45 e %1B%24%42%23%65%1B%28%42 +PASS U+FF46 f %1B%24%42%23%66%1B%28%42 +PASS U+FF47 g %1B%24%42%23%67%1B%28%42 +PASS U+FF48 h %1B%24%42%23%68%1B%28%42 +PASS U+FF49 i %1B%24%42%23%69%1B%28%42 +PASS U+FF4A j %1B%24%42%23%6A%1B%28%42 +PASS U+FF4B k %1B%24%42%23%6B%1B%28%42 +PASS U+FF4C l %1B%24%42%23%6C%1B%28%42 +PASS U+FF4D m %1B%24%42%23%6D%1B%28%42 +PASS U+FF4E n %1B%24%42%23%6E%1B%28%42 +PASS U+FF4F o %1B%24%42%23%6F%1B%28%42 +PASS U+FF50 p %1B%24%42%23%70%1B%28%42 +PASS U+FF51 q %1B%24%42%23%71%1B%28%42 +PASS U+FF52 r %1B%24%42%23%72%1B%28%42 +PASS U+FF53 s %1B%24%42%23%73%1B%28%42 +PASS U+FF54 t %1B%24%42%23%74%1B%28%42 +PASS U+FF55 u %1B%24%42%23%75%1B%28%42 +PASS U+FF56 v %1B%24%42%23%76%1B%28%42 +PASS U+FF57 w %1B%24%42%23%77%1B%28%42 +PASS U+FF58 x %1B%24%42%23%78%1B%28%42 +PASS U+FF59 y %1B%24%42%23%79%1B%28%42 +PASS U+FF5A z %1B%24%42%23%7A%1B%28%42 +PASS U+FF5B { %1B%24%42%21%50%1B%28%42 +PASS U+FF5C | %1B%24%42%21%43%1B%28%42 +PASS U+FF5D } %1B%24%42%21%51%1B%28%42 +PASS U+FF5E ~ %1B%24%42%21%41%1B%28%42 +PASS U+FFE0 ¢ %1B%24%42%21%71%1B%28%42 +PASS U+FFE1 £ %1B%24%42%21%72%1B%28%42 +PASS U+FFE2 ¬ %1B%24%42%22%4C%1B%28%42 +PASS U+FFE3  ̄ %1B%24%42%21%31%1B%28%42 +FAIL U+FFE4 ¦ %1B%24%42%7C%7C%1B%28%42 assert_equals: expected "%1B%24%42%7C%7C" but got "%26%23%36%35%35%30%38%3B" +PASS U+FFE5 ¥ %1B%24%42%21%6F%1B%28%42 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html index 13d4b96..b288479d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html
@@ -4,8 +4,30 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022 JP encoding errors (form, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,167 +40,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = "\u0019"; -var encodedSeperator = encodeURIComponent("\u0019"); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x4e00; i < 0x9fba; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } - } - - for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0xfa70; i < 0xfada; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - normalizeStr(item.expected) - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "iso-2022-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesHan; +var separator = "\u0019"; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html index 1f1cce21..eb4d8d23 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html
@@ -4,8 +4,21 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022 JP encoding errors (form, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,132 +31,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = "\u0019"; -var encodedSeperator = encodeURIComponent("\u0019"); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0xac00; i < 0xd7af; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - normalizeStr(item.expected) - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "iso-2022-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesHangul; +var separator = "\u0019"; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html index 54acbe48..95467ba 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html
@@ -4,8 +4,13 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022 JP encoding errors (form, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,176 +23,24 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = "\u0019"; -var encodedSeperator = encodeURIComponent("\u0019"); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (var i = 0xa0; i < 0x4ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } - } - - for (i = 0x2000; i < 0x23ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } - } - - for (i = 0x2460; i < 0x26ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } - } - - for (i = 0x3000; i < 0x33ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } - } - - for (i = 0xff00; i < 0xffef; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - normalizeStr(item.expected) - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "iso-2022-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesMisc; +var separator = "\u0019"; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html index f196c31..3a1b3b9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html
@@ -4,8 +4,17 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022 JP encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,129 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = "\u0019"; -var encodedSeperator = encodeURIComponent("\u0019"); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - item.expected = item.expected.replace(/%1B%28%42$/, ""); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "iso-2022-jp"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(normalizeStr(results[j]), cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = iso2022jpEncoder; +var ranges = rangesAll; +var separator = "\u0019"; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%").replace(/%1B%28%42$/, ""); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1-1000-expected.txt new file mode 100644 index 0000000..072a3b6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1-1000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 961 PASS, 39 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+A5 ¥ %1B%28%4A%5C +PASS U+A7 § %1B%24%42%21%78 +PASS U+A8 ¨ %1B%24%42%21%2F +PASS U+B0 ° %1B%24%42%21%6B +PASS U+B1 ± %1B%24%42%21%5E +PASS U+B4 ´ %1B%24%42%21%2D +PASS U+B6 ¶ %1B%24%42%22%79 +PASS U+D7 × %1B%24%42%21%5F +PASS U+F7 ÷ %1B%24%42%21%60 +PASS U+391 Α %1B%24%42%26%21 +PASS U+392 Β %1B%24%42%26%22 +PASS U+393 Γ %1B%24%42%26%23 +PASS U+394 Δ %1B%24%42%26%24 +PASS U+395 Ε %1B%24%42%26%25 +PASS U+396 Ζ %1B%24%42%26%26 +PASS U+397 Η %1B%24%42%26%27 +PASS U+398 Θ %1B%24%42%26%28 +PASS U+399 Ι %1B%24%42%26%29 +PASS U+39A Κ %1B%24%42%26%2A +PASS U+39B Λ %1B%24%42%26%2B +PASS U+39C Μ %1B%24%42%26%2C +PASS U+39D Ν %1B%24%42%26%2D +PASS U+39E Ξ %1B%24%42%26%2E +PASS U+39F Ο %1B%24%42%26%2F +PASS U+3A0 Π %1B%24%42%26%30 +PASS U+3A1 Ρ %1B%24%42%26%31 +PASS U+3A3 Σ %1B%24%42%26%32 +PASS U+3A4 Τ %1B%24%42%26%33 +PASS U+3A5 Υ %1B%24%42%26%34 +PASS U+3A6 Φ %1B%24%42%26%35 +PASS U+3A7 Χ %1B%24%42%26%36 +PASS U+3A8 Ψ %1B%24%42%26%37 +PASS U+3A9 Ω %1B%24%42%26%38 +PASS U+3B1 α %1B%24%42%26%41 +PASS U+3B2 β %1B%24%42%26%42 +PASS U+3B3 γ %1B%24%42%26%43 +PASS U+3B4 δ %1B%24%42%26%44 +PASS U+3B5 ε %1B%24%42%26%45 +PASS U+3B6 ζ %1B%24%42%26%46 +PASS U+3B7 η %1B%24%42%26%47 +PASS U+3B8 θ %1B%24%42%26%48 +PASS U+3B9 ι %1B%24%42%26%49 +PASS U+3BA κ %1B%24%42%26%4A +PASS U+3BB λ %1B%24%42%26%4B +PASS U+3BC μ %1B%24%42%26%4C +PASS U+3BD ν %1B%24%42%26%4D +PASS U+3BE ξ %1B%24%42%26%4E +PASS U+3BF ο %1B%24%42%26%4F +PASS U+3C0 π %1B%24%42%26%50 +PASS U+3C1 ρ %1B%24%42%26%51 +PASS U+3C3 σ %1B%24%42%26%52 +PASS U+3C4 τ %1B%24%42%26%53 +PASS U+3C5 υ %1B%24%42%26%54 +PASS U+3C6 φ %1B%24%42%26%55 +PASS U+3C7 χ %1B%24%42%26%56 +PASS U+3C8 ψ %1B%24%42%26%57 +PASS U+3C9 ω %1B%24%42%26%58 +PASS U+401 Ё %1B%24%42%27%27 +PASS U+410 А %1B%24%42%27%21 +PASS U+411 Б %1B%24%42%27%22 +PASS U+412 В %1B%24%42%27%23 +PASS U+413 Г %1B%24%42%27%24 +PASS U+414 Д %1B%24%42%27%25 +PASS U+415 Е %1B%24%42%27%26 +PASS U+416 Ж %1B%24%42%27%28 +PASS U+417 З %1B%24%42%27%29 +PASS U+418 И %1B%24%42%27%2A +PASS U+419 Й %1B%24%42%27%2B +PASS U+41A К %1B%24%42%27%2C +PASS U+41B Л %1B%24%42%27%2D +PASS U+41C М %1B%24%42%27%2E +PASS U+41D Н %1B%24%42%27%2F +PASS U+41E О %1B%24%42%27%30 +PASS U+41F П %1B%24%42%27%31 +PASS U+420 Р %1B%24%42%27%32 +PASS U+421 С %1B%24%42%27%33 +PASS U+422 Т %1B%24%42%27%34 +PASS U+423 У %1B%24%42%27%35 +PASS U+424 Ф %1B%24%42%27%36 +PASS U+425 Х %1B%24%42%27%37 +PASS U+426 Ц %1B%24%42%27%38 +PASS U+427 Ч %1B%24%42%27%39 +PASS U+428 Ш %1B%24%42%27%3A +PASS U+429 Щ %1B%24%42%27%3B +PASS U+42A Ъ %1B%24%42%27%3C +PASS U+42B Ы %1B%24%42%27%3D +PASS U+42C Ь %1B%24%42%27%3E +PASS U+42D Э %1B%24%42%27%3F +PASS U+42E Ю %1B%24%42%27%40 +PASS U+42F Я %1B%24%42%27%41 +PASS U+430 а %1B%24%42%27%51 +PASS U+431 б %1B%24%42%27%52 +PASS U+432 в %1B%24%42%27%53 +PASS U+433 г %1B%24%42%27%54 +PASS U+434 д %1B%24%42%27%55 +PASS U+435 е %1B%24%42%27%56 +PASS U+436 ж %1B%24%42%27%58 +PASS U+437 з %1B%24%42%27%59 +PASS U+438 и %1B%24%42%27%5A +PASS U+439 й %1B%24%42%27%5B +PASS U+43A к %1B%24%42%27%5C +PASS U+43B л %1B%24%42%27%5D +PASS U+43C м %1B%24%42%27%5E +PASS U+43D н %1B%24%42%27%5F +PASS U+43E о %1B%24%42%27%60 +PASS U+43F п %1B%24%42%27%61 +PASS U+440 р %1B%24%42%27%62 +PASS U+441 с %1B%24%42%27%63 +PASS U+442 т %1B%24%42%27%64 +PASS U+443 у %1B%24%42%27%65 +PASS U+444 ф %1B%24%42%27%66 +PASS U+445 х %1B%24%42%27%67 +PASS U+446 ц %1B%24%42%27%68 +PASS U+447 ч %1B%24%42%27%69 +PASS U+448 ш %1B%24%42%27%6A +PASS U+449 щ %1B%24%42%27%6B +PASS U+44A ъ %1B%24%42%27%6C +PASS U+44B ы %1B%24%42%27%6D +PASS U+44C ь %1B%24%42%27%6E +PASS U+44D э %1B%24%42%27%6F +PASS U+44E ю %1B%24%42%27%70 +PASS U+44F я %1B%24%42%27%71 +PASS U+451 ё %1B%24%42%27%57 +PASS U+2010 ‐ %1B%24%42%21%3E +PASS U+2015 ― %1B%24%42%21%3D +PASS U+2018 ‘ %1B%24%42%21%46 +PASS U+2019 ’ %1B%24%42%21%47 +PASS U+201C “ %1B%24%42%21%48 +PASS U+201D ” %1B%24%42%21%49 +PASS U+2020 † %1B%24%42%22%77 +PASS U+2021 ‡ %1B%24%42%22%78 +PASS U+2025 ‥ %1B%24%42%21%45 +PASS U+2026 … %1B%24%42%21%44 +PASS U+2030 ‰ %1B%24%42%22%73 +PASS U+2032 ′ %1B%24%42%21%6C +PASS U+2033 ″ %1B%24%42%21%6D +PASS U+203B ※ %1B%24%42%22%28 +PASS U+203E ‾ %1B%28%4A%7E +PASS U+2103 ℃ %1B%24%42%21%6E +PASS U+2116 № %1B%24%42%2D%62 +PASS U+2121 ℡ %1B%24%42%2D%64 +PASS U+212B Å %1B%24%42%22%72 +PASS U+2160 Ⅰ %1B%24%42%2D%35 +PASS U+2161 Ⅱ %1B%24%42%2D%36 +PASS U+2162 Ⅲ %1B%24%42%2D%37 +PASS U+2163 Ⅳ %1B%24%42%2D%38 +PASS U+2164 Ⅴ %1B%24%42%2D%39 +PASS U+2165 Ⅵ %1B%24%42%2D%3A +PASS U+2166 Ⅶ %1B%24%42%2D%3B +PASS U+2167 Ⅷ %1B%24%42%2D%3C +PASS U+2168 Ⅸ %1B%24%42%2D%3D +PASS U+2169 Ⅹ %1B%24%42%2D%3E +FAIL U+2170 ⅰ %1B%24%42%7C%71 assert_equals: expected "%1B%24%42%7C%71" but got "%26%23%38%35%36%30%3B" +FAIL U+2171 ⅱ %1B%24%42%7C%72 assert_equals: expected "%1B%24%42%7C%72" but got "%26%23%38%35%36%31%3B" +FAIL U+2172 ⅲ %1B%24%42%7C%73 assert_equals: expected "%1B%24%42%7C%73" but got "%26%23%38%35%36%32%3B" +FAIL U+2173 ⅳ %1B%24%42%7C%74 assert_equals: expected "%1B%24%42%7C%74" but got "%26%23%38%35%36%33%3B" +FAIL U+2174 ⅴ %1B%24%42%7C%75 assert_equals: expected "%1B%24%42%7C%75" but got "%26%23%38%35%36%34%3B" +FAIL U+2175 ⅵ %1B%24%42%7C%76 assert_equals: expected "%1B%24%42%7C%76" but got "%26%23%38%35%36%35%3B" +FAIL U+2176 ⅶ %1B%24%42%7C%77 assert_equals: expected "%1B%24%42%7C%77" but got "%26%23%38%35%36%36%3B" +FAIL U+2177 ⅷ %1B%24%42%7C%78 assert_equals: expected "%1B%24%42%7C%78" but got "%26%23%38%35%36%37%3B" +FAIL U+2178 ⅸ %1B%24%42%7C%79 assert_equals: expected "%1B%24%42%7C%79" but got "%26%23%38%35%36%38%3B" +FAIL U+2179 ⅹ %1B%24%42%7C%7A assert_equals: expected "%1B%24%42%7C%7A" but got "%26%23%38%35%36%39%3B" +PASS U+2190 ← %1B%24%42%22%2B +PASS U+2191 ↑ %1B%24%42%22%2C +PASS U+2192 → %1B%24%42%22%2A +PASS U+2193 ↓ %1B%24%42%22%2D +PASS U+21D2 ⇒ %1B%24%42%22%4D +PASS U+21D4 ⇔ %1B%24%42%22%4E +PASS U+2200 ∀ %1B%24%42%22%4F +PASS U+2202 ∂ %1B%24%42%22%5F +PASS U+2203 ∃ %1B%24%42%22%50 +PASS U+2207 ∇ %1B%24%42%22%60 +PASS U+2208 ∈ %1B%24%42%22%3A +PASS U+220B ∋ %1B%24%42%22%3B +PASS U+2211 ∑ %1B%24%42%2D%74 +PASS U+2212 − %1B%24%42%21%5D +PASS U+221A √ %1B%24%42%22%65 +PASS U+221D ∝ %1B%24%42%22%67 +PASS U+221E ∞ %1B%24%42%21%67 +PASS U+221F ∟ %1B%24%42%2D%78 +PASS U+2220 ∠ %1B%24%42%22%5C +PASS U+2225 ∥ %1B%24%42%21%42 +PASS U+2227 ∧ %1B%24%42%22%4A +PASS U+2228 ∨ %1B%24%42%22%4B +PASS U+2229 ∩ %1B%24%42%22%41 +PASS U+222A ∪ %1B%24%42%22%40 +PASS U+222B ∫ %1B%24%42%22%69 +PASS U+222C ∬ %1B%24%42%22%6A +PASS U+222E ∮ %1B%24%42%2D%73 +PASS U+2234 ∴ %1B%24%42%21%68 +PASS U+2235 ∵ %1B%24%42%22%68 +PASS U+223D ∽ %1B%24%42%22%66 +PASS U+2252 ≒ %1B%24%42%22%62 +PASS U+2260 ≠ %1B%24%42%21%62 +PASS U+2261 ≡ %1B%24%42%22%61 +PASS U+2266 ≦ %1B%24%42%21%65 +PASS U+2267 ≧ %1B%24%42%21%66 +PASS U+226A ≪ %1B%24%42%22%63 +PASS U+226B ≫ %1B%24%42%22%64 +PASS U+2282 ⊂ %1B%24%42%22%3E +PASS U+2283 ⊃ %1B%24%42%22%3F +PASS U+2286 ⊆ %1B%24%42%22%3C +PASS U+2287 ⊇ %1B%24%42%22%3D +PASS U+22A5 ⊥ %1B%24%42%22%5D +PASS U+22BF ⊿ %1B%24%42%2D%79 +PASS U+2312 ⌒ %1B%24%42%22%5E +PASS U+2460 ① %1B%24%42%2D%21 +PASS U+2461 ② %1B%24%42%2D%22 +PASS U+2462 ③ %1B%24%42%2D%23 +PASS U+2463 ④ %1B%24%42%2D%24 +PASS U+2464 ⑤ %1B%24%42%2D%25 +PASS U+2465 ⑥ %1B%24%42%2D%26 +PASS U+2466 ⑦ %1B%24%42%2D%27 +PASS U+2467 ⑧ %1B%24%42%2D%28 +PASS U+2468 ⑨ %1B%24%42%2D%29 +PASS U+2469 ⑩ %1B%24%42%2D%2A +PASS U+246A ⑪ %1B%24%42%2D%2B +PASS U+246B ⑫ %1B%24%42%2D%2C +PASS U+246C ⑬ %1B%24%42%2D%2D +PASS U+246D ⑭ %1B%24%42%2D%2E +PASS U+246E ⑮ %1B%24%42%2D%2F +PASS U+246F ⑯ %1B%24%42%2D%30 +PASS U+2470 ⑰ %1B%24%42%2D%31 +PASS U+2471 ⑱ %1B%24%42%2D%32 +PASS U+2472 ⑲ %1B%24%42%2D%33 +PASS U+2473 ⑳ %1B%24%42%2D%34 +PASS U+2500 ─ %1B%24%42%28%21 +PASS U+2501 ━ %1B%24%42%28%2C +PASS U+2502 │ %1B%24%42%28%22 +PASS U+2503 ┃ %1B%24%42%28%2D +PASS U+250C ┌ %1B%24%42%28%23 +PASS U+250F ┏ %1B%24%42%28%2E +PASS U+2510 ┐ %1B%24%42%28%24 +PASS U+2513 ┓ %1B%24%42%28%2F +PASS U+2514 └ %1B%24%42%28%26 +PASS U+2517 ┗ %1B%24%42%28%31 +PASS U+2518 ┘ %1B%24%42%28%25 +PASS U+251B ┛ %1B%24%42%28%30 +PASS U+251C ├ %1B%24%42%28%27 +PASS U+251D ┝ %1B%24%42%28%3C +PASS U+2520 ┠ %1B%24%42%28%37 +PASS U+2523 ┣ %1B%24%42%28%32 +PASS U+2524 ┤ %1B%24%42%28%29 +PASS U+2525 ┥ %1B%24%42%28%3E +PASS U+2528 ┨ %1B%24%42%28%39 +PASS U+252B ┫ %1B%24%42%28%34 +PASS U+252C ┬ %1B%24%42%28%28 +PASS U+252F ┯ %1B%24%42%28%38 +PASS U+2530 ┰ %1B%24%42%28%3D +PASS U+2533 ┳ %1B%24%42%28%33 +PASS U+2534 ┴ %1B%24%42%28%2A +PASS U+2537 ┷ %1B%24%42%28%3A +PASS U+2538 ┸ %1B%24%42%28%3F +PASS U+253B ┻ %1B%24%42%28%35 +PASS U+253C ┼ %1B%24%42%28%2B +PASS U+253F ┿ %1B%24%42%28%3B +PASS U+2542 ╂ %1B%24%42%28%40 +PASS U+254B ╋ %1B%24%42%28%36 +PASS U+25A0 ■ %1B%24%42%22%23 +PASS U+25A1 □ %1B%24%42%22%22 +PASS U+25B2 ▲ %1B%24%42%22%25 +PASS U+25B3 △ %1B%24%42%22%24 +PASS U+25BC ▼ %1B%24%42%22%27 +PASS U+25BD ▽ %1B%24%42%22%26 +PASS U+25C6 ◆ %1B%24%42%22%21 +PASS U+25C7 ◇ %1B%24%42%21%7E +PASS U+25CB ○ %1B%24%42%21%7B +PASS U+25CE ◎ %1B%24%42%21%7D +PASS U+25CF ● %1B%24%42%21%7C +PASS U+25EF ◯ %1B%24%42%22%7E +PASS U+2605 ★ %1B%24%42%21%7A +PASS U+2606 ☆ %1B%24%42%21%79 +PASS U+2640 ♀ %1B%24%42%21%6A +PASS U+2642 ♂ %1B%24%42%21%69 +PASS U+266A ♪ %1B%24%42%22%76 +PASS U+266D ♭ %1B%24%42%22%75 +PASS U+266F ♯ %1B%24%42%22%74 +PASS U+3000 %1B%24%42%21%21 +PASS U+3001 、 %1B%24%42%21%22 +PASS U+3002 。 %1B%24%42%21%23 +PASS U+3003 〃 %1B%24%42%21%37 +PASS U+3005 々 %1B%24%42%21%39 +PASS U+3006 〆 %1B%24%42%21%3A +PASS U+3007 〇 %1B%24%42%21%3B +PASS U+3008 〈 %1B%24%42%21%52 +PASS U+3009 〉 %1B%24%42%21%53 +PASS U+300A 《 %1B%24%42%21%54 +PASS U+300B 》 %1B%24%42%21%55 +PASS U+300C 「 %1B%24%42%21%56 +PASS U+300D 」 %1B%24%42%21%57 +PASS U+300E 『 %1B%24%42%21%58 +PASS U+300F 』 %1B%24%42%21%59 +PASS U+3010 【 %1B%24%42%21%5A +PASS U+3011 】 %1B%24%42%21%5B +PASS U+3012 〒 %1B%24%42%22%29 +PASS U+3013 〓 %1B%24%42%22%2E +PASS U+3014 〔 %1B%24%42%21%4C +PASS U+3015 〕 %1B%24%42%21%4D +PASS U+301D 〝 %1B%24%42%2D%60 +PASS U+301F 〟 %1B%24%42%2D%61 +PASS U+3041 ぁ %1B%24%42%24%21 +PASS U+3042 あ %1B%24%42%24%22 +PASS U+3043 ぃ %1B%24%42%24%23 +PASS U+3044 い %1B%24%42%24%24 +PASS U+3045 ぅ %1B%24%42%24%25 +PASS U+3046 う %1B%24%42%24%26 +PASS U+3047 ぇ %1B%24%42%24%27 +PASS U+3048 え %1B%24%42%24%28 +PASS U+3049 ぉ %1B%24%42%24%29 +PASS U+304A お %1B%24%42%24%2A +PASS U+304B か %1B%24%42%24%2B +PASS U+304C が %1B%24%42%24%2C +PASS U+304D き %1B%24%42%24%2D +PASS U+304E ぎ %1B%24%42%24%2E +PASS U+304F く %1B%24%42%24%2F +PASS U+3050 ぐ %1B%24%42%24%30 +PASS U+3051 け %1B%24%42%24%31 +PASS U+3052 げ %1B%24%42%24%32 +PASS U+3053 こ %1B%24%42%24%33 +PASS U+3054 ご %1B%24%42%24%34 +PASS U+3055 さ %1B%24%42%24%35 +PASS U+3056 ざ %1B%24%42%24%36 +PASS U+3057 し %1B%24%42%24%37 +PASS U+3058 じ %1B%24%42%24%38 +PASS U+3059 す %1B%24%42%24%39 +PASS U+305A ず %1B%24%42%24%3A +PASS U+305B せ %1B%24%42%24%3B +PASS U+305C ぜ %1B%24%42%24%3C +PASS U+305D そ %1B%24%42%24%3D +PASS U+305E ぞ %1B%24%42%24%3E +PASS U+305F た %1B%24%42%24%3F +PASS U+3060 だ %1B%24%42%24%40 +PASS U+3061 ち %1B%24%42%24%41 +PASS U+3062 ぢ %1B%24%42%24%42 +PASS U+3063 っ %1B%24%42%24%43 +PASS U+3064 つ %1B%24%42%24%44 +PASS U+3065 づ %1B%24%42%24%45 +PASS U+3066 て %1B%24%42%24%46 +PASS U+3067 で %1B%24%42%24%47 +PASS U+3068 と %1B%24%42%24%48 +PASS U+3069 ど %1B%24%42%24%49 +PASS U+306A な %1B%24%42%24%4A +PASS U+306B に %1B%24%42%24%4B +PASS U+306C ぬ %1B%24%42%24%4C +PASS U+306D ね %1B%24%42%24%4D +PASS U+306E の %1B%24%42%24%4E +PASS U+306F は %1B%24%42%24%4F +PASS U+3070 ば %1B%24%42%24%50 +PASS U+3071 ぱ %1B%24%42%24%51 +PASS U+3072 ひ %1B%24%42%24%52 +PASS U+3073 び %1B%24%42%24%53 +PASS U+3074 ぴ %1B%24%42%24%54 +PASS U+3075 ふ %1B%24%42%24%55 +PASS U+3076 ぶ %1B%24%42%24%56 +PASS U+3077 ぷ %1B%24%42%24%57 +PASS U+3078 へ %1B%24%42%24%58 +PASS U+3079 べ %1B%24%42%24%59 +PASS U+307A ぺ %1B%24%42%24%5A +PASS U+307B ほ %1B%24%42%24%5B +PASS U+307C ぼ %1B%24%42%24%5C +PASS U+307D ぽ %1B%24%42%24%5D +PASS U+307E ま %1B%24%42%24%5E +PASS U+307F み %1B%24%42%24%5F +PASS U+3080 む %1B%24%42%24%60 +PASS U+3081 め %1B%24%42%24%61 +PASS U+3082 も %1B%24%42%24%62 +PASS U+3083 ゃ %1B%24%42%24%63 +PASS U+3084 や %1B%24%42%24%64 +PASS U+3085 ゅ %1B%24%42%24%65 +PASS U+3086 ゆ %1B%24%42%24%66 +PASS U+3087 ょ %1B%24%42%24%67 +PASS U+3088 よ %1B%24%42%24%68 +PASS U+3089 ら %1B%24%42%24%69 +PASS U+308A り %1B%24%42%24%6A +PASS U+308B る %1B%24%42%24%6B +PASS U+308C れ %1B%24%42%24%6C +PASS U+308D ろ %1B%24%42%24%6D +PASS U+308E ゎ %1B%24%42%24%6E +PASS U+308F わ %1B%24%42%24%6F +PASS U+3090 ゐ %1B%24%42%24%70 +PASS U+3091 ゑ %1B%24%42%24%71 +PASS U+3092 を %1B%24%42%24%72 +PASS U+3093 ん %1B%24%42%24%73 +PASS U+309B ゛ %1B%24%42%21%2B +PASS U+309C ゜ %1B%24%42%21%2C +PASS U+309D ゝ %1B%24%42%21%35 +PASS U+309E ゞ %1B%24%42%21%36 +PASS U+30A1 ァ %1B%24%42%25%21 +PASS U+30A2 ア %1B%24%42%25%22 +PASS U+30A3 ィ %1B%24%42%25%23 +PASS U+30A4 イ %1B%24%42%25%24 +PASS U+30A5 ゥ %1B%24%42%25%25 +PASS U+30A6 ウ %1B%24%42%25%26 +PASS U+30A7 ェ %1B%24%42%25%27 +PASS U+30A8 エ %1B%24%42%25%28 +PASS U+30A9 ォ %1B%24%42%25%29 +PASS U+30AA オ %1B%24%42%25%2A +PASS U+30AB カ %1B%24%42%25%2B +PASS U+30AC ガ %1B%24%42%25%2C +PASS U+30AD キ %1B%24%42%25%2D +PASS U+30AE ギ %1B%24%42%25%2E +PASS U+30AF ク %1B%24%42%25%2F +PASS U+30B0 グ %1B%24%42%25%30 +PASS U+30B1 ケ %1B%24%42%25%31 +PASS U+30B2 ゲ %1B%24%42%25%32 +PASS U+30B3 コ %1B%24%42%25%33 +PASS U+30B4 ゴ %1B%24%42%25%34 +PASS U+30B5 サ %1B%24%42%25%35 +PASS U+30B6 ザ %1B%24%42%25%36 +PASS U+30B7 シ %1B%24%42%25%37 +PASS U+30B8 ジ %1B%24%42%25%38 +PASS U+30B9 ス %1B%24%42%25%39 +PASS U+30BA ズ %1B%24%42%25%3A +PASS U+30BB セ %1B%24%42%25%3B +PASS U+30BC ゼ %1B%24%42%25%3C +PASS U+30BD ソ %1B%24%42%25%3D +PASS U+30BE ゾ %1B%24%42%25%3E +PASS U+30BF タ %1B%24%42%25%3F +PASS U+30C0 ダ %1B%24%42%25%40 +PASS U+30C1 チ %1B%24%42%25%41 +PASS U+30C2 ヂ %1B%24%42%25%42 +PASS U+30C3 ッ %1B%24%42%25%43 +PASS U+30C4 ツ %1B%24%42%25%44 +PASS U+30C5 ヅ %1B%24%42%25%45 +PASS U+30C6 テ %1B%24%42%25%46 +PASS U+30C7 デ %1B%24%42%25%47 +PASS U+30C8 ト %1B%24%42%25%48 +PASS U+30C9 ド %1B%24%42%25%49 +PASS U+30CA ナ %1B%24%42%25%4A +PASS U+30CB ニ %1B%24%42%25%4B +PASS U+30CC ヌ %1B%24%42%25%4C +PASS U+30CD ネ %1B%24%42%25%4D +PASS U+30CE ノ %1B%24%42%25%4E +PASS U+30CF ハ %1B%24%42%25%4F +PASS U+30D0 バ %1B%24%42%25%50 +PASS U+30D1 パ %1B%24%42%25%51 +PASS U+30D2 ヒ %1B%24%42%25%52 +PASS U+30D3 ビ %1B%24%42%25%53 +PASS U+30D4 ピ %1B%24%42%25%54 +PASS U+30D5 フ %1B%24%42%25%55 +PASS U+30D6 ブ %1B%24%42%25%56 +PASS U+30D7 プ %1B%24%42%25%57 +PASS U+30D8 ヘ %1B%24%42%25%58 +PASS U+30D9 ベ %1B%24%42%25%59 +PASS U+30DA ペ %1B%24%42%25%5A +PASS U+30DB ホ %1B%24%42%25%5B +PASS U+30DC ボ %1B%24%42%25%5C +PASS U+30DD ポ %1B%24%42%25%5D +PASS U+30DE マ %1B%24%42%25%5E +PASS U+30DF ミ %1B%24%42%25%5F +PASS U+30E0 ム %1B%24%42%25%60 +PASS U+30E1 メ %1B%24%42%25%61 +PASS U+30E2 モ %1B%24%42%25%62 +PASS U+30E3 ャ %1B%24%42%25%63 +PASS U+30E4 ヤ %1B%24%42%25%64 +PASS U+30E5 ュ %1B%24%42%25%65 +PASS U+30E6 ユ %1B%24%42%25%66 +PASS U+30E7 ョ %1B%24%42%25%67 +PASS U+30E8 ヨ %1B%24%42%25%68 +PASS U+30E9 ラ %1B%24%42%25%69 +PASS U+30EA リ %1B%24%42%25%6A +PASS U+30EB ル %1B%24%42%25%6B +PASS U+30EC レ %1B%24%42%25%6C +PASS U+30ED ロ %1B%24%42%25%6D +PASS U+30EE ヮ %1B%24%42%25%6E +PASS U+30EF ワ %1B%24%42%25%6F +PASS U+30F0 ヰ %1B%24%42%25%70 +PASS U+30F1 ヱ %1B%24%42%25%71 +PASS U+30F2 ヲ %1B%24%42%25%72 +PASS U+30F3 ン %1B%24%42%25%73 +PASS U+30F4 ヴ %1B%24%42%25%74 +PASS U+30F5 ヵ %1B%24%42%25%75 +PASS U+30F6 ヶ %1B%24%42%25%76 +PASS U+30FB ・ %1B%24%42%21%26 +PASS U+30FC ー %1B%24%42%21%3C +PASS U+30FD ヽ %1B%24%42%21%33 +PASS U+30FE ヾ %1B%24%42%21%34 +PASS U+3231 ㈱ %1B%24%42%2D%6A +PASS U+3232 ㈲ %1B%24%42%2D%6B +PASS U+3239 ㈹ %1B%24%42%2D%6C +PASS U+32A4 ㊤ %1B%24%42%2D%65 +PASS U+32A5 ㊥ %1B%24%42%2D%66 +PASS U+32A6 ㊦ %1B%24%42%2D%67 +PASS U+32A7 ㊧ %1B%24%42%2D%68 +PASS U+32A8 ㊨ %1B%24%42%2D%69 +PASS U+3303 ㌃ %1B%24%42%2D%46 +PASS U+330D ㌍ %1B%24%42%2D%4A +PASS U+3314 ㌔ %1B%24%42%2D%41 +PASS U+3318 ㌘ %1B%24%42%2D%44 +PASS U+3322 ㌢ %1B%24%42%2D%42 +PASS U+3323 ㌣ %1B%24%42%2D%4C +PASS U+3326 ㌦ %1B%24%42%2D%4B +PASS U+3327 ㌧ %1B%24%42%2D%45 +PASS U+332B ㌫ %1B%24%42%2D%4D +PASS U+3336 ㌶ %1B%24%42%2D%47 +PASS U+333B ㌻ %1B%24%42%2D%4F +PASS U+3349 ㍉ %1B%24%42%2D%40 +PASS U+334A ㍊ %1B%24%42%2D%4E +PASS U+334D ㍍ %1B%24%42%2D%43 +PASS U+3351 ㍑ %1B%24%42%2D%48 +PASS U+3357 ㍗ %1B%24%42%2D%49 +PASS U+337B ㍻ %1B%24%42%2D%5F +PASS U+337C ㍼ %1B%24%42%2D%6F +PASS U+337D ㍽ %1B%24%42%2D%6E +PASS U+337E ㍾ %1B%24%42%2D%6D +PASS U+338E ㎎ %1B%24%42%2D%53 +PASS U+338F ㎏ %1B%24%42%2D%54 +PASS U+339C ㎜ %1B%24%42%2D%50 +PASS U+339D ㎝ %1B%24%42%2D%51 +PASS U+339E ㎞ %1B%24%42%2D%52 +PASS U+33A1 ㎡ %1B%24%42%2D%56 +PASS U+33C4 ㏄ %1B%24%42%2D%55 +PASS U+33CD ㏍ %1B%24%42%2D%63 +PASS U+4E00 一 %1B%24%42%30%6C +PASS U+4E01 丁 %1B%24%42%43%7A +PASS U+4E03 七 %1B%24%42%3C%37 +PASS U+4E07 万 %1B%24%42%4B%7C +PASS U+4E08 丈 %1B%24%42%3E%66 +PASS U+4E09 三 %1B%24%42%3B%30 +PASS U+4E0A 上 %1B%24%42%3E%65 +PASS U+4E0B 下 %1B%24%42%32%3C +PASS U+4E0D 不 %1B%24%42%49%54 +PASS U+4E0E 与 %1B%24%42%4D%3F +PASS U+4E10 丐 %1B%24%42%50%22 +PASS U+4E11 丑 %1B%24%42%31%2F +PASS U+4E14 且 %1B%24%42%33%6E +PASS U+4E15 丕 %1B%24%42%50%23 +PASS U+4E16 世 %1B%24%42%40%24 +PASS U+4E17 丗 %1B%24%42%52%42 +PASS U+4E18 丘 %1B%24%42%35%56 +PASS U+4E19 丙 %1B%24%42%4A%3A +PASS U+4E1E 丞 %1B%24%42%3E%67 +PASS U+4E21 両 %1B%24%42%4E%3E +PASS U+4E26 並 %1B%24%42%4A%42 +FAIL U+4E28 丨 %1B%24%42%79%2D assert_equals: expected "%1B%24%42%79%2D" but got "%26%23%32%30%30%30%38%3B" +PASS U+4E2A 个 %1B%24%42%50%24 +PASS U+4E2D 中 %1B%24%42%43%66 +PASS U+4E31 丱 %1B%24%42%50%25 +PASS U+4E32 串 %1B%24%42%36%7A +PASS U+4E36 丶 %1B%24%42%50%26 +PASS U+4E38 丸 %1B%24%42%34%5D +PASS U+4E39 丹 %1B%24%42%43%30 +PASS U+4E3B 主 %1B%24%42%3C%67 +PASS U+4E3C 丼 %1B%24%42%50%27 +PASS U+4E3F 丿 %1B%24%42%50%28 +PASS U+4E42 乂 %1B%24%42%50%29 +PASS U+4E43 乃 %1B%24%42%47%35 +PASS U+4E45 久 %1B%24%42%35%57 +PASS U+4E4B 之 %1B%24%42%47%37 +PASS U+4E4D 乍 %1B%24%42%46%63 +PASS U+4E4E 乎 %1B%24%42%38%43 +PASS U+4E4F 乏 %1B%24%42%4B%33 +PASS U+4E55 乕 %1B%24%42%69%49 +PASS U+4E56 乖 %1B%24%42%50%2A +PASS U+4E57 乗 %1B%24%42%3E%68 +PASS U+4E58 乘 %1B%24%42%50%2B +PASS U+4E59 乙 %1B%24%42%32%35 +PASS U+4E5D 九 %1B%24%42%36%65 +PASS U+4E5E 乞 %1B%24%42%38%70 +PASS U+4E5F 也 %1B%24%42%4C%69 +PASS U+4E62 乢 %1B%24%42%56%26 +PASS U+4E71 乱 %1B%24%42%4D%70 +PASS U+4E73 乳 %1B%24%42%46%7D +PASS U+4E7E 乾 %1B%24%42%34%25 +PASS U+4E80 亀 %1B%24%42%35%35 +PASS U+4E82 亂 %1B%24%42%50%2C +PASS U+4E85 亅 %1B%24%42%50%2D +PASS U+4E86 了 %1B%24%42%4E%3B +PASS U+4E88 予 %1B%24%42%4D%3D +PASS U+4E89 争 %1B%24%42%41%68 +PASS U+4E8A 亊 %1B%24%42%50%2F +PASS U+4E8B 事 %1B%24%42%3B%76 +PASS U+4E8C 二 %1B%24%42%46%73 +PASS U+4E8E 于 %1B%24%42%50%32 +PASS U+4E91 云 %1B%24%42%31%3E +PASS U+4E92 互 %1B%24%42%38%5F +PASS U+4E94 五 %1B%24%42%38%5E +PASS U+4E95 井 %1B%24%42%30%66 +PASS U+4E98 亘 %1B%24%42%4F%4B +PASS U+4E99 亙 %1B%24%42%4F%4A +PASS U+4E9B 些 %1B%24%42%3A%33 +PASS U+4E9C 亜 %1B%24%42%30%21 +PASS U+4E9E 亞 %1B%24%42%50%33 +PASS U+4E9F 亟 %1B%24%42%50%34 +PASS U+4EA0 亠 %1B%24%42%50%35 +PASS U+4EA1 亡 %1B%24%42%4B%34 +PASS U+4EA2 亢 %1B%24%42%50%36 +PASS U+4EA4 交 %1B%24%42%38%72 +PASS U+4EA5 亥 %1B%24%42%30%67 +PASS U+4EA6 亦 %1B%24%42%4B%72 +PASS U+4EA8 亨 %1B%24%42%35%7C +PASS U+4EAB 享 %1B%24%42%35%7D +PASS U+4EAC 京 %1B%24%42%35%7E +PASS U+4EAD 亭 %1B%24%42%44%62 +PASS U+4EAE 亮 %1B%24%42%4E%3C +PASS U+4EB0 亰 %1B%24%42%50%37 +PASS U+4EB3 亳 %1B%24%42%50%38 +PASS U+4EB6 亶 %1B%24%42%50%39 +PASS U+4EBA 人 %1B%24%42%3F%4D +PASS U+4EC0 什 %1B%24%42%3D%3A +PASS U+4EC1 仁 %1B%24%42%3F%4E +PASS U+4EC2 仂 %1B%24%42%50%3E +PASS U+4EC4 仄 %1B%24%42%50%3C +PASS U+4EC6 仆 %1B%24%42%50%3D +PASS U+4EC7 仇 %1B%24%42%35%58 +PASS U+4ECA 今 %1B%24%42%3A%23 +PASS U+4ECB 介 %1B%24%42%32%70 +PASS U+4ECD 仍 %1B%24%42%50%3B +PASS U+4ECE 从 %1B%24%42%50%3A +PASS U+4ECF 仏 %1B%24%42%4A%29 +PASS U+4ED4 仔 %1B%24%42%3B%46 +PASS U+4ED5 仕 %1B%24%42%3B%45 +PASS U+4ED6 他 %1B%24%42%42%3E +PASS U+4ED7 仗 %1B%24%42%50%3F +PASS U+4ED8 付 %1B%24%42%49%55 +PASS U+4ED9 仙 %1B%24%42%40%67 +PASS U+4EDD 仝 %1B%24%42%21%38 +PASS U+4EDE 仞 %1B%24%42%50%40 +PASS U+4EDF 仟 %1B%24%42%50%42 +FAIL U+4EE1 仡 %1B%24%42%79%2E assert_equals: expected "%1B%24%42%79%2E" but got "%26%23%32%30%31%39%33%3B" +PASS U+4EE3 代 %1B%24%42%42%65 +PASS U+4EE4 令 %1B%24%42%4E%61 +PASS U+4EE5 以 %1B%24%42%30%4A +PASS U+4EED 仭 %1B%24%42%50%41 +PASS U+4EEE 仮 %1B%24%42%32%3E +PASS U+4EF0 仰 %1B%24%42%36%44 +PASS U+4EF2 仲 %1B%24%42%43%67 +PASS U+4EF6 件 %1B%24%42%37%6F +PASS U+4EF7 价 %1B%24%42%50%43 +PASS U+4EFB 任 %1B%24%42%47%24 +FAIL U+4EFC 仼 %1B%24%42%79%2F assert_equals: expected "%1B%24%42%79%2F" but got "%26%23%32%30%32%32%30%3B" +FAIL U+4F00 伀 %1B%24%42%79%30 assert_equals: expected "%1B%24%42%79%30" but got "%26%23%32%30%32%32%34%3B" +PASS U+4F01 企 %1B%24%42%34%6B +FAIL U+4F03 伃 %1B%24%42%79%31 assert_equals: expected "%1B%24%42%79%31" but got "%26%23%32%30%32%32%37%3B" +PASS U+4F09 伉 %1B%24%42%50%44 +PASS U+4F0A 伊 %1B%24%42%30%4B +PASS U+4F0D 伍 %1B%24%42%38%60 +PASS U+4F0E 伎 %1B%24%42%34%6C +PASS U+4F0F 伏 %1B%24%42%49%7A +PASS U+4F10 伐 %1B%24%42%48%32 +PASS U+4F11 休 %1B%24%42%35%59 +PASS U+4F1A 会 %1B%24%42%32%71 +PASS U+4F1C 伜 %1B%24%42%50%67 +PASS U+4F1D 伝 %1B%24%42%45%41 +PASS U+4F2F 伯 %1B%24%42%47%6C +PASS U+4F30 估 %1B%24%42%50%46 +PASS U+4F34 伴 %1B%24%42%48%3C +PASS U+4F36 伶 %1B%24%42%4E%62 +PASS U+4F38 伸 %1B%24%42%3F%2D +FAIL U+4F39 伹 %1B%24%42%79%32 assert_equals: expected "%1B%24%42%79%32" but got "%26%23%32%30%32%38%31%3B" +PASS U+4F3A 伺 %1B%24%42%3B%47 +PASS U+4F3C 似 %1B%24%42%3B%77 +PASS U+4F3D 伽 %1B%24%42%32%40 +PASS U+4F43 佃 %1B%24%42%44%51 +PASS U+4F46 但 %1B%24%42%43%22 +PASS U+4F47 佇 %1B%24%42%50%4A +PASS U+4F4D 位 %1B%24%42%30%4C +PASS U+4F4E 低 %1B%24%42%44%63 +PASS U+4F4F 住 %1B%24%42%3D%3B +PASS U+4F50 佐 %1B%24%42%3A%34 +PASS U+4F51 佑 %1B%24%42%4D%24 +PASS U+4F53 体 %1B%24%42%42%4E +PASS U+4F55 何 %1B%24%42%32%3F +FAIL U+4F56 佖 %1B%24%42%79%33 assert_equals: expected "%1B%24%42%79%33" but got "%26%23%32%30%33%31%30%3B" +PASS U+4F57 佗 %1B%24%42%50%49 +PASS U+4F59 余 %1B%24%42%4D%3E +PASS U+4F5A 佚 %1B%24%42%50%45 +PASS U+4F5B 佛 %1B%24%42%50%47 +PASS U+4F5C 作 %1B%24%42%3A%6E +PASS U+4F5D 佝 %1B%24%42%50%48 +PASS U+4F5E 佞 %1B%24%42%55%24 +PASS U+4F69 佩 %1B%24%42%50%50 +PASS U+4F6F 佯 %1B%24%42%50%53 +PASS U+4F70 佰 %1B%24%42%50%51 +PASS U+4F73 佳 %1B%24%42%32%42 +PASS U+4F75 併 %1B%24%42%4A%3B +PASS U+4F76 佶 %1B%24%42%50%4B +PASS U+4F7B 佻 %1B%24%42%50%4F +PASS U+4F7C 佼 %1B%24%42%38%73 +PASS U+4F7F 使 %1B%24%42%3B%48 +PASS U+4F83 侃 %1B%24%42%34%26 +PASS U+4F86 來 %1B%24%42%50%54 +PASS U+4F88 侈 %1B%24%42%50%4C +FAIL U+4F8A 侊 %1B%24%42%79%35 assert_equals: expected "%1B%24%42%79%35" but got "%26%23%32%30%33%36%32%3B" +PASS U+4F8B 例 %1B%24%42%4E%63 +PASS U+4F8D 侍 %1B%24%42%3B%78 +PASS U+4F8F 侏 %1B%24%42%50%4D +PASS U+4F91 侑 %1B%24%42%50%52 +FAIL U+4F92 侒 %1B%24%42%79%34 assert_equals: expected "%1B%24%42%79%34" but got "%26%23%32%30%33%37%30%3B" +FAIL U+4F94 侔 %1B%24%42%79%37 assert_equals: expected "%1B%24%42%79%37" but got "%26%23%32%30%33%37%32%3B" +PASS U+4F96 侖 %1B%24%42%50%55 +PASS U+4F98 侘 %1B%24%42%50%4E +FAIL U+4F9A 侚 %1B%24%42%79%36 assert_equals: expected "%1B%24%42%79%36" but got "%26%23%32%30%33%37%38%3B" +PASS U+4F9B 供 %1B%24%42%36%21 +PASS U+4F9D 依 %1B%24%42%30%4D +PASS U+4FA0 侠 %1B%24%42%36%22 +PASS U+4FA1 価 %1B%24%42%32%41 +PASS U+4FAB 侫 %1B%24%42%55%25 +PASS U+4FAD 侭 %1B%24%42%4B%79 +PASS U+4FAE 侮 %1B%24%42%49%6E +PASS U+4FAF 侯 %1B%24%42%38%74 +PASS U+4FB5 侵 %1B%24%42%3F%2F +PASS U+4FB6 侶 %1B%24%42%4E%37 +PASS U+4FBF 便 %1B%24%42%4A%58 +PASS U+4FC2 係 %1B%24%42%37%38 +PASS U+4FC3 促 %1B%24%42%42%25 +PASS U+4FC4 俄 %1B%24%42%32%64 +FAIL U+4FC9 俉 %1B%24%42%79%26 assert_equals: expected "%1B%24%42%79%26" but got "%26%23%32%30%34%32%35%3B" +PASS U+4FCA 俊 %1B%24%42%3D%53 +FAIL U+4FCD 俍 %1B%24%42%79%38 assert_equals: expected "%1B%24%42%79%38" but got "%26%23%32%30%34%32%39%3B" +PASS U+4FCE 俎 %1B%24%42%50%59 +PASS U+4FD0 俐 %1B%24%42%50%5E +PASS U+4FD1 俑 %1B%24%42%50%5C +PASS U+4FD4 俔 %1B%24%42%50%57 +PASS U+4FD7 俗 %1B%24%42%42%2F +PASS U+4FD8 俘 %1B%24%42%50%5A +PASS U+4FDA 俚 %1B%24%42%50%5D +PASS U+4FDB 俛 %1B%24%42%50%5B +PASS U+4FDD 保 %1B%24%42%4A%5D +PASS U+4FDF 俟 %1B%24%42%50%58 +PASS U+4FE1 信 %1B%24%42%3F%2E +PASS U+4FE3 俣 %1B%24%42%4B%73 +PASS U+4FE4 俤 %1B%24%42%50%5F +PASS U+4FE5 俥 %1B%24%42%50%60 +PASS U+4FEE 修 %1B%24%42%3D%24 +PASS U+4FEF 俯 %1B%24%42%50%6D +PASS U+4FF3 俳 %1B%24%42%47%50 +PASS U+4FF5 俵 %1B%24%42%49%36 +PASS U+4FF6 俶 %1B%24%42%50%68 +PASS U+4FF8 俸 %1B%24%42%4A%70 +PASS U+4FFA 俺 %1B%24%42%32%36 +PASS U+4FFE 俾 %1B%24%42%50%6C +FAIL U+4FFF 俿 %1B%24%42%79%3B assert_equals: expected "%1B%24%42%79%3B" but got "%26%23%32%30%34%37%39%3B" +PASS U+5005 倅 %1B%24%42%50%66 +PASS U+5006 倆 %1B%24%42%50%6F +PASS U+5009 倉 %1B%24%42%41%52 +PASS U+500B 個 %1B%24%42%38%44 +PASS U+500D 倍 %1B%24%42%47%5C +PASS U+500F 倏 %1B%24%42%60%47 +PASS U+5011 們 %1B%24%42%50%6E +PASS U+5012 倒 %1B%24%42%45%5D +PASS U+5014 倔 %1B%24%42%50%63 +PASS U+5016 倖 %1B%24%42%38%76 +PASS U+5019 候 %1B%24%42%38%75 +PASS U+501A 倚 %1B%24%42%50%61 +FAIL U+501E 倞 %1B%24%42%79%3C assert_equals: expected "%1B%24%42%79%3C" but got "%26%23%32%30%35%31%30%3B" +PASS U+501F 借 %1B%24%42%3C%5A +PASS U+5021 倡 %1B%24%42%50%69 +FAIL U+5022 倢 %1B%24%42%79%3A assert_equals: expected "%1B%24%42%79%3A" but got "%26%23%32%30%35%31%34%3B" +PASS U+5023 倣 %1B%24%42%4A%6F +PASS U+5024 値 %1B%24%42%43%4D +PASS U+5025 倥 %1B%24%42%50%65 +PASS U+5026 倦 %1B%24%42%37%71 +PASS U+5028 倨 %1B%24%42%50%62 +PASS U+5029 倩 %1B%24%42%50%6A +PASS U+502A 倪 %1B%24%42%50%64 +PASS U+502B 倫 %1B%24%42%4E%51 +PASS U+502C 倬 %1B%24%42%50%6B +PASS U+502D 倭 %1B%24%42%4F%41 +PASS U+5036 倶 %1B%24%42%36%66 +PASS U+5039 倹 %1B%24%42%37%70 +FAIL U+5040 偀 %1B%24%42%79%39 assert_equals: expected "%1B%24%42%79%39" but got "%26%23%32%30%35%34%34%3B" +FAIL U+5042 偂 %1B%24%42%79%3F assert_equals: expected "%1B%24%42%79%3F" but got "%26%23%32%30%35%34%36%3B" +PASS U+5043 偃 %1B%24%42%50%70 +FAIL U+5046 偆 %1B%24%42%79%3D assert_equals: expected "%1B%24%42%79%3D" but got "%26%23%32%30%35%35%30%3B" +PASS U+5047 假 %1B%24%42%50%71 +PASS U+5048 偈 %1B%24%42%50%75 +PASS U+5049 偉 %1B%24%42%30%4E +PASS U+504F 偏 %1B%24%42%4A%50 +PASS U+5050 偐 %1B%24%42%50%74 +PASS U+5055 偕 %1B%24%42%50%73 +PASS U+5056 偖 %1B%24%42%50%77 +PASS U+505A 做 %1B%24%42%50%76 +PASS U+505C 停 %1B%24%42%44%64 +PASS U+5065 健 %1B%24%42%37%72 +PASS U+506C 偬 %1B%24%42%50%78 +FAIL U+5070 偰 %1B%24%42%79%3E assert_equals: expected "%1B%24%42%79%3E" but got "%26%23%32%30%35%39%32%3B" +PASS U+5072 偲 %1B%24%42%3C%45 +PASS U+5074 側 %1B%24%42%42%26 +PASS U+5075 偵 %1B%24%42%44%65 +PASS U+5076 偶 %1B%24%42%36%76 +PASS U+5078 偸 %1B%24%42%50%79 +PASS U+507D 偽 %1B%24%42%35%36 +PASS U+5080 傀 %1B%24%42%50%7A +PASS U+5085 傅 %1B%24%42%50%7C +PASS U+508D 傍 %1B%24%42%4B%35 +PASS U+5091 傑 %1B%24%42%37%66 +FAIL U+5094 傔 %1B%24%42%79%40 assert_equals: expected "%1B%24%42%79%40" but got "%26%23%32%30%36%32%38%3B" +PASS U+5098 傘 %1B%24%42%3B%31 +PASS U+5099 備 %1B%24%42%48%77 +PASS U+509A 傚 %1B%24%42%50%7B +PASS U+50AC 催 %1B%24%42%3A%45 +PASS U+50AD 傭 %1B%24%42%4D%43 +PASS U+50B2 傲 %1B%24%42%50%7E +PASS U+50B3 傳 %1B%24%42%51%23 +PASS U+50B4 傴 %1B%24%42%50%7D +PASS U+50B5 債 %1B%24%42%3A%44 +PASS U+50B7 傷 %1B%24%42%3D%7D +PASS U+50BE 傾 %1B%24%42%37%39 +PASS U+50C2 僂 %1B%24%42%51%24 +PASS U+50C5 僅 %1B%24%42%36%4F +PASS U+50C9 僉 %1B%24%42%51%21 +PASS U+50CA 僊 %1B%24%42%51%22 +PASS U+50CD 働 %1B%24%42%46%2F +PASS U+50CF 像 %1B%24%42%41%7C +PASS U+50D1 僑 %1B%24%42%36%23 +PASS U+50D5 僕 %1B%24%42%4B%4D +PASS U+50D6 僖 %1B%24%42%51%25 +FAIL U+50D8 僘 %1B%24%42%79%42 assert_equals: expected "%1B%24%42%79%42" but got "%26%23%32%30%36%39%36%3B" +PASS U+50DA 僚 %1B%24%42%4E%3D +PASS U+50DE 僞 %1B%24%42%51%26 +PASS U+50E3 僣 %1B%24%42%51%29 +PASS U+50E5 僥 %1B%24%42%51%27 +PASS U+50E7 僧 %1B%24%42%41%4E +PASS U+50ED 僭 %1B%24%42%51%28 +PASS U+50EE 僮 %1B%24%42%51%2A +FAIL U+50F4 僴 %1B%24%42%79%41 assert_equals: expected "%1B%24%42%79%41" but got "%26%23%32%30%37%32%34%3B" +PASS U+50F5 僵 %1B%24%42%51%2C +PASS U+50F9 價 %1B%24%42%51%2B +PASS U+50FB 僻 %1B%24%42%4A%48 +PASS U+5100 儀 %1B%24%42%35%37 +PASS U+5101 儁 %1B%24%42%51%2E +PASS U+5102 儂 %1B%24%42%51%2F +PASS U+5104 億 %1B%24%42%32%2F +PASS U+5109 儉 %1B%24%42%51%2D +PASS U+5112 儒 %1B%24%42%3C%74 +PASS U+5114 儔 %1B%24%42%51%32 +PASS U+5115 儕 %1B%24%42%51%31 +PASS U+5116 儖 %1B%24%42%51%30 +PASS U+5118 儘 %1B%24%42%50%56 +PASS U+511A 儚 %1B%24%42%51%33 +PASS U+511F 償 %1B%24%42%3D%7E +PASS U+5121 儡 %1B%24%42%51%34 +PASS U+512A 優 %1B%24%42%4D%25 +PASS U+5132 儲 %1B%24%42%4C%59 +PASS U+5137 儷 %1B%24%42%51%36 +PASS U+513A 儺 %1B%24%42%51%35 +PASS U+513B 儻 %1B%24%42%51%38 +PASS U+513C 儼 %1B%24%42%51%37 +PASS U+513F 儿 %1B%24%42%51%39 +PASS U+5140 兀 %1B%24%42%51%3A +PASS U+5141 允 %1B%24%42%30%74 +PASS U+5143 元 %1B%24%42%38%35 +PASS U+5144 兄 %1B%24%42%37%3B +PASS U+5145 充 %1B%24%42%3D%3C +PASS U+5146 兆 %1B%24%42%43%7B +PASS U+5147 兇 %1B%24%42%36%24 +PASS U+5148 先 %1B%24%42%40%68 +PASS U+5149 光 %1B%24%42%38%77 +FAIL U+514A 兊 %1B%24%42%79%43 assert_equals: expected "%1B%24%42%79%43" but got "%26%23%32%30%38%31%30%3B" +PASS U+514B 克 %1B%24%42%39%6E +PASS U+514C 兌 %1B%24%42%51%3C +PASS U+514D 免 %1B%24%42%4C%48 +PASS U+514E 兎 %1B%24%42%45%46 +PASS U+5150 児 %1B%24%42%3B%79 +PASS U+5152 兒 %1B%24%42%51%3B +PASS U+5154 兔 %1B%24%42%51%3D +PASS U+515A 党 %1B%24%42%45%5E +PASS U+515C 兜 %1B%24%42%33%75 +PASS U+5162 兢 %1B%24%42%51%3E +FAIL U+5164 兤 %1B%24%42%79%44 assert_equals: expected "%1B%24%42%79%44" but got "%26%23%32%30%38%33%36%3B" +PASS U+5165 入 %1B%24%42%46%7E +PASS U+5168 全 %1B%24%42%41%34 +PASS U+5169 兩 %1B%24%42%51%40 +PASS U+516A 兪 %1B%24%42%51%41 +PASS U+516B 八 %1B%24%42%48%2C +PASS U+516C 公 %1B%24%42%38%78 +PASS U+516D 六 %1B%24%42%4F%3B +PASS U+516E 兮 %1B%24%42%51%42 +PASS U+5171 共 %1B%24%42%36%26 +PASS U+5175 兵 %1B%24%42%4A%3C +PASS U+5176 其 %1B%24%42%42%36 +PASS U+5177 具 %1B%24%42%36%71 +PASS U+5178 典 %1B%24%42%45%35 +PASS U+517C 兼 %1B%24%42%37%73 +PASS U+5180 冀 %1B%24%42%51%43 +PASS U+5182 冂 %1B%24%42%51%44 +PASS U+5185 内 %1B%24%42%46%62 +PASS U+5186 円 %1B%24%42%31%5F +PASS U+5189 冉 %1B%24%42%51%47 +PASS U+518A 冊 %1B%24%42%3A%7D +PASS U+518C 册 %1B%24%42%51%46 +PASS U+518D 再 %1B%24%42%3A%46 +PASS U+518F 冏 %1B%24%42%51%48 +PASS U+5190 冐 %1B%24%42%66%6E +PASS U+5191 冑 %1B%24%42%51%49 +PASS U+5192 冒 %1B%24%42%4B%41 +PASS U+5193 冓 %1B%24%42%51%4A +PASS U+5195 冕 %1B%24%42%51%4B +PASS U+5196 冖 %1B%24%42%51%4C +PASS U+5197 冗 %1B%24%42%3E%69 +PASS U+5199 写 %1B%24%42%3C%4C +FAIL U+519D 冝 %1B%24%42%79%45 assert_equals: expected "%1B%24%42%79%45" but got "%26%23%32%30%38%39%33%3B" +PASS U+51A0 冠 %1B%24%42%34%27 +PASS U+51A2 冢 %1B%24%42%51%4F +PASS U+51A4 冤 %1B%24%42%51%4D +PASS U+51A5 冥 %1B%24%42%4C%3D +PASS U+51A6 冦 %1B%24%42%51%4E +PASS U+51A8 冨 %1B%24%42%49%5A +PASS U+51A9 冩 %1B%24%42%51%50 +PASS U+51AA 冪 %1B%24%42%51%51 +PASS U+51AB 冫 %1B%24%42%51%52 +PASS U+51AC 冬 %1B%24%42%45%5F +PASS U+51B0 冰 %1B%24%42%51%56 +PASS U+51B1 冱 %1B%24%42%51%54 +PASS U+51B2 冲 %1B%24%42%51%55 +PASS U+51B3 决 %1B%24%42%51%53 +PASS U+51B4 冴 %1B%24%42%3A%63 +PASS U+51B5 况 %1B%24%42%51%57 +PASS U+51B6 冶 %1B%24%42%4C%6A +PASS U+51B7 冷 %1B%24%42%4E%64 +PASS U+51BD 冽 %1B%24%42%51%58 +FAIL U+51BE 冾 %1B%24%42%79%46 assert_equals: expected "%1B%24%42%79%46" but got "%26%23%32%30%39%32%36%3B" +PASS U+51C4 凄 %1B%24%42%40%28 +PASS U+51C5 凅 %1B%24%42%51%59 +PASS U+51C6 准 %1B%24%42%3D%5A +PASS U+51C9 凉 %1B%24%42%51%5A +PASS U+51CB 凋 %1B%24%42%43%7C +PASS U+51CC 凌 %1B%24%42%4E%3F +PASS U+51CD 凍 %1B%24%42%45%60 +PASS U+51D6 凖 %1B%24%42%52%45 +PASS U+51DB 凛 %1B%24%42%51%5B +PASS U+51DC 凜 %1B%24%42%74%25 +PASS U+51DD 凝 %1B%24%42%36%45 +PASS U+51E0 几 %1B%24%42%51%5C +PASS U+51E1 凡 %1B%24%42%4B%5E +PASS U+51E6 処 %1B%24%42%3D%68 +PASS U+51E7 凧 %1B%24%42%42%7C +PASS U+51E9 凩 %1B%24%42%51%5E +PASS U+51EA 凪 %1B%24%42%46%64 +FAIL U+51EC 凬 %1B%24%42%79%47 assert_equals: expected "%1B%24%42%79%47" but got "%26%23%32%30%39%37%32%3B" +PASS U+51ED 凭 %1B%24%42%51%5F +PASS U+51F0 凰 %1B%24%42%51%60 +PASS U+51F1 凱 %1B%24%42%33%2E +PASS U+51F5 凵 %1B%24%42%51%61 +PASS U+51F6 凶 %1B%24%42%36%27 +PASS U+51F8 凸 %1B%24%42%46%4C +PASS U+51F9 凹 %1B%24%42%31%7A +PASS U+51FA 出 %1B%24%42%3D%50 +PASS U+51FD 函 %1B%24%42%48%21 +PASS U+51FE 凾 %1B%24%42%51%62 +PASS U+5200 刀 %1B%24%42%45%61 +PASS U+5203 刃 %1B%24%42%3F%4F +PASS U+5204 刄 %1B%24%42%51%63 +PASS U+5206 分 %1B%24%42%4A%2C +PASS U+5207 切 %1B%24%42%40%5A +PASS U+5208 刈 %1B%24%42%34%22 +PASS U+520A 刊 %1B%24%42%34%29 +PASS U+520B 刋 %1B%24%42%51%64 +PASS U+520E 刎 %1B%24%42%51%66 +PASS U+5211 刑 %1B%24%42%37%3A +PASS U+5214 刔 %1B%24%42%51%65 +FAIL U+5215 刕 %1B%24%42%79%48 assert_equals: expected "%1B%24%42%79%48" but got "%26%23%32%31%30%31%33%3B" +PASS U+5217 列 %1B%24%42%4E%73 +PASS U+521D 初 %1B%24%42%3D%69 +PASS U+5224 判 %1B%24%42%48%3D +PASS U+5225 別 %1B%24%42%4A%4C +PASS U+5227 刧 %1B%24%42%51%67 +PASS U+5229 利 %1B%24%42%4D%78 +PASS U+522A 刪 %1B%24%42%51%68 +PASS U+522E 刮 %1B%24%42%51%69 +PASS U+5230 到 %1B%24%42%45%7E +PASS U+5233 刳 %1B%24%42%51%6A +PASS U+5236 制 %1B%24%42%40%29 +PASS U+5237 刷 %1B%24%42%3A%7E +PASS U+5238 券 %1B%24%42%37%74 +PASS U+5239 刹 %1B%24%42%51%6B +PASS U+523A 刺 %1B%24%42%3B%49 +PASS U+523B 刻 %1B%24%42%39%6F +PASS U+5243 剃 %1B%24%42%44%66 +PASS U+5244 剄 %1B%24%42%51%6D +PASS U+5247 則 %1B%24%42%42%27 +PASS U+524A 削 %1B%24%42%3A%6F +PASS U+524B 剋 %1B%24%42%51%6E +PASS U+524C 剌 %1B%24%42%51%6F +PASS U+524D 前 %1B%24%42%41%30 +PASS U+524F 剏 %1B%24%42%51%6C +PASS U+5254 剔 %1B%24%42%51%71 +PASS U+5256 剖 %1B%24%42%4B%36 +PASS U+525B 剛 %1B%24%42%39%64 +PASS U+525E 剞 %1B%24%42%51%70 +PASS U+5263 剣 %1B%24%42%37%75 +PASS U+5264 剤 %1B%24%42%3A%5E +PASS U+5265 剥 %1B%24%42%47%6D +PASS U+5269 剩 %1B%24%42%51%74 +PASS U+526A 剪 %1B%24%42%51%72 +PASS U+526F 副 %1B%24%42%49%7B +PASS U+5270 剰 %1B%24%42%3E%6A +PASS U+5271 剱 %1B%24%42%51%7B +PASS U+5272 割 %1B%24%42%33%64 +PASS U+5273 剳 %1B%24%42%51%75 +PASS U+5274 剴 %1B%24%42%51%73 +PASS U+5275 創 %1B%24%42%41%4F +PASS U+527D 剽 %1B%24%42%51%77 +PASS U+527F 剿 %1B%24%42%51%76 +PASS U+5283 劃 %1B%24%42%33%44 +PASS U+5287 劇 %1B%24%42%37%60 +PASS U+5288 劈 %1B%24%42%51%7C +PASS U+5289 劉 %1B%24%42%4E%2D +PASS U+528D 劍 %1B%24%42%51%78 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1001-2000-expected.txt new file mode 100644 index 0000000..65245bae --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_1001-2000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 954 PASS, 46 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5291 劑 %1B%24%42%51%7D +PASS U+5292 劒 %1B%24%42%51%7A +PASS U+5294 劔 %1B%24%42%51%79 +PASS U+529B 力 %1B%24%42%4E%4F +FAIL U+529C 劜 %1B%24%42%79%49 assert_equals: expected "%1B%24%42%79%49" but got "%26%23%32%31%31%34%38%3B" +PASS U+529F 功 %1B%24%42%38%79 +PASS U+52A0 加 %1B%24%42%32%43 +PASS U+52A3 劣 %1B%24%42%4E%74 +FAIL U+52A6 劦 %1B%24%42%79%4A assert_equals: expected "%1B%24%42%79%4A" but got "%26%23%32%31%31%35%38%3B" +PASS U+52A9 助 %1B%24%42%3D%75 +PASS U+52AA 努 %1B%24%42%45%58 +PASS U+52AB 劫 %1B%24%42%39%65 +PASS U+52AC 劬 %1B%24%42%52%22 +PASS U+52AD 劭 %1B%24%42%52%23 +FAIL U+52AF 劯 %1B%24%42%7B%3C assert_equals: expected "%1B%24%42%7B%3C" but got "%26%23%32%31%31%36%37%3B" +PASS U+52B1 励 %1B%24%42%4E%65 +PASS U+52B4 労 %1B%24%42%4F%2B +PASS U+52B5 劵 %1B%24%42%52%25 +PASS U+52B9 効 %1B%24%42%38%7A +PASS U+52BC 劼 %1B%24%42%52%24 +PASS U+52BE 劾 %1B%24%42%33%2F +FAIL U+52C0 勀 %1B%24%42%79%4B assert_equals: expected "%1B%24%42%79%4B" but got "%26%23%32%31%31%38%34%3B" +PASS U+52C1 勁 %1B%24%42%52%26 +PASS U+52C3 勃 %1B%24%42%4B%56 +PASS U+52C5 勅 %1B%24%42%44%3C +PASS U+52C7 勇 %1B%24%42%4D%26 +PASS U+52C9 勉 %1B%24%42%4A%59 +PASS U+52CD 勍 %1B%24%42%52%27 +PASS U+52D2 勒 %1B%24%42%70%55 +PASS U+52D5 動 %1B%24%42%46%30 +PASS U+52D7 勗 %1B%24%42%52%28 +PASS U+52D8 勘 %1B%24%42%34%2A +PASS U+52D9 務 %1B%24%42%4C%33 +FAIL U+52DB 勛 %1B%24%42%79%4C assert_equals: expected "%1B%24%42%79%4C" but got "%26%23%32%31%32%31%31%3B" +PASS U+52DD 勝 %1B%24%42%3E%21 +PASS U+52DE 勞 %1B%24%42%52%29 +PASS U+52DF 募 %1B%24%42%4A%67 +PASS U+52E0 勠 %1B%24%42%52%2D +PASS U+52E2 勢 %1B%24%42%40%2A +PASS U+52E3 勣 %1B%24%42%52%2A +PASS U+52E4 勤 %1B%24%42%36%50 +PASS U+52E6 勦 %1B%24%42%52%2B +PASS U+52E7 勧 %1B%24%42%34%2B +PASS U+52F2 勲 %1B%24%42%37%2E +PASS U+52F3 勳 %1B%24%42%52%2E +PASS U+52F5 勵 %1B%24%42%52%2F +PASS U+52F8 勸 %1B%24%42%52%30 +PASS U+52F9 勹 %1B%24%42%52%31 +PASS U+52FA 勺 %1B%24%42%3C%5B +PASS U+52FE 勾 %1B%24%42%38%7B +PASS U+52FF 勿 %1B%24%42%4C%5E +FAIL U+5300 匀 %1B%24%42%79%4D assert_equals: expected "%1B%24%42%79%4D" but got "%26%23%32%31%32%34%38%3B" +PASS U+5301 匁 %1B%24%42%4C%68 +PASS U+5302 匂 %1B%24%42%46%77 +PASS U+5305 包 %1B%24%42%4A%71 +PASS U+5306 匆 %1B%24%42%52%32 +FAIL U+5307 匇 %1B%24%42%79%4E assert_equals: expected "%1B%24%42%79%4E" but got "%26%23%32%31%32%35%35%3B" +PASS U+5308 匈 %1B%24%42%52%33 +PASS U+530D 匍 %1B%24%42%52%35 +PASS U+530F 匏 %1B%24%42%52%37 +PASS U+5310 匐 %1B%24%42%52%36 +PASS U+5315 匕 %1B%24%42%52%38 +PASS U+5316 化 %1B%24%42%32%3D +PASS U+5317 北 %1B%24%42%4B%4C +PASS U+5319 匙 %1B%24%42%3A%7C +PASS U+531A 匚 %1B%24%42%52%39 +PASS U+531D 匝 %1B%24%42%41%59 +PASS U+5320 匠 %1B%24%42%3E%22 +PASS U+5321 匡 %1B%24%42%36%29 +PASS U+5323 匣 %1B%24%42%52%3A +FAIL U+5324 匤 %1B%24%42%79%4F assert_equals: expected "%1B%24%42%79%4F" but got "%26%23%32%31%32%38%34%3B" +PASS U+532A 匪 %1B%24%42%48%5B +PASS U+532F 匯 %1B%24%42%52%3B +PASS U+5331 匱 %1B%24%42%52%3C +PASS U+5333 匳 %1B%24%42%52%3D +PASS U+5338 匸 %1B%24%42%52%3E +PASS U+5339 匹 %1B%24%42%49%24 +PASS U+533A 区 %1B%24%42%36%68 +PASS U+533B 医 %1B%24%42%30%65 +PASS U+533F 匿 %1B%24%42%46%3F +PASS U+5340 區 %1B%24%42%52%3F +PASS U+5341 十 %1B%24%42%3D%3D +PASS U+5343 千 %1B%24%42%40%69 +PASS U+5345 卅 %1B%24%42%52%41 +PASS U+5346 卆 %1B%24%42%52%40 +PASS U+5347 升 %1B%24%42%3E%23 +PASS U+5348 午 %1B%24%42%38%61 +PASS U+5349 卉 %1B%24%42%52%43 +PASS U+534A 半 %1B%24%42%48%3E +PASS U+534D 卍 %1B%24%42%52%44 +PASS U+5351 卑 %1B%24%42%48%5C +PASS U+5352 卒 %1B%24%42%42%34 +PASS U+5353 卓 %1B%24%42%42%6E +PASS U+5354 協 %1B%24%42%36%28 +PASS U+5357 南 %1B%24%42%46%6E +PASS U+5358 単 %1B%24%42%43%31 +PASS U+535A 博 %1B%24%42%47%6E +PASS U+535C 卜 %1B%24%42%4B%4E +PASS U+535E 卞 %1B%24%42%52%46 +PASS U+5360 占 %1B%24%42%40%6A +PASS U+5366 卦 %1B%24%42%37%35 +PASS U+5369 卩 %1B%24%42%52%47 +PASS U+536E 卮 %1B%24%42%52%48 +PASS U+536F 卯 %1B%24%42%31%2C +PASS U+5370 印 %1B%24%42%30%75 +PASS U+5371 危 %1B%24%42%34%6D +FAIL U+5372 卲 %1B%24%42%79%50 assert_equals: expected "%1B%24%42%79%50" but got "%26%23%32%31%33%36%32%3B" +PASS U+5373 即 %1B%24%42%42%28 +PASS U+5374 却 %1B%24%42%35%51 +PASS U+5375 卵 %1B%24%42%4D%71 +PASS U+5377 卷 %1B%24%42%52%4B +PASS U+5378 卸 %1B%24%42%32%37 +PASS U+537B 卻 %1B%24%42%52%4A +PASS U+537F 卿 %1B%24%42%36%2A +PASS U+5382 厂 %1B%24%42%52%4C +PASS U+5384 厄 %1B%24%42%4C%71 +FAIL U+5393 厓 %1B%24%42%79%51 assert_equals: expected "%1B%24%42%79%51" but got "%26%23%32%31%33%39%35%3B" +PASS U+5396 厖 %1B%24%42%52%4D +PASS U+5398 厘 %1B%24%42%4E%52 +PASS U+539A 厚 %1B%24%42%38%7C +PASS U+539F 原 %1B%24%42%38%36 +PASS U+53A0 厠 %1B%24%42%52%4E +PASS U+53A5 厥 %1B%24%42%52%50 +PASS U+53A6 厦 %1B%24%42%52%4F +PASS U+53A8 厨 %1B%24%42%3F%5F +PASS U+53A9 厩 %1B%24%42%31%39 +PASS U+53AD 厭 %1B%24%42%31%5E +PASS U+53AE 厮 %1B%24%42%52%51 +PASS U+53B0 厰 %1B%24%42%52%52 +FAIL U+53B2 厲 %1B%24%42%79%52 assert_equals: expected "%1B%24%42%79%52" but got "%26%23%32%31%34%32%36%3B" +PASS U+53B3 厳 %1B%24%42%38%37 +PASS U+53B6 厶 %1B%24%42%52%53 +PASS U+53BB 去 %1B%24%42%35%6E +PASS U+53C2 参 %1B%24%42%3B%32 +PASS U+53C3 參 %1B%24%42%52%54 +PASS U+53C8 又 %1B%24%42%4B%74 +PASS U+53C9 叉 %1B%24%42%3A%35 +PASS U+53CA 及 %1B%24%42%35%5A +PASS U+53CB 友 %1B%24%42%4D%27 +PASS U+53CC 双 %1B%24%42%41%50 +PASS U+53CD 反 %1B%24%42%48%3F +PASS U+53CE 収 %1B%24%42%3C%7D +PASS U+53D4 叔 %1B%24%42%3D%47 +PASS U+53D6 取 %1B%24%42%3C%68 +PASS U+53D7 受 %1B%24%42%3C%75 +PASS U+53D9 叙 %1B%24%42%3D%76 +PASS U+53DB 叛 %1B%24%42%48%40 +FAIL U+53DD 叝 %1B%24%42%79%53 assert_equals: expected "%1B%24%42%79%53" but got "%26%23%32%31%34%36%39%3B" +PASS U+53DF 叟 %1B%24%42%52%57 +PASS U+53E1 叡 %1B%24%42%31%43 +PASS U+53E2 叢 %1B%24%42%41%51 +PASS U+53E3 口 %1B%24%42%38%7D +PASS U+53E4 古 %1B%24%42%38%45 +PASS U+53E5 句 %1B%24%42%36%67 +PASS U+53E8 叨 %1B%24%42%52%5B +PASS U+53E9 叩 %1B%24%42%43%21 +PASS U+53EA 只 %1B%24%42%42%7E +PASS U+53EB 叫 %1B%24%42%36%2B +PASS U+53EC 召 %1B%24%42%3E%24 +PASS U+53ED 叭 %1B%24%42%52%5C +PASS U+53EE 叮 %1B%24%42%52%5A +PASS U+53EF 可 %1B%24%42%32%44 +PASS U+53F0 台 %1B%24%42%42%66 +PASS U+53F1 叱 %1B%24%42%3C%38 +PASS U+53F2 史 %1B%24%42%3B%4B +PASS U+53F3 右 %1B%24%42%31%26 +PASS U+53F6 叶 %1B%24%42%33%70 +PASS U+53F7 号 %1B%24%42%39%66 +PASS U+53F8 司 %1B%24%42%3B%4A +PASS U+53FA 叺 %1B%24%42%52%5D +PASS U+5401 吁 %1B%24%42%52%5E +PASS U+5403 吃 %1B%24%42%35%49 +PASS U+5404 各 %1B%24%42%33%46 +PASS U+5408 合 %1B%24%42%39%67 +PASS U+5409 吉 %1B%24%42%35%48 +PASS U+540A 吊 %1B%24%42%44%5F +PASS U+540B 吋 %1B%24%42%31%25 +PASS U+540C 同 %1B%24%42%46%31 +PASS U+540D 名 %1B%24%42%4C%3E +PASS U+540E 后 %1B%24%42%39%21 +PASS U+540F 吏 %1B%24%42%4D%79 +PASS U+5410 吐 %1B%24%42%45%47 +PASS U+5411 向 %1B%24%42%38%7E +PASS U+541B 君 %1B%24%42%37%2F +PASS U+541D 吝 %1B%24%42%52%67 +PASS U+541F 吟 %1B%24%42%36%63 +PASS U+5420 吠 %1B%24%42%4B%4A +PASS U+5426 否 %1B%24%42%48%5D +PASS U+5429 吩 %1B%24%42%52%66 +PASS U+542B 含 %1B%24%42%34%5E +PASS U+542C 听 %1B%24%42%52%61 +PASS U+542D 吭 %1B%24%42%52%62 +PASS U+542E 吮 %1B%24%42%52%64 +PASS U+5436 吶 %1B%24%42%52%65 +PASS U+5438 吸 %1B%24%42%35%5B +PASS U+5439 吹 %1B%24%42%3F%61 +PASS U+543B 吻 %1B%24%42%4A%2D +PASS U+543C 吼 %1B%24%42%52%63 +PASS U+543D 吽 %1B%24%42%52%5F +PASS U+543E 吾 %1B%24%42%38%63 +PASS U+5440 呀 %1B%24%42%52%60 +PASS U+5442 呂 %1B%24%42%4F%24 +PASS U+5446 呆 %1B%24%42%4A%72 +PASS U+5448 呈 %1B%24%42%44%68 +PASS U+5449 呉 %1B%24%42%38%62 +PASS U+544A 告 %1B%24%42%39%70 +PASS U+544E 呎 %1B%24%42%52%68 +PASS U+5451 呑 %1B%24%42%46%5D +PASS U+545F 呟 %1B%24%42%52%6C +PASS U+5468 周 %1B%24%42%3C%7E +PASS U+546A 呪 %1B%24%42%3C%76 +PASS U+5470 呰 %1B%24%42%52%6F +PASS U+5471 呱 %1B%24%42%52%6D +PASS U+5473 味 %1B%24%42%4C%23 +PASS U+5475 呵 %1B%24%42%52%6A +PASS U+5476 呶 %1B%24%42%52%73 +PASS U+5477 呷 %1B%24%42%52%6E +PASS U+547B 呻 %1B%24%42%52%71 +PASS U+547C 呼 %1B%24%42%38%46 +PASS U+547D 命 %1B%24%42%4C%3F +PASS U+5480 咀 %1B%24%42%52%72 +PASS U+5484 咄 %1B%24%42%52%74 +PASS U+5486 咆 %1B%24%42%52%76 +FAIL U+548A 咊 %1B%24%42%79%56 assert_equals: expected "%1B%24%42%79%56" but got "%26%23%32%31%36%34%32%3B" +PASS U+548B 咋 %1B%24%42%3A%70 +PASS U+548C 和 %1B%24%42%4F%42 +PASS U+548E 咎 %1B%24%42%52%6B +PASS U+548F 咏 %1B%24%42%52%69 +PASS U+5490 咐 %1B%24%42%52%75 +PASS U+5492 咒 %1B%24%42%52%70 +FAIL U+549C 咜 %1B%24%42%79%55 assert_equals: expected "%1B%24%42%79%55" but got "%26%23%32%31%36%36%30%3B" +PASS U+54A2 咢 %1B%24%42%52%78 +PASS U+54A4 咤 %1B%24%42%53%23 +PASS U+54A5 咥 %1B%24%42%52%7A +PASS U+54A8 咨 %1B%24%42%52%7E +FAIL U+54A9 咩 %1B%24%42%79%57 assert_equals: expected "%1B%24%42%79%57" but got "%26%23%32%31%36%37%33%3B" +PASS U+54AB 咫 %1B%24%42%53%21 +PASS U+54AC 咬 %1B%24%42%52%7B +PASS U+54AF 咯 %1B%24%42%53%3E +PASS U+54B2 咲 %1B%24%42%3A%69 +PASS U+54B3 咳 %1B%24%42%33%31 +PASS U+54B8 咸 %1B%24%42%52%79 +PASS U+54BC 咼 %1B%24%42%53%25 +PASS U+54BD 咽 %1B%24%42%30%76 +PASS U+54BE 咾 %1B%24%42%53%24 +PASS U+54C0 哀 %1B%24%42%30%25 +PASS U+54C1 品 %1B%24%42%49%4A +PASS U+54C2 哂 %1B%24%42%53%22 +PASS U+54C4 哄 %1B%24%42%52%7C +PASS U+54C7 哇 %1B%24%42%52%77 +PASS U+54C8 哈 %1B%24%42%52%7D +PASS U+54C9 哉 %1B%24%42%3A%48 +PASS U+54D8 哘 %1B%24%42%53%26 +PASS U+54E1 員 %1B%24%42%30%77 +PASS U+54E2 哢 %1B%24%42%53%2F +PASS U+54E5 哥 %1B%24%42%53%27 +PASS U+54E6 哦 %1B%24%42%53%28 +PASS U+54E8 哨 %1B%24%42%3E%25 +PASS U+54E9 哩 %1B%24%42%4B%69 +PASS U+54ED 哭 %1B%24%42%53%2D +PASS U+54EE 哮 %1B%24%42%53%2C +PASS U+54F2 哲 %1B%24%42%45%2F +PASS U+54FA 哺 %1B%24%42%53%2E +PASS U+54FD 哽 %1B%24%42%53%2B +FAIL U+54FF 哿 %1B%24%42%79%58 assert_equals: expected "%1B%24%42%79%58" but got "%26%23%32%31%37%35%39%3B" +PASS U+5504 唄 %1B%24%42%31%34 +PASS U+5506 唆 %1B%24%42%3A%36 +PASS U+5507 唇 %1B%24%42%3F%30 +PASS U+550F 唏 %1B%24%42%53%29 +PASS U+5510 唐 %1B%24%42%45%62 +PASS U+5514 唔 %1B%24%42%53%2A +PASS U+5516 唖 %1B%24%42%30%22 +PASS U+552E 售 %1B%24%42%53%34 +PASS U+552F 唯 %1B%24%42%4D%23 +PASS U+5531 唱 %1B%24%42%3E%27 +PASS U+5533 唳 %1B%24%42%53%3A +PASS U+5538 唸 %1B%24%42%53%39 +PASS U+5539 唹 %1B%24%42%53%30 +PASS U+553E 唾 %1B%24%42%42%43 +PASS U+5540 啀 %1B%24%42%53%31 +PASS U+5544 啄 %1B%24%42%42%6F +PASS U+5545 啅 %1B%24%42%53%36 +PASS U+5546 商 %1B%24%42%3E%26 +PASS U+554C 啌 %1B%24%42%53%33 +PASS U+554F 問 %1B%24%42%4C%64 +PASS U+5553 啓 %1B%24%42%37%3C +PASS U+5556 啖 %1B%24%42%53%37 +PASS U+5557 啗 %1B%24%42%53%38 +PASS U+555C 啜 %1B%24%42%53%35 +PASS U+555D 啝 %1B%24%42%53%3B +PASS U+5563 啣 %1B%24%42%53%32 +PASS U+557B 啻 %1B%24%42%53%41 +PASS U+557C 啼 %1B%24%42%53%46 +PASS U+557E 啾 %1B%24%42%53%42 +PASS U+5580 喀 %1B%24%42%53%3D +PASS U+5583 喃 %1B%24%42%53%47 +PASS U+5584 善 %1B%24%42%41%31 +FAIL U+5586 喆 %1B%24%42%79%59 assert_equals: expected "%1B%24%42%79%59" but got "%26%23%32%31%38%39%34%3B" +PASS U+5587 喇 %1B%24%42%53%49 +PASS U+5589 喉 %1B%24%42%39%22 +PASS U+558A 喊 %1B%24%42%53%3F +PASS U+558B 喋 %1B%24%42%43%7D +PASS U+5598 喘 %1B%24%42%53%43 +PASS U+5599 喙 %1B%24%42%53%3C +PASS U+559A 喚 %1B%24%42%34%2D +PASS U+559C 喜 %1B%24%42%34%6E +PASS U+559D 喝 %1B%24%42%33%65 +PASS U+559E 喞 %1B%24%42%53%44 +PASS U+559F 喟 %1B%24%42%53%40 +PASS U+55A7 喧 %1B%24%42%37%76 +PASS U+55A8 喨 %1B%24%42%53%4A +PASS U+55A9 喩 %1B%24%42%53%48 +PASS U+55AA 喪 %1B%24%42%41%53 +PASS U+55AB 喫 %1B%24%42%35%4A +PASS U+55AC 喬 %1B%24%42%36%2C +PASS U+55AE 單 %1B%24%42%53%45 +PASS U+55B0 喰 %1B%24%42%36%74 +PASS U+55B6 営 %1B%24%42%31%44 +PASS U+55C4 嗄 %1B%24%42%53%4E +PASS U+55C5 嗅 %1B%24%42%53%4C +PASS U+55C7 嗇 %1B%24%42%54%27 +PASS U+55D4 嗔 %1B%24%42%53%51 +PASS U+55DA 嗚 %1B%24%42%53%4B +PASS U+55DC 嗜 %1B%24%42%53%4F +PASS U+55DF 嗟 %1B%24%42%53%4D +PASS U+55E3 嗣 %1B%24%42%3B%4C +PASS U+55E4 嗤 %1B%24%42%53%50 +PASS U+55F7 嗷 %1B%24%42%53%53 +PASS U+55F9 嗹 %1B%24%42%53%58 +PASS U+55FD 嗽 %1B%24%42%53%56 +PASS U+55FE 嗾 %1B%24%42%53%55 +PASS U+5606 嘆 %1B%24%42%43%32 +PASS U+5609 嘉 %1B%24%42%32%45 +PASS U+5614 嘔 %1B%24%42%53%52 +PASS U+5616 嘖 %1B%24%42%53%54 +PASS U+5617 嘗 %1B%24%42%3E%28 +PASS U+5618 嘘 %1B%24%42%31%33 +PASS U+561B 嘛 %1B%24%42%53%57 +PASS U+5629 嘩 %1B%24%42%32%5E +PASS U+562F 嘯 %1B%24%42%53%62 +PASS U+5631 嘱 %1B%24%42%3E%7C +PASS U+5632 嘲 %1B%24%42%53%5E +PASS U+5634 嘴 %1B%24%42%53%5C +PASS U+5636 嘶 %1B%24%42%53%5D +PASS U+5638 嘸 %1B%24%42%53%5F +PASS U+5642 噂 %1B%24%42%31%3D +PASS U+564C 噌 %1B%24%42%41%39 +PASS U+564E 噎 %1B%24%42%53%59 +PASS U+5650 噐 %1B%24%42%53%5A +PASS U+565B 噛 %1B%24%42%33%7A +PASS U+5664 噤 %1B%24%42%53%61 +PASS U+5668 器 %1B%24%42%34%6F +PASS U+566A 噪 %1B%24%42%53%64 +PASS U+566B 噫 %1B%24%42%53%60 +PASS U+566C 噬 %1B%24%42%53%63 +PASS U+5674 噴 %1B%24%42%4A%2E +PASS U+5678 噸 %1B%24%42%46%55 +PASS U+567A 噺 %1B%24%42%48%38 +PASS U+5680 嚀 %1B%24%42%53%66 +PASS U+5686 嚆 %1B%24%42%53%65 +PASS U+5687 嚇 %1B%24%42%33%45 +PASS U+568A 嚊 %1B%24%42%53%67 +PASS U+568F 嚏 %1B%24%42%53%6A +PASS U+5694 嚔 %1B%24%42%53%69 +PASS U+56A0 嚠 %1B%24%42%53%68 +PASS U+56A2 嚢 %1B%24%42%47%39 +PASS U+56A5 嚥 %1B%24%42%53%6B +PASS U+56AE 嚮 %1B%24%42%53%6C +PASS U+56B4 嚴 %1B%24%42%53%6E +PASS U+56B6 嚶 %1B%24%42%53%6D +PASS U+56BC 嚼 %1B%24%42%53%70 +PASS U+56C0 囀 %1B%24%42%53%73 +PASS U+56C1 囁 %1B%24%42%53%71 +PASS U+56C2 囂 %1B%24%42%53%6F +PASS U+56C3 囃 %1B%24%42%53%72 +PASS U+56C8 囈 %1B%24%42%53%74 +PASS U+56CE 囎 %1B%24%42%53%75 +PASS U+56D1 囑 %1B%24%42%53%76 +PASS U+56D3 囓 %1B%24%42%53%77 +PASS U+56D7 囗 %1B%24%42%53%78 +PASS U+56D8 囘 %1B%24%42%51%45 +PASS U+56DA 囚 %1B%24%42%3C%7C +PASS U+56DB 四 %1B%24%42%3B%4D +PASS U+56DE 回 %1B%24%42%32%73 +PASS U+56E0 因 %1B%24%42%30%78 +PASS U+56E3 団 %1B%24%42%43%44 +PASS U+56EE 囮 %1B%24%42%53%79 +PASS U+56F0 困 %1B%24%42%3A%24 +PASS U+56F2 囲 %1B%24%42%30%4F +PASS U+56F3 図 %1B%24%42%3F%5E +PASS U+56F9 囹 %1B%24%42%53%7A +PASS U+56FA 固 %1B%24%42%38%47 +PASS U+56FD 国 %1B%24%42%39%71 +PASS U+56FF 囿 %1B%24%42%53%7C +PASS U+5700 圀 %1B%24%42%53%7B +PASS U+5703 圃 %1B%24%42%4A%60 +PASS U+5704 圄 %1B%24%42%53%7D +PASS U+5708 圈 %1B%24%42%54%21 +PASS U+5709 圉 %1B%24%42%53%7E +PASS U+570B 國 %1B%24%42%54%22 +PASS U+570D 圍 %1B%24%42%54%23 +PASS U+570F 圏 %1B%24%42%37%77 +PASS U+5712 園 %1B%24%42%31%60 +PASS U+5713 圓 %1B%24%42%54%24 +PASS U+5716 圖 %1B%24%42%54%26 +PASS U+5718 團 %1B%24%42%54%25 +PASS U+571C 圜 %1B%24%42%54%28 +PASS U+571F 土 %1B%24%42%45%5A +PASS U+5726 圦 %1B%24%42%54%29 +PASS U+5727 圧 %1B%24%42%30%35 +PASS U+5728 在 %1B%24%42%3A%5F +PASS U+572D 圭 %1B%24%42%37%3D +PASS U+5730 地 %1B%24%42%43%4F +PASS U+5737 圷 %1B%24%42%54%2A +PASS U+5738 圸 %1B%24%42%54%2B +PASS U+573B 圻 %1B%24%42%54%2D +PASS U+5740 址 %1B%24%42%54%2E +PASS U+5742 坂 %1B%24%42%3A%64 +PASS U+5747 均 %1B%24%42%36%51 +PASS U+574A 坊 %1B%24%42%4B%37 +PASS U+574E 坎 %1B%24%42%54%2C +PASS U+574F 坏 %1B%24%42%54%2F +PASS U+5750 坐 %1B%24%42%3A%41 +PASS U+5751 坑 %1B%24%42%39%23 +FAIL U+5759 坙 %1B%24%42%79%5A assert_equals: expected "%1B%24%42%79%5A" but got "%26%23%32%32%33%36%31%3B" +PASS U+5761 坡 %1B%24%42%54%33 +PASS U+5764 坤 %1B%24%42%3A%25 +FAIL U+5765 坥 %1B%24%42%79%5B assert_equals: expected "%1B%24%42%79%5B" but got "%26%23%32%32%33%37%33%3B" +PASS U+5766 坦 %1B%24%42%43%33 +PASS U+5769 坩 %1B%24%42%54%30 +PASS U+576A 坪 %1B%24%42%44%5A +PASS U+577F 坿 %1B%24%42%54%34 +PASS U+5782 垂 %1B%24%42%3F%62 +PASS U+5788 垈 %1B%24%42%54%32 +PASS U+5789 垉 %1B%24%42%54%35 +PASS U+578B 型 %1B%24%42%37%3F +PASS U+5793 垓 %1B%24%42%54%36 +PASS U+57A0 垠 %1B%24%42%54%37 +PASS U+57A2 垢 %1B%24%42%39%24 +PASS U+57A3 垣 %1B%24%42%33%40 +PASS U+57A4 垤 %1B%24%42%54%39 +PASS U+57AA 垪 %1B%24%42%54%3A +FAIL U+57AC 垬 %1B%24%42%79%5C assert_equals: expected "%1B%24%42%79%5C" but got "%26%23%32%32%34%34%34%3B" +PASS U+57B0 垰 %1B%24%42%54%3B +PASS U+57B3 垳 %1B%24%42%54%38 +PASS U+57C0 埀 %1B%24%42%54%31 +PASS U+57C3 埃 %1B%24%42%54%3C +PASS U+57C6 埆 %1B%24%42%54%3D +FAIL U+57C7 埇 %1B%24%42%79%5E assert_equals: expected "%1B%24%42%79%5E" but got "%26%23%32%32%34%37%31%3B" +FAIL U+57C8 埈 %1B%24%42%79%5D assert_equals: expected "%1B%24%42%79%5D" but got "%26%23%32%32%34%37%32%3B" +PASS U+57CB 埋 %1B%24%42%4B%64 +PASS U+57CE 城 %1B%24%42%3E%6B +PASS U+57D2 埒 %1B%24%42%54%3F +PASS U+57D3 埓 %1B%24%42%54%40 +PASS U+57D4 埔 %1B%24%42%54%3E +PASS U+57D6 埖 %1B%24%42%54%42 +PASS U+57DC 埜 %1B%24%42%47%38 +PASS U+57DF 域 %1B%24%42%30%68 +PASS U+57E0 埠 %1B%24%42%49%56 +PASS U+57E3 埣 %1B%24%42%54%43 +PASS U+57F4 埴 %1B%24%42%3E%7D +PASS U+57F7 執 %1B%24%42%3C%39 +PASS U+57F9 培 %1B%24%42%47%5D +PASS U+57FA 基 %1B%24%42%34%70 +PASS U+57FC 埼 %1B%24%42%3A%6B +PASS U+5800 堀 %1B%24%42%4B%59 +PASS U+5802 堂 %1B%24%42%46%32 +PASS U+5805 堅 %1B%24%42%37%78 +PASS U+5806 堆 %1B%24%42%42%4F +PASS U+580A 堊 %1B%24%42%54%41 +PASS U+580B 堋 %1B%24%42%54%44 +PASS U+5815 堕 %1B%24%42%42%44 +PASS U+5819 堙 %1B%24%42%54%45 +PASS U+581D 堝 %1B%24%42%54%46 +PASS U+5821 堡 %1B%24%42%54%48 +PASS U+5824 堤 %1B%24%42%44%69 +PASS U+582A 堪 %1B%24%42%34%2E +PASS U+582F 堯 %1B%24%42%74%21 +PASS U+5830 堰 %1B%24%42%31%61 +PASS U+5831 報 %1B%24%42%4A%73 +PASS U+5834 場 %1B%24%42%3E%6C +PASS U+5835 堵 %1B%24%42%45%48 +PASS U+583A 堺 %1B%24%42%3A%66 +PASS U+583D 堽 %1B%24%42%54%4E +PASS U+5840 塀 %1B%24%42%4A%3D +PASS U+5841 塁 %1B%24%42%4E%5D +PASS U+584A 塊 %1B%24%42%32%74 +PASS U+584B 塋 %1B%24%42%54%4A +PASS U+5851 塑 %1B%24%42%41%3A +PASS U+5852 塒 %1B%24%42%54%4D +PASS U+5854 塔 %1B%24%42%45%63 +PASS U+5857 塗 %1B%24%42%45%49 +PASS U+5858 塘 %1B%24%42%45%64 +PASS U+5859 塙 %1B%24%42%48%39 +PASS U+585A 塚 %1B%24%42%44%4D +PASS U+585E 塞 %1B%24%42%3A%49 +PASS U+5862 塢 %1B%24%42%54%49 +PASS U+5869 塩 %1B%24%42%31%76 +PASS U+586B 填 %1B%24%42%45%36 +PASS U+5870 塰 %1B%24%42%54%4B +PASS U+5872 塲 %1B%24%42%54%47 +PASS U+5875 塵 %1B%24%42%3F%50 +PASS U+5879 塹 %1B%24%42%54%4F +PASS U+587E 塾 %1B%24%42%3D%4E +PASS U+5883 境 %1B%24%42%36%2D +PASS U+5885 墅 %1B%24%42%54%50 +PASS U+5893 墓 %1B%24%42%4A%68 +PASS U+5897 増 %1B%24%42%41%7D +PASS U+589C 墜 %1B%24%42%44%46 +FAIL U+589E 增 %1B%24%42%79%61 assert_equals: expected "%1B%24%42%79%61" but got "%26%23%32%32%36%38%36%3B" +PASS U+589F 墟 %1B%24%42%54%52 +PASS U+58A8 墨 %1B%24%42%4B%4F +PASS U+58AB 墫 %1B%24%42%54%53 +PASS U+58AE 墮 %1B%24%42%54%58 +FAIL U+58B2 墲 %1B%24%42%79%62 assert_equals: expected "%1B%24%42%79%62" but got "%26%23%32%32%37%30%36%3B" +PASS U+58B3 墳 %1B%24%42%4A%2F +PASS U+58B8 墸 %1B%24%42%54%57 +PASS U+58B9 墹 %1B%24%42%54%51 +PASS U+58BA 墺 %1B%24%42%54%54 +PASS U+58BB 墻 %1B%24%42%54%56 +PASS U+58BE 墾 %1B%24%42%3A%26 +PASS U+58C1 壁 %1B%24%42%4A%49 +PASS U+58C5 壅 %1B%24%42%54%59 +PASS U+58C7 壇 %1B%24%42%43%45 +PASS U+58CA 壊 %1B%24%42%32%75 +PASS U+58CC 壌 %1B%24%42%3E%6D +PASS U+58D1 壑 %1B%24%42%54%5B +PASS U+58D3 壓 %1B%24%42%54%5A +PASS U+58D5 壕 %1B%24%42%39%68 +PASS U+58D7 壗 %1B%24%42%54%5C +PASS U+58D8 壘 %1B%24%42%54%5E +PASS U+58D9 壙 %1B%24%42%54%5D +PASS U+58DC 壜 %1B%24%42%54%60 +PASS U+58DE 壞 %1B%24%42%54%55 +PASS U+58DF 壟 %1B%24%42%54%62 +PASS U+58E4 壤 %1B%24%42%54%61 +PASS U+58E5 壥 %1B%24%42%54%5F +PASS U+58EB 士 %1B%24%42%3B%4E +PASS U+58EC 壬 %1B%24%42%3F%51 +PASS U+58EE 壮 %1B%24%42%41%54 +PASS U+58EF 壯 %1B%24%42%54%63 +PASS U+58F0 声 %1B%24%42%40%3C +PASS U+58F1 壱 %1B%24%42%30%6D +PASS U+58F2 売 %1B%24%42%47%64 +PASS U+58F7 壷 %1B%24%42%44%5B +PASS U+58F9 壹 %1B%24%42%54%65 +PASS U+58FA 壺 %1B%24%42%54%64 +PASS U+58FB 壻 %1B%24%42%54%66 +PASS U+58FC 壼 %1B%24%42%54%67 +PASS U+58FD 壽 %1B%24%42%54%68 +PASS U+5902 夂 %1B%24%42%54%69 +PASS U+5909 変 %1B%24%42%4A%51 +PASS U+590A 夊 %1B%24%42%54%6A +FAIL U+590B 夋 %1B%24%42%79%63 assert_equals: expected "%1B%24%42%79%63" but got "%26%23%32%32%37%39%35%3B" +PASS U+590F 夏 %1B%24%42%32%46 +PASS U+5910 夐 %1B%24%42%54%6B +PASS U+5915 夕 %1B%24%42%4D%3C +PASS U+5916 外 %1B%24%42%33%30 +PASS U+5918 夘 %1B%24%42%52%49 +PASS U+5919 夙 %1B%24%42%3D%48 +PASS U+591A 多 %1B%24%42%42%3F +PASS U+591B 夛 %1B%24%42%54%6C +PASS U+591C 夜 %1B%24%42%4C%6B +PASS U+5922 夢 %1B%24%42%4C%34 +PASS U+5925 夥 %1B%24%42%54%6E +PASS U+5927 大 %1B%24%42%42%67 +PASS U+5929 天 %1B%24%42%45%37 +PASS U+592A 太 %1B%24%42%42%40 +PASS U+592B 夫 %1B%24%42%49%57 +PASS U+592C 夬 %1B%24%42%54%6F +PASS U+592D 夭 %1B%24%42%54%70 +PASS U+592E 央 %1B%24%42%31%7B +PASS U+5931 失 %1B%24%42%3C%3A +PASS U+5932 夲 %1B%24%42%54%71 +PASS U+5937 夷 %1B%24%42%30%50 +PASS U+5938 夸 %1B%24%42%54%72 +PASS U+593E 夾 %1B%24%42%54%73 +PASS U+5944 奄 %1B%24%42%31%62 +PASS U+5947 奇 %1B%24%42%34%71 +PASS U+5948 奈 %1B%24%42%46%60 +PASS U+5949 奉 %1B%24%42%4A%74 +PASS U+594E 奎 %1B%24%42%54%77 +PASS U+594F 奏 %1B%24%42%41%55 +PASS U+5950 奐 %1B%24%42%54%76 +PASS U+5951 契 %1B%24%42%37%40 +FAIL U+5953 奓 %1B%24%42%79%64 assert_equals: expected "%1B%24%42%79%64" but got "%26%23%32%32%38%36%37%3B" +PASS U+5954 奔 %1B%24%42%4B%5B +PASS U+5955 奕 %1B%24%42%54%75 +PASS U+5957 套 %1B%24%42%45%65 +PASS U+5958 奘 %1B%24%42%54%79 +PASS U+595A 奚 %1B%24%42%54%78 +FAIL U+595B 奛 %1B%24%42%79%65 assert_equals: expected "%1B%24%42%79%65" but got "%26%23%32%32%38%37%35%3B" +FAIL U+595D 奝 %1B%24%42%79%66 assert_equals: expected "%1B%24%42%79%66" but got "%26%23%32%32%38%37%37%3B" +PASS U+5960 奠 %1B%24%42%54%7B +PASS U+5962 奢 %1B%24%42%54%7A +FAIL U+5963 奣 %1B%24%42%79%67 assert_equals: expected "%1B%24%42%79%67" but got "%26%23%32%32%38%38%33%3B" +PASS U+5965 奥 %1B%24%42%31%7C +PASS U+5967 奧 %1B%24%42%54%7C +PASS U+5968 奨 %1B%24%42%3E%29 +PASS U+5969 奩 %1B%24%42%54%7E +PASS U+596A 奪 %1B%24%42%43%25 +PASS U+596C 奬 %1B%24%42%54%7D +PASS U+596E 奮 %1B%24%42%4A%33 +PASS U+5973 女 %1B%24%42%3D%77 +PASS U+5974 奴 %1B%24%42%45%5B +PASS U+5978 奸 %1B%24%42%55%21 +PASS U+597D 好 %1B%24%42%39%25 +PASS U+5981 妁 %1B%24%42%55%22 +PASS U+5982 如 %1B%24%42%47%21 +PASS U+5983 妃 %1B%24%42%48%5E +PASS U+5984 妄 %1B%24%42%4C%51 +PASS U+598A 妊 %1B%24%42%47%25 +PASS U+598D 妍 %1B%24%42%55%2B +PASS U+5993 妓 %1B%24%42%35%38 +PASS U+5996 妖 %1B%24%42%4D%45 +PASS U+5999 妙 %1B%24%42%4C%2F +PASS U+599B 妛 %1B%24%42%56%2C +PASS U+599D 妝 %1B%24%42%55%23 +PASS U+59A3 妣 %1B%24%42%55%26 +FAIL U+59A4 妤 %1B%24%42%79%68 assert_equals: expected "%1B%24%42%79%68" but got "%26%23%32%32%39%34%38%3B" +PASS U+59A5 妥 %1B%24%42%42%45 +PASS U+59A8 妨 %1B%24%42%4B%38 +PASS U+59AC 妬 %1B%24%42%45%4A +PASS U+59B2 妲 %1B%24%42%55%27 +PASS U+59B9 妹 %1B%24%42%4B%65 +FAIL U+59BA 妺 %1B%24%42%79%69 assert_equals: expected "%1B%24%42%79%69" but got "%26%23%32%32%39%37%30%3B" +PASS U+59BB 妻 %1B%24%42%3A%4A +PASS U+59BE 妾 %1B%24%42%3E%2A +PASS U+59C6 姆 %1B%24%42%55%28 +PASS U+59C9 姉 %1B%24%42%3B%50 +PASS U+59CB 始 %1B%24%42%3B%4F +PASS U+59D0 姐 %1B%24%42%30%39 +PASS U+59D1 姑 %1B%24%42%38%48 +PASS U+59D3 姓 %1B%24%42%40%2B +PASS U+59D4 委 %1B%24%42%30%51 +PASS U+59D9 姙 %1B%24%42%55%2C +PASS U+59DA 姚 %1B%24%42%55%2D +PASS U+59DC 姜 %1B%24%42%55%2A +PASS U+59E5 姥 %1B%24%42%31%38 +PASS U+59E6 姦 %1B%24%42%34%2F +PASS U+59E8 姨 %1B%24%42%55%29 +PASS U+59EA 姪 %1B%24%42%4C%45 +PASS U+59EB 姫 %1B%24%42%49%31 +PASS U+59F6 姶 %1B%24%42%30%28 +PASS U+59FB 姻 %1B%24%42%30%79 +PASS U+59FF 姿 %1B%24%42%3B%51 +PASS U+5A01 威 %1B%24%42%30%52 +PASS U+5A03 娃 %1B%24%42%30%23 +PASS U+5A09 娉 %1B%24%42%55%32 +PASS U+5A11 娑 %1B%24%42%55%30 +PASS U+5A18 娘 %1B%24%42%4C%3C +PASS U+5A1A 娚 %1B%24%42%55%33 +PASS U+5A1C 娜 %1B%24%42%55%31 +PASS U+5A1F 娟 %1B%24%42%55%2F +PASS U+5A20 娠 %1B%24%42%3F%31 +PASS U+5A25 娥 %1B%24%42%55%2E +PASS U+5A29 娩 %1B%24%42%4A%5A +PASS U+5A2F 娯 %1B%24%42%38%64 +PASS U+5A35 娵 %1B%24%42%55%37 +PASS U+5A36 娶 %1B%24%42%55%38 +PASS U+5A3C 娼 %1B%24%42%3E%2B +PASS U+5A40 婀 %1B%24%42%55%34 +PASS U+5A41 婁 %1B%24%42%4F%2C +PASS U+5A46 婆 %1B%24%42%47%4C +PASS U+5A49 婉 %1B%24%42%55%36 +PASS U+5A5A 婚 %1B%24%42%3A%27 +PASS U+5A62 婢 %1B%24%42%55%39 +PASS U+5A66 婦 %1B%24%42%49%58 +PASS U+5A6A 婪 %1B%24%42%55%3A +PASS U+5A6C 婬 %1B%24%42%55%35 +PASS U+5A7F 婿 %1B%24%42%4C%3B +PASS U+5A92 媒 %1B%24%42%47%5E +PASS U+5A9A 媚 %1B%24%42%55%3B +PASS U+5A9B 媛 %1B%24%42%49%32 +PASS U+5ABC 媼 %1B%24%42%55%3C +PASS U+5ABD 媽 %1B%24%42%55%40 +PASS U+5ABE 媾 %1B%24%42%55%3D +PASS U+5AC1 嫁 %1B%24%42%32%47 +PASS U+5AC2 嫂 %1B%24%42%55%3F +PASS U+5AC9 嫉 %1B%24%42%3C%3B +PASS U+5ACB 嫋 %1B%24%42%55%3E +PASS U+5ACC 嫌 %1B%24%42%37%79 +PASS U+5AD0 嫐 %1B%24%42%55%4C +PASS U+5AD6 嫖 %1B%24%42%55%45 +PASS U+5AD7 嫗 %1B%24%42%55%42 +PASS U+5AE1 嫡 %1B%24%42%43%64 +PASS U+5AE3 嫣 %1B%24%42%55%41 +PASS U+5AE6 嫦 %1B%24%42%55%43 +PASS U+5AE9 嫩 %1B%24%42%55%44 +PASS U+5AFA 嫺 %1B%24%42%55%46 +PASS U+5AFB 嫻 %1B%24%42%55%47 +PASS U+5B09 嬉 %1B%24%42%34%72 +PASS U+5B0B 嬋 %1B%24%42%55%49 +PASS U+5B0C 嬌 %1B%24%42%55%48 +PASS U+5B16 嬖 %1B%24%42%55%4A +PASS U+5B22 嬢 %1B%24%42%3E%6E +PASS U+5B2A 嬪 %1B%24%42%55%4D +PASS U+5B2C 嬬 %1B%24%42%44%5C +PASS U+5B30 嬰 %1B%24%42%31%45 +PASS U+5B32 嬲 %1B%24%42%55%4B +PASS U+5B36 嬶 %1B%24%42%55%4E +PASS U+5B3E 嬾 %1B%24%42%55%4F +PASS U+5B40 孀 %1B%24%42%55%52 +PASS U+5B43 孃 %1B%24%42%55%50 +PASS U+5B45 孅 %1B%24%42%55%51 +PASS U+5B50 子 %1B%24%42%3B%52 +PASS U+5B51 孑 %1B%24%42%55%53 +PASS U+5B54 孔 %1B%24%42%39%26 +PASS U+5B55 孕 %1B%24%42%55%54 +FAIL U+5B56 孖 %1B%24%42%79%6A assert_equals: expected "%1B%24%42%79%6A" but got "%26%23%32%33%33%38%32%3B" +PASS U+5B57 字 %1B%24%42%3B%7A +PASS U+5B58 存 %1B%24%42%42%38 +PASS U+5B5A 孚 %1B%24%42%55%55 +PASS U+5B5B 孛 %1B%24%42%55%56 +PASS U+5B5C 孜 %1B%24%42%3B%5A +PASS U+5B5D 孝 %1B%24%42%39%27 +PASS U+5B5F 孟 %1B%24%42%4C%52 +PASS U+5B63 季 %1B%24%42%35%28 +PASS U+5B64 孤 %1B%24%42%38%49 +PASS U+5B65 孥 %1B%24%42%55%57 +PASS U+5B66 学 %1B%24%42%33%58 +PASS U+5B69 孩 %1B%24%42%55%58 +PASS U+5B6B 孫 %1B%24%42%42%39 +PASS U+5B70 孰 %1B%24%42%55%59 +PASS U+5B71 孱 %1B%24%42%56%23 +PASS U+5B73 孳 %1B%24%42%55%5A +PASS U+5B75 孵 %1B%24%42%55%5B +PASS U+5B78 學 %1B%24%42%55%5C +PASS U+5B7A 孺 %1B%24%42%55%5E +PASS U+5B80 宀 %1B%24%42%55%5F +PASS U+5B83 它 %1B%24%42%55%60 +PASS U+5B85 宅 %1B%24%42%42%70 +PASS U+5B87 宇 %1B%24%42%31%27 +PASS U+5B88 守 %1B%24%42%3C%69 +PASS U+5B89 安 %1B%24%42%30%42 +PASS U+5B8B 宋 %1B%24%42%41%57 +PASS U+5B8C 完 %1B%24%42%34%30 +PASS U+5B8D 宍 %1B%24%42%3C%35 +PASS U+5B8F 宏 %1B%24%42%39%28 +PASS U+5B95 宕 %1B%24%42%45%66 +PASS U+5B97 宗 %1B%24%42%3D%21 +PASS U+5B98 官 %1B%24%42%34%31 +PASS U+5B99 宙 %1B%24%42%43%68 +PASS U+5B9A 定 %1B%24%42%44%6A +PASS U+5B9B 宛 %1B%24%42%30%38 +PASS U+5B9C 宜 %1B%24%42%35%39 +PASS U+5B9D 宝 %1B%24%42%4A%75 +PASS U+5B9F 実 %1B%24%42%3C%42 +PASS U+5BA2 客 %1B%24%42%35%52 +PASS U+5BA3 宣 %1B%24%42%40%6B +PASS U+5BA4 室 %1B%24%42%3C%3C +PASS U+5BA5 宥 %1B%24%42%4D%28 +PASS U+5BA6 宦 %1B%24%42%55%61 +PASS U+5BAE 宮 %1B%24%42%35%5C +PASS U+5BB0 宰 %1B%24%42%3A%4B +PASS U+5BB3 害 %1B%24%42%33%32 +PASS U+5BB4 宴 %1B%24%42%31%63 +PASS U+5BB5 宵 %1B%24%42%3E%2C +PASS U+5BB6 家 %1B%24%42%32%48 +PASS U+5BB8 宸 %1B%24%42%55%62 +PASS U+5BB9 容 %1B%24%42%4D%46 +PASS U+5BBF 宿 %1B%24%42%3D%49 +FAIL U+5BC0 寀 %1B%24%42%79%6B assert_equals: expected "%1B%24%42%79%6B" but got "%26%23%32%33%34%38%38%3B" +PASS U+5BC2 寂 %1B%24%42%3C%64 +PASS U+5BC3 寃 %1B%24%42%55%63 +PASS U+5BC4 寄 %1B%24%42%34%73 +PASS U+5BC5 寅 %1B%24%42%46%52 +PASS U+5BC6 密 %1B%24%42%4C%29 +PASS U+5BC7 寇 %1B%24%42%55%64 +PASS U+5BC9 寉 %1B%24%42%55%65 +PASS U+5BCC 富 %1B%24%42%49%59 +PASS U+5BD0 寐 %1B%24%42%55%67 +PASS U+5BD2 寒 %1B%24%42%34%28 +PASS U+5BD3 寓 %1B%24%42%36%77 +PASS U+5BD4 寔 %1B%24%42%55%66 +FAIL U+5BD8 寘 %1B%24%42%79%6D assert_equals: expected "%1B%24%42%79%6D" but got "%26%23%32%33%35%31%32%3B" +PASS U+5BDB 寛 %1B%24%42%34%32 +PASS U+5BDD 寝 %1B%24%42%3F%32 +PASS U+5BDE 寞 %1B%24%42%55%6B +PASS U+5BDF 察 %1B%24%42%3B%21 +PASS U+5BE1 寡 %1B%24%42%32%49 +PASS U+5BE2 寢 %1B%24%42%55%6A +PASS U+5BE4 寤 %1B%24%42%55%68 +PASS U+5BE5 寥 %1B%24%42%55%6C +PASS U+5BE6 實 %1B%24%42%55%69 +PASS U+5BE7 寧 %1B%24%42%47%2B +PASS U+5BE8 寨 %1B%24%42%5C%4D +PASS U+5BE9 審 %1B%24%42%3F%33 +PASS U+5BEB 寫 %1B%24%42%55%6D +FAIL U+5BEC 寬 %1B%24%42%79%6E assert_equals: expected "%1B%24%42%79%6E" but got "%26%23%32%33%35%33%32%3B" +PASS U+5BEE 寮 %1B%24%42%4E%40 +PASS U+5BF0 寰 %1B%24%42%55%6E +PASS U+5BF3 寳 %1B%24%42%55%70 +PASS U+5BF5 寵 %1B%24%42%43%7E +PASS U+5BF6 寶 %1B%24%42%55%6F +PASS U+5BF8 寸 %1B%24%42%40%23 +PASS U+5BFA 寺 %1B%24%42%3B%7B +PASS U+5BFE 対 %1B%24%42%42%50 +PASS U+5BFF 寿 %1B%24%42%3C%77 +PASS U+5C01 封 %1B%24%42%49%75 +PASS U+5C02 専 %1B%24%42%40%6C +PASS U+5C04 射 %1B%24%42%3C%4D +PASS U+5C05 尅 %1B%24%42%55%71 +PASS U+5C06 将 %1B%24%42%3E%2D +PASS U+5C07 將 %1B%24%42%55%72 +PASS U+5C08 專 %1B%24%42%55%73 +PASS U+5C09 尉 %1B%24%42%30%53 +PASS U+5C0A 尊 %1B%24%42%42%3A +PASS U+5C0B 尋 %1B%24%42%3F%52 +PASS U+5C0D 對 %1B%24%42%55%74 +PASS U+5C0E 導 %1B%24%42%46%33 +PASS U+5C0F 小 %1B%24%42%3E%2E +PASS U+5C11 少 %1B%24%42%3E%2F +PASS U+5C13 尓 %1B%24%42%55%75 +PASS U+5C16 尖 %1B%24%42%40%6D +PASS U+5C1A 尚 %1B%24%42%3E%30 +FAIL U+5C1E 尞 %1B%24%42%79%6F assert_equals: expected "%1B%24%42%79%6F" but got "%26%23%32%33%35%38%32%3B" +PASS U+5C20 尠 %1B%24%42%55%76 +PASS U+5C22 尢 %1B%24%42%55%77 +PASS U+5C24 尤 %1B%24%42%4C%60 +PASS U+5C28 尨 %1B%24%42%55%78 +PASS U+5C2D 尭 %1B%24%42%36%46 +PASS U+5C31 就 %1B%24%42%3D%22 +PASS U+5C38 尸 %1B%24%42%55%79 +PASS U+5C39 尹 %1B%24%42%55%7A +PASS U+5C3A 尺 %1B%24%42%3C%5C +PASS U+5C3B 尻 %1B%24%42%3F%2C +PASS U+5C3C 尼 %1B%24%42%46%74 +PASS U+5C3D 尽 %1B%24%42%3F%54 +PASS U+5C3E 尾 %1B%24%42%48%78 +PASS U+5C3F 尿 %1B%24%42%47%22 +PASS U+5C40 局 %1B%24%42%36%49 +PASS U+5C41 屁 %1B%24%42%55%7B +PASS U+5C45 居 %1B%24%42%35%6F +PASS U+5C46 屆 %1B%24%42%55%7C +PASS U+5C48 屈 %1B%24%42%36%7E +PASS U+5C4A 届 %1B%24%42%46%4F +PASS U+5C4B 屋 %1B%24%42%32%30 +PASS U+5C4D 屍 %1B%24%42%3B%53 +PASS U+5C4E 屎 %1B%24%42%55%7D +PASS U+5C4F 屏 %1B%24%42%56%22 +PASS U+5C50 屐 %1B%24%42%56%21 +PASS U+5C51 屑 %1B%24%42%36%7D +PASS U+5C53 屓 %1B%24%42%55%7E +PASS U+5C55 展 %1B%24%42%45%38 +PASS U+5C5E 属 %1B%24%42%42%30 +PASS U+5C60 屠 %1B%24%42%45%4B +PASS U+5C61 屡 %1B%24%42%3C%48 +PASS U+5C64 層 %1B%24%42%41%58 +PASS U+5C65 履 %1B%24%42%4D%7A +PASS U+5C6C 屬 %1B%24%42%56%24 +PASS U+5C6E 屮 %1B%24%42%56%25 +PASS U+5C6F 屯 %1B%24%42%46%56 +PASS U+5C71 山 %1B%24%42%3B%33 +PASS U+5C76 屶 %1B%24%42%56%27 +PASS U+5C79 屹 %1B%24%42%56%28 +PASS U+5C8C 岌 %1B%24%42%56%29 +PASS U+5C90 岐 %1B%24%42%34%74 +PASS U+5C91 岑 %1B%24%42%56%2A +PASS U+5C94 岔 %1B%24%42%56%2B +PASS U+5CA1 岡 %1B%24%42%32%2C +FAIL U+5CA6 岦 %1B%24%42%79%70 assert_equals: expected "%1B%24%42%79%70" but got "%26%23%32%33%37%31%38%3B" +PASS U+5CA8 岨 %1B%24%42%41%3B +PASS U+5CA9 岩 %1B%24%42%34%64 +PASS U+5CAB 岫 %1B%24%42%56%2D +PASS U+5CAC 岬 %1B%24%42%4C%28 +PASS U+5CB1 岱 %1B%24%42%42%52 +PASS U+5CB3 岳 %1B%24%42%33%59 +PASS U+5CB6 岶 %1B%24%42%56%2F +PASS U+5CB7 岷 %1B%24%42%56%31 +PASS U+5CB8 岸 %1B%24%42%34%5F +FAIL U+5CBA 岺 %1B%24%42%79%71 assert_equals: expected "%1B%24%42%79%71" but got "%26%23%32%33%37%33%38%3B" +PASS U+5CBB 岻 %1B%24%42%56%2E +PASS U+5CBC 岼 %1B%24%42%56%30 +PASS U+5CBE 岾 %1B%24%42%56%33 +PASS U+5CC5 峅 %1B%24%42%56%32 +PASS U+5CC7 峇 %1B%24%42%56%34 +PASS U+5CD9 峙 %1B%24%42%56%35 +PASS U+5CE0 峠 %1B%24%42%46%3D +PASS U+5CE1 峡 %1B%24%42%36%2E +PASS U+5CE8 峨 %1B%24%42%32%65 +PASS U+5CE9 峩 %1B%24%42%56%36 +PASS U+5CEA 峪 %1B%24%42%56%3B +PASS U+5CED 峭 %1B%24%42%56%39 +PASS U+5CEF 峯 %1B%24%42%4A%77 +PASS U+5CF0 峰 %1B%24%42%4A%76 +FAIL U+5CF5 峵 %1B%24%42%79%72 assert_equals: expected "%1B%24%42%79%72" but got "%26%23%32%33%37%39%37%3B" +PASS U+5CF6 島 %1B%24%42%45%67 +PASS U+5CFA 峺 %1B%24%42%56%38 +PASS U+5CFB 峻 %1B%24%42%3D%54 +PASS U+5CFD 峽 %1B%24%42%56%37 +PASS U+5D07 崇 %1B%24%42%3F%72 +PASS U+5D0B 崋 %1B%24%42%56%3C +PASS U+5D0E 崎 %1B%24%42%3A%6A +PASS U+5D11 崑 %1B%24%42%56%42 +PASS U+5D14 崔 %1B%24%42%56%43 +PASS U+5D15 崕 %1B%24%42%56%3D +PASS U+5D16 崖 %1B%24%42%33%33 +PASS U+5D17 崗 %1B%24%42%56%3E +PASS U+5D18 崘 %1B%24%42%56%47 +PASS U+5D19 崙 %1B%24%42%56%46 +PASS U+5D1A 崚 %1B%24%42%56%45 +PASS U+5D1B 崛 %1B%24%42%56%41 +PASS U+5D1F 崟 %1B%24%42%56%40 +PASS U+5D22 崢 %1B%24%42%56%44 +FAIL U+5D27 崧 %1B%24%42%79%73 assert_equals: expected "%1B%24%42%79%73" but got "%26%23%32%33%38%34%37%3B" +PASS U+5D29 崩 %1B%24%42%4A%78 +FAIL U+5D42 嵂 %1B%24%42%79%76 assert_equals: expected "%1B%24%42%79%76" but got "%26%23%32%33%38%37%34%3B" +PASS U+5D4B 嵋 %1B%24%42%56%4B +PASS U+5D4C 嵌 %1B%24%42%56%48 +PASS U+5D4E 嵎 %1B%24%42%56%4A +PASS U+5D50 嵐 %1B%24%42%4D%72 +PASS U+5D52 嵒 %1B%24%42%56%49 +FAIL U+5D53 嵓 %1B%24%42%79%74 assert_equals: expected "%1B%24%42%79%74" but got "%26%23%32%33%38%39%31%3B" +PASS U+5D5C 嵜 %1B%24%42%56%3F +PASS U+5D69 嵩 %1B%24%42%3F%73 +PASS U+5D6C 嵬 %1B%24%42%56%4C +FAIL U+5D6D 嵭 %1B%24%42%79%77 assert_equals: expected "%1B%24%42%79%77" but got "%26%23%32%33%39%31%37%3B" +PASS U+5D6F 嵯 %1B%24%42%3A%37 +PASS U+5D73 嵳 %1B%24%42%56%4D +PASS U+5D76 嵶 %1B%24%42%56%4E +PASS U+5D82 嶂 %1B%24%42%56%51 +PASS U+5D84 嶄 %1B%24%42%56%50 +PASS U+5D87 嶇 %1B%24%42%56%4F +PASS U+5D8B 嶋 %1B%24%42%45%68 +PASS U+5D8C 嶌 %1B%24%42%56%3A +PASS U+5D90 嶐 %1B%24%42%56%57 +PASS U+5D9D 嶝 %1B%24%42%56%53 +PASS U+5DA2 嶢 %1B%24%42%56%52 +PASS U+5DAC 嶬 %1B%24%42%56%54 +PASS U+5DAE 嶮 %1B%24%42%56%55 +PASS U+5DB7 嶷 %1B%24%42%56%58 +FAIL U+5DB8 嶸 %1B%24%42%79%78 assert_equals: expected "%1B%24%42%79%78" but got "%26%23%32%33%39%39%32%3B" +FAIL U+5DB9 嶹 %1B%24%42%79%79 assert_equals: expected "%1B%24%42%79%79" but got "%26%23%32%33%39%39%33%3B" +PASS U+5DBA 嶺 %1B%24%42%4E%66 +PASS U+5DBC 嶼 %1B%24%42%56%59 +PASS U+5DBD 嶽 %1B%24%42%56%56 +PASS U+5DC9 巉 %1B%24%42%56%5A +PASS U+5DCC 巌 %1B%24%42%34%60 +PASS U+5DCD 巍 %1B%24%42%56%5B +FAIL U+5DD0 巐 %1B%24%42%79%7A assert_equals: expected "%1B%24%42%79%7A" but got "%26%23%32%34%30%31%36%3B" +PASS U+5DD2 巒 %1B%24%42%56%5D +PASS U+5DD3 巓 %1B%24%42%56%5C +PASS U+5DD6 巖 %1B%24%42%56%5E +PASS U+5DDB 巛 %1B%24%42%56%5F +PASS U+5DDD 川 %1B%24%42%40%6E +PASS U+5DDE 州 %1B%24%42%3D%23 +PASS U+5DE1 巡 %1B%24%42%3D%64 +PASS U+5DE3 巣 %1B%24%42%41%63 +PASS U+5DE5 工 %1B%24%42%39%29 +PASS U+5DE6 左 %1B%24%42%3A%38 +PASS U+5DE7 巧 %1B%24%42%39%2A +PASS U+5DE8 巨 %1B%24%42%35%70 +PASS U+5DEB 巫 %1B%24%42%56%60 +PASS U+5DEE 差 %1B%24%42%3A%39 +PASS U+5DF1 己 %1B%24%42%38%4A +PASS U+5DF2 已 %1B%24%42%56%61 +PASS U+5DF3 巳 %1B%24%42%4C%26 +PASS U+5DF4 巴 %1B%24%42%47%43 +PASS U+5DF5 巵 %1B%24%42%56%62 +PASS U+5DF7 巷 %1B%24%42%39%2B +PASS U+5DFB 巻 %1B%24%42%34%2C +PASS U+5DFD 巽 %1B%24%42%43%27 +PASS U+5DFE 巾 %1B%24%42%36%52 +PASS U+5E02 市 %1B%24%42%3B%54 +PASS U+5E03 布 %1B%24%42%49%5B +PASS U+5E06 帆 %1B%24%42%48%41 +PASS U+5E0B 帋 %1B%24%42%56%63 +PASS U+5E0C 希 %1B%24%42%34%75 +PASS U+5E11 帑 %1B%24%42%56%66 +PASS U+5E16 帖 %1B%24%42%44%21 +PASS U+5E19 帙 %1B%24%42%56%65 +PASS U+5E1A 帚 %1B%24%42%56%64 +PASS U+5E1B 帛 %1B%24%42%56%67 +PASS U+5E1D 帝 %1B%24%42%44%6B +PASS U+5E25 帥 %1B%24%42%3F%63 +PASS U+5E2B 師 %1B%24%42%3B%55 +PASS U+5E2D 席 %1B%24%42%40%4A +PASS U+5E2F 帯 %1B%24%42%42%53 +PASS U+5E30 帰 %1B%24%42%35%22 +PASS U+5E33 帳 %1B%24%42%44%22 +PASS U+5E36 帶 %1B%24%42%56%68 +PASS U+5E37 帷 %1B%24%42%56%69 +PASS U+5E38 常 %1B%24%42%3E%6F +PASS U+5E3D 帽 %1B%24%42%4B%39 +PASS U+5E40 幀 %1B%24%42%56%6C +PASS U+5E43 幃 %1B%24%42%56%6B +PASS U+5E44 幄 %1B%24%42%56%6A +PASS U+5E45 幅 %1B%24%42%49%7D +PASS U+5E47 幇 %1B%24%42%56%73 +PASS U+5E4C 幌 %1B%24%42%4B%5A +PASS U+5E4E 幎 %1B%24%42%56%6D +PASS U+5E54 幔 %1B%24%42%56%6F +PASS U+5E55 幕 %1B%24%42%4B%6B +PASS U+5E57 幗 %1B%24%42%56%6E +PASS U+5E5F 幟 %1B%24%42%56%70 +PASS U+5E61 幡 %1B%24%42%48%28 +PASS U+5E62 幢 %1B%24%42%56%71 +PASS U+5E63 幣 %1B%24%42%4A%3E +PASS U+5E64 幤 %1B%24%42%56%72 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_2001-3000-expected.txt new file mode 100644 index 0000000..23d4eb24 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_2001-3000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 952 PASS, 48 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5E72 干 %1B%24%42%34%33 +PASS U+5E73 平 %1B%24%42%4A%3F +PASS U+5E74 年 %1B%24%42%47%2F +PASS U+5E75 幵 %1B%24%42%56%74 +PASS U+5E76 并 %1B%24%42%56%75 +PASS U+5E78 幸 %1B%24%42%39%2C +PASS U+5E79 幹 %1B%24%42%34%34 +PASS U+5E7A 幺 %1B%24%42%56%76 +PASS U+5E7B 幻 %1B%24%42%38%38 +PASS U+5E7C 幼 %1B%24%42%4D%44 +PASS U+5E7D 幽 %1B%24%42%4D%29 +PASS U+5E7E 幾 %1B%24%42%34%76 +PASS U+5E7F 广 %1B%24%42%56%78 +PASS U+5E81 庁 %1B%24%42%44%23 +PASS U+5E83 広 %1B%24%42%39%2D +PASS U+5E84 庄 %1B%24%42%3E%31 +PASS U+5E87 庇 %1B%24%42%48%5F +PASS U+5E8A 床 %1B%24%42%3E%32 +PASS U+5E8F 序 %1B%24%42%3D%78 +PASS U+5E95 底 %1B%24%42%44%6C +PASS U+5E96 庖 %1B%24%42%4A%79 +PASS U+5E97 店 %1B%24%42%45%39 +PASS U+5E9A 庚 %1B%24%42%39%2E +PASS U+5E9C 府 %1B%24%42%49%5C +PASS U+5EA0 庠 %1B%24%42%56%79 +PASS U+5EA6 度 %1B%24%42%45%59 +PASS U+5EA7 座 %1B%24%42%3A%42 +PASS U+5EAB 庫 %1B%24%42%38%4B +PASS U+5EAD 庭 %1B%24%42%44%6D +PASS U+5EB5 庵 %1B%24%42%30%43 +PASS U+5EB6 庶 %1B%24%42%3D%6E +PASS U+5EB7 康 %1B%24%42%39%2F +PASS U+5EB8 庸 %1B%24%42%4D%47 +PASS U+5EC1 廁 %1B%24%42%56%7A +PASS U+5EC2 廂 %1B%24%42%56%7B +PASS U+5EC3 廃 %1B%24%42%47%51 +PASS U+5EC8 廈 %1B%24%42%56%7C +PASS U+5EC9 廉 %1B%24%42%4E%77 +PASS U+5ECA 廊 %1B%24%42%4F%2D +PASS U+5ECF 廏 %1B%24%42%56%7E +PASS U+5ED0 廐 %1B%24%42%56%7D +PASS U+5ED3 廓 %1B%24%42%33%47 +PASS U+5ED6 廖 %1B%24%42%57%21 +PASS U+5EDA 廚 %1B%24%42%57%24 +PASS U+5EDB 廛 %1B%24%42%57%25 +PASS U+5EDD 廝 %1B%24%42%57%23 +PASS U+5EDF 廟 %1B%24%42%49%40 +PASS U+5EE0 廠 %1B%24%42%3E%33 +PASS U+5EE1 廡 %1B%24%42%57%27 +PASS U+5EE2 廢 %1B%24%42%57%26 +PASS U+5EE3 廣 %1B%24%42%57%22 +PASS U+5EE8 廨 %1B%24%42%57%28 +PASS U+5EE9 廩 %1B%24%42%57%29 +PASS U+5EEC 廬 %1B%24%42%57%2A +PASS U+5EF0 廰 %1B%24%42%57%2D +PASS U+5EF1 廱 %1B%24%42%57%2B +PASS U+5EF3 廳 %1B%24%42%57%2C +PASS U+5EF4 廴 %1B%24%42%57%2E +PASS U+5EF6 延 %1B%24%42%31%64 +PASS U+5EF7 廷 %1B%24%42%44%6E +PASS U+5EF8 廸 %1B%24%42%57%2F +PASS U+5EFA 建 %1B%24%42%37%7A +PASS U+5EFB 廻 %1B%24%42%32%76 +PASS U+5EFC 廼 %1B%24%42%47%36 +PASS U+5EFE 廾 %1B%24%42%57%30 +PASS U+5EFF 廿 %1B%24%42%46%7B +PASS U+5F01 弁 %1B%24%42%4A%5B +PASS U+5F03 弃 %1B%24%42%57%31 +PASS U+5F04 弄 %1B%24%42%4F%2E +PASS U+5F09 弉 %1B%24%42%57%32 +PASS U+5F0A 弊 %1B%24%42%4A%40 +PASS U+5F0B 弋 %1B%24%42%57%35 +PASS U+5F0C 弌 %1B%24%42%50%21 +PASS U+5F0D 弍 %1B%24%42%50%31 +PASS U+5F0F 式 %1B%24%42%3C%30 +PASS U+5F10 弐 %1B%24%42%46%75 +PASS U+5F11 弑 %1B%24%42%57%36 +PASS U+5F13 弓 %1B%24%42%35%5D +PASS U+5F14 弔 %1B%24%42%44%24 +PASS U+5F15 引 %1B%24%42%30%7A +PASS U+5F16 弖 %1B%24%42%57%37 +PASS U+5F17 弗 %1B%24%42%4A%26 +PASS U+5F18 弘 %1B%24%42%39%30 +PASS U+5F1B 弛 %1B%24%42%43%50 +PASS U+5F1F 弟 %1B%24%42%44%6F +FAIL U+5F21 弡 %1B%24%42%79%7B assert_equals: expected "%1B%24%42%79%7B" but got "%26%23%32%34%33%35%33%3B" +PASS U+5F25 弥 %1B%24%42%4C%6F +PASS U+5F26 弦 %1B%24%42%38%39 +PASS U+5F27 弧 %1B%24%42%38%4C +PASS U+5F29 弩 %1B%24%42%57%38 +PASS U+5F2D 弭 %1B%24%42%57%39 +PASS U+5F2F 弯 %1B%24%42%57%3F +PASS U+5F31 弱 %1B%24%42%3C%65 +FAIL U+5F34 弴 %1B%24%42%79%7C assert_equals: expected "%1B%24%42%79%7C" but got "%26%23%32%34%33%37%32%3B" +PASS U+5F35 張 %1B%24%42%44%25 +PASS U+5F37 強 %1B%24%42%36%2F +PASS U+5F38 弸 %1B%24%42%57%3A +PASS U+5F3C 弼 %1B%24%42%49%2B +PASS U+5F3E 弾 %1B%24%42%43%46 +PASS U+5F41 彁 %1B%24%42%57%3B +FAIL U+5F45 彅 %1B%24%42%79%2C assert_equals: expected "%1B%24%42%79%2C" but got "%26%23%32%34%33%38%39%3B" +PASS U+5F48 彈 %1B%24%42%57%3C +PASS U+5F4A 彊 %1B%24%42%36%30 +PASS U+5F4C 彌 %1B%24%42%57%3D +PASS U+5F4E 彎 %1B%24%42%57%3E +PASS U+5F51 彑 %1B%24%42%57%40 +PASS U+5F53 当 %1B%24%42%45%76 +PASS U+5F56 彖 %1B%24%42%57%41 +PASS U+5F57 彗 %1B%24%42%57%42 +PASS U+5F59 彙 %1B%24%42%57%43 +PASS U+5F5C 彜 %1B%24%42%57%34 +PASS U+5F5D 彝 %1B%24%42%57%33 +PASS U+5F61 彡 %1B%24%42%57%44 +PASS U+5F62 形 %1B%24%42%37%41 +PASS U+5F66 彦 %1B%24%42%49%27 +FAIL U+5F67 彧 %1B%24%42%79%7D assert_equals: expected "%1B%24%42%79%7D" but got "%26%23%32%34%34%32%33%3B" +PASS U+5F69 彩 %1B%24%42%3A%4C +PASS U+5F6A 彪 %1B%24%42%49%37 +PASS U+5F6B 彫 %1B%24%42%44%26 +PASS U+5F6C 彬 %1B%24%42%49%4B +PASS U+5F6D 彭 %1B%24%42%57%45 +PASS U+5F70 彰 %1B%24%42%3E%34 +PASS U+5F71 影 %1B%24%42%31%46 +PASS U+5F73 彳 %1B%24%42%57%46 +PASS U+5F77 彷 %1B%24%42%57%47 +PASS U+5F79 役 %1B%24%42%4C%72 +PASS U+5F7C 彼 %1B%24%42%48%60 +PASS U+5F7F 彿 %1B%24%42%57%4A +PASS U+5F80 往 %1B%24%42%31%7D +PASS U+5F81 征 %1B%24%42%40%2C +PASS U+5F82 徂 %1B%24%42%57%49 +PASS U+5F83 徃 %1B%24%42%57%48 +PASS U+5F84 径 %1B%24%42%37%42 +PASS U+5F85 待 %1B%24%42%42%54 +PASS U+5F87 徇 %1B%24%42%57%4E +PASS U+5F88 很 %1B%24%42%57%4C +PASS U+5F8A 徊 %1B%24%42%57%4B +PASS U+5F8B 律 %1B%24%42%4E%27 +PASS U+5F8C 後 %1B%24%42%38%65 +PASS U+5F90 徐 %1B%24%42%3D%79 +PASS U+5F91 徑 %1B%24%42%57%4D +PASS U+5F92 徒 %1B%24%42%45%4C +PASS U+5F93 従 %1B%24%42%3D%3E +PASS U+5F97 得 %1B%24%42%46%40 +PASS U+5F98 徘 %1B%24%42%57%51 +PASS U+5F99 徙 %1B%24%42%57%50 +PASS U+5F9E 從 %1B%24%42%57%4F +PASS U+5FA0 徠 %1B%24%42%57%52 +PASS U+5FA1 御 %1B%24%42%38%66 +PASS U+5FA8 徨 %1B%24%42%57%53 +PASS U+5FA9 復 %1B%24%42%49%7C +PASS U+5FAA 循 %1B%24%42%3D%5B +PASS U+5FAD 徭 %1B%24%42%57%54 +PASS U+5FAE 微 %1B%24%42%48%79 +PASS U+5FB3 徳 %1B%24%42%46%41 +PASS U+5FB4 徴 %1B%24%42%44%27 +FAIL U+5FB7 德 %1B%24%42%79%7E assert_equals: expected "%1B%24%42%79%7E" but got "%26%23%32%34%35%30%33%3B" +PASS U+5FB9 徹 %1B%24%42%45%30 +PASS U+5FBC 徼 %1B%24%42%57%55 +PASS U+5FBD 徽 %1B%24%42%35%2B +PASS U+5FC3 心 %1B%24%42%3F%34 +PASS U+5FC5 必 %1B%24%42%49%2C +PASS U+5FCC 忌 %1B%24%42%34%77 +PASS U+5FCD 忍 %1B%24%42%47%26 +PASS U+5FD6 忖 %1B%24%42%57%56 +PASS U+5FD7 志 %1B%24%42%3B%56 +PASS U+5FD8 忘 %1B%24%42%4B%3A +PASS U+5FD9 忙 %1B%24%42%4B%3B +PASS U+5FDC 応 %1B%24%42%31%7E +PASS U+5FDD 忝 %1B%24%42%57%5B +FAIL U+5FDE 忞 %1B%24%42%7A%21 assert_equals: expected "%1B%24%42%7A%21" but got "%26%23%32%34%35%34%32%3B" +PASS U+5FE0 忠 %1B%24%42%43%69 +PASS U+5FE4 忤 %1B%24%42%57%58 +PASS U+5FEB 快 %1B%24%42%32%77 +PASS U+5FF0 忰 %1B%24%42%58%2D +PASS U+5FF1 忱 %1B%24%42%57%5A +PASS U+5FF5 念 %1B%24%42%47%30 +PASS U+5FF8 忸 %1B%24%42%57%59 +PASS U+5FFB 忻 %1B%24%42%57%57 +PASS U+5FFD 忽 %1B%24%42%39%7A +PASS U+5FFF 忿 %1B%24%42%57%5D +PASS U+600E 怎 %1B%24%42%57%63 +PASS U+600F 怏 %1B%24%42%57%69 +PASS U+6010 怐 %1B%24%42%57%61 +PASS U+6012 怒 %1B%24%42%45%5C +PASS U+6015 怕 %1B%24%42%57%66 +PASS U+6016 怖 %1B%24%42%49%5D +PASS U+6019 怙 %1B%24%42%57%60 +PASS U+601B 怛 %1B%24%42%57%65 +PASS U+601C 怜 %1B%24%42%4E%67 +PASS U+601D 思 %1B%24%42%3B%57 +PASS U+6020 怠 %1B%24%42%42%55 +PASS U+6021 怡 %1B%24%42%57%5E +PASS U+6025 急 %1B%24%42%35%5E +PASS U+6026 怦 %1B%24%42%57%68 +PASS U+6027 性 %1B%24%42%40%2D +PASS U+6028 怨 %1B%24%42%31%65 +PASS U+6029 怩 %1B%24%42%57%62 +PASS U+602A 怪 %1B%24%42%32%78 +PASS U+602B 怫 %1B%24%42%57%67 +PASS U+602F 怯 %1B%24%42%36%31 +PASS U+6031 怱 %1B%24%42%57%64 +PASS U+603A 怺 %1B%24%42%57%6A +PASS U+6041 恁 %1B%24%42%57%6C +PASS U+6042 恂 %1B%24%42%57%76 +PASS U+6043 恃 %1B%24%42%57%74 +PASS U+6046 恆 %1B%24%42%57%71 +PASS U+604A 恊 %1B%24%42%57%70 +PASS U+604B 恋 %1B%24%42%4E%78 +PASS U+604D 恍 %1B%24%42%57%72 +PASS U+6050 恐 %1B%24%42%36%32 +PASS U+6052 恒 %1B%24%42%39%31 +PASS U+6055 恕 %1B%24%42%3D%7A +PASS U+6059 恙 %1B%24%42%57%79 +PASS U+605A 恚 %1B%24%42%57%6B +FAIL U+605D 恝 %1B%24%42%7A%22 assert_equals: expected "%1B%24%42%7A%22" but got "%26%23%32%34%36%36%39%3B" +PASS U+605F 恟 %1B%24%42%57%6F +PASS U+6060 恠 %1B%24%42%57%5F +PASS U+6062 恢 %1B%24%42%32%7A +PASS U+6063 恣 %1B%24%42%57%73 +PASS U+6064 恤 %1B%24%42%57%75 +PASS U+6065 恥 %1B%24%42%43%51 +PASS U+6068 恨 %1B%24%42%3A%28 +PASS U+6069 恩 %1B%24%42%32%38 +PASS U+606A 恪 %1B%24%42%57%6D +PASS U+606B 恫 %1B%24%42%57%78 +PASS U+606C 恬 %1B%24%42%57%77 +PASS U+606D 恭 %1B%24%42%36%33 +PASS U+606F 息 %1B%24%42%42%29 +PASS U+6070 恰 %1B%24%42%33%66 +PASS U+6075 恵 %1B%24%42%37%43 +PASS U+6077 恷 %1B%24%42%57%6E +PASS U+6081 悁 %1B%24%42%57%7A +PASS U+6083 悃 %1B%24%42%57%7D +PASS U+6084 悄 %1B%24%42%58%21 +FAIL U+6085 悅 %1B%24%42%7A%23 assert_equals: expected "%1B%24%42%7A%23" but got "%26%23%32%34%37%30%39%3B" +PASS U+6089 悉 %1B%24%42%3C%3D +FAIL U+608A 悊 %1B%24%42%7A%24 assert_equals: expected "%1B%24%42%7A%24" but got "%26%23%32%34%37%31%34%3B" +PASS U+608B 悋 %1B%24%42%58%27 +PASS U+608C 悌 %1B%24%42%44%70 +PASS U+608D 悍 %1B%24%42%57%7B +PASS U+6092 悒 %1B%24%42%58%25 +PASS U+6094 悔 %1B%24%42%32%79 +PASS U+6096 悖 %1B%24%42%58%23 +PASS U+6097 悗 %1B%24%42%58%24 +PASS U+609A 悚 %1B%24%42%57%7E +PASS U+609B 悛 %1B%24%42%58%22 +PASS U+609F 悟 %1B%24%42%38%67 +PASS U+60A0 悠 %1B%24%42%4D%2A +PASS U+60A3 患 %1B%24%42%34%35 +PASS U+60A6 悦 %1B%24%42%31%59 +PASS U+60A7 悧 %1B%24%42%58%26 +PASS U+60A9 悩 %1B%24%42%47%3A +PASS U+60AA 悪 %1B%24%42%30%2D +PASS U+60B2 悲 %1B%24%42%48%61 +PASS U+60B3 悳 %1B%24%42%57%5C +PASS U+60B4 悴 %1B%24%42%58%2C +PASS U+60B5 悵 %1B%24%42%58%30 +PASS U+60B6 悶 %1B%24%42%4C%65 +PASS U+60B8 悸 %1B%24%42%58%29 +PASS U+60BC 悼 %1B%24%42%45%69 +PASS U+60BD 悽 %1B%24%42%58%2E +PASS U+60C5 情 %1B%24%42%3E%70 +PASS U+60C6 惆 %1B%24%42%58%2F +PASS U+60C7 惇 %1B%24%42%46%57 +PASS U+60D1 惑 %1B%24%42%4F%47 +PASS U+60D3 惓 %1B%24%42%58%2B +FAIL U+60D5 惕 %1B%24%42%7A%26 assert_equals: expected "%1B%24%42%7A%26" but got "%26%23%32%34%37%38%39%3B" +PASS U+60D8 惘 %1B%24%42%58%31 +PASS U+60DA 惚 %1B%24%42%39%7B +PASS U+60DC 惜 %1B%24%42%40%4B +FAIL U+60DE 惞 %1B%24%42%7A%25 assert_equals: expected "%1B%24%42%7A%25" but got "%26%23%32%34%37%39%38%3B" +PASS U+60DF 惟 %1B%24%42%30%54 +PASS U+60E0 惠 %1B%24%42%58%2A +PASS U+60E1 惡 %1B%24%42%58%28 +PASS U+60E3 惣 %1B%24%42%41%5A +PASS U+60E7 惧 %1B%24%42%57%7C +PASS U+60E8 惨 %1B%24%42%3B%34 +PASS U+60F0 惰 %1B%24%42%42%46 +PASS U+60F1 惱 %1B%24%42%58%3D +FAIL U+60F2 惲 %1B%24%42%7A%28 assert_equals: expected "%1B%24%42%7A%28" but got "%26%23%32%34%38%31%38%3B" +PASS U+60F3 想 %1B%24%42%41%5B +PASS U+60F4 惴 %1B%24%42%58%38 +PASS U+60F6 惶 %1B%24%42%58%35 +PASS U+60F7 惷 %1B%24%42%58%36 +PASS U+60F9 惹 %1B%24%42%3C%66 +PASS U+60FA 惺 %1B%24%42%58%39 +PASS U+60FB 惻 %1B%24%42%58%3C +PASS U+6100 愀 %1B%24%42%58%37 +PASS U+6101 愁 %1B%24%42%3D%25 +PASS U+6103 愃 %1B%24%42%58%3A +PASS U+6106 愆 %1B%24%42%58%34 +PASS U+6108 愈 %1B%24%42%4C%7C +PASS U+6109 愉 %1B%24%42%4C%7B +PASS U+610D 愍 %1B%24%42%58%3E +PASS U+610E 愎 %1B%24%42%58%3F +PASS U+610F 意 %1B%24%42%30%55 +FAIL U+6111 愑 %1B%24%42%7A%29 assert_equals: expected "%1B%24%42%7A%29" but got "%26%23%32%34%38%34%39%3B" +PASS U+6115 愕 %1B%24%42%58%33 +PASS U+611A 愚 %1B%24%42%36%72 +PASS U+611B 愛 %1B%24%42%30%26 +PASS U+611F 感 %1B%24%42%34%36 +FAIL U+6120 愠 %1B%24%42%7A%27 assert_equals: expected "%1B%24%42%7A%27" but got "%26%23%32%34%38%36%34%3B" +PASS U+6121 愡 %1B%24%42%58%3B +PASS U+6127 愧 %1B%24%42%58%43 +PASS U+6128 愨 %1B%24%42%58%42 +PASS U+612C 愬 %1B%24%42%58%47 +FAIL U+6130 愰 %1B%24%42%7A%2B assert_equals: expected "%1B%24%42%7A%2B" but got "%26%23%32%34%38%38%30%3B" +PASS U+6134 愴 %1B%24%42%58%48 +FAIL U+6137 愷 %1B%24%42%7A%2A assert_equals: expected "%1B%24%42%7A%2A" but got "%26%23%32%34%38%38%37%3B" +PASS U+613C 愼 %1B%24%42%58%46 +PASS U+613D 愽 %1B%24%42%58%49 +PASS U+613E 愾 %1B%24%42%58%41 +PASS U+613F 愿 %1B%24%42%58%45 +PASS U+6142 慂 %1B%24%42%58%4A +PASS U+6144 慄 %1B%24%42%58%4B +PASS U+6147 慇 %1B%24%42%58%40 +PASS U+6148 慈 %1B%24%42%3B%7C +PASS U+614A 慊 %1B%24%42%58%44 +PASS U+614B 態 %1B%24%42%42%56 +PASS U+614C 慌 %1B%24%42%39%32 +PASS U+614D 慍 %1B%24%42%58%32 +PASS U+614E 慎 %1B%24%42%3F%35 +PASS U+6153 慓 %1B%24%42%58%58 +PASS U+6155 慕 %1B%24%42%4A%69 +PASS U+6158 慘 %1B%24%42%58%4E +PASS U+6159 慙 %1B%24%42%58%4F +PASS U+615A 慚 %1B%24%42%58%50 +PASS U+615D 慝 %1B%24%42%58%57 +PASS U+615F 慟 %1B%24%42%58%56 +PASS U+6162 慢 %1B%24%42%4B%7D +PASS U+6163 慣 %1B%24%42%34%37 +PASS U+6165 慥 %1B%24%42%58%54 +PASS U+6167 慧 %1B%24%42%37%45 +PASS U+6168 慨 %1B%24%42%33%34 +PASS U+616B 慫 %1B%24%42%58%51 +PASS U+616E 慮 %1B%24%42%4E%38 +PASS U+616F 慯 %1B%24%42%58%53 +PASS U+6170 慰 %1B%24%42%30%56 +PASS U+6171 慱 %1B%24%42%58%55 +PASS U+6173 慳 %1B%24%42%58%4C +PASS U+6174 慴 %1B%24%42%58%52 +PASS U+6175 慵 %1B%24%42%58%59 +PASS U+6176 慶 %1B%24%42%37%44 +PASS U+6177 慷 %1B%24%42%58%4D +PASS U+617E 慾 %1B%24%42%4D%5D +PASS U+6182 憂 %1B%24%42%4D%2B +PASS U+6187 憇 %1B%24%42%58%5C +PASS U+618A 憊 %1B%24%42%58%60 +PASS U+618E 憎 %1B%24%42%41%7E +PASS U+6190 憐 %1B%24%42%4E%79 +PASS U+6191 憑 %1B%24%42%58%61 +PASS U+6194 憔 %1B%24%42%58%5E +PASS U+6196 憖 %1B%24%42%58%5B +FAIL U+6198 憘 %1B%24%42%7A%2C assert_equals: expected "%1B%24%42%7A%2C" but got "%26%23%32%34%39%38%34%3B" +PASS U+6199 憙 %1B%24%42%58%5A +PASS U+619A 憚 %1B%24%42%58%5F +PASS U+61A4 憤 %1B%24%42%4A%30 +PASS U+61A7 憧 %1B%24%42%46%34 +PASS U+61A9 憩 %1B%24%42%37%46 +PASS U+61AB 憫 %1B%24%42%58%62 +PASS U+61AC 憬 %1B%24%42%58%5D +PASS U+61AE 憮 %1B%24%42%58%63 +PASS U+61B2 憲 %1B%24%42%37%7B +PASS U+61B6 憶 %1B%24%42%32%31 +PASS U+61BA 憺 %1B%24%42%58%6B +PASS U+61BE 憾 %1B%24%42%34%38 +PASS U+61C3 懃 %1B%24%42%58%69 +PASS U+61C6 懆 %1B%24%42%58%6A +PASS U+61C7 懇 %1B%24%42%3A%29 +PASS U+61C8 懈 %1B%24%42%58%68 +PASS U+61C9 應 %1B%24%42%58%66 +PASS U+61CA 懊 %1B%24%42%58%65 +PASS U+61CB 懋 %1B%24%42%58%6C +PASS U+61CC 懌 %1B%24%42%58%64 +PASS U+61CD 懍 %1B%24%42%58%6E +PASS U+61D0 懐 %1B%24%42%32%7B +PASS U+61E3 懣 %1B%24%42%58%70 +PASS U+61E6 懦 %1B%24%42%58%6F +PASS U+61F2 懲 %1B%24%42%44%28 +PASS U+61F4 懴 %1B%24%42%58%73 +PASS U+61F6 懶 %1B%24%42%58%71 +PASS U+61F7 懷 %1B%24%42%58%67 +PASS U+61F8 懸 %1B%24%42%37%7C +PASS U+61FA 懺 %1B%24%42%58%72 +PASS U+61FC 懼 %1B%24%42%58%76 +PASS U+61FD 懽 %1B%24%42%58%75 +PASS U+61FE 懾 %1B%24%42%58%77 +PASS U+61FF 懿 %1B%24%42%58%74 +PASS U+6200 戀 %1B%24%42%58%78 +PASS U+6208 戈 %1B%24%42%58%79 +PASS U+6209 戉 %1B%24%42%58%7A +PASS U+620A 戊 %1B%24%42%4A%6A +PASS U+620C 戌 %1B%24%42%58%7C +PASS U+620D 戍 %1B%24%42%58%7B +PASS U+620E 戎 %1B%24%42%3D%3F +PASS U+6210 成 %1B%24%42%40%2E +PASS U+6211 我 %1B%24%42%32%66 +PASS U+6212 戒 %1B%24%42%32%7C +FAIL U+6213 戓 %1B%24%42%7A%2D assert_equals: expected "%1B%24%42%7A%2D" but got "%26%23%32%35%31%30%37%3B" +PASS U+6214 戔 %1B%24%42%58%7D +PASS U+6216 或 %1B%24%42%30%3F +PASS U+621A 戚 %1B%24%42%40%4C +PASS U+621B 戛 %1B%24%42%58%7E +PASS U+621D 戝 %1B%24%42%6C%43 +PASS U+621E 戞 %1B%24%42%59%21 +PASS U+621F 戟 %1B%24%42%37%61 +PASS U+6221 戡 %1B%24%42%59%22 +PASS U+6226 戦 %1B%24%42%40%6F +PASS U+622A 截 %1B%24%42%59%23 +PASS U+622E 戮 %1B%24%42%59%24 +PASS U+622F 戯 %1B%24%42%35%3A +PASS U+6230 戰 %1B%24%42%59%25 +PASS U+6232 戲 %1B%24%42%59%26 +PASS U+6233 戳 %1B%24%42%59%27 +PASS U+6234 戴 %1B%24%42%42%57 +PASS U+6238 戸 %1B%24%42%38%4D +PASS U+623B 戻 %1B%24%42%4C%61 +PASS U+623F 房 %1B%24%42%4B%3C +PASS U+6240 所 %1B%24%42%3D%6A +PASS U+6241 扁 %1B%24%42%59%28 +PASS U+6247 扇 %1B%24%42%40%70 +PASS U+6248 扈 %1B%24%42%6E%3D +PASS U+6249 扉 %1B%24%42%48%62 +PASS U+624B 手 %1B%24%42%3C%6A +PASS U+624D 才 %1B%24%42%3A%4D +PASS U+624E 扎 %1B%24%42%59%29 +PASS U+6253 打 %1B%24%42%42%47 +PASS U+6255 払 %1B%24%42%4A%27 +PASS U+6258 托 %1B%24%42%42%71 +PASS U+625B 扛 %1B%24%42%59%2C +PASS U+625E 扞 %1B%24%42%59%2A +PASS U+6260 扠 %1B%24%42%59%2D +PASS U+6263 扣 %1B%24%42%59%2B +PASS U+6268 扨 %1B%24%42%59%2E +PASS U+626E 扮 %1B%24%42%4A%31 +PASS U+6271 扱 %1B%24%42%30%37 +PASS U+6276 扶 %1B%24%42%49%5E +PASS U+6279 批 %1B%24%42%48%63 +PASS U+627C 扼 %1B%24%42%59%2F +PASS U+627E 找 %1B%24%42%59%32 +PASS U+627F 承 %1B%24%42%3E%35 +PASS U+6280 技 %1B%24%42%35%3B +PASS U+6282 抂 %1B%24%42%59%30 +PASS U+6283 抃 %1B%24%42%59%37 +PASS U+6284 抄 %1B%24%42%3E%36 +PASS U+6289 抉 %1B%24%42%59%31 +PASS U+628A 把 %1B%24%42%47%44 +PASS U+6291 抑 %1B%24%42%4D%5E +PASS U+6292 抒 %1B%24%42%59%33 +PASS U+6293 抓 %1B%24%42%59%34 +PASS U+6294 抔 %1B%24%42%59%38 +PASS U+6295 投 %1B%24%42%45%6A +PASS U+6296 抖 %1B%24%42%59%35 +PASS U+6297 抗 %1B%24%42%39%33 +PASS U+6298 折 %1B%24%42%40%5E +PASS U+629B 抛 %1B%24%42%59%46 +PASS U+629C 抜 %1B%24%42%48%34 +PASS U+629E 択 %1B%24%42%42%72 +FAIL U+62A6 抦 %1B%24%42%7A%2E assert_equals: expected "%1B%24%42%7A%2E" but got "%26%23%32%35%32%35%34%3B" +PASS U+62AB 披 %1B%24%42%48%64 +PASS U+62AC 抬 %1B%24%42%5A%2D +PASS U+62B1 抱 %1B%24%42%4A%7A +PASS U+62B5 抵 %1B%24%42%44%71 +PASS U+62B9 抹 %1B%24%42%4B%75 +PASS U+62BB 抻 %1B%24%42%59%3B +PASS U+62BC 押 %1B%24%42%32%21 +PASS U+62BD 抽 %1B%24%42%43%6A +PASS U+62C2 拂 %1B%24%42%59%44 +PASS U+62C5 担 %1B%24%42%43%34 +PASS U+62C6 拆 %1B%24%42%59%3E +PASS U+62C7 拇 %1B%24%42%59%45 +PASS U+62C8 拈 %1B%24%42%59%40 +PASS U+62C9 拉 %1B%24%42%59%47 +PASS U+62CA 拊 %1B%24%42%59%43 +PASS U+62CC 拌 %1B%24%42%59%42 +PASS U+62CD 拍 %1B%24%42%47%6F +PASS U+62CF 拏 %1B%24%42%59%3C +PASS U+62D0 拐 %1B%24%42%32%7D +PASS U+62D1 拑 %1B%24%42%59%3A +PASS U+62D2 拒 %1B%24%42%35%71 +PASS U+62D3 拓 %1B%24%42%42%73 +PASS U+62D4 拔 %1B%24%42%59%36 +PASS U+62D7 拗 %1B%24%42%59%39 +PASS U+62D8 拘 %1B%24%42%39%34 +PASS U+62D9 拙 %1B%24%42%40%5B +PASS U+62DB 招 %1B%24%42%3E%37 +PASS U+62DC 拜 %1B%24%42%59%41 +PASS U+62DD 拝 %1B%24%42%47%52 +PASS U+62E0 拠 %1B%24%42%35%72 +PASS U+62E1 拡 %1B%24%42%33%48 +PASS U+62EC 括 %1B%24%42%33%67 +PASS U+62ED 拭 %1B%24%42%3F%21 +PASS U+62EE 拮 %1B%24%42%59%49 +PASS U+62EF 拯 %1B%24%42%59%4E +PASS U+62F1 拱 %1B%24%42%59%4A +PASS U+62F3 拳 %1B%24%42%37%7D +PASS U+62F5 拵 %1B%24%42%59%4F +PASS U+62F6 拶 %1B%24%42%3B%22 +PASS U+62F7 拷 %1B%24%42%39%69 +PASS U+62FE 拾 %1B%24%42%3D%26 +PASS U+62FF 拿 %1B%24%42%59%3D +PASS U+6301 持 %1B%24%42%3B%7D +PASS U+6302 挂 %1B%24%42%59%4C +PASS U+6307 指 %1B%24%42%3B%58 +PASS U+6308 挈 %1B%24%42%59%4D +PASS U+6309 按 %1B%24%42%30%44 +PASS U+630C 挌 %1B%24%42%59%48 +PASS U+6311 挑 %1B%24%42%44%29 +PASS U+6319 挙 %1B%24%42%35%73 +PASS U+631F 挟 %1B%24%42%36%34 +PASS U+6327 挧 %1B%24%42%59%4B +PASS U+6328 挨 %1B%24%42%30%27 +PASS U+632B 挫 %1B%24%42%3A%43 +PASS U+632F 振 %1B%24%42%3F%36 +PASS U+633A 挺 %1B%24%42%44%72 +PASS U+633D 挽 %1B%24%42%48%54 +PASS U+633E 挾 %1B%24%42%59%51 +PASS U+633F 挿 %1B%24%42%41%5E +PASS U+6349 捉 %1B%24%42%42%2A +PASS U+634C 捌 %1B%24%42%3B%2B +PASS U+634D 捍 %1B%24%42%59%52 +PASS U+634F 捏 %1B%24%42%59%54 +PASS U+6350 捐 %1B%24%42%59%50 +PASS U+6355 捕 %1B%24%42%4A%61 +PASS U+6357 捗 %1B%24%42%44%3D +PASS U+635C 捜 %1B%24%42%41%5C +PASS U+6367 捧 %1B%24%42%4A%7B +PASS U+6368 捨 %1B%24%42%3C%4E +PASS U+6369 捩 %1B%24%42%59%60 +PASS U+636B 捫 %1B%24%42%59%5F +PASS U+636E 据 %1B%24%42%3F%78 +PASS U+6372 捲 %1B%24%42%37%7E +PASS U+6376 捶 %1B%24%42%59%59 +PASS U+6377 捷 %1B%24%42%3E%39 +PASS U+637A 捺 %1B%24%42%46%68 +PASS U+637B 捻 %1B%24%42%47%31 +PASS U+6380 掀 %1B%24%42%59%57 +PASS U+6383 掃 %1B%24%42%41%5D +PASS U+6388 授 %1B%24%42%3C%78 +PASS U+6389 掉 %1B%24%42%59%5C +PASS U+638C 掌 %1B%24%42%3E%38 +PASS U+638E 掎 %1B%24%42%59%56 +PASS U+638F 掏 %1B%24%42%59%5B +PASS U+6392 排 %1B%24%42%47%53 +PASS U+6396 掖 %1B%24%42%59%55 +PASS U+6398 掘 %1B%24%42%37%21 +PASS U+639B 掛 %1B%24%42%33%5D +PASS U+639F 掟 %1B%24%42%59%5D +PASS U+63A0 掠 %1B%24%42%4E%2B +PASS U+63A1 採 %1B%24%42%3A%4E +PASS U+63A2 探 %1B%24%42%43%35 +PASS U+63A3 掣 %1B%24%42%59%5A +PASS U+63A5 接 %1B%24%42%40%5C +PASS U+63A7 控 %1B%24%42%39%35 +PASS U+63A8 推 %1B%24%42%3F%64 +PASS U+63A9 掩 %1B%24%42%31%66 +PASS U+63AA 措 %1B%24%42%41%3C +PASS U+63AB 掫 %1B%24%42%59%58 +PASS U+63AC 掬 %1B%24%42%35%45 +PASS U+63B2 掲 %1B%24%42%37%47 +PASS U+63B4 掴 %1B%24%42%44%4F +PASS U+63B5 掵 %1B%24%42%59%5E +PASS U+63BB 掻 %1B%24%42%41%5F +PASS U+63BE 掾 %1B%24%42%59%61 +PASS U+63C0 揀 %1B%24%42%59%63 +PASS U+63C3 揃 %1B%24%42%42%37 +PASS U+63C4 揄 %1B%24%42%59%69 +PASS U+63C6 揆 %1B%24%42%59%64 +PASS U+63C9 揉 %1B%24%42%59%66 +PASS U+63CF 描 %1B%24%42%49%41 +PASS U+63D0 提 %1B%24%42%44%73 +PASS U+63D2 插 %1B%24%42%59%67 +PASS U+63D6 揖 %1B%24%42%4D%2C +PASS U+63DA 揚 %1B%24%42%4D%48 +PASS U+63DB 換 %1B%24%42%34%39 +PASS U+63E1 握 %1B%24%42%30%2E +PASS U+63E3 揣 %1B%24%42%59%65 +PASS U+63E9 揩 %1B%24%42%59%62 +PASS U+63EE 揮 %1B%24%42%34%78 +PASS U+63F4 援 %1B%24%42%31%67 +FAIL U+63F5 揵 %1B%24%42%7A%2F assert_equals: expected "%1B%24%42%7A%2F" but got "%26%23%32%35%35%38%39%3B" +PASS U+63F6 揶 %1B%24%42%59%68 +PASS U+63FA 揺 %1B%24%42%4D%49 +PASS U+6406 搆 %1B%24%42%59%6C +PASS U+640D 損 %1B%24%42%42%3B +PASS U+640F 搏 %1B%24%42%59%73 +PASS U+6413 搓 %1B%24%42%59%6D +PASS U+6416 搖 %1B%24%42%59%6A +PASS U+6417 搗 %1B%24%42%59%71 +PASS U+641C 搜 %1B%24%42%59%53 +PASS U+6426 搦 %1B%24%42%59%6E +PASS U+6428 搨 %1B%24%42%59%72 +PASS U+642C 搬 %1B%24%42%48%42 +PASS U+642D 搭 %1B%24%42%45%6B +PASS U+6434 搴 %1B%24%42%59%6B +PASS U+6436 搶 %1B%24%42%59%6F +PASS U+643A 携 %1B%24%42%37%48 +PASS U+643E 搾 %1B%24%42%3A%71 +PASS U+6442 摂 %1B%24%42%40%5D +PASS U+644E 摎 %1B%24%42%59%77 +PASS U+6458 摘 %1B%24%42%45%26 +FAIL U+6460 摠 %1B%24%42%7A%30 assert_equals: expected "%1B%24%42%7A%30" but got "%26%23%32%35%36%39%36%3B" +PASS U+6467 摧 %1B%24%42%59%74 +PASS U+6469 摩 %1B%24%42%4B%60 +PASS U+646F 摯 %1B%24%42%59%75 +PASS U+6476 摶 %1B%24%42%59%76 +PASS U+6478 摸 %1B%24%42%4C%4E +PASS U+647A 摺 %1B%24%42%40%22 +PASS U+6483 撃 %1B%24%42%37%62 +PASS U+6488 撈 %1B%24%42%59%7D +PASS U+6492 撒 %1B%24%42%3B%35 +PASS U+6493 撓 %1B%24%42%59%7A +PASS U+6495 撕 %1B%24%42%59%79 +PASS U+649A 撚 %1B%24%42%47%32 +FAIL U+649D 撝 %1B%24%42%7A%31 assert_equals: expected "%1B%24%42%7A%31" but got "%26%23%32%35%37%35%37%3B" +PASS U+649E 撞 %1B%24%42%46%35 +PASS U+64A4 撤 %1B%24%42%45%31 +PASS U+64A5 撥 %1B%24%42%59%7B +PASS U+64A9 撩 %1B%24%42%59%7C +PASS U+64AB 撫 %1B%24%42%49%6F +PASS U+64AD 播 %1B%24%42%47%45 +PASS U+64AE 撮 %1B%24%42%3B%23 +PASS U+64B0 撰 %1B%24%42%40%71 +PASS U+64B2 撲 %1B%24%42%4B%50 +PASS U+64B9 撹 %1B%24%42%33%49 +PASS U+64BB 撻 %1B%24%42%5A%25 +PASS U+64BC 撼 %1B%24%42%59%7E +PASS U+64C1 擁 %1B%24%42%4D%4A +PASS U+64C2 擂 %1B%24%42%5A%27 +PASS U+64C5 擅 %1B%24%42%5A%23 +PASS U+64C7 擇 %1B%24%42%5A%24 +PASS U+64CD 操 %1B%24%42%41%60 +FAIL U+64CE 擎 %1B%24%42%7A%32 assert_equals: expected "%1B%24%42%7A%32" but got "%26%23%32%35%38%30%36%3B" +PASS U+64D2 擒 %1B%24%42%5A%22 +PASS U+64D4 擔 %1B%24%42%59%3F +PASS U+64D8 擘 %1B%24%42%5A%26 +PASS U+64DA 據 %1B%24%42%5A%21 +PASS U+64E0 擠 %1B%24%42%5A%2B +PASS U+64E1 擡 %1B%24%42%5A%2C +PASS U+64E2 擢 %1B%24%42%45%27 +PASS U+64E3 擣 %1B%24%42%5A%2E +PASS U+64E6 擦 %1B%24%42%3B%24 +PASS U+64E7 擧 %1B%24%42%5A%29 +PASS U+64EC 擬 %1B%24%42%35%3C +PASS U+64EF 擯 %1B%24%42%5A%2F +PASS U+64F1 擱 %1B%24%42%5A%28 +PASS U+64F2 擲 %1B%24%42%5A%33 +PASS U+64F4 擴 %1B%24%42%5A%32 +PASS U+64F6 擶 %1B%24%42%5A%31 +PASS U+64FA 擺 %1B%24%42%5A%34 +PASS U+64FD 擽 %1B%24%42%5A%36 +PASS U+64FE 擾 %1B%24%42%3E%71 +PASS U+6500 攀 %1B%24%42%5A%35 +PASS U+6505 攅 %1B%24%42%5A%39 +PASS U+6518 攘 %1B%24%42%5A%37 +PASS U+651C 攜 %1B%24%42%5A%38 +PASS U+651D 攝 %1B%24%42%59%70 +PASS U+6523 攣 %1B%24%42%5A%3B +PASS U+6524 攤 %1B%24%42%5A%3A +PASS U+652A 攪 %1B%24%42%59%78 +PASS U+652B 攫 %1B%24%42%5A%3C +PASS U+652C 攬 %1B%24%42%5A%30 +PASS U+652F 支 %1B%24%42%3B%59 +PASS U+6534 攴 %1B%24%42%5A%3D +PASS U+6535 攵 %1B%24%42%5A%3E +PASS U+6536 收 %1B%24%42%5A%40 +PASS U+6537 攷 %1B%24%42%5A%3F +PASS U+6538 攸 %1B%24%42%5A%41 +PASS U+6539 改 %1B%24%42%32%7E +PASS U+653B 攻 %1B%24%42%39%36 +PASS U+653E 放 %1B%24%42%4A%7C +PASS U+653F 政 %1B%24%42%40%2F +PASS U+6545 故 %1B%24%42%38%4E +PASS U+6548 效 %1B%24%42%5A%43 +PASS U+654D 敍 %1B%24%42%5A%46 +FAIL U+654E 敎 %1B%24%42%7A%33 assert_equals: expected "%1B%24%42%7A%33" but got "%26%23%32%35%39%33%34%3B" +PASS U+654F 敏 %1B%24%42%49%52 +PASS U+6551 救 %1B%24%42%35%5F +PASS U+6555 敕 %1B%24%42%5A%45 +PASS U+6556 敖 %1B%24%42%5A%44 +PASS U+6557 敗 %1B%24%42%47%54 +PASS U+6558 敘 %1B%24%42%5A%47 +PASS U+6559 教 %1B%24%42%36%35 +PASS U+655D 敝 %1B%24%42%5A%49 +PASS U+655E 敞 %1B%24%42%5A%48 +PASS U+6562 敢 %1B%24%42%34%3A +PASS U+6563 散 %1B%24%42%3B%36 +PASS U+6566 敦 %1B%24%42%46%58 +PASS U+656C 敬 %1B%24%42%37%49 +PASS U+6570 数 %1B%24%42%3F%74 +PASS U+6572 敲 %1B%24%42%5A%4A +PASS U+6574 整 %1B%24%42%40%30 +PASS U+6575 敵 %1B%24%42%45%28 +PASS U+6577 敷 %1B%24%42%49%5F +PASS U+6578 數 %1B%24%42%5A%4B +PASS U+6582 斂 %1B%24%42%5A%4C +PASS U+6583 斃 %1B%24%42%5A%4D +PASS U+6587 文 %1B%24%42%4A%38 +PASS U+6588 斈 %1B%24%42%55%5D +PASS U+6589 斉 %1B%24%42%40%46 +PASS U+658C 斌 %1B%24%42%49%4C +PASS U+658E 斎 %1B%24%42%3A%58 +PASS U+6590 斐 %1B%24%42%48%65 +PASS U+6591 斑 %1B%24%42%48%43 +PASS U+6597 斗 %1B%24%42%45%4D +PASS U+6599 料 %1B%24%42%4E%41 +PASS U+659B 斛 %1B%24%42%5A%4F +PASS U+659C 斜 %1B%24%42%3C%50 +PASS U+659F 斟 %1B%24%42%5A%50 +PASS U+65A1 斡 %1B%24%42%30%36 +PASS U+65A4 斤 %1B%24%42%36%54 +PASS U+65A5 斥 %1B%24%42%40%4D +PASS U+65A7 斧 %1B%24%42%49%60 +PASS U+65AB 斫 %1B%24%42%5A%51 +PASS U+65AC 斬 %1B%24%42%3B%42 +PASS U+65AD 断 %1B%24%42%43%47 +PASS U+65AF 斯 %1B%24%42%3B%5B +PASS U+65B0 新 %1B%24%42%3F%37 +PASS U+65B7 斷 %1B%24%42%5A%52 +PASS U+65B9 方 %1B%24%42%4A%7D +PASS U+65BC 於 %1B%24%42%31%77 +PASS U+65BD 施 %1B%24%42%3B%5C +PASS U+65C1 旁 %1B%24%42%5A%55 +PASS U+65C3 旃 %1B%24%42%5A%53 +PASS U+65C4 旄 %1B%24%42%5A%56 +PASS U+65C5 旅 %1B%24%42%4E%39 +PASS U+65C6 旆 %1B%24%42%5A%54 +PASS U+65CB 旋 %1B%24%42%40%7B +PASS U+65CC 旌 %1B%24%42%5A%57 +PASS U+65CF 族 %1B%24%42%42%32 +PASS U+65D2 旒 %1B%24%42%5A%58 +PASS U+65D7 旗 %1B%24%42%34%7A +PASS U+65D9 旙 %1B%24%42%5A%5A +PASS U+65DB 旛 %1B%24%42%5A%59 +PASS U+65E0 无 %1B%24%42%5A%5B +PASS U+65E1 旡 %1B%24%42%5A%5C +PASS U+65E2 既 %1B%24%42%34%7B +PASS U+65E5 日 %1B%24%42%46%7C +PASS U+65E6 旦 %1B%24%42%43%36 +PASS U+65E7 旧 %1B%24%42%35%6C +PASS U+65E8 旨 %1B%24%42%3B%5D +PASS U+65E9 早 %1B%24%42%41%61 +PASS U+65EC 旬 %1B%24%42%3D%5C +PASS U+65ED 旭 %1B%24%42%30%30 +PASS U+65F1 旱 %1B%24%42%5A%5D +PASS U+65FA 旺 %1B%24%42%32%22 +PASS U+65FB 旻 %1B%24%42%5A%61 +FAIL U+6600 昀 %1B%24%42%7A%34 assert_equals: expected "%1B%24%42%7A%34" but got "%26%23%32%36%31%31%32%3B" +PASS U+6602 昂 %1B%24%42%39%37 +PASS U+6603 昃 %1B%24%42%5A%60 +PASS U+6606 昆 %1B%24%42%3A%2B +PASS U+6607 昇 %1B%24%42%3E%3A +FAIL U+6609 昉 %1B%24%42%7A%37 assert_equals: expected "%1B%24%42%7A%37" but got "%26%23%32%36%31%32%31%3B" +PASS U+660A 昊 %1B%24%42%5A%5F +PASS U+660C 昌 %1B%24%42%3E%3B +PASS U+660E 明 %1B%24%42%4C%40 +PASS U+660F 昏 %1B%24%42%3A%2A +PASS U+6613 易 %1B%24%42%30%57 +PASS U+6614 昔 %1B%24%42%40%4E +FAIL U+6615 昕 %1B%24%42%7A%35 assert_equals: expected "%1B%24%42%7A%35" but got "%26%23%32%36%31%33%33%3B" +PASS U+661C 昜 %1B%24%42%5A%66 +FAIL U+661E 昞 %1B%24%42%7A%39 assert_equals: expected "%1B%24%42%7A%39" but got "%26%23%32%36%31%34%32%3B" +PASS U+661F 星 %1B%24%42%40%31 +PASS U+6620 映 %1B%24%42%31%47 +FAIL U+6624 昤 %1B%24%42%7A%3A assert_equals: expected "%1B%24%42%7A%3A" but got "%26%23%32%36%31%34%38%3B" +PASS U+6625 春 %1B%24%42%3D%55 +PASS U+6627 昧 %1B%24%42%4B%66 +PASS U+6628 昨 %1B%24%42%3A%72 +PASS U+662D 昭 %1B%24%42%3E%3C +FAIL U+662E 昮 %1B%24%42%7A%38 assert_equals: expected "%1B%24%42%7A%38" but got "%26%23%32%36%31%35%38%3B" +PASS U+662F 是 %1B%24%42%40%27 +FAIL U+6631 昱 %1B%24%42%79%28 assert_equals: expected "%1B%24%42%79%28" but got "%26%23%32%36%31%36%31%3B" +PASS U+6634 昴 %1B%24%42%5A%65 +PASS U+6635 昵 %1B%24%42%5A%63 +PASS U+6636 昶 %1B%24%42%5A%64 +FAIL U+663B 昻 %1B%24%42%7A%36 assert_equals: expected "%1B%24%42%7A%36" but got "%26%23%32%36%31%37%31%3B" +PASS U+663C 昼 %1B%24%42%43%6B +PASS U+663F 昿 %1B%24%42%5B%26 +PASS U+6641 晁 %1B%24%42%5A%6A +PASS U+6642 時 %1B%24%42%3B%7E +PASS U+6643 晃 %1B%24%42%39%38 +PASS U+6644 晄 %1B%24%42%5A%68 +PASS U+6649 晉 %1B%24%42%5A%69 +PASS U+664B 晋 %1B%24%42%3F%38 +PASS U+664F 晏 %1B%24%42%5A%67 +PASS U+6652 晒 %1B%24%42%3B%2F +FAIL U+6657 晗 %1B%24%42%7A%3C assert_equals: expected "%1B%24%42%7A%3C" but got "%26%23%32%36%31%39%39%3B" +FAIL U+6659 晙 %1B%24%42%7A%3D assert_equals: expected "%1B%24%42%7A%3D" but got "%26%23%32%36%32%30%31%3B" +PASS U+665D 晝 %1B%24%42%5A%6C +PASS U+665E 晞 %1B%24%42%5A%6B +PASS U+665F 晟 %1B%24%42%5A%70 +PASS U+6662 晢 %1B%24%42%5A%71 +PASS U+6664 晤 %1B%24%42%5A%6D +FAIL U+6665 晥 %1B%24%42%7A%3B assert_equals: expected "%1B%24%42%7A%3B" but got "%26%23%32%36%32%31%33%3B" +PASS U+6666 晦 %1B%24%42%33%22 +PASS U+6667 晧 %1B%24%42%5A%6E +PASS U+6668 晨 %1B%24%42%5A%6F +PASS U+6669 晩 %1B%24%42%48%55 +PASS U+666E 普 %1B%24%42%49%61 +PASS U+666F 景 %1B%24%42%37%4A +PASS U+6670 晰 %1B%24%42%5A%72 +FAIL U+6673 晳 %1B%24%42%7A%3F assert_equals: expected "%1B%24%42%7A%3F" but got "%26%23%32%36%32%32%37%3B" +PASS U+6674 晴 %1B%24%42%40%32 +PASS U+6676 晶 %1B%24%42%3E%3D +PASS U+667A 智 %1B%24%42%43%52 +PASS U+6681 暁 %1B%24%42%36%47 +PASS U+6683 暃 %1B%24%42%5A%73 +PASS U+6684 暄 %1B%24%42%5A%77 +PASS U+6687 暇 %1B%24%42%32%4B +PASS U+6688 暈 %1B%24%42%5A%74 +PASS U+6689 暉 %1B%24%42%5A%76 +PASS U+668E 暎 %1B%24%42%5A%75 +PASS U+6691 暑 %1B%24%42%3D%6B +PASS U+6696 暖 %1B%24%42%43%48 +PASS U+6697 暗 %1B%24%42%30%45 +PASS U+6698 暘 %1B%24%42%5A%78 +FAIL U+6699 暙 %1B%24%42%7A%40 assert_equals: expected "%1B%24%42%7A%40" but got "%26%23%32%36%32%36%35%3B" +PASS U+669D 暝 %1B%24%42%5A%79 +FAIL U+66A0 暠 %1B%24%42%7A%41 assert_equals: expected "%1B%24%42%7A%41" but got "%26%23%32%36%32%37%32%3B" +PASS U+66A2 暢 %1B%24%42%44%2A +PASS U+66A6 暦 %1B%24%42%4E%71 +PASS U+66AB 暫 %1B%24%42%3B%43 +PASS U+66AE 暮 %1B%24%42%4A%6B +FAIL U+66B2 暲 %1B%24%42%7A%42 assert_equals: expected "%1B%24%42%7A%42" but got "%26%23%32%36%32%39%30%3B" +PASS U+66B4 暴 %1B%24%42%4B%3D +PASS U+66B8 暸 %1B%24%42%5B%22 +PASS U+66B9 暹 %1B%24%42%5A%7B +PASS U+66BC 暼 %1B%24%42%5A%7E +PASS U+66BE 暾 %1B%24%42%5A%7D +FAIL U+66BF 暿 %1B%24%42%7A%43 assert_equals: expected "%1B%24%42%7A%43" but got "%26%23%32%36%33%30%33%3B" +PASS U+66C1 曁 %1B%24%42%5A%7A +PASS U+66C4 曄 %1B%24%42%5B%21 +PASS U+66C7 曇 %1B%24%42%46%5E +PASS U+66C9 曉 %1B%24%42%5A%7C +PASS U+66D6 曖 %1B%24%42%5B%23 +PASS U+66D9 曙 %1B%24%42%3D%6C +PASS U+66DA 曚 %1B%24%42%5B%24 +PASS U+66DC 曜 %1B%24%42%4D%4B +PASS U+66DD 曝 %1B%24%42%47%78 +PASS U+66E0 曠 %1B%24%42%5B%25 +PASS U+66E6 曦 %1B%24%42%5B%27 +PASS U+66E9 曩 %1B%24%42%5B%28 +PASS U+66F0 曰 %1B%24%42%5B%29 +PASS U+66F2 曲 %1B%24%42%36%4A +PASS U+66F3 曳 %1B%24%42%31%48 +PASS U+66F4 更 %1B%24%42%39%39 +PASS U+66F5 曵 %1B%24%42%5B%2A +PASS U+66F7 曷 %1B%24%42%5B%2B +PASS U+66F8 書 %1B%24%42%3D%71 +PASS U+66F9 曹 %1B%24%42%41%62 +FAIL U+66FA 曺 %1B%24%42%7A%44 assert_equals: expected "%1B%24%42%7A%44" but got "%26%23%32%36%33%36%32%3B" +FAIL U+66FB 曻 %1B%24%42%79%2B assert_equals: expected "%1B%24%42%79%2B" but got "%26%23%32%36%33%36%33%3B" +PASS U+66FC 曼 %1B%24%42%52%58 +PASS U+66FD 曽 %1B%24%42%41%3E +PASS U+66FE 曾 %1B%24%42%41%3D +PASS U+66FF 替 %1B%24%42%42%58 +PASS U+6700 最 %1B%24%42%3A%47 +PASS U+6703 會 %1B%24%42%50%72 +PASS U+6708 月 %1B%24%42%37%6E +PASS U+6709 有 %1B%24%42%4D%2D +PASS U+670B 朋 %1B%24%42%4A%7E +PASS U+670D 服 %1B%24%42%49%7E +FAIL U+670E 朎 %1B%24%42%7A%45 assert_equals: expected "%1B%24%42%7A%45" but got "%26%23%32%36%33%38%32%3B" +PASS U+670F 朏 %1B%24%42%5B%2C +PASS U+6714 朔 %1B%24%42%3A%73 +PASS U+6715 朕 %1B%24%42%44%3F +PASS U+6716 朖 %1B%24%42%5B%2D +PASS U+6717 朗 %1B%24%42%4F%2F +PASS U+671B 望 %1B%24%42%4B%3E +PASS U+671D 朝 %1B%24%42%44%2B +PASS U+671E 朞 %1B%24%42%5B%2E +PASS U+671F 期 %1B%24%42%34%7C +PASS U+6726 朦 %1B%24%42%5B%2F +PASS U+6727 朧 %1B%24%42%5B%30 +PASS U+6728 木 %1B%24%42%4C%5A +PASS U+672A 未 %1B%24%42%4C%24 +PASS U+672B 末 %1B%24%42%4B%76 +PASS U+672C 本 %1B%24%42%4B%5C +PASS U+672D 札 %1B%24%42%3B%25 +PASS U+672E 朮 %1B%24%42%5B%32 +PASS U+6731 朱 %1B%24%42%3C%6B +PASS U+6734 朴 %1B%24%42%4B%51 +PASS U+6736 朶 %1B%24%42%5B%34 +PASS U+6737 朷 %1B%24%42%5B%37 +PASS U+6738 朸 %1B%24%42%5B%36 +PASS U+673A 机 %1B%24%42%34%79 +PASS U+673D 朽 %1B%24%42%35%60 +PASS U+673F 朿 %1B%24%42%5B%33 +PASS U+6741 杁 %1B%24%42%5B%35 +PASS U+6746 杆 %1B%24%42%5B%38 +PASS U+6749 杉 %1B%24%42%3F%79 +PASS U+674E 李 %1B%24%42%4D%7B +PASS U+674F 杏 %1B%24%42%30%49 +PASS U+6750 材 %1B%24%42%3A%60 +PASS U+6751 村 %1B%24%42%42%3C +PASS U+6753 杓 %1B%24%42%3C%5D +PASS U+6756 杖 %1B%24%42%3E%73 +PASS U+6759 杙 %1B%24%42%5B%3B +PASS U+675C 杜 %1B%24%42%45%4E +PASS U+675E 杞 %1B%24%42%5B%39 +PASS U+675F 束 %1B%24%42%42%2B +PASS U+6760 杠 %1B%24%42%5B%3A +PASS U+6761 条 %1B%24%42%3E%72 +PASS U+6762 杢 %1B%24%42%4C%5D +PASS U+6763 杣 %1B%24%42%5B%3C +PASS U+6764 杤 %1B%24%42%5B%3D +PASS U+6765 来 %1B%24%42%4D%68 +FAIL U+6766 杦 %1B%24%42%7A%47 assert_equals: expected "%1B%24%42%7A%47" but got "%26%23%32%36%34%37%30%3B" +PASS U+676A 杪 %1B%24%42%5B%42 +PASS U+676D 杭 %1B%24%42%39%3A +PASS U+676F 杯 %1B%24%42%47%55 +PASS U+6770 杰 %1B%24%42%5B%3F +PASS U+6771 東 %1B%24%42%45%6C +PASS U+6772 杲 %1B%24%42%5A%5E +PASS U+6773 杳 %1B%24%42%5A%62 +PASS U+6775 杵 %1B%24%42%35%4F +PASS U+6777 杷 %1B%24%42%47%47 +PASS U+677C 杼 %1B%24%42%5B%41 +PASS U+677E 松 %1B%24%42%3E%3E +PASS U+677F 板 %1B%24%42%48%44 +PASS U+6785 枅 %1B%24%42%5B%47 +PASS U+6787 枇 %1B%24%42%48%7A +PASS U+6789 枉 %1B%24%42%5B%3E +PASS U+678B 枋 %1B%24%42%5B%44 +PASS U+678C 枌 %1B%24%42%5B%43 +PASS U+6790 析 %1B%24%42%40%4F +PASS U+6795 枕 %1B%24%42%4B%6D +PASS U+6797 林 %1B%24%42%4E%53 +PASS U+679A 枚 %1B%24%42%4B%67 +PASS U+679C 果 %1B%24%42%32%4C +PASS U+679D 枝 %1B%24%42%3B%5E +PASS U+67A0 枠 %1B%24%42%4F%48 +PASS U+67A1 枡 %1B%24%42%5B%46 +PASS U+67A2 枢 %1B%24%42%3F%75 +PASS U+67A6 枦 %1B%24%42%5B%45 +PASS U+67A9 枩 %1B%24%42%5B%40 +PASS U+67AF 枯 %1B%24%42%38%4F +PASS U+67B3 枳 %1B%24%42%5B%4C +PASS U+67B4 枴 %1B%24%42%5B%4A +PASS U+67B6 架 %1B%24%42%32%4D +PASS U+67B7 枷 %1B%24%42%5B%48 +PASS U+67B8 枸 %1B%24%42%5B%4E +PASS U+67B9 枹 %1B%24%42%5B%54 +FAIL U+67BB 枻 %1B%24%42%7A%48 assert_equals: expected "%1B%24%42%7A%48" but got "%26%23%32%36%35%35%35%3B" +FAIL U+67C0 柀 %1B%24%42%7A%4A assert_equals: expected "%1B%24%42%7A%4A" but got "%26%23%32%36%35%36%30%3B" +PASS U+67C1 柁 %1B%24%42%42%48 +PASS U+67C4 柄 %1B%24%42%4A%41 +PASS U+67C6 柆 %1B%24%42%5B%56 +PASS U+67CA 柊 %1B%24%42%49%22 +PASS U+67CE 柎 %1B%24%42%5B%55 +PASS U+67CF 柏 %1B%24%42%47%70 +PASS U+67D0 某 %1B%24%42%4B%3F +PASS U+67D1 柑 %1B%24%42%34%3B +PASS U+67D3 染 %1B%24%42%40%77 +PASS U+67D4 柔 %1B%24%42%3D%40 +PASS U+67D8 柘 %1B%24%42%44%53 +PASS U+67DA 柚 %1B%24%42%4D%2E +PASS U+67DD 柝 %1B%24%42%5B%51 +PASS U+67DE 柞 %1B%24%42%5B%50 +PASS U+67E2 柢 %1B%24%42%5B%52 +PASS U+67E4 柤 %1B%24%42%5B%4F +PASS U+67E7 柧 %1B%24%42%5B%57 +PASS U+67E9 柩 %1B%24%42%5B%4D +PASS U+67EC 柬 %1B%24%42%5B%4B +PASS U+67EE 柮 %1B%24%42%5B%53 +PASS U+67EF 柯 %1B%24%42%5B%49 +PASS U+67F1 柱 %1B%24%42%43%6C +PASS U+67F3 柳 %1B%24%42%4C%78 +PASS U+67F4 柴 %1B%24%42%3C%46 +PASS U+67F5 柵 %1B%24%42%3A%74 +PASS U+67FB 査 %1B%24%42%3A%3A +PASS U+67FE 柾 %1B%24%42%4B%6F +PASS U+67FF 柿 %1B%24%42%33%41 +FAIL U+6801 栁 %1B%24%42%7A%4B assert_equals: expected "%1B%24%42%7A%4B" but got "%26%23%32%36%36%32%35%3B" +PASS U+6802 栂 %1B%24%42%44%4E +PASS U+6803 栃 %1B%24%42%46%4A +PASS U+6804 栄 %1B%24%42%31%49 +PASS U+6813 栓 %1B%24%42%40%72 +PASS U+6816 栖 %1B%24%42%40%34 +PASS U+6817 栗 %1B%24%42%37%2A +PASS U+681E 栞 %1B%24%42%5B%59 +PASS U+6821 校 %1B%24%42%39%3B +PASS U+6822 栢 %1B%24%42%33%7C +PASS U+6829 栩 %1B%24%42%5B%5B +PASS U+682A 株 %1B%24%42%33%74 +PASS U+682B 栫 %1B%24%42%5B%61 +PASS U+6832 栲 %1B%24%42%5B%5E +PASS U+6834 栴 %1B%24%42%40%73 +PASS U+6838 核 %1B%24%42%33%4B +PASS U+6839 根 %1B%24%42%3A%2C +PASS U+683C 格 %1B%24%42%33%4A +PASS U+683D 栽 %1B%24%42%3A%4F +PASS U+6840 桀 %1B%24%42%5B%5C +PASS U+6841 桁 %1B%24%42%37%65 +PASS U+6842 桂 %1B%24%42%37%4B +PASS U+6843 桃 %1B%24%42%45%6D +FAIL U+6844 桄 %1B%24%42%7A%4C assert_equals: expected "%1B%24%42%7A%4C" but got "%26%23%32%36%36%39%32%3B" +PASS U+6846 框 %1B%24%42%5B%5A +PASS U+6848 案 %1B%24%42%30%46 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_3001-4000-expected.txt new file mode 100644 index 0000000..92ec066 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_3001-4000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 932 PASS, 68 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+684D 桍 %1B%24%42%5B%5D +PASS U+684E 桎 %1B%24%42%5B%5F +PASS U+6850 桐 %1B%24%42%36%4D +PASS U+6851 桑 %1B%24%42%37%2C +FAIL U+6852 桒 %1B%24%42%7A%49 assert_equals: expected "%1B%24%42%7A%49" but got "%26%23%32%36%37%30%36%3B" +PASS U+6853 桓 %1B%24%42%34%3C +PASS U+6854 桔 %1B%24%42%35%4B +PASS U+6859 桙 %1B%24%42%5B%62 +PASS U+685C 桜 %1B%24%42%3A%79 +PASS U+685D 桝 %1B%24%42%4B%71 +PASS U+685F 桟 %1B%24%42%3B%37 +PASS U+6863 档 %1B%24%42%5B%63 +PASS U+6867 桧 %1B%24%42%49%30 +PASS U+6874 桴 %1B%24%42%5B%6F +PASS U+6876 桶 %1B%24%42%32%33 +PASS U+6877 桷 %1B%24%42%5B%64 +PASS U+687E 桾 %1B%24%42%5B%75 +PASS U+687F 桿 %1B%24%42%5B%65 +PASS U+6881 梁 %1B%24%42%4E%42 +PASS U+6883 梃 %1B%24%42%5B%6C +PASS U+6885 梅 %1B%24%42%47%5F +PASS U+688D 梍 %1B%24%42%5B%74 +PASS U+688F 梏 %1B%24%42%5B%67 +PASS U+6893 梓 %1B%24%42%30%34 +PASS U+6894 梔 %1B%24%42%5B%69 +PASS U+6897 梗 %1B%24%42%39%3C +PASS U+689B 梛 %1B%24%42%5B%6B +PASS U+689D 條 %1B%24%42%5B%6A +PASS U+689F 梟 %1B%24%42%5B%66 +PASS U+68A0 梠 %1B%24%42%5B%71 +PASS U+68A2 梢 %1B%24%42%3E%3F +PASS U+68A6 梦 %1B%24%42%54%6D +PASS U+68A7 梧 %1B%24%42%38%68 +PASS U+68A8 梨 %1B%24%42%4D%7C +PASS U+68AD 梭 %1B%24%42%5B%68 +PASS U+68AF 梯 %1B%24%42%44%74 +PASS U+68B0 械 %1B%24%42%33%23 +PASS U+68B1 梱 %1B%24%42%3A%2D +PASS U+68B3 梳 %1B%24%42%5B%60 +PASS U+68B5 梵 %1B%24%42%5B%70 +PASS U+68B6 梶 %1B%24%42%33%61 +PASS U+68B9 梹 %1B%24%42%5B%6E +PASS U+68BA 梺 %1B%24%42%5B%72 +PASS U+68BC 梼 %1B%24%42%45%6E +PASS U+68C4 棄 %1B%24%42%34%7E +PASS U+68C6 棆 %1B%24%42%5C%32 +FAIL U+68C8 棈 %1B%24%42%79%29 assert_equals: expected "%1B%24%42%79%29" but got "%26%23%32%36%38%32%34%3B" +PASS U+68C9 棉 %1B%24%42%4C%49 +PASS U+68CA 棊 %1B%24%42%5B%77 +PASS U+68CB 棋 %1B%24%42%34%7D +PASS U+68CD 棍 %1B%24%42%5B%7E +FAIL U+68CF 棏 %1B%24%42%7A%4D assert_equals: expected "%1B%24%42%7A%4D" but got "%26%23%32%36%38%33%31%3B" +PASS U+68D2 棒 %1B%24%42%4B%40 +PASS U+68D4 棔 %1B%24%42%5C%21 +PASS U+68D5 棕 %1B%24%42%5C%23 +PASS U+68D7 棗 %1B%24%42%5C%27 +PASS U+68D8 棘 %1B%24%42%5B%79 +PASS U+68DA 棚 %1B%24%42%43%2A +PASS U+68DF 棟 %1B%24%42%45%6F +PASS U+68E0 棠 %1B%24%42%5C%2B +PASS U+68E1 棡 %1B%24%42%5B%7C +PASS U+68E3 棣 %1B%24%42%5C%28 +PASS U+68E7 棧 %1B%24%42%5C%22 +PASS U+68EE 森 %1B%24%42%3F%39 +PASS U+68EF 棯 %1B%24%42%5C%2C +PASS U+68F2 棲 %1B%24%42%40%33 +PASS U+68F9 棹 %1B%24%42%5C%2A +PASS U+68FA 棺 %1B%24%42%34%3D +PASS U+6900 椀 %1B%24%42%4F%50 +PASS U+6901 椁 %1B%24%42%5B%76 +PASS U+6904 椄 %1B%24%42%5C%26 +PASS U+6905 椅 %1B%24%42%30%58 +PASS U+6908 椈 %1B%24%42%5B%78 +PASS U+690B 椋 %1B%24%42%4C%3A +PASS U+690C 椌 %1B%24%42%5B%7D +PASS U+690D 植 %1B%24%42%3F%22 +PASS U+690E 椎 %1B%24%42%44%47 +PASS U+690F 椏 %1B%24%42%5B%73 +PASS U+6912 椒 %1B%24%42%5C%25 +PASS U+6919 椙 %1B%24%42%3F%7A +PASS U+691A 椚 %1B%24%42%5C%2F +PASS U+691B 椛 %1B%24%42%33%71 +PASS U+691C 検 %1B%24%42%38%21 +PASS U+6921 椡 %1B%24%42%5C%31 +PASS U+6922 椢 %1B%24%42%5B%7A +PASS U+6923 椣 %1B%24%42%5C%30 +PASS U+6925 椥 %1B%24%42%5C%29 +PASS U+6926 椦 %1B%24%42%5B%7B +PASS U+6928 椨 %1B%24%42%5C%2D +PASS U+692A 椪 %1B%24%42%5C%2E +PASS U+6930 椰 %1B%24%42%5C%3F +PASS U+6934 椴 %1B%24%42%46%4E +PASS U+6936 椶 %1B%24%42%5C%24 +PASS U+6939 椹 %1B%24%42%5C%3B +PASS U+693D 椽 %1B%24%42%5C%3D +PASS U+693F 椿 %1B%24%42%44%58 +PASS U+694A 楊 %1B%24%42%4D%4C +PASS U+6953 楓 %1B%24%42%49%76 +PASS U+6954 楔 %1B%24%42%5C%38 +PASS U+6955 楕 %1B%24%42%42%4A +PASS U+6959 楙 %1B%24%42%5C%3E +PASS U+695A 楚 %1B%24%42%41%3F +PASS U+695C 楜 %1B%24%42%5C%35 +PASS U+695D 楝 %1B%24%42%5C%42 +PASS U+695E 楞 %1B%24%42%5C%41 +PASS U+6960 楠 %1B%24%42%46%6F +PASS U+6961 楡 %1B%24%42%5C%40 +PASS U+6962 楢 %1B%24%42%46%6A +FAIL U+6968 楨 %1B%24%42%7A%4F assert_equals: expected "%1B%24%42%7A%4F" but got "%26%23%32%36%39%38%34%3B" +PASS U+696A 楪 %1B%24%42%5C%44 +PASS U+696B 楫 %1B%24%42%5C%37 +PASS U+696D 業 %1B%24%42%36%48 +PASS U+696E 楮 %1B%24%42%5C%3A +PASS U+696F 楯 %1B%24%42%3D%5D +PASS U+6973 楳 %1B%24%42%47%60 +PASS U+6974 楴 %1B%24%42%5C%3C +PASS U+6975 極 %1B%24%42%36%4B +PASS U+6977 楷 %1B%24%42%5C%34 +PASS U+6978 楸 %1B%24%42%5C%36 +PASS U+6979 楹 %1B%24%42%5C%33 +PASS U+697C 楼 %1B%24%42%4F%30 +PASS U+697D 楽 %1B%24%42%33%5A +PASS U+697E 楾 %1B%24%42%5C%39 +PASS U+6981 榁 %1B%24%42%5C%43 +PASS U+6982 概 %1B%24%42%33%35 +PASS U+698A 榊 %1B%24%42%3A%67 +PASS U+698E 榎 %1B%24%42%31%5D +PASS U+6991 榑 %1B%24%42%5C%54 +PASS U+6994 榔 %1B%24%42%4F%31 +PASS U+6995 榕 %1B%24%42%5C%57 +FAIL U+6998 榘 %1B%24%42%7A%51 assert_equals: expected "%1B%24%42%7A%51" but got "%26%23%32%37%30%33%32%3B" +PASS U+699B 榛 %1B%24%42%3F%3A +PASS U+699C 榜 %1B%24%42%5C%56 +PASS U+69A0 榠 %1B%24%42%5C%55 +PASS U+69A7 榧 %1B%24%42%5C%52 +PASS U+69AE 榮 %1B%24%42%5C%46 +PASS U+69B1 榱 %1B%24%42%5C%63 +PASS U+69B2 榲 %1B%24%42%5C%45 +PASS U+69B4 榴 %1B%24%42%5C%58 +PASS U+69BB 榻 %1B%24%42%5C%50 +PASS U+69BE 榾 %1B%24%42%5C%4B +PASS U+69BF 榿 %1B%24%42%5C%48 +PASS U+69C1 槁 %1B%24%42%5C%49 +PASS U+69C3 槃 %1B%24%42%5C%51 +PASS U+69C7 槇 %1B%24%42%74%22 +PASS U+69CA 槊 %1B%24%42%5C%4E +PASS U+69CB 構 %1B%24%42%39%3D +PASS U+69CC 槌 %1B%24%42%44%48 +PASS U+69CD 槍 %1B%24%42%41%64 +PASS U+69CE 槎 %1B%24%42%5C%4C +PASS U+69D0 槐 %1B%24%42%5C%47 +PASS U+69D3 槓 %1B%24%42%5C%4A +PASS U+69D8 様 %1B%24%42%4D%4D +PASS U+69D9 槙 %1B%24%42%4B%6A +PASS U+69DD 槝 %1B%24%42%5C%4F +PASS U+69DE 槞 %1B%24%42%5C%59 +FAIL U+69E2 槢 %1B%24%42%7A%52 assert_equals: expected "%1B%24%42%7A%52" but got "%26%23%32%37%31%30%36%3B" +PASS U+69E7 槧 %1B%24%42%5C%61 +PASS U+69E8 槨 %1B%24%42%5C%5A +PASS U+69EB 槫 %1B%24%42%5C%67 +PASS U+69ED 槭 %1B%24%42%5C%65 +PASS U+69F2 槲 %1B%24%42%5C%60 +PASS U+69F9 槹 %1B%24%42%5C%5F +PASS U+69FB 槻 %1B%24%42%44%50 +PASS U+69FD 槽 %1B%24%42%41%65 +PASS U+69FF 槿 %1B%24%42%5C%5D +PASS U+6A02 樂 %1B%24%42%5C%5B +PASS U+6A05 樅 %1B%24%42%5C%62 +PASS U+6A0A 樊 %1B%24%42%5C%68 +PASS U+6A0B 樋 %1B%24%42%48%75 +PASS U+6A0C 樌 %1B%24%42%5C%6E +PASS U+6A12 樒 %1B%24%42%5C%69 +PASS U+6A13 樓 %1B%24%42%5C%6C +PASS U+6A14 樔 %1B%24%42%5C%66 +PASS U+6A17 樗 %1B%24%42%43%74 +PASS U+6A19 標 %1B%24%42%49%38 +PASS U+6A1B 樛 %1B%24%42%5C%5C +PASS U+6A1E 樞 %1B%24%42%5C%64 +PASS U+6A1F 樟 %1B%24%42%3E%40 +PASS U+6A21 模 %1B%24%42%4C%4F +PASS U+6A22 樢 %1B%24%42%5C%78 +PASS U+6A23 樣 %1B%24%42%5C%6B +PASS U+6A29 権 %1B%24%42%38%22 +PASS U+6A2A 横 %1B%24%42%32%23 +PASS U+6A2B 樫 %1B%24%42%33%5F +PASS U+6A2E 樮 %1B%24%42%5C%53 +FAIL U+6A30 樰 %1B%24%42%7A%53 assert_equals: expected "%1B%24%42%7A%53" but got "%26%23%32%37%31%38%34%3B" +PASS U+6A35 樵 %1B%24%42%3E%41 +PASS U+6A36 樶 %1B%24%42%5C%70 +PASS U+6A38 樸 %1B%24%42%5C%77 +PASS U+6A39 樹 %1B%24%42%3C%79 +PASS U+6A3A 樺 %1B%24%42%33%72 +PASS U+6A3D 樽 %1B%24%42%43%2E +PASS U+6A44 橄 %1B%24%42%5C%6D +FAIL U+6A46 橆 %1B%24%42%7A%55 assert_equals: expected "%1B%24%42%7A%55" but got "%26%23%32%37%32%30%36%3B" +PASS U+6A47 橇 %1B%24%42%5C%72 +PASS U+6A48 橈 %1B%24%42%5C%76 +PASS U+6A4B 橋 %1B%24%42%36%36 +PASS U+6A58 橘 %1B%24%42%35%4C +PASS U+6A59 橙 %1B%24%42%5C%74 +PASS U+6A5F 機 %1B%24%42%35%21 +PASS U+6A61 橡 %1B%24%42%46%4B +PASS U+6A62 橢 %1B%24%42%5C%73 +PASS U+6A66 橦 %1B%24%42%5C%75 +FAIL U+6A6B 橫 %1B%24%42%7A%54 assert_equals: expected "%1B%24%42%7A%54" but got "%26%23%32%37%32%34%33%3B" +PASS U+6A72 橲 %1B%24%42%5C%6F +FAIL U+6A73 橳 %1B%24%42%7A%56 assert_equals: expected "%1B%24%42%7A%56" but got "%26%23%32%37%32%35%31%3B" +PASS U+6A78 橸 %1B%24%42%5C%71 +FAIL U+6A7E 橾 %1B%24%42%7A%57 assert_equals: expected "%1B%24%42%7A%57" but got "%26%23%32%37%32%36%32%3B" +PASS U+6A7F 橿 %1B%24%42%33%60 +PASS U+6A80 檀 %1B%24%42%43%49 +PASS U+6A84 檄 %1B%24%42%5C%7C +PASS U+6A8D 檍 %1B%24%42%5C%7A +PASS U+6A8E 檎 %1B%24%42%38%69 +PASS U+6A90 檐 %1B%24%42%5C%79 +PASS U+6A97 檗 %1B%24%42%5D%21 +PASS U+6A9C 檜 %1B%24%42%5B%58 +PASS U+6AA0 檠 %1B%24%42%5C%7B +PASS U+6AA2 檢 %1B%24%42%5C%7D +PASS U+6AA3 檣 %1B%24%42%5C%7E +PASS U+6AAA 檪 %1B%24%42%5D%2C +PASS U+6AAC 檬 %1B%24%42%5D%28 +PASS U+6AAE 檮 %1B%24%42%5B%6D +PASS U+6AB3 檳 %1B%24%42%5D%27 +PASS U+6AB8 檸 %1B%24%42%5D%26 +PASS U+6ABB 檻 %1B%24%42%5D%23 +PASS U+6AC1 櫁 %1B%24%42%5C%6A +PASS U+6AC2 櫂 %1B%24%42%5D%25 +PASS U+6AC3 櫃 %1B%24%42%5D%24 +PASS U+6AD1 櫑 %1B%24%42%5D%2A +PASS U+6AD3 櫓 %1B%24%42%4F%26 +PASS U+6ADA 櫚 %1B%24%42%5D%2D +PASS U+6ADB 櫛 %1B%24%42%36%7B +PASS U+6ADE 櫞 %1B%24%42%5D%29 +PASS U+6ADF 櫟 %1B%24%42%5D%2B +FAIL U+6AE2 櫢 %1B%24%42%7A%58 assert_equals: expected "%1B%24%42%7A%58" but got "%26%23%32%37%33%36%32%3B" +FAIL U+6AE4 櫤 %1B%24%42%7A%59 assert_equals: expected "%1B%24%42%7A%59" but got "%26%23%32%37%33%36%34%3B" +PASS U+6AE8 櫨 %1B%24%42%48%27 +PASS U+6AEA 櫪 %1B%24%42%5D%2E +PASS U+6AFA 櫺 %1B%24%42%5D%32 +PASS U+6AFB 櫻 %1B%24%42%5D%2F +PASS U+6B04 欄 %1B%24%42%4D%73 +PASS U+6B05 欅 %1B%24%42%5D%30 +PASS U+6B0A 權 %1B%24%42%5C%5E +PASS U+6B12 欒 %1B%24%42%5D%33 +PASS U+6B16 欖 %1B%24%42%5D%34 +PASS U+6B1D 欝 %1B%24%42%31%35 +PASS U+6B1F 欟 %1B%24%42%5D%36 +PASS U+6B20 欠 %1B%24%42%37%67 +PASS U+6B21 次 %1B%24%42%3C%21 +PASS U+6B23 欣 %1B%24%42%36%55 +PASS U+6B27 欧 %1B%24%42%32%24 +PASS U+6B32 欲 %1B%24%42%4D%5F +PASS U+6B37 欷 %1B%24%42%5D%38 +PASS U+6B38 欸 %1B%24%42%5D%37 +PASS U+6B39 欹 %1B%24%42%5D%3A +PASS U+6B3A 欺 %1B%24%42%35%3D +PASS U+6B3D 欽 %1B%24%42%36%56 +PASS U+6B3E 款 %1B%24%42%34%3E +PASS U+6B43 歃 %1B%24%42%5D%3D +PASS U+6B47 歇 %1B%24%42%5D%3C +PASS U+6B49 歉 %1B%24%42%5D%3E +PASS U+6B4C 歌 %1B%24%42%32%4E +PASS U+6B4E 歎 %1B%24%42%43%37 +PASS U+6B50 歐 %1B%24%42%5D%3F +PASS U+6B53 歓 %1B%24%42%34%3F +PASS U+6B54 歔 %1B%24%42%5D%41 +PASS U+6B59 歙 %1B%24%42%5D%40 +PASS U+6B5B 歛 %1B%24%42%5D%42 +PASS U+6B5F 歟 %1B%24%42%5D%43 +PASS U+6B61 歡 %1B%24%42%5D%44 +PASS U+6B62 止 %1B%24%42%3B%5F +PASS U+6B63 正 %1B%24%42%40%35 +PASS U+6B64 此 %1B%24%42%3A%21 +PASS U+6B66 武 %1B%24%42%49%70 +PASS U+6B69 歩 %1B%24%42%4A%62 +PASS U+6B6A 歪 %1B%24%42%4F%44 +PASS U+6B6F 歯 %1B%24%42%3B%75 +PASS U+6B73 歳 %1B%24%42%3A%50 +PASS U+6B74 歴 %1B%24%42%4E%72 +PASS U+6B78 歸 %1B%24%42%5D%45 +PASS U+6B79 歹 %1B%24%42%5D%46 +PASS U+6B7B 死 %1B%24%42%3B%60 +PASS U+6B7F 歿 %1B%24%42%5D%47 +PASS U+6B80 殀 %1B%24%42%5D%48 +PASS U+6B83 殃 %1B%24%42%5D%4A +PASS U+6B84 殄 %1B%24%42%5D%49 +PASS U+6B86 殆 %1B%24%42%4B%58 +PASS U+6B89 殉 %1B%24%42%3D%5E +PASS U+6B8A 殊 %1B%24%42%3C%6C +PASS U+6B8B 残 %1B%24%42%3B%44 +PASS U+6B8D 殍 %1B%24%42%5D%4B +PASS U+6B95 殕 %1B%24%42%5D%4D +PASS U+6B96 殖 %1B%24%42%3F%23 +PASS U+6B98 殘 %1B%24%42%5D%4C +PASS U+6B9E 殞 %1B%24%42%5D%4E +PASS U+6BA4 殤 %1B%24%42%5D%4F +PASS U+6BAA 殪 %1B%24%42%5D%50 +PASS U+6BAB 殫 %1B%24%42%5D%51 +PASS U+6BAF 殯 %1B%24%42%5D%52 +PASS U+6BB1 殱 %1B%24%42%5D%54 +PASS U+6BB2 殲 %1B%24%42%5D%53 +PASS U+6BB3 殳 %1B%24%42%5D%55 +PASS U+6BB4 殴 %1B%24%42%32%25 +PASS U+6BB5 段 %1B%24%42%43%4A +PASS U+6BB7 殷 %1B%24%42%5D%56 +PASS U+6BBA 殺 %1B%24%42%3B%26 +PASS U+6BBB 殻 %1B%24%42%33%4C +PASS U+6BBC 殼 %1B%24%42%5D%57 +PASS U+6BBF 殿 %1B%24%42%45%42 +PASS U+6BC0 毀 %1B%24%42%54%4C +PASS U+6BC5 毅 %1B%24%42%35%23 +PASS U+6BC6 毆 %1B%24%42%5D%58 +PASS U+6BCB 毋 %1B%24%42%5D%59 +PASS U+6BCD 母 %1B%24%42%4A%6C +PASS U+6BCE 毎 %1B%24%42%4B%68 +PASS U+6BD2 毒 %1B%24%42%46%47 +PASS U+6BD3 毓 %1B%24%42%5D%5A +PASS U+6BD4 比 %1B%24%42%48%66 +FAIL U+6BD6 毖 %1B%24%42%7A%5A assert_equals: expected "%1B%24%42%7A%5A" but got "%26%23%32%37%36%30%36%3B" +PASS U+6BD8 毘 %1B%24%42%48%7B +PASS U+6BDB 毛 %1B%24%42%4C%53 +PASS U+6BDF 毟 %1B%24%42%5D%5B +PASS U+6BEB 毫 %1B%24%42%5D%5D +PASS U+6BEC 毬 %1B%24%42%5D%5C +PASS U+6BEF 毯 %1B%24%42%5D%5F +PASS U+6BF3 毳 %1B%24%42%5D%5E +PASS U+6C08 氈 %1B%24%42%5D%61 +PASS U+6C0F 氏 %1B%24%42%3B%61 +PASS U+6C11 民 %1B%24%42%4C%31 +PASS U+6C13 氓 %1B%24%42%5D%62 +PASS U+6C14 气 %1B%24%42%5D%63 +PASS U+6C17 気 %1B%24%42%35%24 +PASS U+6C1B 氛 %1B%24%42%5D%64 +PASS U+6C23 氣 %1B%24%42%5D%66 +PASS U+6C24 氤 %1B%24%42%5D%65 +PASS U+6C34 水 %1B%24%42%3F%65 +PASS U+6C37 氷 %1B%24%42%49%39 +PASS U+6C38 永 %1B%24%42%31%4A +PASS U+6C3E 氾 %1B%24%42%48%45 +FAIL U+6C3F 氿 %1B%24%42%7A%5B assert_equals: expected "%1B%24%42%7A%5B" but got "%26%23%32%37%37%31%31%3B" +PASS U+6C40 汀 %1B%24%42%44%75 +PASS U+6C41 汁 %1B%24%42%3D%41 +PASS U+6C42 求 %1B%24%42%35%61 +PASS U+6C4E 汎 %1B%24%42%48%46 +PASS U+6C50 汐 %1B%24%42%3C%2E +PASS U+6C55 汕 %1B%24%42%5D%68 +PASS U+6C57 汗 %1B%24%42%34%40 +PASS U+6C5A 汚 %1B%24%42%31%78 +FAIL U+6C5C 汜 %1B%24%42%7A%5C assert_equals: expected "%1B%24%42%7A%5C" but got "%26%23%32%37%37%34%30%3B" +PASS U+6C5D 汝 %1B%24%42%46%72 +PASS U+6C5E 汞 %1B%24%42%5D%67 +PASS U+6C5F 江 %1B%24%42%39%3E +PASS U+6C60 池 %1B%24%42%43%53 +PASS U+6C62 汢 %1B%24%42%5D%69 +PASS U+6C68 汨 %1B%24%42%5D%71 +PASS U+6C6A 汪 %1B%24%42%5D%6A +FAIL U+6C6F 汯 %1B%24%42%7A%5E assert_equals: expected "%1B%24%42%7A%5E" but got "%26%23%32%37%37%35%39%3B" +PASS U+6C70 汰 %1B%24%42%42%41 +PASS U+6C72 汲 %1B%24%42%35%62 +PASS U+6C73 汳 %1B%24%42%5D%72 +PASS U+6C7A 決 %1B%24%42%37%68 +PASS U+6C7D 汽 %1B%24%42%35%25 +PASS U+6C7E 汾 %1B%24%42%5D%70 +PASS U+6C81 沁 %1B%24%42%5D%6E +PASS U+6C82 沂 %1B%24%42%5D%6B +PASS U+6C83 沃 %1B%24%42%4D%60 +FAIL U+6C86 沆 %1B%24%42%7A%5D assert_equals: expected "%1B%24%42%7A%5D" but got "%26%23%32%37%37%38%32%3B" +PASS U+6C88 沈 %1B%24%42%44%40 +PASS U+6C8C 沌 %1B%24%42%46%59 +PASS U+6C8D 沍 %1B%24%42%5D%6C +PASS U+6C90 沐 %1B%24%42%5D%74 +PASS U+6C92 沒 %1B%24%42%5D%73 +PASS U+6C93 沓 %1B%24%42%37%23 +PASS U+6C96 沖 %1B%24%42%32%2D +PASS U+6C99 沙 %1B%24%42%3A%3B +PASS U+6C9A 沚 %1B%24%42%5D%6D +PASS U+6C9B 沛 %1B%24%42%5D%6F +PASS U+6CA1 没 %1B%24%42%4B%57 +PASS U+6CA2 沢 %1B%24%42%42%74 +PASS U+6CAB 沫 %1B%24%42%4B%77 +PASS U+6CAE 沮 %1B%24%42%5D%7C +PASS U+6CB1 沱 %1B%24%42%5D%7D +PASS U+6CB3 河 %1B%24%42%32%4F +PASS U+6CB8 沸 %1B%24%42%4A%28 +PASS U+6CB9 油 %1B%24%42%4C%7D +PASS U+6CBA 沺 %1B%24%42%5E%21 +PASS U+6CBB 治 %1B%24%42%3C%23 +PASS U+6CBC 沼 %1B%24%42%3E%42 +PASS U+6CBD 沽 %1B%24%42%5D%78 +PASS U+6CBE 沾 %1B%24%42%5D%7E +PASS U+6CBF 沿 %1B%24%42%31%68 +PASS U+6CC1 況 %1B%24%42%36%37 +PASS U+6CC4 泄 %1B%24%42%5D%75 +PASS U+6CC5 泅 %1B%24%42%5D%7A +PASS U+6CC9 泉 %1B%24%42%40%74 +PASS U+6CCA 泊 %1B%24%42%47%71 +PASS U+6CCC 泌 %1B%24%42%48%67 +PASS U+6CD3 泓 %1B%24%42%5D%77 +PASS U+6CD5 法 %1B%24%42%4B%21 +PASS U+6CD7 泗 %1B%24%42%5D%79 +PASS U+6CD9 泙 %1B%24%42%5E%24 +FAIL U+6CDA 泚 %1B%24%42%7A%5F assert_equals: expected "%1B%24%42%7A%5F" but got "%26%23%32%37%38%36%36%3B" +PASS U+6CDB 泛 %1B%24%42%5E%22 +PASS U+6CDD 泝 %1B%24%42%5D%7B +PASS U+6CE1 泡 %1B%24%42%4B%22 +PASS U+6CE2 波 %1B%24%42%47%48 +PASS U+6CE3 泣 %1B%24%42%35%63 +PASS U+6CE5 泥 %1B%24%42%45%25 +PASS U+6CE8 注 %1B%24%42%43%6D +PASS U+6CEA 泪 %1B%24%42%5E%25 +PASS U+6CEF 泯 %1B%24%42%5E%23 +PASS U+6CF0 泰 %1B%24%42%42%59 +PASS U+6CF1 泱 %1B%24%42%5D%76 +PASS U+6CF3 泳 %1B%24%42%31%4B +FAIL U+6D04 洄 %1B%24%42%7A%60 assert_equals: expected "%1B%24%42%7A%60" but got "%26%23%32%37%39%30%38%3B" +PASS U+6D0B 洋 %1B%24%42%4D%4E +PASS U+6D0C 洌 %1B%24%42%5E%30 +PASS U+6D12 洒 %1B%24%42%5E%2F +PASS U+6D17 洗 %1B%24%42%40%76 +PASS U+6D19 洙 %1B%24%42%5E%2C +PASS U+6D1B 洛 %1B%24%42%4D%6C +PASS U+6D1E 洞 %1B%24%42%46%36 +PASS U+6D1F 洟 %1B%24%42%5E%26 +PASS U+6D25 津 %1B%24%42%44%45 +PASS U+6D29 洩 %1B%24%42%31%4C +PASS U+6D2A 洪 %1B%24%42%39%3F +PASS U+6D2B 洫 %1B%24%42%5E%29 +PASS U+6D32 洲 %1B%24%42%3D%27 +PASS U+6D33 洳 %1B%24%42%5E%2E +PASS U+6D35 洵 %1B%24%42%5E%2D +PASS U+6D36 洶 %1B%24%42%5E%28 +PASS U+6D38 洸 %1B%24%42%5E%2B +PASS U+6D3B 活 %1B%24%42%33%68 +PASS U+6D3D 洽 %1B%24%42%5E%2A +PASS U+6D3E 派 %1B%24%42%47%49 +PASS U+6D41 流 %1B%24%42%4E%2E +PASS U+6D44 浄 %1B%24%42%3E%74 +PASS U+6D45 浅 %1B%24%42%40%75 +PASS U+6D59 浙 %1B%24%42%5E%36 +PASS U+6D5A 浚 %1B%24%42%5E%34 +PASS U+6D5C 浜 %1B%24%42%49%4D +PASS U+6D63 浣 %1B%24%42%5E%31 +PASS U+6D64 浤 %1B%24%42%5E%33 +PASS U+6D66 浦 %1B%24%42%31%3A +PASS U+6D69 浩 %1B%24%42%39%40 +PASS U+6D6A 浪 %1B%24%42%4F%32 +PASS U+6D6C 浬 %1B%24%42%33%3D +PASS U+6D6E 浮 %1B%24%42%49%62 +FAIL U+6D6F 浯 %1B%24%42%7A%62 assert_equals: expected "%1B%24%42%7A%62" but got "%26%23%32%38%30%31%35%3B" +PASS U+6D74 浴 %1B%24%42%4D%61 +PASS U+6D77 海 %1B%24%42%33%24 +PASS U+6D78 浸 %1B%24%42%3F%3B +PASS U+6D79 浹 %1B%24%42%5E%35 +PASS U+6D85 涅 %1B%24%42%5E%3A +FAIL U+6D87 涇 %1B%24%42%7A%61 assert_equals: expected "%1B%24%42%7A%61" but got "%26%23%32%38%30%33%39%3B" +PASS U+6D88 消 %1B%24%42%3E%43 +PASS U+6D8C 涌 %1B%24%42%4D%30 +PASS U+6D8E 涎 %1B%24%42%5E%37 +PASS U+6D93 涓 %1B%24%42%5E%32 +PASS U+6D95 涕 %1B%24%42%5E%38 +FAIL U+6D96 涖 %1B%24%42%7A%63 assert_equals: expected "%1B%24%42%7A%63" but got "%26%23%32%38%30%35%34%3B" +PASS U+6D99 涙 %1B%24%42%4E%5E +PASS U+6D9B 涛 %1B%24%42%45%73 +PASS U+6D9C 涜 %1B%24%42%46%42 +FAIL U+6DAC 涬 %1B%24%42%7A%64 assert_equals: expected "%1B%24%42%7A%64" but got "%26%23%32%38%30%37%36%3B" +PASS U+6DAF 涯 %1B%24%42%33%36 +PASS U+6DB2 液 %1B%24%42%31%55 +PASS U+6DB5 涵 %1B%24%42%5E%3E +PASS U+6DB8 涸 %1B%24%42%5E%41 +PASS U+6DBC 涼 %1B%24%42%4E%43 +PASS U+6DC0 淀 %1B%24%42%4D%64 +PASS U+6DC5 淅 %1B%24%42%5E%48 +PASS U+6DC6 淆 %1B%24%42%5E%42 +PASS U+6DC7 淇 %1B%24%42%5E%3F +PASS U+6DCB 淋 %1B%24%42%4E%54 +PASS U+6DCC 淌 %1B%24%42%5E%45 +FAIL U+6DCF 淏 %1B%24%42%7A%65 assert_equals: expected "%1B%24%42%7A%65" but got "%26%23%32%38%31%31%31%3B" +PASS U+6DD1 淑 %1B%24%42%3D%4A +PASS U+6DD2 淒 %1B%24%42%5E%47 +PASS U+6DD5 淕 %1B%24%42%5E%4C +PASS U+6DD8 淘 %1B%24%42%45%71 +PASS U+6DD9 淙 %1B%24%42%5E%4A +PASS U+6DDE 淞 %1B%24%42%5E%44 +PASS U+6DE1 淡 %1B%24%42%43%38 +PASS U+6DE4 淤 %1B%24%42%5E%4B +PASS U+6DE6 淦 %1B%24%42%5E%40 +PASS U+6DE8 淨 %1B%24%42%5E%46 +PASS U+6DEA 淪 %1B%24%42%5E%4D +PASS U+6DEB 淫 %1B%24%42%30%7C +PASS U+6DEC 淬 %1B%24%42%5E%43 +PASS U+6DEE 淮 %1B%24%42%5E%4E +PASS U+6DF1 深 %1B%24%42%3F%3C +FAIL U+6DF2 淲 %1B%24%42%7A%67 assert_equals: expected "%1B%24%42%7A%67" but got "%26%23%32%38%31%34%36%3B" +PASS U+6DF3 淳 %1B%24%42%3D%5F +PASS U+6DF5 淵 %1B%24%42%4A%25 +PASS U+6DF7 混 %1B%24%42%3A%2E +FAIL U+6DF8 淸 %1B%24%42%7A%66 assert_equals: expected "%1B%24%42%7A%66" but got "%26%23%32%38%31%35%32%3B" +PASS U+6DF9 淹 %1B%24%42%5E%3B +PASS U+6DFA 淺 %1B%24%42%5E%49 +PASS U+6DFB 添 %1B%24%42%45%3A +FAIL U+6DFC 淼 %1B%24%42%7A%68 assert_equals: expected "%1B%24%42%7A%68" but got "%26%23%32%38%31%35%36%3B" +PASS U+6E05 清 %1B%24%42%40%36 +PASS U+6E07 渇 %1B%24%42%33%69 +PASS U+6E08 済 %1B%24%42%3A%51 +PASS U+6E09 渉 %1B%24%42%3E%44 +PASS U+6E0A 渊 %1B%24%42%5E%3D +PASS U+6E0B 渋 %1B%24%42%3D%42 +PASS U+6E13 渓 %1B%24%42%37%4C +PASS U+6E15 渕 %1B%24%42%5E%3C +PASS U+6E19 渙 %1B%24%42%5E%52 +PASS U+6E1A 渚 %1B%24%42%3D%6D +PASS U+6E1B 減 %1B%24%42%38%3A +PASS U+6E1D 渝 %1B%24%42%5E%61 +PASS U+6E1F 渟 %1B%24%42%5E%5B +PASS U+6E20 渠 %1B%24%42%35%74 +PASS U+6E21 渡 %1B%24%42%45%4F +PASS U+6E23 渣 %1B%24%42%5E%56 +PASS U+6E24 渤 %1B%24%42%5E%5F +PASS U+6E25 渥 %1B%24%42%30%2F +PASS U+6E26 渦 %1B%24%42%31%32 +FAIL U+6E27 渧 %1B%24%42%7A%6B assert_equals: expected "%1B%24%42%7A%6B" but got "%26%23%32%38%31%39%39%3B" +PASS U+6E29 温 %1B%24%42%32%39 +PASS U+6E2B 渫 %1B%24%42%5E%58 +PASS U+6E2C 測 %1B%24%42%42%2C +PASS U+6E2D 渭 %1B%24%42%5E%4F +PASS U+6E2E 渮 %1B%24%42%5E%51 +PASS U+6E2F 港 %1B%24%42%39%41 +PASS U+6E38 游 %1B%24%42%5E%62 +FAIL U+6E39 渹 %1B%24%42%7A%69 assert_equals: expected "%1B%24%42%7A%69" but got "%26%23%32%38%32%31%37%3B" +PASS U+6E3A 渺 %1B%24%42%5E%5D +FAIL U+6E3C 渼 %1B%24%42%7A%6C assert_equals: expected "%1B%24%42%7A%6C" but got "%26%23%32%38%32%32%30%3B" +PASS U+6E3E 渾 %1B%24%42%5E%55 +PASS U+6E43 湃 %1B%24%42%5E%5C +PASS U+6E4A 湊 %1B%24%42%4C%2B +PASS U+6E4D 湍 %1B%24%42%5E%5A +PASS U+6E4E 湎 %1B%24%42%5E%5E +PASS U+6E56 湖 %1B%24%42%38%50 +PASS U+6E58 湘 %1B%24%42%3E%45 +PASS U+6E5B 湛 %1B%24%42%43%39 +FAIL U+6E5C 湜 %1B%24%42%7A%6A assert_equals: expected "%1B%24%42%7A%6A" but got "%26%23%32%38%32%35%32%3B" +PASS U+6E5F 湟 %1B%24%42%5E%54 +PASS U+6E67 湧 %1B%24%42%4D%2F +PASS U+6E6B 湫 %1B%24%42%5E%57 +PASS U+6E6E 湮 %1B%24%42%5E%50 +PASS U+6E6F 湯 %1B%24%42%45%72 +PASS U+6E72 湲 %1B%24%42%5E%53 +PASS U+6E76 湶 %1B%24%42%5E%59 +PASS U+6E7E 湾 %1B%24%42%4F%51 +PASS U+6E7F 湿 %1B%24%42%3C%3E +PASS U+6E80 満 %1B%24%42%4B%7E +PASS U+6E82 溂 %1B%24%42%5E%63 +PASS U+6E8C 溌 %1B%24%42%48%2E +PASS U+6E8F 溏 %1B%24%42%5E%6F +PASS U+6E90 源 %1B%24%42%38%3B +PASS U+6E96 準 %1B%24%42%3D%60 +PASS U+6E98 溘 %1B%24%42%5E%65 +PASS U+6E9C 溜 %1B%24%42%4E%2F +PASS U+6E9D 溝 %1B%24%42%39%42 +PASS U+6E9F 溟 %1B%24%42%5E%72 +PASS U+6EA2 溢 %1B%24%42%30%6E +PASS U+6EA5 溥 %1B%24%42%5E%70 +PASS U+6EAA 溪 %1B%24%42%5E%64 +PASS U+6EAF 溯 %1B%24%42%5E%6A +PASS U+6EB2 溲 %1B%24%42%5E%6C +PASS U+6EB6 溶 %1B%24%42%4D%4F +PASS U+6EB7 溷 %1B%24%42%5E%67 +PASS U+6EBA 溺 %1B%24%42%45%2E +PASS U+6EBD 溽 %1B%24%42%5E%69 +FAIL U+6EBF 溿 %1B%24%42%7A%6D assert_equals: expected "%1B%24%42%7A%6D" but got "%26%23%32%38%33%35%31%3B" +PASS U+6EC2 滂 %1B%24%42%5E%71 +PASS U+6EC4 滄 %1B%24%42%5E%6B +PASS U+6EC5 滅 %1B%24%42%4C%47 +PASS U+6EC9 滉 %1B%24%42%5E%66 +PASS U+6ECB 滋 %1B%24%42%3C%22 +PASS U+6ECC 滌 %1B%24%42%5E%7E +PASS U+6ED1 滑 %1B%24%42%33%6A +PASS U+6ED3 滓 %1B%24%42%5E%68 +PASS U+6ED4 滔 %1B%24%42%5E%6D +PASS U+6ED5 滕 %1B%24%42%5E%6E +PASS U+6EDD 滝 %1B%24%42%42%6C +PASS U+6EDE 滞 %1B%24%42%42%5A +PASS U+6EEC 滬 %1B%24%42%5E%76 +PASS U+6EEF 滯 %1B%24%42%5E%7C +PASS U+6EF2 滲 %1B%24%42%5E%7A +PASS U+6EF4 滴 %1B%24%42%45%29 +PASS U+6EF7 滷 %1B%24%42%5F%23 +PASS U+6EF8 滸 %1B%24%42%5E%77 +PASS U+6EFE 滾 %1B%24%42%5E%78 +PASS U+6EFF 滿 %1B%24%42%5E%60 +PASS U+6F01 漁 %1B%24%42%35%79 +PASS U+6F02 漂 %1B%24%42%49%3A +PASS U+6F06 漆 %1B%24%42%3C%3F +PASS U+6F09 漉 %1B%24%42%39%77 +PASS U+6F0F 漏 %1B%24%42%4F%33 +PASS U+6F11 漑 %1B%24%42%5E%74 +PASS U+6F13 漓 %1B%24%42%5F%22 +PASS U+6F14 演 %1B%24%42%31%69 +PASS U+6F15 漕 %1B%24%42%41%66 +PASS U+6F20 漠 %1B%24%42%47%79 +PASS U+6F22 漢 %1B%24%42%34%41 +PASS U+6F23 漣 %1B%24%42%4E%7A +PASS U+6F2B 漫 %1B%24%42%4C%21 +PASS U+6F2C 漬 %1B%24%42%44%52 +PASS U+6F31 漱 %1B%24%42%5E%7B +PASS U+6F32 漲 %1B%24%42%5E%7D +PASS U+6F38 漸 %1B%24%42%41%32 +PASS U+6F3E 漾 %1B%24%42%5F%21 +PASS U+6F3F 漿 %1B%24%42%5E%79 +PASS U+6F41 潁 %1B%24%42%5E%73 +PASS U+6F45 潅 %1B%24%42%34%43 +PASS U+6F54 潔 %1B%24%42%37%69 +PASS U+6F58 潘 %1B%24%42%5F%2F +PASS U+6F5B 潛 %1B%24%42%5F%2A +PASS U+6F5C 潜 %1B%24%42%40%78 +PASS U+6F5F 潟 %1B%24%42%33%63 +PASS U+6F64 潤 %1B%24%42%3D%61 +PASS U+6F66 潦 %1B%24%42%5F%33 +PASS U+6F6D 潭 %1B%24%42%5F%2C +PASS U+6F6E 潮 %1B%24%42%44%2C +PASS U+6F6F 潯 %1B%24%42%5F%29 +PASS U+6F70 潰 %1B%24%42%44%59 +PASS U+6F74 潴 %1B%24%42%5F%4C +PASS U+6F78 潸 %1B%24%42%5F%26 +PASS U+6F7A 潺 %1B%24%42%5F%25 +PASS U+6F7C 潼 %1B%24%42%5F%2E +PASS U+6F80 澀 %1B%24%42%5F%28 +PASS U+6F81 澁 %1B%24%42%5F%27 +PASS U+6F82 澂 %1B%24%42%5F%2D +PASS U+6F84 澄 %1B%24%42%40%21 +PASS U+6F86 澆 %1B%24%42%5F%24 +FAIL U+6F88 澈 %1B%24%42%7A%6E assert_equals: expected "%1B%24%42%7A%6E" but got "%26%23%32%38%35%35%32%3B" +PASS U+6F8E 澎 %1B%24%42%5F%30 +PASS U+6F91 澑 %1B%24%42%5F%31 +PASS U+6F97 澗 %1B%24%42%34%42 +PASS U+6FA1 澡 %1B%24%42%5F%36 +PASS U+6FA3 澣 %1B%24%42%5F%35 +PASS U+6FA4 澤 %1B%24%42%5F%37 +PASS U+6FAA 澪 %1B%24%42%5F%3A +PASS U+6FB1 澱 %1B%24%42%45%43 +PASS U+6FB3 澳 %1B%24%42%5F%34 +FAIL U+6FB5 澵 %1B%24%42%7A%6F assert_equals: expected "%1B%24%42%7A%6F" but got "%26%23%32%38%35%39%37%3B" +PASS U+6FB9 澹 %1B%24%42%5F%38 +PASS U+6FC0 激 %1B%24%42%37%63 +PASS U+6FC1 濁 %1B%24%42%42%79 +PASS U+6FC2 濂 %1B%24%42%5F%32 +PASS U+6FC3 濃 %1B%24%42%47%3B +PASS U+6FC6 濆 %1B%24%42%5F%39 +PASS U+6FD4 濔 %1B%24%42%5F%3E +PASS U+6FD5 濕 %1B%24%42%5F%3C +PASS U+6FD8 濘 %1B%24%42%5F%3F +PASS U+6FDB 濛 %1B%24%42%5F%42 +PASS U+6FDF 濟 %1B%24%42%5F%3B +PASS U+6FE0 濠 %1B%24%42%39%6A +PASS U+6FE1 濡 %1B%24%42%47%28 +PASS U+6FE4 濤 %1B%24%42%5E%39 +PASS U+6FEB 濫 %1B%24%42%4D%74 +PASS U+6FEC 濬 %1B%24%42%5F%3D +PASS U+6FEE 濮 %1B%24%42%5F%41 +PASS U+6FEF 濯 %1B%24%42%42%75 +PASS U+6FF1 濱 %1B%24%42%5F%40 +PASS U+6FF3 濳 %1B%24%42%5F%2B +FAIL U+6FF5 濵 %1B%24%42%7A%70 assert_equals: expected "%1B%24%42%7A%70" but got "%26%23%32%38%36%36%31%3B" +PASS U+6FF6 濶 %1B%24%42%6F%69 +PASS U+6FFA 濺 %1B%24%42%5F%45 +PASS U+6FFE 濾 %1B%24%42%5F%49 +PASS U+7001 瀁 %1B%24%42%5F%47 +FAIL U+7005 瀅 %1B%24%42%7A%71 assert_equals: expected "%1B%24%42%7A%71" but got "%26%23%32%38%36%37%37%3B" +FAIL U+7007 瀇 %1B%24%42%7A%72 assert_equals: expected "%1B%24%42%7A%72" but got "%26%23%32%38%36%37%39%3B" +PASS U+7009 瀉 %1B%24%42%5F%43 +PASS U+700B 瀋 %1B%24%42%5F%44 +PASS U+700F 瀏 %1B%24%42%5F%48 +PASS U+7011 瀑 %1B%24%42%5F%46 +PASS U+7015 瀕 %1B%24%42%49%4E +PASS U+7018 瀘 %1B%24%42%5F%4E +PASS U+701A 瀚 %1B%24%42%5F%4B +PASS U+701B 瀛 %1B%24%42%5F%4A +PASS U+701D 瀝 %1B%24%42%5F%4D +PASS U+701E 瀞 %1B%24%42%46%54 +PASS U+701F 瀟 %1B%24%42%5F%4F +PASS U+7026 瀦 %1B%24%42%43%75 +PASS U+7027 瀧 %1B%24%42%42%6D +FAIL U+7028 瀨 %1B%24%42%7A%73 assert_equals: expected "%1B%24%42%7A%73" but got "%26%23%32%38%37%31%32%3B" +PASS U+702C 瀬 %1B%24%42%40%25 +PASS U+7030 瀰 %1B%24%42%5F%50 +PASS U+7032 瀲 %1B%24%42%5F%52 +PASS U+703E 瀾 %1B%24%42%5F%51 +PASS U+704C 灌 %1B%24%42%5E%75 +PASS U+7051 灑 %1B%24%42%5F%53 +PASS U+7058 灘 %1B%24%42%46%67 +PASS U+7063 灣 %1B%24%42%5F%54 +PASS U+706B 火 %1B%24%42%32%50 +PASS U+706F 灯 %1B%24%42%45%74 +PASS U+7070 灰 %1B%24%42%33%25 +PASS U+7078 灸 %1B%24%42%35%64 +PASS U+707C 灼 %1B%24%42%3C%5E +PASS U+707D 災 %1B%24%42%3A%52 +FAIL U+7085 炅 %1B%24%42%7A%74 assert_equals: expected "%1B%24%42%7A%74" but got "%26%23%32%38%38%30%35%3B" +PASS U+7089 炉 %1B%24%42%4F%27 +PASS U+708A 炊 %1B%24%42%3F%66 +PASS U+708E 炎 %1B%24%42%31%6A +PASS U+7092 炒 %1B%24%42%5F%56 +PASS U+7099 炙 %1B%24%42%5F%55 +FAIL U+70AB 炫 %1B%24%42%7A%75 assert_equals: expected "%1B%24%42%7A%75" but got "%26%23%32%38%38%34%33%3B" +PASS U+70AC 炬 %1B%24%42%5F%59 +PASS U+70AD 炭 %1B%24%42%43%3A +PASS U+70AE 炮 %1B%24%42%5F%5C +PASS U+70AF 炯 %1B%24%42%5F%57 +PASS U+70B3 炳 %1B%24%42%5F%5B +PASS U+70B8 炸 %1B%24%42%5F%5A +PASS U+70B9 点 %1B%24%42%45%40 +PASS U+70BA 為 %1B%24%42%30%59 +FAIL U+70BB 炻 %1B%24%42%79%27 assert_equals: expected "%1B%24%42%79%27" but got "%26%23%32%38%38%35%39%3B" +PASS U+70C8 烈 %1B%24%42%4E%75 +PASS U+70CB 烋 %1B%24%42%5F%5E +PASS U+70CF 烏 %1B%24%42%31%28 +PASS U+70D9 烙 %1B%24%42%5F%60 +PASS U+70DD 烝 %1B%24%42%5F%5F +PASS U+70DF 烟 %1B%24%42%5F%5D +PASS U+70F1 烱 %1B%24%42%5F%58 +PASS U+70F9 烹 %1B%24%42%4B%23 +PASS U+70FD 烽 %1B%24%42%5F%62 +FAIL U+7104 焄 %1B%24%42%7A%77 assert_equals: expected "%1B%24%42%7A%77" but got "%26%23%32%38%39%33%32%3B" +PASS U+7109 焉 %1B%24%42%5F%61 +FAIL U+710F 焏 %1B%24%42%7A%76 assert_equals: expected "%1B%24%42%7A%76" but got "%26%23%32%38%39%34%33%3B" +PASS U+7114 焔 %1B%24%42%31%6B +PASS U+7119 焙 %1B%24%42%5F%64 +PASS U+711A 焚 %1B%24%42%4A%32 +PASS U+711C 焜 %1B%24%42%5F%63 +PASS U+7121 無 %1B%24%42%4C%35 +PASS U+7126 焦 %1B%24%42%3E%47 +PASS U+7136 然 %1B%24%42%41%33 +PASS U+713C 焼 %1B%24%42%3E%46 +FAIL U+7146 煆 %1B%24%42%7A%79 assert_equals: expected "%1B%24%42%7A%79" but got "%26%23%32%38%39%39%38%3B" +FAIL U+7147 煇 %1B%24%42%7A%7A assert_equals: expected "%1B%24%42%7A%7A" but got "%26%23%32%38%39%39%39%3B" +PASS U+7149 煉 %1B%24%42%4E%7B +PASS U+714C 煌 %1B%24%42%5F%6A +PASS U+714E 煎 %1B%24%42%40%79 +PASS U+7155 煕 %1B%24%42%5F%66 +PASS U+7156 煖 %1B%24%42%5F%6B +PASS U+7159 煙 %1B%24%42%31%6C +FAIL U+715C 煜 %1B%24%42%7A%78 assert_equals: expected "%1B%24%42%7A%78" but got "%26%23%32%39%30%32%30%3B" +PASS U+7162 煢 %1B%24%42%5F%69 +PASS U+7164 煤 %1B%24%42%47%61 +PASS U+7165 煥 %1B%24%42%5F%65 +PASS U+7166 煦 %1B%24%42%5F%68 +PASS U+7167 照 %1B%24%42%3E%48 +PASS U+7169 煩 %1B%24%42%48%51 +PASS U+716C 煬 %1B%24%42%5F%6C +PASS U+716E 煮 %1B%24%42%3C%51 +PASS U+717D 煽 %1B%24%42%40%7A +PASS U+7184 熄 %1B%24%42%5F%6F +PASS U+7188 熈 %1B%24%42%5F%67 +PASS U+718A 熊 %1B%24%42%37%27 +PASS U+718F 熏 %1B%24%42%5F%6D +PASS U+7194 熔 %1B%24%42%4D%50 +PASS U+7195 熕 %1B%24%42%5F%70 +PASS U+7199 熙 %1B%24%42%74%26 +PASS U+719F 熟 %1B%24%42%3D%4F +PASS U+71A8 熨 %1B%24%42%5F%71 +PASS U+71AC 熬 %1B%24%42%5F%72 +PASS U+71B1 熱 %1B%24%42%47%2E +PASS U+71B9 熹 %1B%24%42%5F%74 +PASS U+71BE 熾 %1B%24%42%5F%75 +FAIL U+71C1 燁 %1B%24%42%7A%7C assert_equals: expected "%1B%24%42%7A%7C" but got "%26%23%32%39%31%32%31%3B" +PASS U+71C3 燃 %1B%24%42%47%33 +PASS U+71C8 燈 %1B%24%42%45%75 +PASS U+71C9 燉 %1B%24%42%5F%77 +PASS U+71CE 燎 %1B%24%42%5F%79 +PASS U+71D0 燐 %1B%24%42%4E%55 +PASS U+71D2 燒 %1B%24%42%5F%76 +PASS U+71D4 燔 %1B%24%42%5F%78 +PASS U+71D5 燕 %1B%24%42%31%6D +PASS U+71D7 燗 %1B%24%42%5F%73 +PASS U+71DF 營 %1B%24%42%53%5B +PASS U+71E0 燠 %1B%24%42%5F%7A +PASS U+71E5 燥 %1B%24%42%41%67 +PASS U+71E6 燦 %1B%24%42%3B%38 +PASS U+71E7 燧 %1B%24%42%5F%7C +PASS U+71EC 燬 %1B%24%42%5F%7B +PASS U+71ED 燭 %1B%24%42%3F%24 +PASS U+71EE 燮 %1B%24%42%52%59 +PASS U+71F5 燵 %1B%24%42%5F%7D +PASS U+71F9 燹 %1B%24%42%60%21 +PASS U+71FB 燻 %1B%24%42%5F%6E +PASS U+71FC 燼 %1B%24%42%5F%7E +FAIL U+71FE 燾 %1B%24%42%7A%7D assert_equals: expected "%1B%24%42%7A%7D" but got "%26%23%32%39%31%38%32%3B" +PASS U+71FF 燿 %1B%24%42%60%22 +PASS U+7206 爆 %1B%24%42%47%7A +PASS U+720D 爍 %1B%24%42%60%23 +PASS U+7210 爐 %1B%24%42%60%24 +PASS U+721B 爛 %1B%24%42%60%25 +PASS U+7228 爨 %1B%24%42%60%26 +PASS U+722A 爪 %1B%24%42%44%5E +PASS U+722C 爬 %1B%24%42%60%28 +PASS U+722D 爭 %1B%24%42%60%27 +PASS U+7230 爰 %1B%24%42%60%29 +PASS U+7232 爲 %1B%24%42%60%2A +PASS U+7235 爵 %1B%24%42%3C%5F +PASS U+7236 父 %1B%24%42%49%63 +PASS U+723A 爺 %1B%24%42%4C%6C +PASS U+723B 爻 %1B%24%42%60%2B +PASS U+723C 爼 %1B%24%42%60%2C +PASS U+723D 爽 %1B%24%42%41%56 +PASS U+723E 爾 %1B%24%42%3C%24 +PASS U+723F 爿 %1B%24%42%60%2D +PASS U+7240 牀 %1B%24%42%60%2E +PASS U+7246 牆 %1B%24%42%60%2F +PASS U+7247 片 %1B%24%42%4A%52 +PASS U+7248 版 %1B%24%42%48%47 +PASS U+724B 牋 %1B%24%42%60%30 +PASS U+724C 牌 %1B%24%42%47%57 +PASS U+7252 牒 %1B%24%42%44%2D +PASS U+7258 牘 %1B%24%42%60%31 +PASS U+7259 牙 %1B%24%42%32%67 +PASS U+725B 牛 %1B%24%42%35%6D +PASS U+725D 牝 %1B%24%42%4C%46 +PASS U+725F 牟 %1B%24%42%4C%36 +PASS U+7261 牡 %1B%24%42%32%34 +PASS U+7262 牢 %1B%24%42%4F%34 +PASS U+7267 牧 %1B%24%42%4B%52 +PASS U+7269 物 %1B%24%42%4A%2A +PASS U+7272 牲 %1B%24%42%40%37 +PASS U+7274 牴 %1B%24%42%60%32 +PASS U+7279 特 %1B%24%42%46%43 +PASS U+727D 牽 %1B%24%42%38%23 +PASS U+727E 牾 %1B%24%42%60%33 +PASS U+7280 犀 %1B%24%42%3A%54 +PASS U+7281 犁 %1B%24%42%60%35 +PASS U+7282 犂 %1B%24%42%60%34 +PASS U+7287 犇 %1B%24%42%60%36 +PASS U+7292 犒 %1B%24%42%60%37 +PASS U+7296 犖 %1B%24%42%60%38 +PASS U+72A0 犠 %1B%24%42%35%3E +PASS U+72A2 犢 %1B%24%42%60%39 +PASS U+72A7 犧 %1B%24%42%60%3A +PASS U+72AC 犬 %1B%24%42%38%24 +PASS U+72AF 犯 %1B%24%42%48%48 +FAIL U+72B1 犱 %1B%24%42%7A%7E assert_equals: expected "%1B%24%42%7A%7E" but got "%26%23%32%39%33%36%31%3B" +PASS U+72B2 犲 %1B%24%42%60%3C +PASS U+72B6 状 %1B%24%42%3E%75 +PASS U+72B9 犹 %1B%24%42%60%3B +FAIL U+72BE 犾 %1B%24%42%7B%21 assert_equals: expected "%1B%24%42%7B%21" but got "%26%23%32%39%33%37%34%3B" +PASS U+72C2 狂 %1B%24%42%36%38 +PASS U+72C3 狃 %1B%24%42%60%3D +PASS U+72C4 狄 %1B%24%42%60%3F +PASS U+72C6 狆 %1B%24%42%60%3E +PASS U+72CE 狎 %1B%24%42%60%40 +PASS U+72D0 狐 %1B%24%42%38%51 +PASS U+72D2 狒 %1B%24%42%60%41 +PASS U+72D7 狗 %1B%24%42%36%69 +PASS U+72D9 狙 %1B%24%42%41%40 +PASS U+72DB 狛 %1B%24%42%39%7D +PASS U+72E0 狠 %1B%24%42%60%43 +PASS U+72E1 狡 %1B%24%42%60%44 +PASS U+72E2 狢 %1B%24%42%60%42 +PASS U+72E9 狩 %1B%24%42%3C%6D +PASS U+72EC 独 %1B%24%42%46%48 +PASS U+72ED 狭 %1B%24%42%36%39 +PASS U+72F7 狷 %1B%24%42%60%46 +PASS U+72F8 狸 %1B%24%42%43%2C +PASS U+72F9 狹 %1B%24%42%60%45 +PASS U+72FC 狼 %1B%24%42%4F%35 +PASS U+72FD 狽 %1B%24%42%47%62 +PASS U+730A 猊 %1B%24%42%60%49 +PASS U+7316 猖 %1B%24%42%60%4B +PASS U+7317 猗 %1B%24%42%60%48 +PASS U+731B 猛 %1B%24%42%4C%54 +PASS U+731C 猜 %1B%24%42%60%4A +PASS U+731D 猝 %1B%24%42%60%4C +PASS U+731F 猟 %1B%24%42%4E%44 +FAIL U+7324 猤 %1B%24%42%7B%22 assert_equals: expected "%1B%24%42%7B%22" but got "%26%23%32%39%34%37%36%3B" +PASS U+7325 猥 %1B%24%42%60%50 +PASS U+7329 猩 %1B%24%42%60%4F +PASS U+732A 猪 %1B%24%42%43%76 +PASS U+732B 猫 %1B%24%42%47%2D +PASS U+732E 献 %1B%24%42%38%25 +PASS U+732F 猯 %1B%24%42%60%4E +PASS U+7334 猴 %1B%24%42%60%4D +PASS U+7336 猶 %1B%24%42%4D%31 +PASS U+7337 猷 %1B%24%42%4D%32 +PASS U+733E 猾 %1B%24%42%60%51 +PASS U+733F 猿 %1B%24%42%31%6E +PASS U+7344 獄 %1B%24%42%39%76 +PASS U+7345 獅 %1B%24%42%3B%62 +PASS U+734E 獎 %1B%24%42%60%52 +PASS U+734F 獏 %1B%24%42%60%53 +PASS U+7357 獗 %1B%24%42%60%55 +PASS U+7363 獣 %1B%24%42%3D%43 +PASS U+7368 獨 %1B%24%42%60%57 +PASS U+736A 獪 %1B%24%42%60%56 +PASS U+7370 獰 %1B%24%42%60%58 +PASS U+7372 獲 %1B%24%42%33%4D +PASS U+7375 獵 %1B%24%42%60%5A +FAIL U+7377 獷 %1B%24%42%7B%24 assert_equals: expected "%1B%24%42%7B%24" but got "%26%23%32%39%35%35%39%3B" +PASS U+7378 獸 %1B%24%42%60%59 +PASS U+737A 獺 %1B%24%42%60%5C +PASS U+737B 獻 %1B%24%42%60%5B +PASS U+7384 玄 %1B%24%42%38%3C +PASS U+7387 率 %1B%24%42%4E%28 +PASS U+7389 玉 %1B%24%42%36%4C +PASS U+738B 王 %1B%24%42%32%26 +PASS U+7396 玖 %1B%24%42%36%6A +PASS U+73A9 玩 %1B%24%42%34%61 +PASS U+73B2 玲 %1B%24%42%4E%68 +PASS U+73B3 玳 %1B%24%42%60%5E +PASS U+73BB 玻 %1B%24%42%60%60 +FAIL U+73BD 玽 %1B%24%42%7B%25 assert_equals: expected "%1B%24%42%7B%25" but got "%26%23%32%39%36%32%39%3B" +PASS U+73C0 珀 %1B%24%42%60%61 +PASS U+73C2 珂 %1B%24%42%32%51 +PASS U+73C8 珈 %1B%24%42%60%5D +FAIL U+73C9 珉 %1B%24%42%7B%26 assert_equals: expected "%1B%24%42%7B%26" but got "%26%23%32%39%36%34%31%3B" +PASS U+73CA 珊 %1B%24%42%3B%39 +PASS U+73CD 珍 %1B%24%42%44%41 +PASS U+73CE 珎 %1B%24%42%60%5F +FAIL U+73D2 珒 %1B%24%42%7B%29 assert_equals: expected "%1B%24%42%7B%29" but got "%26%23%32%39%36%35%30%3B" +FAIL U+73D6 珖 %1B%24%42%7B%27 assert_equals: expected "%1B%24%42%7B%27" but got "%26%23%32%39%36%35%34%3B" +PASS U+73DE 珞 %1B%24%42%60%64 +PASS U+73E0 珠 %1B%24%42%3C%6E +FAIL U+73E3 珣 %1B%24%42%7B%28 assert_equals: expected "%1B%24%42%7B%28" but got "%26%23%32%39%36%36%37%3B" +PASS U+73E5 珥 %1B%24%42%60%62 +PASS U+73EA 珪 %1B%24%42%37%3E +PASS U+73ED 班 %1B%24%42%48%49 +PASS U+73EE 珮 %1B%24%42%60%63 +PASS U+73F1 珱 %1B%24%42%60%7E +FAIL U+73F5 珵 %1B%24%42%7B%2B assert_equals: expected "%1B%24%42%7B%2B" but got "%26%23%32%39%36%38%35%3B" +PASS U+73F8 珸 %1B%24%42%60%69 +PASS U+73FE 現 %1B%24%42%38%3D +PASS U+7403 球 %1B%24%42%35%65 +PASS U+7405 琅 %1B%24%42%60%66 +PASS U+7406 理 %1B%24%42%4D%7D +FAIL U+7407 琇 %1B%24%42%7B%2A assert_equals: expected "%1B%24%42%7B%2A" but got "%26%23%32%39%37%30%33%3B" +PASS U+7409 琉 %1B%24%42%4E%30 +PASS U+7422 琢 %1B%24%42%42%76 +PASS U+7425 琥 %1B%24%42%60%68 +FAIL U+7426 琦 %1B%24%42%7B%2C assert_equals: expected "%1B%24%42%7B%2C" but got "%26%23%32%39%37%33%34%3B" +FAIL U+7429 琩 %1B%24%42%7B%2E assert_equals: expected "%1B%24%42%7B%2E" but got "%26%23%32%39%37%33%37%3B" +FAIL U+742A 琪 %1B%24%42%7B%2D assert_equals: expected "%1B%24%42%7B%2D" but got "%26%23%32%39%37%33%38%3B" +FAIL U+742E 琮 %1B%24%42%7B%2F assert_equals: expected "%1B%24%42%7B%2F" but got "%26%23%32%39%37%34%32%3B" +PASS U+7432 琲 %1B%24%42%60%6A +PASS U+7433 琳 %1B%24%42%4E%56 +PASS U+7434 琴 %1B%24%42%36%57 +PASS U+7435 琵 %1B%24%42%48%7C +PASS U+7436 琶 %1B%24%42%47%4A +PASS U+743A 琺 %1B%24%42%60%6B +PASS U+743F 琿 %1B%24%42%60%6D +PASS U+7441 瑁 %1B%24%42%60%70 +PASS U+7455 瑕 %1B%24%42%60%6C +PASS U+7459 瑙 %1B%24%42%60%6F +PASS U+745A 瑚 %1B%24%42%38%6A +PASS U+745B 瑛 %1B%24%42%31%4D +PASS U+745C 瑜 %1B%24%42%60%71 +PASS U+745E 瑞 %1B%24%42%3F%70 +PASS U+745F 瑟 %1B%24%42%60%6E +PASS U+7460 瑠 %1B%24%42%4E%5C +FAIL U+7462 瑢 %1B%24%42%7B%30 assert_equals: expected "%1B%24%42%7B%30" but got "%26%23%32%39%37%39%34%3B" +PASS U+7463 瑣 %1B%24%42%60%74 +PASS U+7464 瑤 %1B%24%42%74%24 +PASS U+7469 瑩 %1B%24%42%60%72 +PASS U+746A 瑪 %1B%24%42%60%75 +PASS U+746F 瑯 %1B%24%42%60%67 +PASS U+7470 瑰 %1B%24%42%60%73 +PASS U+7473 瑳 %1B%24%42%3A%3C +PASS U+7476 瑶 %1B%24%42%60%76 +PASS U+747E 瑾 %1B%24%42%60%77 +PASS U+7483 璃 %1B%24%42%4D%7E +FAIL U+7489 璉 %1B%24%42%7B%31 assert_equals: expected "%1B%24%42%7B%31" but got "%26%23%32%39%38%33%33%3B" +PASS U+748B 璋 %1B%24%42%60%78 +PASS U+749E 璞 %1B%24%42%60%79 +FAIL U+749F 璟 %1B%24%42%7B%32 assert_equals: expected "%1B%24%42%7B%32" but got "%26%23%32%39%38%35%35%3B" +PASS U+74A2 璢 %1B%24%42%60%65 +PASS U+74A7 璧 %1B%24%42%60%7A +PASS U+74B0 環 %1B%24%42%34%44 +PASS U+74BD 璽 %1B%24%42%3C%25 +PASS U+74CA 瓊 %1B%24%42%60%7B +PASS U+74CF 瓏 %1B%24%42%60%7C +PASS U+74D4 瓔 %1B%24%42%60%7D +PASS U+74DC 瓜 %1B%24%42%31%3B +PASS U+74E0 瓠 %1B%24%42%61%21 +PASS U+74E2 瓢 %1B%24%42%49%3B +PASS U+74E3 瓣 %1B%24%42%61%22 +PASS U+74E6 瓦 %1B%24%42%34%24 +PASS U+74E7 瓧 %1B%24%42%61%23 +PASS U+74E9 瓩 %1B%24%42%61%24 +PASS U+74EE 瓮 %1B%24%42%61%25 +PASS U+74F0 瓰 %1B%24%42%61%27 +PASS U+74F1 瓱 %1B%24%42%61%28 +PASS U+74F2 瓲 %1B%24%42%61%26 +PASS U+74F6 瓶 %1B%24%42%49%53 +PASS U+74F7 瓷 %1B%24%42%61%2A +PASS U+74F8 瓸 %1B%24%42%61%29 +FAIL U+7501 甁 %1B%24%42%7B%33 assert_equals: expected "%1B%24%42%7B%33" but got "%26%23%32%39%39%35%33%3B" +PASS U+7503 甃 %1B%24%42%61%2C +PASS U+7504 甄 %1B%24%42%61%2B +PASS U+7505 甅 %1B%24%42%61%2D +PASS U+750C 甌 %1B%24%42%61%2E +PASS U+750D 甍 %1B%24%42%61%30 +PASS U+750E 甎 %1B%24%42%61%2F +PASS U+7511 甑 %1B%24%42%39%79 +PASS U+7513 甓 %1B%24%42%61%32 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_4001-5000-expected.txt new file mode 100644 index 0000000..afcc600 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_4001-5000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+7515 甕 %1B%24%42%61%31 +PASS U+7518 甘 %1B%24%42%34%45 +PASS U+751A 甚 %1B%24%42%3F%53 +PASS U+751C 甜 %1B%24%42%45%3C +PASS U+751E 甞 %1B%24%42%61%33 +PASS U+751F 生 %1B%24%42%40%38 +PASS U+7523 産 %1B%24%42%3B%3A +PASS U+7525 甥 %1B%24%42%31%79 +PASS U+7526 甦 %1B%24%42%61%34 +PASS U+7528 用 %1B%24%42%4D%51 +PASS U+752B 甫 %1B%24%42%4A%63 +PASS U+752C 甬 %1B%24%42%61%35 +FAIL U+752F 甯 %1B%24%42%79%6C assert_equals: expected "%1B%24%42%79%6C" but got "%26%23%32%39%39%39%39%3B" +PASS U+7530 田 %1B%24%42%45%44 +PASS U+7531 由 %1B%24%42%4D%33 +PASS U+7532 甲 %1B%24%42%39%43 +PASS U+7533 申 %1B%24%42%3F%3D +PASS U+7537 男 %1B%24%42%43%4B +PASS U+7538 甸 %1B%24%42%52%34 +PASS U+753A 町 %1B%24%42%44%2E +PASS U+753B 画 %1B%24%42%32%68 +PASS U+753C 甼 %1B%24%42%61%36 +PASS U+7544 畄 %1B%24%42%61%37 +PASS U+7546 畆 %1B%24%42%61%3C +PASS U+7549 畉 %1B%24%42%61%3A +PASS U+754A 畊 %1B%24%42%61%39 +PASS U+754B 畋 %1B%24%42%5A%42 +PASS U+754C 界 %1B%24%42%33%26 +PASS U+754D 畍 %1B%24%42%61%38 +PASS U+754F 畏 %1B%24%42%30%5A +PASS U+7551 畑 %1B%24%42%48%2A +PASS U+7554 畔 %1B%24%42%48%4A +PASS U+7559 留 %1B%24%42%4E%31 +PASS U+755A 畚 %1B%24%42%61%3D +PASS U+755B 畛 %1B%24%42%61%3B +PASS U+755C 畜 %1B%24%42%43%5C +PASS U+755D 畝 %1B%24%42%40%26 +PASS U+7560 畠 %1B%24%42%48%2B +PASS U+7562 畢 %1B%24%42%49%2D +PASS U+7564 畤 %1B%24%42%61%3F +PASS U+7565 略 %1B%24%42%4E%2C +PASS U+7566 畦 %1B%24%42%37%4D +PASS U+7567 畧 %1B%24%42%61%40 +PASS U+7569 畩 %1B%24%42%61%3E +PASS U+756A 番 %1B%24%42%48%56 +PASS U+756B 畫 %1B%24%42%61%41 +PASS U+756D 畭 %1B%24%42%61%42 +FAIL U+756F 畯 %1B%24%42%7B%34 assert_equals: expected "%1B%24%42%7B%34" but got "%26%23%33%30%30%36%33%3B" +PASS U+7570 異 %1B%24%42%30%5B +PASS U+7573 畳 %1B%24%42%3E%76 +PASS U+7574 畴 %1B%24%42%61%47 +PASS U+7576 當 %1B%24%42%61%44 +PASS U+7577 畷 %1B%24%42%46%6D +PASS U+7578 畸 %1B%24%42%61%43 +PASS U+757F 畿 %1B%24%42%35%26 +PASS U+7582 疂 %1B%24%42%61%4A +PASS U+7586 疆 %1B%24%42%61%45 +PASS U+7587 疇 %1B%24%42%61%46 +PASS U+7589 疉 %1B%24%42%61%49 +PASS U+758A 疊 %1B%24%42%61%48 +PASS U+758B 疋 %1B%24%42%49%25 +PASS U+758E 疎 %1B%24%42%41%42 +PASS U+758F 疏 %1B%24%42%41%41 +PASS U+7591 疑 %1B%24%42%35%3F +PASS U+7594 疔 %1B%24%42%61%4B +PASS U+759A 疚 %1B%24%42%61%4C +PASS U+759D 疝 %1B%24%42%61%4D +PASS U+75A3 疣 %1B%24%42%61%4F +PASS U+75A5 疥 %1B%24%42%61%4E +PASS U+75AB 疫 %1B%24%42%31%56 +PASS U+75B1 疱 %1B%24%42%61%57 +PASS U+75B2 疲 %1B%24%42%48%68 +PASS U+75B3 疳 %1B%24%42%61%51 +PASS U+75B5 疵 %1B%24%42%61%53 +PASS U+75B8 疸 %1B%24%42%61%55 +PASS U+75B9 疹 %1B%24%42%3F%3E +PASS U+75BC 疼 %1B%24%42%61%56 +PASS U+75BD 疽 %1B%24%42%61%54 +PASS U+75BE 疾 %1B%24%42%3C%40 +PASS U+75C2 痂 %1B%24%42%61%50 +PASS U+75C3 痃 %1B%24%42%61%52 +PASS U+75C5 病 %1B%24%42%49%42 +PASS U+75C7 症 %1B%24%42%3E%49 +PASS U+75CA 痊 %1B%24%42%61%59 +PASS U+75CD 痍 %1B%24%42%61%58 +PASS U+75D2 痒 %1B%24%42%61%5A +PASS U+75D4 痔 %1B%24%42%3C%26 +PASS U+75D5 痕 %1B%24%42%3A%2F +PASS U+75D8 痘 %1B%24%42%45%77 +PASS U+75D9 痙 %1B%24%42%61%5B +PASS U+75DB 痛 %1B%24%42%44%4B +PASS U+75DE 痞 %1B%24%42%61%5D +PASS U+75E2 痢 %1B%24%42%4E%21 +PASS U+75E3 痣 %1B%24%42%61%5C +PASS U+75E9 痩 %1B%24%42%41%69 +PASS U+75F0 痰 %1B%24%42%61%62 +PASS U+75F2 痲 %1B%24%42%61%64 +PASS U+75F3 痳 %1B%24%42%61%65 +PASS U+75F4 痴 %1B%24%42%43%54 +PASS U+75FA 痺 %1B%24%42%61%63 +PASS U+75FC 痼 %1B%24%42%61%60 +PASS U+75FE 痾 %1B%24%42%61%5E +PASS U+75FF 痿 %1B%24%42%61%5F +PASS U+7601 瘁 %1B%24%42%61%61 +PASS U+7609 瘉 %1B%24%42%61%68 +PASS U+760B 瘋 %1B%24%42%61%66 +PASS U+760D 瘍 %1B%24%42%61%67 +PASS U+761F 瘟 %1B%24%42%61%69 +PASS U+7620 瘠 %1B%24%42%61%6B +PASS U+7621 瘡 %1B%24%42%61%6C +PASS U+7622 瘢 %1B%24%42%61%6D +PASS U+7624 瘤 %1B%24%42%61%6E +PASS U+7627 瘧 %1B%24%42%61%6A +PASS U+7630 瘰 %1B%24%42%61%70 +PASS U+7634 瘴 %1B%24%42%61%6F +PASS U+763B 瘻 %1B%24%42%61%71 +PASS U+7642 療 %1B%24%42%4E%45 +PASS U+7646 癆 %1B%24%42%61%74 +PASS U+7647 癇 %1B%24%42%61%72 +PASS U+7648 癈 %1B%24%42%61%73 +PASS U+764C 癌 %1B%24%42%34%62 +PASS U+7652 癒 %1B%24%42%4C%7E +PASS U+7656 癖 %1B%24%42%4A%4A +PASS U+7658 癘 %1B%24%42%61%76 +PASS U+765C 癜 %1B%24%42%61%75 +PASS U+7661 癡 %1B%24%42%61%77 +PASS U+7662 癢 %1B%24%42%61%78 +PASS U+7667 癧 %1B%24%42%61%7C +PASS U+7668 癨 %1B%24%42%61%79 +PASS U+7669 癩 %1B%24%42%61%7A +PASS U+766A 癪 %1B%24%42%61%7B +PASS U+766C 癬 %1B%24%42%61%7D +PASS U+7670 癰 %1B%24%42%61%7E +PASS U+7672 癲 %1B%24%42%62%21 +PASS U+7676 癶 %1B%24%42%62%22 +PASS U+7678 癸 %1B%24%42%62%23 +PASS U+767A 発 %1B%24%42%48%2F +PASS U+767B 登 %1B%24%42%45%50 +PASS U+767C 發 %1B%24%42%62%24 +PASS U+767D 白 %1B%24%42%47%72 +PASS U+767E 百 %1B%24%42%49%34 +PASS U+7680 皀 %1B%24%42%62%25 +FAIL U+7682 皂 %1B%24%42%7B%35 assert_equals: expected "%1B%24%42%7B%35" but got "%26%23%33%30%33%33%38%3B" +PASS U+7683 皃 %1B%24%42%62%26 +PASS U+7684 的 %1B%24%42%45%2A +PASS U+7686 皆 %1B%24%42%33%27 +PASS U+7687 皇 %1B%24%42%39%44 +PASS U+7688 皈 %1B%24%42%62%27 +PASS U+768B 皋 %1B%24%42%62%28 +PASS U+768E 皎 %1B%24%42%62%29 +PASS U+7690 皐 %1B%24%42%3B%29 +PASS U+7693 皓 %1B%24%42%62%2B +PASS U+7696 皖 %1B%24%42%62%2A +PASS U+7699 皙 %1B%24%42%62%2C +PASS U+769A 皚 %1B%24%42%62%2D +FAIL U+769B 皛 %1B%24%42%7B%38 assert_equals: expected "%1B%24%42%7B%38" but got "%26%23%33%30%33%36%33%3B" +FAIL U+769C 皜 %1B%24%42%7B%36 assert_equals: expected "%1B%24%42%7B%36" but got "%26%23%33%30%33%36%34%3B" +FAIL U+769E 皞 %1B%24%42%7B%37 assert_equals: expected "%1B%24%42%7B%37" but got "%26%23%33%30%33%36%36%3B" +FAIL U+76A6 皦 %1B%24%42%7B%39 assert_equals: expected "%1B%24%42%7B%39" but got "%26%23%33%30%33%37%34%3B" +PASS U+76AE 皮 %1B%24%42%48%69 +PASS U+76B0 皰 %1B%24%42%62%2E +PASS U+76B4 皴 %1B%24%42%62%2F +PASS U+76B7 皷 %1B%24%42%73%69 +PASS U+76B8 皸 %1B%24%42%62%30 +PASS U+76B9 皹 %1B%24%42%62%31 +PASS U+76BA 皺 %1B%24%42%62%32 +PASS U+76BF 皿 %1B%24%42%3B%2E +PASS U+76C2 盂 %1B%24%42%62%33 +PASS U+76C3 盃 %1B%24%42%47%56 +PASS U+76C6 盆 %1B%24%42%4B%5F +PASS U+76C8 盈 %1B%24%42%31%4E +PASS U+76CA 益 %1B%24%42%31%57 +PASS U+76CD 盍 %1B%24%42%62%34 +PASS U+76D2 盒 %1B%24%42%62%36 +PASS U+76D6 盖 %1B%24%42%62%35 +PASS U+76D7 盗 %1B%24%42%45%70 +PASS U+76DB 盛 %1B%24%42%40%39 +PASS U+76DC 盜 %1B%24%42%5D%39 +PASS U+76DE 盞 %1B%24%42%62%37 +PASS U+76DF 盟 %1B%24%42%4C%41 +PASS U+76E1 盡 %1B%24%42%62%38 +PASS U+76E3 監 %1B%24%42%34%46 +PASS U+76E4 盤 %1B%24%42%48%57 +PASS U+76E5 盥 %1B%24%42%62%39 +PASS U+76E7 盧 %1B%24%42%62%3A +PASS U+76EA 盪 %1B%24%42%62%3B +PASS U+76EE 目 %1B%24%42%4C%5C +PASS U+76F2 盲 %1B%24%42%4C%55 +PASS U+76F4 直 %1B%24%42%44%3E +PASS U+76F8 相 %1B%24%42%41%6A +PASS U+76FB 盻 %1B%24%42%62%3D +PASS U+76FE 盾 %1B%24%42%3D%62 +PASS U+7701 省 %1B%24%42%3E%4A +PASS U+7704 眄 %1B%24%42%62%40 +PASS U+7707 眇 %1B%24%42%62%3F +PASS U+7708 眈 %1B%24%42%62%3E +PASS U+7709 眉 %1B%24%42%48%7D +PASS U+770B 看 %1B%24%42%34%47 +PASS U+770C 県 %1B%24%42%38%29 +PASS U+771B 眛 %1B%24%42%62%46 +PASS U+771E 眞 %1B%24%42%62%43 +PASS U+771F 真 %1B%24%42%3F%3F +PASS U+7720 眠 %1B%24%42%4C%32 +PASS U+7724 眤 %1B%24%42%62%42 +PASS U+7725 眥 %1B%24%42%62%44 +PASS U+7726 眦 %1B%24%42%62%45 +PASS U+7729 眩 %1B%24%42%62%41 +PASS U+7737 眷 %1B%24%42%62%47 +PASS U+7738 眸 %1B%24%42%62%48 +PASS U+773A 眺 %1B%24%42%44%2F +PASS U+773C 眼 %1B%24%42%34%63 +PASS U+7740 着 %1B%24%42%43%65 +FAIL U+7746 睆 %1B%24%42%7B%3B assert_equals: expected "%1B%24%42%7B%3B" but got "%26%23%33%30%35%33%34%3B" +PASS U+7747 睇 %1B%24%42%62%49 +PASS U+775A 睚 %1B%24%42%62%4A +PASS U+775B 睛 %1B%24%42%62%4D +PASS U+7761 睡 %1B%24%42%3F%67 +PASS U+7763 督 %1B%24%42%46%44 +PASS U+7765 睥 %1B%24%42%62%4E +PASS U+7766 睦 %1B%24%42%4B%53 +PASS U+7768 睨 %1B%24%42%62%4B +PASS U+776B 睫 %1B%24%42%62%4C +PASS U+7779 睹 %1B%24%42%62%51 +PASS U+777E 睾 %1B%24%42%62%50 +PASS U+777F 睿 %1B%24%42%62%4F +PASS U+778B 瞋 %1B%24%42%62%53 +PASS U+778E 瞎 %1B%24%42%62%52 +PASS U+7791 瞑 %1B%24%42%62%54 +PASS U+779E 瞞 %1B%24%42%62%56 +PASS U+77A0 瞠 %1B%24%42%62%55 +PASS U+77A5 瞥 %1B%24%42%4A%4D +PASS U+77AC 瞬 %1B%24%42%3D%56 +PASS U+77AD 瞭 %1B%24%42%4E%46 +PASS U+77B0 瞰 %1B%24%42%62%57 +PASS U+77B3 瞳 %1B%24%42%46%37 +PASS U+77B6 瞶 %1B%24%42%62%58 +PASS U+77B9 瞹 %1B%24%42%62%59 +PASS U+77BB 瞻 %1B%24%42%62%5D +PASS U+77BC 瞼 %1B%24%42%62%5B +PASS U+77BD 瞽 %1B%24%42%62%5C +PASS U+77BF 瞿 %1B%24%42%62%5A +PASS U+77C7 矇 %1B%24%42%62%5E +PASS U+77CD 矍 %1B%24%42%62%5F +PASS U+77D7 矗 %1B%24%42%62%60 +PASS U+77DA 矚 %1B%24%42%62%61 +PASS U+77DB 矛 %1B%24%42%4C%37 +PASS U+77DC 矜 %1B%24%42%62%62 +PASS U+77E2 矢 %1B%24%42%4C%70 +PASS U+77E3 矣 %1B%24%42%62%63 +PASS U+77E5 知 %1B%24%42%43%4E +PASS U+77E7 矧 %1B%24%42%47%6A +PASS U+77E9 矩 %1B%24%42%36%6B +PASS U+77ED 短 %1B%24%42%43%3B +PASS U+77EE 矮 %1B%24%42%62%64 +PASS U+77EF 矯 %1B%24%42%36%3A +PASS U+77F3 石 %1B%24%42%40%50 +PASS U+77FC 矼 %1B%24%42%62%65 +PASS U+7802 砂 %1B%24%42%3A%3D +PASS U+780C 砌 %1B%24%42%62%66 +PASS U+7812 砒 %1B%24%42%62%67 +PASS U+7814 研 %1B%24%42%38%26 +PASS U+7815 砕 %1B%24%42%3A%55 +PASS U+7820 砠 %1B%24%42%62%69 +FAIL U+7821 砡 %1B%24%42%7B%3D assert_equals: expected "%1B%24%42%7B%3D" but got "%26%23%33%30%37%35%33%3B" +PASS U+7825 砥 %1B%24%42%45%56 +PASS U+7826 砦 %1B%24%42%3A%56 +PASS U+7827 砧 %1B%24%42%35%4E +PASS U+7832 砲 %1B%24%42%4B%24 +PASS U+7834 破 %1B%24%42%47%4B +PASS U+783A 砺 %1B%24%42%45%57 +PASS U+783F 砿 %1B%24%42%39%5C +PASS U+7845 硅 %1B%24%42%62%6B +FAIL U+784E 硎 %1B%24%42%7B%3E assert_equals: expected "%1B%24%42%7B%3E" but got "%26%23%33%30%37%39%38%3B" +PASS U+785D 硝 %1B%24%42%3E%4B +FAIL U+7864 硤 %1B%24%42%7B%3F assert_equals: expected "%1B%24%42%7B%3F" but got "%26%23%33%30%38%32%30%3B" +PASS U+786B 硫 %1B%24%42%4E%32 +PASS U+786C 硬 %1B%24%42%39%45 +PASS U+786F 硯 %1B%24%42%38%27 +PASS U+7872 硲 %1B%24%42%48%23 +PASS U+7874 硴 %1B%24%42%62%6D +FAIL U+787A 硺 %1B%24%42%7B%40 assert_equals: expected "%1B%24%42%7B%40" but got "%26%23%33%30%38%34%32%3B" +PASS U+787C 硼 %1B%24%42%62%6F +PASS U+7881 碁 %1B%24%42%38%6B +PASS U+7886 碆 %1B%24%42%62%6E +PASS U+7887 碇 %1B%24%42%44%76 +PASS U+788C 碌 %1B%24%42%62%71 +PASS U+788D 碍 %1B%24%42%33%37 +PASS U+788E 碎 %1B%24%42%62%6C +PASS U+7891 碑 %1B%24%42%48%6A +PASS U+7893 碓 %1B%24%42%31%30 +PASS U+7895 碕 %1B%24%42%3A%6C +PASS U+7897 碗 %1B%24%42%4F%52 +PASS U+789A 碚 %1B%24%42%62%70 +PASS U+78A3 碣 %1B%24%42%62%72 +PASS U+78A7 碧 %1B%24%42%4A%4B +PASS U+78A9 碩 %1B%24%42%40%59 +PASS U+78AA 碪 %1B%24%42%62%74 +PASS U+78AF 碯 %1B%24%42%62%75 +PASS U+78B5 碵 %1B%24%42%62%73 +PASS U+78BA 確 %1B%24%42%33%4E +PASS U+78BC 碼 %1B%24%42%62%7B +PASS U+78BE 碾 %1B%24%42%62%7A +PASS U+78C1 磁 %1B%24%42%3C%27 +PASS U+78C5 磅 %1B%24%42%62%7C +PASS U+78C6 磆 %1B%24%42%62%77 +PASS U+78CA 磊 %1B%24%42%62%7D +PASS U+78CB 磋 %1B%24%42%62%78 +PASS U+78D0 磐 %1B%24%42%48%58 +PASS U+78D1 磑 %1B%24%42%62%76 +PASS U+78D4 磔 %1B%24%42%62%79 +PASS U+78DA 磚 %1B%24%42%63%22 +PASS U+78E7 磧 %1B%24%42%63%21 +PASS U+78E8 磨 %1B%24%42%4B%61 +PASS U+78EC 磬 %1B%24%42%62%7E +PASS U+78EF 磯 %1B%24%42%30%6B +PASS U+78F4 磴 %1B%24%42%63%24 +PASS U+78FD 磽 %1B%24%42%63%23 +PASS U+7901 礁 %1B%24%42%3E%4C +PASS U+7907 礇 %1B%24%42%63%25 +PASS U+790E 礎 %1B%24%42%41%43 +PASS U+7911 礑 %1B%24%42%63%27 +PASS U+7912 礒 %1B%24%42%63%26 +PASS U+7919 礙 %1B%24%42%63%28 +PASS U+7926 礦 %1B%24%42%62%68 +PASS U+792A 礪 %1B%24%42%62%6A +PASS U+792B 礫 %1B%24%42%63%2A +PASS U+792C 礬 %1B%24%42%63%29 +FAIL U+7930 礰 %1B%24%42%7B%41 assert_equals: expected "%1B%24%42%7B%41" but got "%26%23%33%31%30%32%34%3B" +PASS U+793A 示 %1B%24%42%3C%28 +PASS U+793C 礼 %1B%24%42%4E%69 +PASS U+793E 社 %1B%24%42%3C%52 +PASS U+7940 祀 %1B%24%42%63%2B +PASS U+7941 祁 %1B%24%42%37%37 +PASS U+7947 祇 %1B%24%42%35%40 +PASS U+7948 祈 %1B%24%42%35%27 +PASS U+7949 祉 %1B%24%42%3B%63 +PASS U+7950 祐 %1B%24%42%4D%34 +PASS U+7953 祓 %1B%24%42%63%31 +PASS U+7955 祕 %1B%24%42%63%30 +PASS U+7956 祖 %1B%24%42%41%44 +PASS U+7957 祗 %1B%24%42%63%2D +PASS U+795A 祚 %1B%24%42%63%2F +PASS U+795D 祝 %1B%24%42%3D%4B +PASS U+795E 神 %1B%24%42%3F%40 +PASS U+795F 祟 %1B%24%42%63%2E +PASS U+7960 祠 %1B%24%42%63%2C +PASS U+7962 祢 %1B%24%42%47%2A +PASS U+7965 祥 %1B%24%42%3E%4D +PASS U+7968 票 %1B%24%42%49%3C +PASS U+796D 祭 %1B%24%42%3A%57 +PASS U+7977 祷 %1B%24%42%45%78 +PASS U+797A 祺 %1B%24%42%63%32 +PASS U+797F 祿 %1B%24%42%63%33 +PASS U+7980 禀 %1B%24%42%63%49 +PASS U+7981 禁 %1B%24%42%36%58 +PASS U+7984 禄 %1B%24%42%4F%3D +PASS U+7985 禅 %1B%24%42%41%35 +PASS U+798A 禊 %1B%24%42%63%34 +PASS U+798D 禍 %1B%24%42%32%52 +PASS U+798E 禎 %1B%24%42%44%77 +PASS U+798F 福 %1B%24%42%4A%21 +FAIL U+7994 禔 %1B%24%42%7B%45 assert_equals: expected "%1B%24%42%7B%45" but got "%26%23%33%31%31%32%34%3B" +FAIL U+799B 禛 %1B%24%42%7B%47 assert_equals: expected "%1B%24%42%7B%47" but got "%26%23%33%31%31%33%31%3B" +PASS U+799D 禝 %1B%24%42%63%35 +PASS U+79A6 禦 %1B%24%42%35%7A +PASS U+79A7 禧 %1B%24%42%63%36 +PASS U+79AA 禪 %1B%24%42%63%38 +PASS U+79AE 禮 %1B%24%42%63%39 +PASS U+79B0 禰 %1B%24%42%47%29 +PASS U+79B3 禳 %1B%24%42%63%3A +PASS U+79B9 禹 %1B%24%42%63%3B +PASS U+79BA 禺 %1B%24%42%63%3C +PASS U+79BD 禽 %1B%24%42%36%59 +PASS U+79BE 禾 %1B%24%42%32%53 +PASS U+79BF 禿 %1B%24%42%46%45 +PASS U+79C0 秀 %1B%24%42%3D%28 +PASS U+79C1 私 %1B%24%42%3B%64 +PASS U+79C9 秉 %1B%24%42%63%3D +PASS U+79CB 秋 %1B%24%42%3D%29 +PASS U+79D1 科 %1B%24%42%32%4A +PASS U+79D2 秒 %1B%24%42%49%43 +PASS U+79D5 秕 %1B%24%42%63%3E +PASS U+79D8 秘 %1B%24%42%48%6B +PASS U+79DF 租 %1B%24%42%41%45 +PASS U+79E1 秡 %1B%24%42%63%41 +PASS U+79E3 秣 %1B%24%42%63%42 +PASS U+79E4 秤 %1B%24%42%47%69 +PASS U+79E6 秦 %1B%24%42%3F%41 +PASS U+79E7 秧 %1B%24%42%63%3F +PASS U+79E9 秩 %1B%24%42%43%61 +PASS U+79EC 秬 %1B%24%42%63%40 +PASS U+79F0 称 %1B%24%42%3E%4E +PASS U+79FB 移 %1B%24%42%30%5C +PASS U+7A00 稀 %1B%24%42%35%29 +PASS U+7A08 稈 %1B%24%42%63%43 +PASS U+7A0B 程 %1B%24%42%44%78 +PASS U+7A0D 稍 %1B%24%42%63%44 +PASS U+7A0E 税 %1B%24%42%40%47 +PASS U+7A14 稔 %1B%24%42%4C%2D +PASS U+7A17 稗 %1B%24%42%49%23 +PASS U+7A18 稘 %1B%24%42%63%45 +PASS U+7A19 稙 %1B%24%42%63%46 +PASS U+7A1A 稚 %1B%24%42%43%55 +PASS U+7A1C 稜 %1B%24%42%4E%47 +PASS U+7A1F 稟 %1B%24%42%63%48 +PASS U+7A20 稠 %1B%24%42%63%47 +PASS U+7A2E 種 %1B%24%42%3C%6F +PASS U+7A31 稱 %1B%24%42%63%4A +PASS U+7A32 稲 %1B%24%42%30%70 +PASS U+7A37 稷 %1B%24%42%63%4D +PASS U+7A3B 稻 %1B%24%42%63%4B +PASS U+7A3C 稼 %1B%24%42%32%54 +PASS U+7A3D 稽 %1B%24%42%37%4E +PASS U+7A3E 稾 %1B%24%42%63%4C +PASS U+7A3F 稿 %1B%24%42%39%46 +PASS U+7A40 穀 %1B%24%42%39%72 +PASS U+7A42 穂 %1B%24%42%4A%66 +PASS U+7A43 穃 %1B%24%42%63%4E +PASS U+7A46 穆 %1B%24%42%4B%54 +PASS U+7A49 穉 %1B%24%42%63%50 +PASS U+7A4D 積 %1B%24%42%40%51 +PASS U+7A4E 穎 %1B%24%42%31%4F +PASS U+7A4F 穏 %1B%24%42%32%3A +PASS U+7A50 穐 %1B%24%42%30%2C +PASS U+7A57 穗 %1B%24%42%63%4F +PASS U+7A61 穡 %1B%24%42%63%51 +PASS U+7A62 穢 %1B%24%42%63%52 +PASS U+7A63 穣 %1B%24%42%3E%77 +PASS U+7A69 穩 %1B%24%42%63%53 +PASS U+7A6B 穫 %1B%24%42%33%4F +PASS U+7A70 穰 %1B%24%42%63%55 +PASS U+7A74 穴 %1B%24%42%37%6A +PASS U+7A76 究 %1B%24%42%35%66 +PASS U+7A79 穹 %1B%24%42%63%56 +PASS U+7A7A 空 %1B%24%42%36%75 +PASS U+7A7D 穽 %1B%24%42%63%57 +PASS U+7A7F 穿 %1B%24%42%40%7C +PASS U+7A81 突 %1B%24%42%46%4D +PASS U+7A83 窃 %1B%24%42%40%60 +PASS U+7A84 窄 %1B%24%42%3A%75 +PASS U+7A88 窈 %1B%24%42%63%58 +PASS U+7A92 窒 %1B%24%42%43%62 +PASS U+7A93 窓 %1B%24%42%41%6B +PASS U+7A95 窕 %1B%24%42%63%5A +PASS U+7A96 窖 %1B%24%42%63%5C +PASS U+7A97 窗 %1B%24%42%63%59 +PASS U+7A98 窘 %1B%24%42%63%5B +PASS U+7A9F 窟 %1B%24%42%37%22 +PASS U+7AA9 窩 %1B%24%42%63%5D +PASS U+7AAA 窪 %1B%24%42%37%26 +PASS U+7AAE 窮 %1B%24%42%35%67 +PASS U+7AAF 窯 %1B%24%42%4D%52 +PASS U+7AB0 窰 %1B%24%42%63%5F +PASS U+7AB6 窶 %1B%24%42%63%60 +PASS U+7ABA 窺 %1B%24%42%31%2E +PASS U+7ABF 窿 %1B%24%42%63%63 +PASS U+7AC3 竃 %1B%24%42%33%76 +PASS U+7AC4 竄 %1B%24%42%63%62 +PASS U+7AC5 竅 %1B%24%42%63%61 +PASS U+7AC7 竇 %1B%24%42%63%65 +PASS U+7AC8 竈 %1B%24%42%63%5E +PASS U+7ACA 竊 %1B%24%42%63%66 +PASS U+7ACB 立 %1B%24%42%4E%29 +PASS U+7ACD 竍 %1B%24%42%63%67 +PASS U+7ACF 竏 %1B%24%42%63%68 +FAIL U+7AD1 竑 %1B%24%42%7B%48 assert_equals: expected "%1B%24%42%7B%48" but got "%26%23%33%31%34%34%31%3B" +PASS U+7AD2 竒 %1B%24%42%54%74 +PASS U+7AD3 竓 %1B%24%42%63%6A +PASS U+7AD5 竕 %1B%24%42%63%69 +PASS U+7AD9 站 %1B%24%42%63%6B +PASS U+7ADA 竚 %1B%24%42%63%6C +PASS U+7ADC 竜 %1B%24%42%4E%35 +PASS U+7ADD 竝 %1B%24%42%63%6D +PASS U+7ADF 竟 %1B%24%42%70%6F +PASS U+7AE0 章 %1B%24%42%3E%4F +PASS U+7AE1 竡 %1B%24%42%63%6E +PASS U+7AE2 竢 %1B%24%42%63%6F +PASS U+7AE3 竣 %1B%24%42%3D%57 +PASS U+7AE5 童 %1B%24%42%46%38 +PASS U+7AE6 竦 %1B%24%42%63%70 +FAIL U+7AE7 竧 %1B%24%42%7B%49 assert_equals: expected "%1B%24%42%7B%49" but got "%26%23%33%31%34%36%33%3B" +PASS U+7AEA 竪 %1B%24%42%43%28 +FAIL U+7AEB 竫 %1B%24%42%7B%4B assert_equals: expected "%1B%24%42%7B%4B" but got "%26%23%33%31%34%36%37%3B" +PASS U+7AED 竭 %1B%24%42%63%71 +PASS U+7AEF 端 %1B%24%42%43%3C +PASS U+7AF0 竰 %1B%24%42%63%72 +PASS U+7AF6 競 %1B%24%42%36%25 +PASS U+7AF8 竸 %1B%24%42%51%3F +PASS U+7AF9 竹 %1B%24%42%43%5D +PASS U+7AFA 竺 %1B%24%42%3C%33 +PASS U+7AFF 竿 %1B%24%42%34%48 +PASS U+7B02 笂 %1B%24%42%63%73 +PASS U+7B04 笄 %1B%24%42%64%22 +PASS U+7B06 笆 %1B%24%42%63%76 +PASS U+7B08 笈 %1B%24%42%35%68 +PASS U+7B0A 笊 %1B%24%42%63%75 +PASS U+7B0B 笋 %1B%24%42%64%24 +PASS U+7B0F 笏 %1B%24%42%63%74 +PASS U+7B11 笑 %1B%24%42%3E%50 +PASS U+7B18 笘 %1B%24%42%63%78 +PASS U+7B19 笙 %1B%24%42%63%79 +PASS U+7B1B 笛 %1B%24%42%45%2B +PASS U+7B1E 笞 %1B%24%42%63%7A +PASS U+7B20 笠 %1B%24%42%33%5E +PASS U+7B25 笥 %1B%24%42%3F%5A +PASS U+7B26 符 %1B%24%42%49%64 +PASS U+7B28 笨 %1B%24%42%63%7C +PASS U+7B2C 第 %1B%24%42%42%68 +PASS U+7B33 笳 %1B%24%42%63%77 +PASS U+7B35 笵 %1B%24%42%63%7B +PASS U+7B36 笶 %1B%24%42%63%7D +PASS U+7B39 笹 %1B%24%42%3A%7B +PASS U+7B45 筅 %1B%24%42%64%26 +PASS U+7B46 筆 %1B%24%42%49%2E +PASS U+7B48 筈 %1B%24%42%48%26 +PASS U+7B49 等 %1B%24%42%45%79 +PASS U+7B4B 筋 %1B%24%42%36%5A +PASS U+7B4C 筌 %1B%24%42%64%25 +PASS U+7B4D 筍 %1B%24%42%64%23 +PASS U+7B4F 筏 %1B%24%42%48%35 +PASS U+7B50 筐 %1B%24%42%63%7E +PASS U+7B51 筑 %1B%24%42%43%5E +PASS U+7B52 筒 %1B%24%42%45%7B +PASS U+7B54 答 %1B%24%42%45%7A +PASS U+7B56 策 %1B%24%42%3A%76 +PASS U+7B5D 筝 %1B%24%42%64%38 +PASS U+7B65 筥 %1B%24%42%64%28 +PASS U+7B67 筧 %1B%24%42%64%2A +PASS U+7B6C 筬 %1B%24%42%64%2D +PASS U+7B6E 筮 %1B%24%42%64%2E +PASS U+7B70 筰 %1B%24%42%64%2B +PASS U+7B71 筱 %1B%24%42%64%2C +PASS U+7B74 筴 %1B%24%42%64%29 +PASS U+7B75 筵 %1B%24%42%64%27 +PASS U+7B7A 筺 %1B%24%42%64%21 +PASS U+7B86 箆 %1B%24%42%4A%4F +PASS U+7B87 箇 %1B%24%42%32%55 +PASS U+7B8B 箋 %1B%24%42%64%35 +PASS U+7B8D 箍 %1B%24%42%64%32 +PASS U+7B8F 箏 %1B%24%42%64%37 +PASS U+7B92 箒 %1B%24%42%64%36 +PASS U+7B94 箔 %1B%24%42%47%73 +PASS U+7B95 箕 %1B%24%42%4C%27 +PASS U+7B97 算 %1B%24%42%3B%3B +PASS U+7B98 箘 %1B%24%42%64%30 +PASS U+7B99 箙 %1B%24%42%64%39 +PASS U+7B9A 箚 %1B%24%42%64%34 +PASS U+7B9C 箜 %1B%24%42%64%33 +PASS U+7B9D 箝 %1B%24%42%64%2F +FAIL U+7B9E 箞 %1B%24%42%7B%4C assert_equals: expected "%1B%24%42%7B%4C" but got "%26%23%33%31%36%34%36%3B" +PASS U+7B9F 箟 %1B%24%42%64%31 +PASS U+7BA1 管 %1B%24%42%34%49 +PASS U+7BAA 箪 %1B%24%42%43%3D +PASS U+7BAD 箭 %1B%24%42%40%7D +PASS U+7BB1 箱 %1B%24%42%48%22 +PASS U+7BB4 箴 %1B%24%42%64%3E +PASS U+7BB8 箸 %1B%24%42%48%24 +PASS U+7BC0 節 %1B%24%42%40%61 +PASS U+7BC1 篁 %1B%24%42%64%3B +PASS U+7BC4 範 %1B%24%42%48%4F +PASS U+7BC6 篆 %1B%24%42%64%3F +PASS U+7BC7 篇 %1B%24%42%4A%53 +PASS U+7BC9 築 %1B%24%42%43%5B +PASS U+7BCB 篋 %1B%24%42%64%3A +PASS U+7BCC 篌 %1B%24%42%64%3C +PASS U+7BCF 篏 %1B%24%42%64%3D +PASS U+7BDD 篝 %1B%24%42%64%40 +PASS U+7BE0 篠 %1B%24%42%3C%44 +PASS U+7BE4 篤 %1B%24%42%46%46 +PASS U+7BE5 篥 %1B%24%42%64%45 +PASS U+7BE6 篦 %1B%24%42%64%44 +PASS U+7BE9 篩 %1B%24%42%64%41 +PASS U+7BED 篭 %1B%24%42%4F%36 +PASS U+7BF3 篳 %1B%24%42%64%4A +PASS U+7BF6 篶 %1B%24%42%64%4E +PASS U+7BF7 篷 %1B%24%42%64%4B +PASS U+7C00 簀 %1B%24%42%64%47 +PASS U+7C07 簇 %1B%24%42%64%48 +PASS U+7C0D 簍 %1B%24%42%64%4D +PASS U+7C11 簑 %1B%24%42%64%42 +PASS U+7C12 簒 %1B%24%42%52%55 +PASS U+7C13 簓 %1B%24%42%64%49 +PASS U+7C14 簔 %1B%24%42%64%43 +PASS U+7C17 簗 %1B%24%42%64%4C +PASS U+7C1F 簟 %1B%24%42%64%52 +PASS U+7C21 簡 %1B%24%42%34%4A +PASS U+7C23 簣 %1B%24%42%64%4F +PASS U+7C27 簧 %1B%24%42%64%50 +PASS U+7C2A 簪 %1B%24%42%64%51 +PASS U+7C2B 簫 %1B%24%42%64%54 +PASS U+7C37 簷 %1B%24%42%64%53 +PASS U+7C38 簸 %1B%24%42%48%76 +PASS U+7C3D 簽 %1B%24%42%64%55 +PASS U+7C3E 簾 %1B%24%42%4E%7C +PASS U+7C3F 簿 %1B%24%42%4A%6D +PASS U+7C40 籀 %1B%24%42%64%5A +PASS U+7C43 籃 %1B%24%42%64%57 +PASS U+7C4C 籌 %1B%24%42%64%56 +PASS U+7C4D 籍 %1B%24%42%40%52 +PASS U+7C4F 籏 %1B%24%42%64%59 +PASS U+7C50 籐 %1B%24%42%64%5B +PASS U+7C54 籔 %1B%24%42%64%58 +PASS U+7C56 籖 %1B%24%42%64%5F +PASS U+7C58 籘 %1B%24%42%64%5C +PASS U+7C5F 籟 %1B%24%42%64%5D +PASS U+7C60 籠 %1B%24%42%64%46 +PASS U+7C64 籤 %1B%24%42%64%5E +PASS U+7C65 籥 %1B%24%42%64%60 +PASS U+7C6C 籬 %1B%24%42%64%61 +PASS U+7C73 米 %1B%24%42%4A%46 +PASS U+7C75 籵 %1B%24%42%64%62 +PASS U+7C7E 籾 %1B%24%42%4C%62 +PASS U+7C81 粁 %1B%24%42%36%4E +PASS U+7C82 粂 %1B%24%42%37%29 +PASS U+7C83 粃 %1B%24%42%64%63 +PASS U+7C89 粉 %1B%24%42%4A%34 +PASS U+7C8B 粋 %1B%24%42%3F%68 +PASS U+7C8D 粍 %1B%24%42%4C%30 +PASS U+7C90 粐 %1B%24%42%64%64 +PASS U+7C92 粒 %1B%24%42%4E%33 +PASS U+7C95 粕 %1B%24%42%47%74 +PASS U+7C97 粗 %1B%24%42%41%46 +PASS U+7C98 粘 %1B%24%42%47%34 +PASS U+7C9B 粛 %1B%24%42%3D%4D +PASS U+7C9F 粟 %1B%24%42%30%40 +PASS U+7CA1 粡 %1B%24%42%64%69 +PASS U+7CA2 粢 %1B%24%42%64%67 +PASS U+7CA4 粤 %1B%24%42%64%65 +PASS U+7CA5 粥 %1B%24%42%34%21 +PASS U+7CA7 粧 %1B%24%42%3E%51 +PASS U+7CA8 粨 %1B%24%42%64%6A +PASS U+7CAB 粫 %1B%24%42%64%68 +PASS U+7CAD 粭 %1B%24%42%64%66 +PASS U+7CAE 粮 %1B%24%42%64%6E +PASS U+7CB1 粱 %1B%24%42%64%6D +PASS U+7CB2 粲 %1B%24%42%64%6C +PASS U+7CB3 粳 %1B%24%42%64%6B +PASS U+7CB9 粹 %1B%24%42%64%6F +PASS U+7CBD 粽 %1B%24%42%64%70 +PASS U+7CBE 精 %1B%24%42%40%3A +PASS U+7CC0 糀 %1B%24%42%64%71 +PASS U+7CC2 糂 %1B%24%42%64%73 +PASS U+7CC5 糅 %1B%24%42%64%72 +PASS U+7CCA 糊 %1B%24%42%38%52 +PASS U+7CCE 糎 %1B%24%42%41%38 +PASS U+7CD2 糒 %1B%24%42%64%75 +PASS U+7CD6 糖 %1B%24%42%45%7C +PASS U+7CD8 糘 %1B%24%42%64%74 +PASS U+7CDC 糜 %1B%24%42%64%76 +PASS U+7CDE 糞 %1B%24%42%4A%35 +PASS U+7CDF 糟 %1B%24%42%41%6C +PASS U+7CE0 糠 %1B%24%42%39%47 +PASS U+7CE2 糢 %1B%24%42%64%77 +PASS U+7CE7 糧 %1B%24%42%4E%48 +PASS U+7CEF 糯 %1B%24%42%64%79 +PASS U+7CF2 糲 %1B%24%42%64%7A +PASS U+7CF4 糴 %1B%24%42%64%7B +PASS U+7CF6 糶 %1B%24%42%64%7C +PASS U+7CF8 糸 %1B%24%42%3B%65 +PASS U+7CFA 糺 %1B%24%42%64%7D +PASS U+7CFB 系 %1B%24%42%37%4F +PASS U+7CFE 糾 %1B%24%42%35%6A +PASS U+7D00 紀 %1B%24%42%35%2A +PASS U+7D02 紂 %1B%24%42%65%21 +PASS U+7D04 約 %1B%24%42%4C%73 +PASS U+7D05 紅 %1B%24%42%39%48 +PASS U+7D06 紆 %1B%24%42%64%7E +PASS U+7D0A 紊 %1B%24%42%65%24 +PASS U+7D0B 紋 %1B%24%42%4C%66 +PASS U+7D0D 納 %1B%24%42%47%3C +PASS U+7D10 紐 %1B%24%42%49%33 +PASS U+7D14 純 %1B%24%42%3D%63 +PASS U+7D15 紕 %1B%24%42%65%23 +PASS U+7D17 紗 %1B%24%42%3C%53 +PASS U+7D18 紘 %1B%24%42%39%49 +PASS U+7D19 紙 %1B%24%42%3B%66 +PASS U+7D1A 級 %1B%24%42%35%69 +PASS U+7D1B 紛 %1B%24%42%4A%36 +PASS U+7D1C 紜 %1B%24%42%65%22 +PASS U+7D20 素 %1B%24%42%41%47 +PASS U+7D21 紡 %1B%24%42%4B%42 +PASS U+7D22 索 %1B%24%42%3A%77 +PASS U+7D2B 紫 %1B%24%42%3B%67 +PASS U+7D2C 紬 %1B%24%42%44%5D +PASS U+7D2E 紮 %1B%24%42%65%27 +PASS U+7D2F 累 %1B%24%42%4E%5F +PASS U+7D30 細 %1B%24%42%3A%59 +PASS U+7D32 紲 %1B%24%42%65%28 +PASS U+7D33 紳 %1B%24%42%3F%42 +PASS U+7D35 紵 %1B%24%42%65%2A +PASS U+7D39 紹 %1B%24%42%3E%52 +PASS U+7D3A 紺 %1B%24%42%3A%30 +PASS U+7D3F 紿 %1B%24%42%65%29 +PASS U+7D42 終 %1B%24%42%3D%2A +PASS U+7D43 絃 %1B%24%42%38%3E +PASS U+7D44 組 %1B%24%42%41%48 +PASS U+7D45 絅 %1B%24%42%65%25 +PASS U+7D46 絆 %1B%24%42%65%2B +FAIL U+7D48 絈 %1B%24%42%7B%4E assert_equals: expected "%1B%24%42%7B%4E" but got "%26%23%33%32%30%37%32%3B" +PASS U+7D4B 絋 %1B%24%42%65%26 +PASS U+7D4C 経 %1B%24%42%37%50 +PASS U+7D4E 絎 %1B%24%42%65%2E +PASS U+7D4F 絏 %1B%24%42%65%32 +PASS U+7D50 結 %1B%24%42%37%6B +PASS U+7D56 絖 %1B%24%42%65%2D +PASS U+7D5B 絛 %1B%24%42%65%36 +FAIL U+7D5C 絜 %1B%24%42%7B%4F assert_equals: expected "%1B%24%42%7B%4F" but got "%26%23%33%32%30%39%32%3B" +PASS U+7D5E 絞 %1B%24%42%39%4A +PASS U+7D61 絡 %1B%24%42%4D%6D +PASS U+7D62 絢 %1B%24%42%30%3C +PASS U+7D63 絣 %1B%24%42%65%33 +PASS U+7D66 給 %1B%24%42%35%6B +PASS U+7D68 絨 %1B%24%42%65%30 +PASS U+7D6E 絮 %1B%24%42%65%31 +PASS U+7D71 統 %1B%24%42%45%7D +PASS U+7D72 絲 %1B%24%42%65%2F +PASS U+7D73 絳 %1B%24%42%65%2C +PASS U+7D75 絵 %1B%24%42%33%28 +PASS U+7D76 絶 %1B%24%42%40%64 +PASS U+7D79 絹 %1B%24%42%38%28 +PASS U+7D7D 絽 %1B%24%42%65%38 +PASS U+7D89 綉 %1B%24%42%65%35 +PASS U+7D8F 綏 %1B%24%42%65%37 +PASS U+7D93 經 %1B%24%42%65%34 +PASS U+7D99 継 %1B%24%42%37%51 +PASS U+7D9A 続 %1B%24%42%42%33 +PASS U+7D9B 綛 %1B%24%42%65%39 +PASS U+7D9C 綜 %1B%24%42%41%6E +PASS U+7D9F 綟 %1B%24%42%65%46 +FAIL U+7DA0 綠 %1B%24%42%7B%51 assert_equals: expected "%1B%24%42%7B%51" but got "%26%23%33%32%31%36%30%3B" +PASS U+7DA2 綢 %1B%24%42%65%42 +PASS U+7DA3 綣 %1B%24%42%65%3C +PASS U+7DAB 綫 %1B%24%42%65%40 +PASS U+7DAC 綬 %1B%24%42%3C%7A +PASS U+7DAD 維 %1B%24%42%30%5D +PASS U+7DAE 綮 %1B%24%42%65%3B +PASS U+7DAF 綯 %1B%24%42%65%43 +PASS U+7DB0 綰 %1B%24%42%65%47 +PASS U+7DB1 綱 %1B%24%42%39%4B +PASS U+7DB2 網 %1B%24%42%4C%56 +PASS U+7DB4 綴 %1B%24%42%44%56 +PASS U+7DB5 綵 %1B%24%42%65%3D +FAIL U+7DB7 綷 %1B%24%42%7B%50 assert_equals: expected "%1B%24%42%7B%50" but got "%26%23%33%32%31%38%33%3B" +PASS U+7DB8 綸 %1B%24%42%65%45 +PASS U+7DBA 綺 %1B%24%42%65%3A +PASS U+7DBB 綻 %1B%24%42%43%3E +PASS U+7DBD 綽 %1B%24%42%65%3F +PASS U+7DBE 綾 %1B%24%42%30%3D +PASS U+7DBF 綿 %1B%24%42%4C%4A +PASS U+7DC7 緇 %1B%24%42%65%3E +PASS U+7DCA 緊 %1B%24%42%36%5B +PASS U+7DCB 緋 %1B%24%42%48%6C +PASS U+7DCF 総 %1B%24%42%41%6D +PASS U+7DD1 緑 %1B%24%42%4E%50 +PASS U+7DD2 緒 %1B%24%42%3D%6F +PASS U+7DD5 緕 %1B%24%42%65%6E +FAIL U+7DD6 緖 %1B%24%42%7B%52 assert_equals: expected "%1B%24%42%7B%52" but got "%26%23%33%32%32%31%34%3B" +PASS U+7DD8 緘 %1B%24%42%65%48 +PASS U+7DDA 線 %1B%24%42%40%7E +PASS U+7DDC 緜 %1B%24%42%65%44 +PASS U+7DDD 緝 %1B%24%42%65%49 +PASS U+7DDE 緞 %1B%24%42%65%4B +PASS U+7DE0 締 %1B%24%42%44%79 +PASS U+7DE1 緡 %1B%24%42%65%4E +PASS U+7DE4 緤 %1B%24%42%65%4A +PASS U+7DE8 編 %1B%24%42%4A%54 +PASS U+7DE9 緩 %1B%24%42%34%4B +PASS U+7DEC 緬 %1B%24%42%4C%4B +PASS U+7DEF 緯 %1B%24%42%30%5E +PASS U+7DF2 緲 %1B%24%42%65%4D +PASS U+7DF4 練 %1B%24%42%4E%7D +PASS U+7DFB 緻 %1B%24%42%65%4C +PASS U+7E01 縁 %1B%24%42%31%6F +PASS U+7E04 縄 %1B%24%42%46%6C +PASS U+7E05 縅 %1B%24%42%65%4F +PASS U+7E09 縉 %1B%24%42%65%56 +PASS U+7E0A 縊 %1B%24%42%65%50 +PASS U+7E0B 縋 %1B%24%42%65%57 +PASS U+7E12 縒 %1B%24%42%65%53 +PASS U+7E1B 縛 %1B%24%42%47%7B +PASS U+7E1E 縞 %1B%24%42%3C%4A +PASS U+7E1F 縟 %1B%24%42%65%55 +PASS U+7E21 縡 %1B%24%42%65%52 +PASS U+7E22 縢 %1B%24%42%65%58 +PASS U+7E23 縣 %1B%24%42%65%51 +PASS U+7E26 縦 %1B%24%42%3D%44 +PASS U+7E2B 縫 %1B%24%42%4B%25 +PASS U+7E2E 縮 %1B%24%42%3D%4C +PASS U+7E31 縱 %1B%24%42%65%54 +PASS U+7E32 縲 %1B%24%42%65%60 +PASS U+7E35 縵 %1B%24%42%65%5C +PASS U+7E37 縷 %1B%24%42%65%5F +PASS U+7E39 縹 %1B%24%42%65%5D +PASS U+7E3A 縺 %1B%24%42%65%61 +PASS U+7E3B 縻 %1B%24%42%65%5B +PASS U+7E3D 總 %1B%24%42%65%41 +PASS U+7E3E 績 %1B%24%42%40%53 +PASS U+7E41 繁 %1B%24%42%48%4B +PASS U+7E43 繃 %1B%24%42%65%5E +PASS U+7E46 繆 %1B%24%42%65%59 +PASS U+7E4A 繊 %1B%24%42%41%21 +PASS U+7E4B 繋 %1B%24%42%37%52 +PASS U+7E4D 繍 %1B%24%42%3D%2B +FAIL U+7E52 繒 %1B%24%42%7B%53 assert_equals: expected "%1B%24%42%7B%53" but got "%26%23%33%32%33%33%38%3B" +PASS U+7E54 織 %1B%24%42%3F%25 +PASS U+7E55 繕 %1B%24%42%41%36 +PASS U+7E56 繖 %1B%24%42%65%64 +PASS U+7E59 繙 %1B%24%42%65%66 +PASS U+7E5A 繚 %1B%24%42%65%67 +PASS U+7E5D 繝 %1B%24%42%65%63 +PASS U+7E5E 繞 %1B%24%42%65%65 +PASS U+7E66 繦 %1B%24%42%65%5A +PASS U+7E67 繧 %1B%24%42%65%62 +PASS U+7E69 繩 %1B%24%42%65%6A +PASS U+7E6A 繪 %1B%24%42%65%69 +PASS U+7E6D 繭 %1B%24%42%4B%7A +PASS U+7E70 繰 %1B%24%42%37%2B +PASS U+7E79 繹 %1B%24%42%65%68 +PASS U+7E7B 繻 %1B%24%42%65%6C +PASS U+7E7C 繼 %1B%24%42%65%6B +PASS U+7E7D 繽 %1B%24%42%65%6F +PASS U+7E7F 繿 %1B%24%42%65%71 +PASS U+7E82 纂 %1B%24%42%3B%3C +PASS U+7E83 纃 %1B%24%42%65%6D +PASS U+7E88 纈 %1B%24%42%65%72 +PASS U+7E89 纉 %1B%24%42%65%73 +FAIL U+7E8A 纊 %1B%24%42%79%21 assert_equals: expected "%1B%24%42%79%21" but got "%26%23%33%32%33%39%34%3B" +PASS U+7E8C 續 %1B%24%42%65%74 +PASS U+7E8E 纎 %1B%24%42%65%7A +PASS U+7E8F 纏 %1B%24%42%45%3B +PASS U+7E90 纐 %1B%24%42%65%76 +PASS U+7E92 纒 %1B%24%42%65%75 +PASS U+7E93 纓 %1B%24%42%65%77 +PASS U+7E94 纔 %1B%24%42%65%78 +PASS U+7E96 纖 %1B%24%42%65%79 +PASS U+7E9B 纛 %1B%24%42%65%7B +PASS U+7E9C 纜 %1B%24%42%65%7C +PASS U+7F36 缶 %1B%24%42%34%4C +PASS U+7F38 缸 %1B%24%42%65%7D +PASS U+7F3A 缺 %1B%24%42%65%7E +PASS U+7F45 罅 %1B%24%42%66%21 +FAIL U+7F47 罇 %1B%24%42%7B%54 assert_equals: expected "%1B%24%42%7B%54" but got "%26%23%33%32%35%38%33%3B" +PASS U+7F4C 罌 %1B%24%42%66%22 +PASS U+7F4D 罍 %1B%24%42%66%23 +PASS U+7F4E 罎 %1B%24%42%66%24 +PASS U+7F50 罐 %1B%24%42%66%25 +PASS U+7F51 网 %1B%24%42%66%26 +PASS U+7F54 罔 %1B%24%42%66%28 +PASS U+7F55 罕 %1B%24%42%66%27 +PASS U+7F58 罘 %1B%24%42%66%29 +PASS U+7F5F 罟 %1B%24%42%66%2A +PASS U+7F60 罠 %1B%24%42%66%2B +PASS U+7F67 罧 %1B%24%42%66%2E +PASS U+7F68 罨 %1B%24%42%66%2C +PASS U+7F69 罩 %1B%24%42%66%2D +PASS U+7F6A 罪 %1B%24%42%3A%61 +PASS U+7F6B 罫 %1B%24%42%37%53 +PASS U+7F6E 置 %1B%24%42%43%56 +PASS U+7F70 罰 %1B%24%42%48%33 +PASS U+7F72 署 %1B%24%42%3D%70 +PASS U+7F75 罵 %1B%24%42%47%4D +PASS U+7F77 罷 %1B%24%42%48%6D +PASS U+7F78 罸 %1B%24%42%66%2F +PASS U+7F79 罹 %1B%24%42%58%6D +PASS U+7F82 羂 %1B%24%42%66%30 +PASS U+7F83 羃 %1B%24%42%66%32 +PASS U+7F85 羅 %1B%24%42%4D%65 +PASS U+7F86 羆 %1B%24%42%66%31 +PASS U+7F87 羇 %1B%24%42%66%34 +PASS U+7F88 羈 %1B%24%42%66%33 +PASS U+7F8A 羊 %1B%24%42%4D%53 +PASS U+7F8C 羌 %1B%24%42%66%35 +PASS U+7F8E 美 %1B%24%42%48%7E +PASS U+7F94 羔 %1B%24%42%66%36 +PASS U+7F9A 羚 %1B%24%42%66%39 +PASS U+7F9D 羝 %1B%24%42%66%38 +PASS U+7F9E 羞 %1B%24%42%66%37 +FAIL U+7FA1 羡 %1B%24%42%7B%55 assert_equals: expected "%1B%24%42%7B%55" but got "%26%23%33%32%36%37%33%3B" +PASS U+7FA3 羣 %1B%24%42%66%3A +PASS U+7FA4 群 %1B%24%42%37%32 +PASS U+7FA8 羨 %1B%24%42%41%22 +PASS U+7FA9 義 %1B%24%42%35%41 +PASS U+7FAE 羮 %1B%24%42%66%3E +PASS U+7FAF 羯 %1B%24%42%66%3B +PASS U+7FB2 羲 %1B%24%42%66%3C +PASS U+7FB6 羶 %1B%24%42%66%3F +PASS U+7FB8 羸 %1B%24%42%66%40 +PASS U+7FB9 羹 %1B%24%42%66%3D +PASS U+7FBD 羽 %1B%24%42%31%29 +PASS U+7FC1 翁 %1B%24%42%32%27 +PASS U+7FC5 翅 %1B%24%42%66%42 +PASS U+7FC6 翆 %1B%24%42%66%43 +PASS U+7FCA 翊 %1B%24%42%66%44 +PASS U+7FCC 翌 %1B%24%42%4D%62 +PASS U+7FD2 習 %1B%24%42%3D%2C +PASS U+7FD4 翔 %1B%24%42%66%46 +PASS U+7FD5 翕 %1B%24%42%66%45 +PASS U+7FE0 翠 %1B%24%42%3F%69 +PASS U+7FE1 翡 %1B%24%42%66%47 +PASS U+7FE6 翦 %1B%24%42%66%48 +PASS U+7FE9 翩 %1B%24%42%66%49 +PASS U+7FEB 翫 %1B%24%42%34%65 +PASS U+7FF0 翰 %1B%24%42%34%4D +PASS U+7FF3 翳 %1B%24%42%66%4A +PASS U+7FF9 翹 %1B%24%42%66%4B +PASS U+7FFB 翻 %1B%24%42%4B%5D +PASS U+7FFC 翼 %1B%24%42%4D%63 +PASS U+8000 耀 %1B%24%42%4D%54 +PASS U+8001 老 %1B%24%42%4F%37 +PASS U+8003 考 %1B%24%42%39%4D +PASS U+8004 耄 %1B%24%42%66%4E +PASS U+8005 者 %1B%24%42%3C%54 +PASS U+8006 耆 %1B%24%42%66%4D +PASS U+800B 耋 %1B%24%42%66%4F +PASS U+800C 而 %1B%24%42%3C%29 +PASS U+8010 耐 %1B%24%42%42%51 +PASS U+8012 耒 %1B%24%42%66%50 +PASS U+8015 耕 %1B%24%42%39%4C +PASS U+8017 耗 %1B%24%42%4C%57 +PASS U+8018 耘 %1B%24%42%66%51 +PASS U+8019 耙 %1B%24%42%66%52 +PASS U+801C 耜 %1B%24%42%66%53 +PASS U+8021 耡 %1B%24%42%66%54 +PASS U+8028 耨 %1B%24%42%66%55 +PASS U+8033 耳 %1B%24%42%3C%2A +PASS U+8036 耶 %1B%24%42%4C%6D +PASS U+803B 耻 %1B%24%42%66%57 +PASS U+803D 耽 %1B%24%42%43%3F +PASS U+803F 耿 %1B%24%42%66%56 +PASS U+8046 聆 %1B%24%42%66%59 +PASS U+804A 聊 %1B%24%42%66%58 +PASS U+8052 聒 %1B%24%42%66%5A +PASS U+8056 聖 %1B%24%42%40%3B +PASS U+8058 聘 %1B%24%42%66%5B +PASS U+805A 聚 %1B%24%42%66%5C +PASS U+805E 聞 %1B%24%42%4A%39 +PASS U+805F 聟 %1B%24%42%66%5D +PASS U+8061 聡 %1B%24%42%41%6F +PASS U+8062 聢 %1B%24%42%66%5E +PASS U+8068 聨 %1B%24%42%66%5F +PASS U+806F 聯 %1B%24%42%4E%7E +PASS U+8070 聰 %1B%24%42%66%62 +PASS U+8072 聲 %1B%24%42%66%61 +PASS U+8073 聳 %1B%24%42%66%60 +PASS U+8074 聴 %1B%24%42%44%30 +PASS U+8076 聶 %1B%24%42%66%63 +PASS U+8077 職 %1B%24%42%3F%26 +PASS U+8079 聹 %1B%24%42%66%64 +PASS U+807D 聽 %1B%24%42%66%65 +PASS U+807E 聾 %1B%24%42%4F%38 +PASS U+807F 聿 %1B%24%42%66%66 +PASS U+8084 肄 %1B%24%42%66%67 +PASS U+8085 肅 %1B%24%42%66%69 +PASS U+8086 肆 %1B%24%42%66%68 +PASS U+8087 肇 %1B%24%42%48%25 +PASS U+8089 肉 %1B%24%42%46%79 +PASS U+808B 肋 %1B%24%42%4F%3E +PASS U+808C 肌 %1B%24%42%48%29 +PASS U+8093 肓 %1B%24%42%66%6B +PASS U+8096 肖 %1B%24%42%3E%53 +PASS U+8098 肘 %1B%24%42%49%2A +PASS U+809A 肚 %1B%24%42%66%6C +PASS U+809B 肛 %1B%24%42%66%6A +PASS U+809D 肝 %1B%24%42%34%4E +PASS U+80A1 股 %1B%24%42%38%54 +PASS U+80A2 肢 %1B%24%42%3B%68 +PASS U+80A5 肥 %1B%24%42%48%6E +PASS U+80A9 肩 %1B%24%42%38%2A +PASS U+80AA 肪 %1B%24%42%4B%43 +PASS U+80AC 肬 %1B%24%42%66%6F +PASS U+80AD 肭 %1B%24%42%66%6D +PASS U+80AF 肯 %1B%24%42%39%4E +PASS U+80B1 肱 %1B%24%42%39%4F +PASS U+80B2 育 %1B%24%42%30%69 +PASS U+80B4 肴 %1B%24%42%3A%68 +PASS U+80BA 肺 %1B%24%42%47%59 +PASS U+80C3 胃 %1B%24%42%30%5F +PASS U+80C4 胄 %1B%24%42%66%74 +PASS U+80C6 胆 %1B%24%42%43%40 +PASS U+80CC 背 %1B%24%42%47%58 +PASS U+80CE 胎 %1B%24%42%42%5B +PASS U+80D6 胖 %1B%24%42%66%76 +PASS U+80D9 胙 %1B%24%42%66%72 +PASS U+80DA 胚 %1B%24%42%66%75 +PASS U+80DB 胛 %1B%24%42%66%70 +PASS U+80DD 胝 %1B%24%42%66%73 +PASS U+80DE 胞 %1B%24%42%4B%26 +PASS U+80E1 胡 %1B%24%42%38%55 +PASS U+80E4 胤 %1B%24%42%30%7D +PASS U+80E5 胥 %1B%24%42%66%71 +PASS U+80EF 胯 %1B%24%42%66%78 +PASS U+80F1 胱 %1B%24%42%66%79 +PASS U+80F4 胴 %1B%24%42%46%39 +PASS U+80F8 胸 %1B%24%42%36%3B +PASS U+80FC 胼 %1B%24%42%67%26 +PASS U+80FD 能 %1B%24%42%47%3D +PASS U+8102 脂 %1B%24%42%3B%69 +PASS U+8105 脅 %1B%24%42%36%3C +PASS U+8106 脆 %1B%24%42%40%48 +PASS U+8107 脇 %1B%24%42%4F%46 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_5001-6000-expected.txt new file mode 100644 index 0000000..26f2887 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_5001-6000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8108 脈 %1B%24%42%4C%2E +PASS U+8109 脉 %1B%24%42%66%77 +PASS U+810A 脊 %1B%24%42%40%54 +PASS U+811A 脚 %1B%24%42%35%53 +PASS U+811B 脛 %1B%24%42%66%7A +PASS U+8123 脣 %1B%24%42%66%7C +PASS U+8129 脩 %1B%24%42%66%7B +PASS U+812F 脯 %1B%24%42%66%7D +PASS U+8131 脱 %1B%24%42%43%26 +PASS U+8133 脳 %1B%24%42%47%3E +PASS U+8139 脹 %1B%24%42%44%31 +PASS U+813E 脾 %1B%24%42%67%23 +PASS U+8146 腆 %1B%24%42%67%22 +PASS U+814B 腋 %1B%24%42%66%7E +PASS U+814E 腎 %1B%24%42%3F%55 +PASS U+8150 腐 %1B%24%42%49%65 +PASS U+8151 腑 %1B%24%42%67%25 +PASS U+8153 腓 %1B%24%42%67%24 +PASS U+8154 腔 %1B%24%42%39%50 +PASS U+8155 腕 %1B%24%42%4F%53 +PASS U+815F 腟 %1B%24%42%67%35 +PASS U+8165 腥 %1B%24%42%67%29 +PASS U+8166 腦 %1B%24%42%67%2A +PASS U+816B 腫 %1B%24%42%3C%70 +PASS U+816E 腮 %1B%24%42%67%28 +PASS U+8170 腰 %1B%24%42%39%78 +PASS U+8171 腱 %1B%24%42%67%27 +PASS U+8174 腴 %1B%24%42%67%2B +PASS U+8178 腸 %1B%24%42%44%32 +PASS U+8179 腹 %1B%24%42%4A%22 +PASS U+817A 腺 %1B%24%42%41%23 +PASS U+817F 腿 %1B%24%42%42%5C +PASS U+8180 膀 %1B%24%42%67%2F +PASS U+8182 膂 %1B%24%42%67%30 +PASS U+8183 膃 %1B%24%42%67%2C +PASS U+8188 膈 %1B%24%42%67%2D +PASS U+818A 膊 %1B%24%42%67%2E +PASS U+818F 膏 %1B%24%42%39%51 +PASS U+8193 膓 %1B%24%42%67%36 +PASS U+8195 膕 %1B%24%42%67%32 +PASS U+819A 膚 %1B%24%42%49%66 +PASS U+819C 膜 %1B%24%42%4B%6C +PASS U+819D 膝 %1B%24%42%49%28 +PASS U+81A0 膠 %1B%24%42%67%31 +PASS U+81A3 膣 %1B%24%42%67%34 +PASS U+81A4 膤 %1B%24%42%67%33 +PASS U+81A8 膨 %1B%24%42%4B%44 +PASS U+81A9 膩 %1B%24%42%67%37 +PASS U+81B0 膰 %1B%24%42%67%38 +PASS U+81B3 膳 %1B%24%42%41%37 +PASS U+81B5 膵 %1B%24%42%67%39 +PASS U+81B8 膸 %1B%24%42%67%3B +PASS U+81BA 膺 %1B%24%42%67%3F +PASS U+81BD 膽 %1B%24%42%67%3C +PASS U+81BE 膾 %1B%24%42%67%3A +PASS U+81BF 膿 %1B%24%42%47%3F +PASS U+81C0 臀 %1B%24%42%67%3D +PASS U+81C2 臂 %1B%24%42%67%3E +PASS U+81C6 臆 %1B%24%42%32%32 +PASS U+81C8 臈 %1B%24%42%67%45 +PASS U+81C9 臉 %1B%24%42%67%40 +PASS U+81CD 臍 %1B%24%42%67%41 +PASS U+81D1 臑 %1B%24%42%67%42 +PASS U+81D3 臓 %1B%24%42%42%21 +PASS U+81D8 臘 %1B%24%42%67%44 +PASS U+81D9 臙 %1B%24%42%67%43 +PASS U+81DA 臚 %1B%24%42%67%46 +PASS U+81DF 臟 %1B%24%42%67%47 +PASS U+81E0 臠 %1B%24%42%67%48 +PASS U+81E3 臣 %1B%24%42%3F%43 +PASS U+81E5 臥 %1B%24%42%32%69 +PASS U+81E7 臧 %1B%24%42%67%49 +PASS U+81E8 臨 %1B%24%42%4E%57 +PASS U+81EA 自 %1B%24%42%3C%2B +PASS U+81ED 臭 %1B%24%42%3D%2D +PASS U+81F3 至 %1B%24%42%3B%6A +PASS U+81F4 致 %1B%24%42%43%57 +PASS U+81FA 臺 %1B%24%42%67%4A +PASS U+81FB 臻 %1B%24%42%67%4B +PASS U+81FC 臼 %1B%24%42%31%31 +PASS U+81FE 臾 %1B%24%42%67%4C +PASS U+8201 舁 %1B%24%42%67%4D +PASS U+8202 舂 %1B%24%42%67%4E +PASS U+8205 舅 %1B%24%42%67%4F +PASS U+8207 與 %1B%24%42%67%50 +PASS U+8208 興 %1B%24%42%36%3D +PASS U+8209 舉 %1B%24%42%5A%2A +PASS U+820A 舊 %1B%24%42%67%51 +PASS U+820C 舌 %1B%24%42%40%65 +PASS U+820D 舍 %1B%24%42%67%52 +PASS U+820E 舎 %1B%24%42%3C%4B +PASS U+8210 舐 %1B%24%42%67%53 +PASS U+8212 舒 %1B%24%42%50%30 +PASS U+8216 舖 %1B%24%42%67%54 +PASS U+8217 舗 %1B%24%42%4A%5E +PASS U+8218 舘 %1B%24%42%34%5C +PASS U+821B 舛 %1B%24%42%41%24 +PASS U+821C 舜 %1B%24%42%3D%58 +PASS U+821E 舞 %1B%24%42%49%71 +PASS U+821F 舟 %1B%24%42%3D%2E +PASS U+8229 舩 %1B%24%42%67%55 +PASS U+822A 航 %1B%24%42%39%52 +PASS U+822B 舫 %1B%24%42%67%56 +PASS U+822C 般 %1B%24%42%48%4C +PASS U+822E 舮 %1B%24%42%67%64 +PASS U+8233 舳 %1B%24%42%67%58 +PASS U+8235 舵 %1B%24%42%42%49 +PASS U+8236 舶 %1B%24%42%47%75 +PASS U+8237 舷 %1B%24%42%38%3F +PASS U+8238 舸 %1B%24%42%67%57 +PASS U+8239 船 %1B%24%42%41%25 +PASS U+8240 艀 %1B%24%42%67%59 +PASS U+8247 艇 %1B%24%42%44%7A +PASS U+8258 艘 %1B%24%42%67%5B +PASS U+8259 艙 %1B%24%42%67%5A +PASS U+825A 艚 %1B%24%42%67%5D +PASS U+825D 艝 %1B%24%42%67%5C +PASS U+825F 艟 %1B%24%42%67%5E +PASS U+8262 艢 %1B%24%42%67%60 +PASS U+8264 艤 %1B%24%42%67%5F +PASS U+8266 艦 %1B%24%42%34%4F +PASS U+8268 艨 %1B%24%42%67%61 +PASS U+826A 艪 %1B%24%42%67%62 +PASS U+826B 艫 %1B%24%42%67%63 +PASS U+826E 艮 %1B%24%42%3A%31 +PASS U+826F 良 %1B%24%42%4E%49 +PASS U+8271 艱 %1B%24%42%67%65 +PASS U+8272 色 %1B%24%42%3F%27 +PASS U+8276 艶 %1B%24%42%31%70 +PASS U+8277 艷 %1B%24%42%67%66 +PASS U+8278 艸 %1B%24%42%67%67 +PASS U+827E 艾 %1B%24%42%67%68 +PASS U+828B 芋 %1B%24%42%30%72 +PASS U+828D 芍 %1B%24%42%67%69 +PASS U+8292 芒 %1B%24%42%67%6A +PASS U+8299 芙 %1B%24%42%49%67 +PASS U+829D 芝 %1B%24%42%3C%47 +PASS U+829F 芟 %1B%24%42%67%6C +PASS U+82A5 芥 %1B%24%42%33%29 +PASS U+82A6 芦 %1B%24%42%30%32 +PASS U+82AB 芫 %1B%24%42%67%6B +PASS U+82AC 芬 %1B%24%42%67%6E +PASS U+82AD 芭 %1B%24%42%47%4E +PASS U+82AF 芯 %1B%24%42%3F%44 +PASS U+82B1 花 %1B%24%42%32%56 +PASS U+82B3 芳 %1B%24%42%4B%27 +PASS U+82B8 芸 %1B%24%42%37%5D +PASS U+82B9 芹 %1B%24%42%36%5C +PASS U+82BB 芻 %1B%24%42%67%6D +PASS U+82BD 芽 %1B%24%42%32%6A +PASS U+82C5 苅 %1B%24%42%34%23 +PASS U+82D1 苑 %1B%24%42%31%71 +PASS U+82D2 苒 %1B%24%42%67%72 +PASS U+82D3 苓 %1B%24%42%4E%6A +PASS U+82D4 苔 %1B%24%42%42%5D +PASS U+82D7 苗 %1B%24%42%49%44 +PASS U+82D9 苙 %1B%24%42%67%7E +PASS U+82DB 苛 %1B%24%42%32%57 +PASS U+82DC 苜 %1B%24%42%67%7C +PASS U+82DE 苞 %1B%24%42%67%7A +PASS U+82DF 苟 %1B%24%42%67%71 +PASS U+82E1 苡 %1B%24%42%67%6F +PASS U+82E3 苣 %1B%24%42%67%70 +PASS U+82E5 若 %1B%24%42%3C%63 +PASS U+82E6 苦 %1B%24%42%36%6C +PASS U+82E7 苧 %1B%24%42%43%77 +PASS U+82EB 苫 %1B%24%42%46%51 +PASS U+82F1 英 %1B%24%42%31%51 +PASS U+82F3 苳 %1B%24%42%67%74 +PASS U+82F4 苴 %1B%24%42%67%73 +PASS U+82F9 苹 %1B%24%42%67%79 +PASS U+82FA 苺 %1B%24%42%67%75 +PASS U+82FB 苻 %1B%24%42%67%78 +FAIL U+8301 茁 %1B%24%42%7B%57 assert_equals: expected "%1B%24%42%7B%57" but got "%26%23%33%33%35%33%37%3B" +PASS U+8302 茂 %1B%24%42%4C%50 +PASS U+8303 范 %1B%24%42%67%77 +PASS U+8304 茄 %1B%24%42%32%58 +PASS U+8305 茅 %1B%24%42%33%7D +PASS U+8306 茆 %1B%24%42%67%7B +PASS U+8309 茉 %1B%24%42%67%7D +PASS U+830E 茎 %1B%24%42%37%54 +PASS U+8316 茖 %1B%24%42%68%23 +PASS U+8317 茗 %1B%24%42%68%2C +PASS U+8318 茘 %1B%24%42%68%2D +PASS U+831C 茜 %1B%24%42%30%2B +PASS U+8323 茣 %1B%24%42%68%34 +PASS U+8328 茨 %1B%24%42%30%71 +PASS U+832B 茫 %1B%24%42%68%2B +PASS U+832F 茯 %1B%24%42%68%2A +PASS U+8331 茱 %1B%24%42%68%25 +PASS U+8332 茲 %1B%24%42%68%24 +PASS U+8334 茴 %1B%24%42%68%22 +PASS U+8335 茵 %1B%24%42%68%21 +PASS U+8336 茶 %1B%24%42%43%63 +PASS U+8338 茸 %1B%24%42%42%7B +PASS U+8339 茹 %1B%24%42%68%27 +PASS U+8340 荀 %1B%24%42%68%26 +PASS U+8345 荅 %1B%24%42%68%29 +PASS U+8349 草 %1B%24%42%41%70 +PASS U+834A 荊 %1B%24%42%37%55 +PASS U+834F 荏 %1B%24%42%31%41 +PASS U+8350 荐 %1B%24%42%68%28 +PASS U+8352 荒 %1B%24%42%39%53 +PASS U+8358 荘 %1B%24%42%41%71 +FAIL U+8362 荢 %1B%24%42%7B%58 assert_equals: expected "%1B%24%42%7B%58" but got "%26%23%33%33%36%33%34%3B" +PASS U+8373 荳 %1B%24%42%68%3A +PASS U+8375 荵 %1B%24%42%68%3B +PASS U+8377 荷 %1B%24%42%32%59 +PASS U+837B 荻 %1B%24%42%32%2E +PASS U+837C 荼 %1B%24%42%68%38 +FAIL U+837F 荿 %1B%24%42%7B%59 assert_equals: expected "%1B%24%42%7B%59" but got "%26%23%33%33%36%36%33%3B" +PASS U+8385 莅 %1B%24%42%68%2E +PASS U+8387 莇 %1B%24%42%68%36 +PASS U+8389 莉 %1B%24%42%68%3D +PASS U+838A 莊 %1B%24%42%68%37 +PASS U+838E 莎 %1B%24%42%68%35 +PASS U+8393 莓 %1B%24%42%67%76 +PASS U+8396 莖 %1B%24%42%68%33 +PASS U+839A 莚 %1B%24%42%68%2F +PASS U+839E 莞 %1B%24%42%34%50 +PASS U+839F 莟 %1B%24%42%68%31 +PASS U+83A0 莠 %1B%24%42%68%3C +PASS U+83A2 莢 %1B%24%42%68%32 +PASS U+83A8 莨 %1B%24%42%68%3E +PASS U+83AA 莪 %1B%24%42%68%30 +PASS U+83AB 莫 %1B%24%42%47%7C +PASS U+83B1 莱 %1B%24%42%4D%69 +PASS U+83B5 莵 %1B%24%42%68%39 +PASS U+83BD 莽 %1B%24%42%68%4F +PASS U+83C1 菁 %1B%24%42%68%47 +PASS U+83C5 菅 %1B%24%42%3F%7B +FAIL U+83C7 菇 %1B%24%42%7B%5A assert_equals: expected "%1B%24%42%7B%5A" but got "%26%23%33%33%37%33%35%3B" +PASS U+83CA 菊 %1B%24%42%35%46 +PASS U+83CC 菌 %1B%24%42%36%5D +PASS U+83CE 菎 %1B%24%42%68%42 +PASS U+83D3 菓 %1B%24%42%32%5B +PASS U+83D6 菖 %1B%24%42%3E%54 +PASS U+83D8 菘 %1B%24%42%68%45 +PASS U+83DC 菜 %1B%24%42%3A%5A +PASS U+83DF 菟 %1B%24%42%45%51 +PASS U+83E0 菠 %1B%24%42%68%4A +PASS U+83E9 菩 %1B%24%42%4A%6E +PASS U+83EB 菫 %1B%24%42%68%41 +PASS U+83EF 華 %1B%24%42%32%5A +PASS U+83F0 菰 %1B%24%42%38%56 +PASS U+83F1 菱 %1B%24%42%49%29 +PASS U+83F2 菲 %1B%24%42%68%4B +PASS U+83F4 菴 %1B%24%42%68%3F +FAIL U+83F6 菶 %1B%24%42%7B%5B assert_equals: expected "%1B%24%42%7B%5B" but got "%26%23%33%33%37%38%32%3B" +PASS U+83F7 菷 %1B%24%42%68%48 +PASS U+83FB 菻 %1B%24%42%68%52 +PASS U+83FD 菽 %1B%24%42%68%43 +PASS U+8403 萃 %1B%24%42%68%44 +PASS U+8404 萄 %1B%24%42%46%3A +PASS U+8407 萇 %1B%24%42%68%49 +PASS U+840B 萋 %1B%24%42%68%46 +PASS U+840C 萌 %1B%24%42%4B%28 +PASS U+840D 萍 %1B%24%42%68%4C +PASS U+840E 萎 %1B%24%42%30%60 +PASS U+8413 萓 %1B%24%42%68%40 +PASS U+8420 萠 %1B%24%42%68%4E +PASS U+8422 萢 %1B%24%42%68%4D +PASS U+8429 萩 %1B%24%42%47%6B +PASS U+842A 萪 %1B%24%42%68%54 +PASS U+842C 萬 %1B%24%42%68%5F +PASS U+8431 萱 %1B%24%42%33%7E +PASS U+8435 萵 %1B%24%42%68%62 +PASS U+8438 萸 %1B%24%42%68%50 +PASS U+843C 萼 %1B%24%42%68%55 +PASS U+843D 落 %1B%24%42%4D%6E +PASS U+8446 葆 %1B%24%42%68%5E +FAIL U+8448 葈 %1B%24%42%7B%5C assert_equals: expected "%1B%24%42%7B%5C" but got "%26%23%33%33%38%36%34%3B" +PASS U+8449 葉 %1B%24%42%4D%55 +PASS U+844E 葎 %1B%24%42%4E%2A +PASS U+8457 著 %1B%24%42%43%78 +PASS U+845B 葛 %1B%24%42%33%6B +PASS U+8461 葡 %1B%24%42%49%72 +PASS U+8462 葢 %1B%24%42%68%64 +PASS U+8463 董 %1B%24%42%46%21 +PASS U+8466 葦 %1B%24%42%30%31 +PASS U+8469 葩 %1B%24%42%68%5D +PASS U+846B 葫 %1B%24%42%68%59 +PASS U+846C 葬 %1B%24%42%41%72 +PASS U+846D 葭 %1B%24%42%68%53 +PASS U+846E 葮 %1B%24%42%68%5B +PASS U+846F 葯 %1B%24%42%68%60 +PASS U+8471 葱 %1B%24%42%47%2C +PASS U+8475 葵 %1B%24%42%30%2A +PASS U+8477 葷 %1B%24%42%68%58 +PASS U+8479 葹 %1B%24%42%68%61 +PASS U+847A 葺 %1B%24%42%49%78 +PASS U+8482 蒂 %1B%24%42%68%5C +PASS U+8484 蒄 %1B%24%42%68%57 +PASS U+848B 蒋 %1B%24%42%3E%55 +PASS U+8490 蒐 %1B%24%42%3D%2F +PASS U+8494 蒔 %1B%24%42%3C%2C +PASS U+8499 蒙 %1B%24%42%4C%58 +PASS U+849C 蒜 %1B%24%42%49%47 +PASS U+849F 蒟 %1B%24%42%68%67 +PASS U+84A1 蒡 %1B%24%42%68%70 +PASS U+84AD 蒭 %1B%24%42%68%5A +PASS U+84B2 蒲 %1B%24%42%33%77 +FAIL U+84B4 蒴 %1B%24%42%7B%5D assert_equals: expected "%1B%24%42%7B%5D" but got "%26%23%33%33%39%37%32%3B" +PASS U+84B8 蒸 %1B%24%42%3E%78 +PASS U+84B9 蒹 %1B%24%42%68%65 +PASS U+84BB 蒻 %1B%24%42%68%6A +PASS U+84BC 蒼 %1B%24%42%41%73 +PASS U+84BF 蒿 %1B%24%42%68%66 +PASS U+84C1 蓁 %1B%24%42%68%6D +PASS U+84C4 蓄 %1B%24%42%43%5F +PASS U+84C6 蓆 %1B%24%42%68%6E +PASS U+84C9 蓉 %1B%24%42%4D%56 +PASS U+84CA 蓊 %1B%24%42%68%63 +PASS U+84CB 蓋 %1B%24%42%33%38 +PASS U+84CD 蓍 %1B%24%42%68%69 +PASS U+84D0 蓐 %1B%24%42%68%6C +PASS U+84D1 蓑 %1B%24%42%4C%2C +PASS U+84D6 蓖 %1B%24%42%68%6F +PASS U+84D9 蓙 %1B%24%42%68%68 +PASS U+84DA 蓚 %1B%24%42%68%6B +FAIL U+84DC 蓜 %1B%24%42%79%25 assert_equals: expected "%1B%24%42%79%25" but got "%26%23%33%34%30%31%32%3B" +PASS U+84EC 蓬 %1B%24%42%4B%29 +PASS U+84EE 蓮 %1B%24%42%4F%21 +PASS U+84F4 蓴 %1B%24%42%68%73 +PASS U+84FC 蓼 %1B%24%42%68%7A +PASS U+84FF 蓿 %1B%24%42%68%72 +PASS U+8500 蔀 %1B%24%42%3C%43 +PASS U+8506 蔆 %1B%24%42%68%51 +PASS U+8511 蔑 %1B%24%42%4A%4E +PASS U+8513 蔓 %1B%24%42%4C%22 +PASS U+8514 蔔 %1B%24%42%68%79 +PASS U+8515 蔕 %1B%24%42%68%78 +PASS U+8517 蔗 %1B%24%42%68%74 +PASS U+8518 蔘 %1B%24%42%68%75 +PASS U+851A 蔚 %1B%24%42%31%36 +PASS U+851F 蔟 %1B%24%42%68%77 +PASS U+8521 蔡 %1B%24%42%68%71 +PASS U+8526 蔦 %1B%24%42%44%55 +PASS U+852C 蔬 %1B%24%42%68%76 +PASS U+852D 蔭 %1B%24%42%30%7E +PASS U+8535 蔵 %1B%24%42%42%22 +PASS U+853D 蔽 %1B%24%42%4A%43 +PASS U+8540 蕀 %1B%24%42%68%7B +PASS U+8541 蕁 %1B%24%42%69%21 +PASS U+8543 蕃 %1B%24%42%48%59 +PASS U+8548 蕈 %1B%24%42%68%7E +PASS U+8549 蕉 %1B%24%42%3E%56 +PASS U+854A 蕊 %1B%24%42%3C%49 +PASS U+854B 蕋 %1B%24%42%69%23 +PASS U+854E 蕎 %1B%24%42%36%3E +FAIL U+8553 蕓 %1B%24%42%7B%5E assert_equals: expected "%1B%24%42%7B%5E" but got "%26%23%33%34%31%33%31%3B" +PASS U+8555 蕕 %1B%24%42%69%24 +PASS U+8557 蕗 %1B%24%42%49%79 +PASS U+8558 蕘 %1B%24%42%68%7D +FAIL U+8559 蕙 %1B%24%42%7B%5F assert_equals: expected "%1B%24%42%7B%5F" but got "%26%23%33%34%31%33%37%3B" +PASS U+855A 蕚 %1B%24%42%68%56 +PASS U+8563 蕣 %1B%24%42%68%7C +PASS U+8568 蕨 %1B%24%42%4F%4F +PASS U+8569 蕩 %1B%24%42%46%22 +PASS U+856A 蕪 %1B%24%42%49%73 +FAIL U+856B 蕫 %1B%24%42%7B%60 assert_equals: expected "%1B%24%42%7B%60" but got "%26%23%33%34%31%35%35%3B" +PASS U+856D 蕭 %1B%24%42%69%2B +PASS U+8577 蕷 %1B%24%42%69%31 +PASS U+857E 蕾 %1B%24%42%69%32 +PASS U+8580 薀 %1B%24%42%69%25 +PASS U+8584 薄 %1B%24%42%47%76 +PASS U+8587 薇 %1B%24%42%69%2F +PASS U+8588 薈 %1B%24%42%69%27 +PASS U+858A 薊 %1B%24%42%69%29 +PASS U+8590 薐 %1B%24%42%69%33 +PASS U+8591 薑 %1B%24%42%69%28 +PASS U+8594 薔 %1B%24%42%69%2C +PASS U+8597 薗 %1B%24%42%31%72 +PASS U+8599 薙 %1B%24%42%46%65 +PASS U+859B 薛 %1B%24%42%69%2D +PASS U+859C 薜 %1B%24%42%69%30 +PASS U+85A4 薤 %1B%24%42%69%26 +PASS U+85A6 薦 %1B%24%42%41%26 +PASS U+85A8 薨 %1B%24%42%69%2A +PASS U+85A9 薩 %1B%24%42%3B%27 +PASS U+85AA 薪 %1B%24%42%3F%45 +PASS U+85AB 薫 %1B%24%42%37%30 +PASS U+85AC 薬 %1B%24%42%4C%74 +PASS U+85AE 薮 %1B%24%42%4C%79 +PASS U+85AF 薯 %1B%24%42%3D%72 +FAIL U+85B0 薰 %1B%24%42%7B%62 assert_equals: expected "%1B%24%42%7B%62" but got "%26%23%33%34%32%32%34%3B" +PASS U+85B9 薹 %1B%24%42%69%37 +PASS U+85BA 薺 %1B%24%42%69%35 +PASS U+85C1 藁 %1B%24%42%4F%4E +PASS U+85C9 藉 %1B%24%42%69%34 +PASS U+85CD 藍 %1B%24%42%4D%75 +PASS U+85CF 藏 %1B%24%42%69%36 +PASS U+85D0 藐 %1B%24%42%69%38 +PASS U+85D5 藕 %1B%24%42%69%39 +PASS U+85DC 藜 %1B%24%42%69%3C +PASS U+85DD 藝 %1B%24%42%69%3A +PASS U+85E4 藤 %1B%24%42%46%23 +PASS U+85E5 藥 %1B%24%42%69%3B +PASS U+85E9 藩 %1B%24%42%48%4D +PASS U+85EA 藪 %1B%24%42%69%2E +PASS U+85F7 藷 %1B%24%42%3D%73 +PASS U+85F9 藹 %1B%24%42%69%3D +PASS U+85FA 藺 %1B%24%42%69%42 +PASS U+85FB 藻 %1B%24%42%41%74 +PASS U+85FE 藾 %1B%24%42%69%41 +PASS U+8602 蘂 %1B%24%42%69%22 +PASS U+8606 蘆 %1B%24%42%69%43 +PASS U+8607 蘇 %1B%24%42%41%49 +PASS U+860A 蘊 %1B%24%42%69%3E +PASS U+860B 蘋 %1B%24%42%69%40 +PASS U+8613 蘓 %1B%24%42%69%3F +PASS U+8616 蘖 %1B%24%42%5D%31 +PASS U+8617 蘗 %1B%24%42%5D%22 +PASS U+861A 蘚 %1B%24%42%69%45 +PASS U+8622 蘢 %1B%24%42%69%44 +PASS U+862D 蘭 %1B%24%42%4D%76 +PASS U+862F 蘯 %1B%24%42%62%3C +PASS U+8630 蘰 %1B%24%42%69%46 +PASS U+863F 蘿 %1B%24%42%69%47 +PASS U+864D 虍 %1B%24%42%69%48 +PASS U+864E 虎 %1B%24%42%38%57 +PASS U+8650 虐 %1B%24%42%35%54 +PASS U+8654 虔 %1B%24%42%69%4A +PASS U+8655 處 %1B%24%42%51%5D +PASS U+865A 虚 %1B%24%42%35%75 +PASS U+865C 虜 %1B%24%42%4E%3A +PASS U+865E 虞 %1B%24%42%36%73 +PASS U+865F 號 %1B%24%42%69%4B +PASS U+8667 虧 %1B%24%42%69%4C +PASS U+866B 虫 %1B%24%42%43%6E +PASS U+8671 虱 %1B%24%42%69%4D +PASS U+8679 虹 %1B%24%42%46%7A +PASS U+867B 虻 %1B%24%42%30%3A +PASS U+868A 蚊 %1B%24%42%32%63 +PASS U+868B 蚋 %1B%24%42%69%52 +PASS U+868C 蚌 %1B%24%42%69%53 +PASS U+8693 蚓 %1B%24%42%69%4E +PASS U+8695 蚕 %1B%24%42%3B%3D +PASS U+86A3 蚣 %1B%24%42%69%4F +PASS U+86A4 蚤 %1B%24%42%47%42 +PASS U+86A9 蚩 %1B%24%42%69%50 +PASS U+86AA 蚪 %1B%24%42%69%51 +PASS U+86AB 蚫 %1B%24%42%69%5B +PASS U+86AF 蚯 %1B%24%42%69%55 +PASS U+86B0 蚰 %1B%24%42%69%58 +PASS U+86B6 蚶 %1B%24%42%69%54 +PASS U+86C4 蛄 %1B%24%42%69%56 +PASS U+86C6 蛆 %1B%24%42%69%57 +PASS U+86C7 蛇 %1B%24%42%3C%58 +PASS U+86C9 蛉 %1B%24%42%69%59 +PASS U+86CB 蛋 %1B%24%42%43%41 +PASS U+86CD 蛍 %1B%24%42%37%56 +PASS U+86CE 蛎 %1B%24%42%33%42 +PASS U+86D4 蛔 %1B%24%42%69%5C +PASS U+86D9 蛙 %1B%24%42%33%3F +PASS U+86DB 蛛 %1B%24%42%69%61 +PASS U+86DE 蛞 %1B%24%42%69%5D +PASS U+86DF 蛟 %1B%24%42%69%60 +PASS U+86E4 蛤 %1B%24%42%48%3A +PASS U+86E9 蛩 %1B%24%42%69%5E +PASS U+86EC 蛬 %1B%24%42%69%5F +PASS U+86ED 蛭 %1B%24%42%49%48 +PASS U+86EE 蛮 %1B%24%42%48%5A +PASS U+86EF 蛯 %1B%24%42%69%62 +PASS U+86F8 蛸 %1B%24%42%42%7D +PASS U+86F9 蛹 %1B%24%42%69%6C +PASS U+86FB 蛻 %1B%24%42%69%68 +PASS U+86FE 蛾 %1B%24%42%32%6B +PASS U+8700 蜀 %1B%24%42%69%66 +PASS U+8702 蜂 %1B%24%42%4B%2A +PASS U+8703 蜃 %1B%24%42%69%67 +PASS U+8706 蜆 %1B%24%42%69%64 +PASS U+8708 蜈 %1B%24%42%69%65 +PASS U+8709 蜉 %1B%24%42%69%6A +PASS U+870A 蜊 %1B%24%42%69%6D +PASS U+870D 蜍 %1B%24%42%69%6B +PASS U+8711 蜑 %1B%24%42%69%69 +PASS U+8712 蜒 %1B%24%42%69%63 +PASS U+8718 蜘 %1B%24%42%43%58 +PASS U+871A 蜚 %1B%24%42%69%74 +PASS U+871C 蜜 %1B%24%42%4C%2A +PASS U+8725 蜥 %1B%24%42%69%72 +PASS U+8729 蜩 %1B%24%42%69%73 +PASS U+8734 蜴 %1B%24%42%69%6E +PASS U+8737 蜷 %1B%24%42%69%70 +PASS U+873B 蜻 %1B%24%42%69%71 +PASS U+873F 蜿 %1B%24%42%69%6F +PASS U+8749 蝉 %1B%24%42%40%66 +PASS U+874B 蝋 %1B%24%42%4F%39 +PASS U+874C 蝌 %1B%24%42%69%78 +PASS U+874E 蝎 %1B%24%42%69%79 +PASS U+8753 蝓 %1B%24%42%6A%21 +PASS U+8755 蝕 %1B%24%42%3F%2A +PASS U+8757 蝗 %1B%24%42%69%7B +PASS U+8759 蝙 %1B%24%42%69%7E +PASS U+875F 蝟 %1B%24%42%69%76 +PASS U+8760 蝠 %1B%24%42%69%75 +PASS U+8763 蝣 %1B%24%42%6A%22 +PASS U+8766 蝦 %1B%24%42%32%5C +PASS U+8768 蝨 %1B%24%42%69%7C +PASS U+876A 蝪 %1B%24%42%6A%23 +PASS U+876E 蝮 %1B%24%42%69%7D +PASS U+8774 蝴 %1B%24%42%69%7A +PASS U+8776 蝶 %1B%24%42%44%33 +PASS U+8778 蝸 %1B%24%42%69%77 +PASS U+877F 蝿 %1B%24%42%47%68 +PASS U+8782 螂 %1B%24%42%6A%27 +PASS U+878D 融 %1B%24%42%4D%3B +PASS U+879F 螟 %1B%24%42%6A%26 +PASS U+87A2 螢 %1B%24%42%6A%25 +PASS U+87AB 螫 %1B%24%42%6A%2E +PASS U+87AF 螯 %1B%24%42%6A%28 +PASS U+87B3 螳 %1B%24%42%6A%30 +PASS U+87BA 螺 %1B%24%42%4D%66 +PASS U+87BB 螻 %1B%24%42%6A%33 +PASS U+87BD 螽 %1B%24%42%6A%2A +PASS U+87C0 蟀 %1B%24%42%6A%2B +PASS U+87C4 蟄 %1B%24%42%6A%2F +PASS U+87C6 蟆 %1B%24%42%6A%32 +PASS U+87C7 蟇 %1B%24%42%6A%31 +PASS U+87CB 蟋 %1B%24%42%6A%29 +PASS U+87D0 蟐 %1B%24%42%6A%2C +PASS U+87D2 蟒 %1B%24%42%6A%3D +PASS U+87E0 蟠 %1B%24%42%6A%36 +PASS U+87EF 蟯 %1B%24%42%6A%34 +PASS U+87F2 蟲 %1B%24%42%6A%35 +PASS U+87F6 蟶 %1B%24%42%6A%3A +PASS U+87F7 蟷 %1B%24%42%6A%3B +PASS U+87F9 蟹 %1B%24%42%33%2A +PASS U+87FB 蟻 %1B%24%42%35%42 +PASS U+87FE 蟾 %1B%24%42%6A%39 +PASS U+8805 蠅 %1B%24%42%6A%24 +FAIL U+8807 蠇 %1B%24%42%7B%65 assert_equals: expected "%1B%24%42%7B%65" but got "%26%23%33%34%38%32%33%3B" +PASS U+880D 蠍 %1B%24%42%6A%38 +PASS U+880E 蠎 %1B%24%42%6A%3C +PASS U+880F 蠏 %1B%24%42%6A%37 +PASS U+8811 蠑 %1B%24%42%6A%3E +PASS U+8815 蠕 %1B%24%42%6A%40 +PASS U+8816 蠖 %1B%24%42%6A%3F +PASS U+8821 蠡 %1B%24%42%6A%42 +PASS U+8822 蠢 %1B%24%42%6A%41 +PASS U+8823 蠣 %1B%24%42%69%5A +PASS U+8827 蠧 %1B%24%42%6A%46 +PASS U+8831 蠱 %1B%24%42%6A%43 +PASS U+8836 蠶 %1B%24%42%6A%44 +PASS U+8839 蠹 %1B%24%42%6A%45 +PASS U+883B 蠻 %1B%24%42%6A%47 +PASS U+8840 血 %1B%24%42%37%6C +PASS U+8842 衂 %1B%24%42%6A%49 +PASS U+8844 衄 %1B%24%42%6A%48 +PASS U+8846 衆 %1B%24%42%3D%30 +PASS U+884C 行 %1B%24%42%39%54 +PASS U+884D 衍 %1B%24%42%5E%27 +PASS U+8852 衒 %1B%24%42%6A%4A +PASS U+8853 術 %1B%24%42%3D%51 +PASS U+8857 街 %1B%24%42%33%39 +PASS U+8859 衙 %1B%24%42%6A%4B +PASS U+885B 衛 %1B%24%42%31%52 +PASS U+885D 衝 %1B%24%42%3E%57 +PASS U+885E 衞 %1B%24%42%6A%4C +PASS U+8861 衡 %1B%24%42%39%55 +PASS U+8862 衢 %1B%24%42%6A%4D +PASS U+8863 衣 %1B%24%42%30%61 +PASS U+8868 表 %1B%24%42%49%3D +PASS U+886B 衫 %1B%24%42%6A%4E +PASS U+8870 衰 %1B%24%42%3F%6A +PASS U+8872 衲 %1B%24%42%6A%55 +PASS U+8875 衵 %1B%24%42%6A%52 +PASS U+8877 衷 %1B%24%42%43%6F +PASS U+887D 衽 %1B%24%42%6A%53 +PASS U+887E 衾 %1B%24%42%6A%50 +PASS U+887F 衿 %1B%24%42%36%5E +PASS U+8881 袁 %1B%24%42%6A%4F +PASS U+8882 袂 %1B%24%42%6A%56 +PASS U+8888 袈 %1B%24%42%37%36 +PASS U+888B 袋 %1B%24%42%42%5E +PASS U+888D 袍 %1B%24%42%6A%5C +PASS U+8892 袒 %1B%24%42%6A%58 +PASS U+8896 袖 %1B%24%42%42%35 +PASS U+8897 袗 %1B%24%42%6A%57 +PASS U+8899 袙 %1B%24%42%6A%5A +PASS U+889E 袞 %1B%24%42%6A%51 +PASS U+88A2 袢 %1B%24%42%6A%5B +PASS U+88A4 袤 %1B%24%42%6A%5D +PASS U+88AB 被 %1B%24%42%48%6F +PASS U+88AE 袮 %1B%24%42%6A%59 +PASS U+88B0 袰 %1B%24%42%6A%5E +PASS U+88B1 袱 %1B%24%42%6A%60 +PASS U+88B4 袴 %1B%24%42%38%53 +PASS U+88B5 袵 %1B%24%42%6A%54 +PASS U+88B7 袷 %1B%24%42%30%41 +PASS U+88BF 袿 %1B%24%42%6A%5F +PASS U+88C1 裁 %1B%24%42%3A%5B +PASS U+88C2 裂 %1B%24%42%4E%76 +PASS U+88C3 裃 %1B%24%42%6A%61 +PASS U+88C4 裄 %1B%24%42%6A%62 +PASS U+88C5 装 %1B%24%42%41%75 +PASS U+88CF 裏 %1B%24%42%4E%22 +PASS U+88D4 裔 %1B%24%42%6A%63 +PASS U+88D5 裕 %1B%24%42%4D%35 +PASS U+88D8 裘 %1B%24%42%6A%64 +PASS U+88D9 裙 %1B%24%42%6A%65 +PASS U+88DC 補 %1B%24%42%4A%64 +PASS U+88DD 裝 %1B%24%42%6A%66 +PASS U+88DF 裟 %1B%24%42%3A%40 +PASS U+88E1 裡 %1B%24%42%4E%23 +PASS U+88E8 裨 %1B%24%42%6A%6B +PASS U+88F2 裲 %1B%24%42%6A%6C +PASS U+88F3 裳 %1B%24%42%3E%58 +PASS U+88F4 裴 %1B%24%42%6A%6A +FAIL U+88F5 裵 %1B%24%42%7B%66 assert_equals: expected "%1B%24%42%7B%66" but got "%26%23%33%35%30%36%31%3B" +PASS U+88F8 裸 %1B%24%42%4D%67 +PASS U+88F9 裹 %1B%24%42%6A%67 +PASS U+88FC 裼 %1B%24%42%6A%69 +PASS U+88FD 製 %1B%24%42%40%3D +PASS U+88FE 裾 %1B%24%42%3F%7E +PASS U+8902 褂 %1B%24%42%6A%68 +PASS U+8904 褄 %1B%24%42%6A%6D +PASS U+8907 複 %1B%24%42%4A%23 +PASS U+890A 褊 %1B%24%42%6A%6F +PASS U+890C 褌 %1B%24%42%6A%6E +PASS U+8910 褐 %1B%24%42%33%6C +PASS U+8912 褒 %1B%24%42%4B%2B +PASS U+8913 褓 %1B%24%42%6A%70 +FAIL U+891C 褜 %1B%24%42%79%22 assert_equals: expected "%1B%24%42%79%22" but got "%26%23%33%35%31%30%30%3B" +PASS U+891D 褝 %1B%24%42%6A%7C +PASS U+891E 褞 %1B%24%42%6A%72 +PASS U+8925 褥 %1B%24%42%6A%73 +PASS U+892A 褪 %1B%24%42%6A%74 +PASS U+892B 褫 %1B%24%42%6A%75 +PASS U+8936 褶 %1B%24%42%6A%79 +PASS U+8938 褸 %1B%24%42%6A%7A +PASS U+893B 褻 %1B%24%42%6A%78 +PASS U+8941 襁 %1B%24%42%6A%76 +PASS U+8943 襃 %1B%24%42%6A%71 +PASS U+8944 襄 %1B%24%42%6A%77 +PASS U+894C 襌 %1B%24%42%6A%7B +PASS U+894D 襍 %1B%24%42%70%37 +PASS U+8956 襖 %1B%24%42%32%28 +PASS U+895E 襞 %1B%24%42%6A%7E +PASS U+895F 襟 %1B%24%42%36%5F +PASS U+8960 襠 %1B%24%42%6A%7D +PASS U+8964 襤 %1B%24%42%6B%22 +PASS U+8966 襦 %1B%24%42%6B%21 +PASS U+896A 襪 %1B%24%42%6B%24 +PASS U+896D 襭 %1B%24%42%6B%23 +PASS U+896F 襯 %1B%24%42%6B%25 +PASS U+8972 襲 %1B%24%42%3D%31 +PASS U+8974 襴 %1B%24%42%6B%26 +PASS U+8977 襷 %1B%24%42%6B%27 +PASS U+897E 襾 %1B%24%42%6B%28 +PASS U+897F 西 %1B%24%42%40%3E +PASS U+8981 要 %1B%24%42%4D%57 +PASS U+8983 覃 %1B%24%42%6B%29 +PASS U+8986 覆 %1B%24%42%4A%24 +PASS U+8987 覇 %1B%24%42%47%46 +PASS U+8988 覈 %1B%24%42%6B%2A +PASS U+898A 覊 %1B%24%42%6B%2B +PASS U+898B 見 %1B%24%42%38%2B +PASS U+898F 規 %1B%24%42%35%2C +PASS U+8993 覓 %1B%24%42%6B%2C +PASS U+8996 視 %1B%24%42%3B%6B +PASS U+8997 覗 %1B%24%42%47%41 +PASS U+8998 覘 %1B%24%42%6B%2D +PASS U+899A 覚 %1B%24%42%33%50 +PASS U+89A1 覡 %1B%24%42%6B%2E +PASS U+89A6 覦 %1B%24%42%6B%30 +PASS U+89A7 覧 %1B%24%42%4D%77 +PASS U+89A9 覩 %1B%24%42%6B%2F +PASS U+89AA 親 %1B%24%42%3F%46 +PASS U+89AC 覬 %1B%24%42%6B%31 +PASS U+89AF 覯 %1B%24%42%6B%32 +PASS U+89B2 覲 %1B%24%42%6B%33 +PASS U+89B3 観 %1B%24%42%34%51 +PASS U+89BA 覺 %1B%24%42%6B%34 +PASS U+89BD 覽 %1B%24%42%6B%35 +PASS U+89BF 覿 %1B%24%42%6B%36 +PASS U+89C0 觀 %1B%24%42%6B%37 +PASS U+89D2 角 %1B%24%42%33%51 +PASS U+89DA 觚 %1B%24%42%6B%38 +PASS U+89DC 觜 %1B%24%42%6B%39 +PASS U+89DD 觝 %1B%24%42%6B%3A +PASS U+89E3 解 %1B%24%42%32%72 +PASS U+89E6 触 %1B%24%42%3F%28 +PASS U+89E7 觧 %1B%24%42%6B%3B +PASS U+89F4 觴 %1B%24%42%6B%3C +PASS U+89F8 觸 %1B%24%42%6B%3D +PASS U+8A00 言 %1B%24%42%38%40 +PASS U+8A02 訂 %1B%24%42%44%7B +PASS U+8A03 訃 %1B%24%42%6B%3E +PASS U+8A08 計 %1B%24%42%37%57 +PASS U+8A0A 訊 %1B%24%42%3F%56 +PASS U+8A0C 訌 %1B%24%42%6B%41 +PASS U+8A0E 討 %1B%24%42%46%24 +PASS U+8A10 訐 %1B%24%42%6B%40 +FAIL U+8A12 訒 %1B%24%42%7B%67 assert_equals: expected "%1B%24%42%7B%67" but got "%26%23%33%35%33%34%36%3B" +PASS U+8A13 訓 %1B%24%42%37%31 +PASS U+8A16 訖 %1B%24%42%6B%3F +PASS U+8A17 託 %1B%24%42%42%77 +PASS U+8A18 記 %1B%24%42%35%2D +PASS U+8A1B 訛 %1B%24%42%6B%42 +PASS U+8A1D 訝 %1B%24%42%6B%43 +PASS U+8A1F 訟 %1B%24%42%3E%59 +PASS U+8A23 訣 %1B%24%42%37%6D +PASS U+8A25 訥 %1B%24%42%6B%44 +PASS U+8A2A 訪 %1B%24%42%4B%2C +PASS U+8A2D 設 %1B%24%42%40%5F +PASS U+8A31 許 %1B%24%42%35%76 +PASS U+8A33 訳 %1B%24%42%4C%75 +PASS U+8A34 訴 %1B%24%42%41%4A +PASS U+8A36 訶 %1B%24%42%6B%45 +FAIL U+8A37 訷 %1B%24%42%7B%68 assert_equals: expected "%1B%24%42%7B%68" but got "%26%23%33%35%33%38%33%3B" +PASS U+8A3A 診 %1B%24%42%3F%47 +PASS U+8A3B 註 %1B%24%42%43%70 +PASS U+8A3C 証 %1B%24%42%3E%5A +PASS U+8A41 詁 %1B%24%42%6B%46 +PASS U+8A46 詆 %1B%24%42%6B%49 +PASS U+8A48 詈 %1B%24%42%6B%4A +PASS U+8A50 詐 %1B%24%42%3A%3E +PASS U+8A51 詑 %1B%24%42%42%42 +PASS U+8A52 詒 %1B%24%42%6B%48 +PASS U+8A54 詔 %1B%24%42%3E%5B +PASS U+8A55 評 %1B%24%42%49%3E +PASS U+8A5B 詛 %1B%24%42%6B%47 +PASS U+8A5E 詞 %1B%24%42%3B%6C +PASS U+8A60 詠 %1B%24%42%31%53 +PASS U+8A62 詢 %1B%24%42%6B%4E +PASS U+8A63 詣 %1B%24%42%37%58 +PASS U+8A66 試 %1B%24%42%3B%6E +PASS U+8A69 詩 %1B%24%42%3B%6D +PASS U+8A6B 詫 %1B%24%42%4F%4D +PASS U+8A6C 詬 %1B%24%42%6B%4D +PASS U+8A6D 詭 %1B%24%42%6B%4C +PASS U+8A6E 詮 %1B%24%42%41%27 +PASS U+8A70 詰 %1B%24%42%35%4D +PASS U+8A71 話 %1B%24%42%4F%43 +PASS U+8A72 該 %1B%24%42%33%3A +PASS U+8A73 詳 %1B%24%42%3E%5C +FAIL U+8A79 詹 %1B%24%42%7B%69 assert_equals: expected "%1B%24%42%7B%69" but got "%26%23%33%35%34%34%39%3B" +PASS U+8A7C 詼 %1B%24%42%6B%4B +PASS U+8A82 誂 %1B%24%42%6B%50 +PASS U+8A84 誄 %1B%24%42%6B%51 +PASS U+8A85 誅 %1B%24%42%6B%4F +PASS U+8A87 誇 %1B%24%42%38%58 +PASS U+8A89 誉 %1B%24%42%4D%40 +PASS U+8A8C 誌 %1B%24%42%3B%6F +PASS U+8A8D 認 %1B%24%42%47%27 +PASS U+8A91 誑 %1B%24%42%6B%54 +PASS U+8A93 誓 %1B%24%42%40%40 +PASS U+8A95 誕 %1B%24%42%43%42 +PASS U+8A98 誘 %1B%24%42%4D%36 +PASS U+8A9A 誚 %1B%24%42%6B%57 +PASS U+8A9E 語 %1B%24%42%38%6C +PASS U+8AA0 誠 %1B%24%42%40%3F +PASS U+8AA1 誡 %1B%24%42%6B%53 +PASS U+8AA3 誣 %1B%24%42%6B%58 +PASS U+8AA4 誤 %1B%24%42%38%6D +PASS U+8AA5 誥 %1B%24%42%6B%55 +PASS U+8AA6 誦 %1B%24%42%6B%56 +FAIL U+8AA7 誧 %1B%24%42%7B%6A assert_equals: expected "%1B%24%42%7B%6A" but got "%26%23%33%35%34%39%35%3B" +PASS U+8AA8 誨 %1B%24%42%6B%52 +PASS U+8AAC 説 %1B%24%42%40%62 +PASS U+8AAD 読 %1B%24%42%46%49 +PASS U+8AB0 誰 %1B%24%42%43%2F +PASS U+8AB2 課 %1B%24%42%32%5D +PASS U+8AB9 誹 %1B%24%42%48%70 +PASS U+8ABC 誼 %1B%24%42%35%43 +FAIL U+8ABE 誾 %1B%24%42%7B%6B assert_equals: expected "%1B%24%42%7B%6B" but got "%26%23%33%35%35%31%38%3B" +PASS U+8ABF 調 %1B%24%42%44%34 +PASS U+8AC2 諂 %1B%24%42%6B%5B +PASS U+8AC4 諄 %1B%24%42%6B%59 +PASS U+8AC7 談 %1B%24%42%43%4C +PASS U+8ACB 請 %1B%24%42%40%41 +PASS U+8ACC 諌 %1B%24%42%34%52 +PASS U+8ACD 諍 %1B%24%42%6B%5A +PASS U+8ACF 諏 %1B%24%42%3F%5B +PASS U+8AD2 諒 %1B%24%42%4E%4A +PASS U+8AD6 論 %1B%24%42%4F%40 +PASS U+8ADA 諚 %1B%24%42%6B%5C +PASS U+8ADB 諛 %1B%24%42%6B%67 +PASS U+8ADC 諜 %1B%24%42%44%35 +PASS U+8ADE 諞 %1B%24%42%6B%66 +FAIL U+8ADF 諟 %1B%24%42%7B%6C assert_equals: expected "%1B%24%42%7B%6C" but got "%26%23%33%35%35%35%31%3B" +PASS U+8AE0 諠 %1B%24%42%6B%63 +PASS U+8AE1 諡 %1B%24%42%6B%6B +PASS U+8AE2 諢 %1B%24%42%6B%64 +PASS U+8AE4 諤 %1B%24%42%6B%60 +PASS U+8AE6 諦 %1B%24%42%44%7C +PASS U+8AE7 諧 %1B%24%42%6B%5F +PASS U+8AEB 諫 %1B%24%42%6B%5D +PASS U+8AED 諭 %1B%24%42%4D%21 +PASS U+8AEE 諮 %1B%24%42%3B%70 +PASS U+8AF1 諱 %1B%24%42%6B%61 +PASS U+8AF3 諳 %1B%24%42%6B%5E +FAIL U+8AF6 諶 %1B%24%42%7B%6E assert_equals: expected "%1B%24%42%7B%6E" but got "%26%23%33%35%35%37%34%3B" +PASS U+8AF7 諷 %1B%24%42%6B%65 +PASS U+8AF8 諸 %1B%24%42%3D%74 +PASS U+8AFA 諺 %1B%24%42%38%41 +PASS U+8AFE 諾 %1B%24%42%42%7A +PASS U+8B00 謀 %1B%24%42%4B%45 +PASS U+8B01 謁 %1B%24%42%31%5A +PASS U+8B02 謂 %1B%24%42%30%62 +PASS U+8B04 謄 %1B%24%42%46%25 +PASS U+8B07 謇 %1B%24%42%6B%69 +PASS U+8B0C 謌 %1B%24%42%6B%68 +PASS U+8B0E 謎 %1B%24%42%46%66 +PASS U+8B10 謐 %1B%24%42%6B%6D +PASS U+8B14 謔 %1B%24%42%6B%62 +PASS U+8B16 謖 %1B%24%42%6B%6C +PASS U+8B17 謗 %1B%24%42%6B%6E +PASS U+8B19 謙 %1B%24%42%38%2C +PASS U+8B1A 謚 %1B%24%42%6B%6A +PASS U+8B1B 講 %1B%24%42%39%56 +PASS U+8B1D 謝 %1B%24%42%3C%55 +PASS U+8B20 謠 %1B%24%42%6B%6F +PASS U+8B21 謡 %1B%24%42%4D%58 +PASS U+8B26 謦 %1B%24%42%6B%72 +PASS U+8B28 謨 %1B%24%42%6B%75 +PASS U+8B2B 謫 %1B%24%42%6B%73 +PASS U+8B2C 謬 %1B%24%42%49%35 +PASS U+8B33 謳 %1B%24%42%6B%70 +PASS U+8B39 謹 %1B%24%42%36%60 +PASS U+8B3E 謾 %1B%24%42%6B%74 +PASS U+8B41 譁 %1B%24%42%6B%76 +PASS U+8B49 證 %1B%24%42%6B%7A +PASS U+8B4C 譌 %1B%24%42%6B%77 +PASS U+8B4E 譎 %1B%24%42%6B%79 +PASS U+8B4F 譏 %1B%24%42%6B%78 +FAIL U+8B53 譓 %1B%24%42%7B%6F assert_equals: expected "%1B%24%42%7B%6F" but got "%26%23%33%35%36%36%37%3B" +PASS U+8B56 譖 %1B%24%42%6B%7B +PASS U+8B58 識 %1B%24%42%3C%31 +PASS U+8B5A 譚 %1B%24%42%6B%7D +PASS U+8B5B 譛 %1B%24%42%6B%7C +PASS U+8B5C 譜 %1B%24%42%49%68 +PASS U+8B5F 譟 %1B%24%42%6C%21 +PASS U+8B66 警 %1B%24%42%37%59 +PASS U+8B6B 譫 %1B%24%42%6B%7E +PASS U+8B6C 譬 %1B%24%42%6C%22 +PASS U+8B6F 譯 %1B%24%42%6C%23 +PASS U+8B70 議 %1B%24%42%35%44 +PASS U+8B71 譱 %1B%24%42%66%41 +PASS U+8B72 譲 %1B%24%42%3E%79 +PASS U+8B74 譴 %1B%24%42%6C%24 +PASS U+8B77 護 %1B%24%42%38%6E +PASS U+8B7D 譽 %1B%24%42%6C%25 +FAIL U+8B7F 譿 %1B%24%42%7B%70 assert_equals: expected "%1B%24%42%7B%70" but got "%26%23%33%35%37%31%31%3B" +PASS U+8B80 讀 %1B%24%42%6C%26 +PASS U+8B83 讃 %1B%24%42%3B%3E +PASS U+8B8A 變 %1B%24%42%5A%4E +PASS U+8B8C 讌 %1B%24%42%6C%27 +PASS U+8B8E 讎 %1B%24%42%6C%28 +PASS U+8B90 讐 %1B%24%42%3D%32 +PASS U+8B92 讒 %1B%24%42%6C%29 +PASS U+8B93 讓 %1B%24%42%6C%2A +PASS U+8B96 讖 %1B%24%42%6C%2B +PASS U+8B99 讙 %1B%24%42%6C%2C +PASS U+8B9A 讚 %1B%24%42%6C%2D +PASS U+8C37 谷 %1B%24%42%43%2B +PASS U+8C3A 谺 %1B%24%42%6C%2E +PASS U+8C3F 谿 %1B%24%42%6C%30 +PASS U+8C41 豁 %1B%24%42%6C%2F +PASS U+8C46 豆 %1B%24%42%46%26 +PASS U+8C48 豈 %1B%24%42%6C%31 +PASS U+8C4A 豊 %1B%24%42%4B%2D +PASS U+8C4C 豌 %1B%24%42%6C%32 +PASS U+8C4E 豎 %1B%24%42%6C%33 +PASS U+8C50 豐 %1B%24%42%6C%34 +PASS U+8C55 豕 %1B%24%42%6C%35 +PASS U+8C5A 豚 %1B%24%42%46%5A +PASS U+8C61 象 %1B%24%42%3E%5D +PASS U+8C62 豢 %1B%24%42%6C%36 +PASS U+8C6A 豪 %1B%24%42%39%6B +PASS U+8C6B 豫 %1B%24%42%50%2E +PASS U+8C6C 豬 %1B%24%42%6C%37 +PASS U+8C78 豸 %1B%24%42%6C%38 +PASS U+8C79 豹 %1B%24%42%49%3F +PASS U+8C7A 豺 %1B%24%42%6C%39 +PASS U+8C7C 豼 %1B%24%42%6C%41 +PASS U+8C82 貂 %1B%24%42%6C%3A +PASS U+8C85 貅 %1B%24%42%6C%3C +PASS U+8C89 貉 %1B%24%42%6C%3B +PASS U+8C8A 貊 %1B%24%42%6C%3D +PASS U+8C8C 貌 %1B%24%42%4B%46 +PASS U+8C8D 貍 %1B%24%42%6C%3E +PASS U+8C8E 貎 %1B%24%42%6C%3F +PASS U+8C94 貔 %1B%24%42%6C%40 +PASS U+8C98 貘 %1B%24%42%6C%42 +PASS U+8C9D 貝 %1B%24%42%33%2D +PASS U+8C9E 貞 %1B%24%42%44%67 +PASS U+8CA0 負 %1B%24%42%49%69 +PASS U+8CA1 財 %1B%24%42%3A%62 +PASS U+8CA2 貢 %1B%24%42%39%57 +PASS U+8CA7 貧 %1B%24%42%49%4F +PASS U+8CA8 貨 %1B%24%42%32%5F +PASS U+8CA9 販 %1B%24%42%48%4E +PASS U+8CAA 貪 %1B%24%42%6C%45 +PASS U+8CAB 貫 %1B%24%42%34%53 +PASS U+8CAC 責 %1B%24%42%40%55 +PASS U+8CAD 貭 %1B%24%42%6C%44 +PASS U+8CAE 貮 %1B%24%42%6C%49 +PASS U+8CAF 貯 %1B%24%42%43%79 +PASS U+8CB0 貰 %1B%24%42%4C%63 +PASS U+8CB2 貲 %1B%24%42%6C%47 +PASS U+8CB3 貳 %1B%24%42%6C%48 +PASS U+8CB4 貴 %1B%24%42%35%2E +PASS U+8CB6 貶 %1B%24%42%6C%4A +PASS U+8CB7 買 %1B%24%42%47%63 +PASS U+8CB8 貸 %1B%24%42%42%5F +PASS U+8CBB 費 %1B%24%42%48%71 +PASS U+8CBC 貼 %1B%24%42%45%3D +PASS U+8CBD 貽 %1B%24%42%6C%46 +PASS U+8CBF 貿 %1B%24%42%4B%47 +PASS U+8CC0 賀 %1B%24%42%32%6C +PASS U+8CC1 賁 %1B%24%42%6C%4C +PASS U+8CC2 賂 %1B%24%42%4F%28 +PASS U+8CC3 賃 %1B%24%42%44%42 +PASS U+8CC4 賄 %1B%24%42%4F%45 +PASS U+8CC7 資 %1B%24%42%3B%71 +PASS U+8CC8 賈 %1B%24%42%6C%4B +PASS U+8CCA 賊 %1B%24%42%42%31 +PASS U+8CCD 賍 %1B%24%42%6C%5C +PASS U+8CCE 賎 %1B%24%42%41%28 +PASS U+8CD1 賑 %1B%24%42%46%78 +PASS U+8CD3 賓 %1B%24%42%49%50 +PASS U+8CDA 賚 %1B%24%42%6C%4F +PASS U+8CDB 賛 %1B%24%42%3B%3F +PASS U+8CDC 賜 %1B%24%42%3B%72 +PASS U+8CDE 賞 %1B%24%42%3E%5E +PASS U+8CE0 賠 %1B%24%42%47%65 +PASS U+8CE2 賢 %1B%24%42%38%2D +PASS U+8CE3 賣 %1B%24%42%6C%4E +PASS U+8CE4 賤 %1B%24%42%6C%4D +PASS U+8CE6 賦 %1B%24%42%49%6A +PASS U+8CEA 質 %1B%24%42%3C%41 +PASS U+8CED 賭 %1B%24%42%45%52 +FAIL U+8CF0 賰 %1B%24%42%7B%71 assert_equals: expected "%1B%24%42%7B%71" but got "%26%23%33%36%30%38%30%3B" +FAIL U+8CF4 賴 %1B%24%42%7B%72 assert_equals: expected "%1B%24%42%7B%72" but got "%26%23%33%36%30%38%34%3B" +PASS U+8CFA 賺 %1B%24%42%6C%51 +PASS U+8CFB 賻 %1B%24%42%6C%52 +PASS U+8CFC 購 %1B%24%42%39%58 +PASS U+8CFD 賽 %1B%24%42%6C%50 +PASS U+8D04 贄 %1B%24%42%6C%53 +PASS U+8D05 贅 %1B%24%42%6C%54 +PASS U+8D07 贇 %1B%24%42%6C%56 +PASS U+8D08 贈 %1B%24%42%42%23 +PASS U+8D0A 贊 %1B%24%42%6C%55 +PASS U+8D0B 贋 %1B%24%42%34%66 +PASS U+8D0D 贍 %1B%24%42%6C%58 +PASS U+8D0F 贏 %1B%24%42%6C%57 +PASS U+8D10 贐 %1B%24%42%6C%59 +FAIL U+8D12 贒 %1B%24%42%7B%73 assert_equals: expected "%1B%24%42%7B%73" but got "%26%23%33%36%31%31%34%3B" +PASS U+8D13 贓 %1B%24%42%6C%5B +PASS U+8D14 贔 %1B%24%42%6C%5D +PASS U+8D16 贖 %1B%24%42%6C%5E +PASS U+8D64 赤 %1B%24%42%40%56 +PASS U+8D66 赦 %1B%24%42%3C%4F +PASS U+8D67 赧 %1B%24%42%6C%5F +PASS U+8D6B 赫 %1B%24%42%33%52 +PASS U+8D6D 赭 %1B%24%42%6C%60 +PASS U+8D70 走 %1B%24%42%41%76 +PASS U+8D71 赱 %1B%24%42%6C%61 +PASS U+8D73 赳 %1B%24%42%6C%62 +PASS U+8D74 赴 %1B%24%42%49%6B +FAIL U+8D76 赶 %1B%24%42%7B%74 assert_equals: expected "%1B%24%42%7B%74" but got "%26%23%33%36%32%31%34%3B" +PASS U+8D77 起 %1B%24%42%35%2F +PASS U+8D81 趁 %1B%24%42%6C%63 +PASS U+8D85 超 %1B%24%42%44%36 +PASS U+8D8A 越 %1B%24%42%31%5B +PASS U+8D99 趙 %1B%24%42%6C%64 +PASS U+8DA3 趣 %1B%24%42%3C%71 +PASS U+8DA8 趨 %1B%24%42%3F%76 +PASS U+8DB3 足 %1B%24%42%42%2D +PASS U+8DBA 趺 %1B%24%42%6C%67 +PASS U+8DBE 趾 %1B%24%42%6C%66 +PASS U+8DC2 跂 %1B%24%42%6C%65 +PASS U+8DCB 跋 %1B%24%42%6C%6D +PASS U+8DCC 跌 %1B%24%42%6C%6B +PASS U+8DCF 跏 %1B%24%42%6C%68 +PASS U+8DD6 跖 %1B%24%42%6C%6A +PASS U+8DDA 跚 %1B%24%42%6C%69 +PASS U+8DDB 跛 %1B%24%42%6C%6C +PASS U+8DDD 距 %1B%24%42%35%77 +PASS U+8DDF 跟 %1B%24%42%6C%70 +PASS U+8DE1 跡 %1B%24%42%40%57 +PASS U+8DE3 跣 %1B%24%42%6C%71 +PASS U+8DE8 跨 %1B%24%42%38%59 +PASS U+8DEA 跪 %1B%24%42%6C%6E +PASS U+8DEB 跫 %1B%24%42%6C%6F +PASS U+8DEF 路 %1B%24%42%4F%29 +PASS U+8DF3 跳 %1B%24%42%44%37 +PASS U+8DF5 践 %1B%24%42%41%29 +PASS U+8DFC 跼 %1B%24%42%6C%72 +PASS U+8DFF 跿 %1B%24%42%6C%75 +PASS U+8E08 踈 %1B%24%42%6C%73 +PASS U+8E09 踉 %1B%24%42%6C%74 +PASS U+8E0A 踊 %1B%24%42%4D%59 +PASS U+8E0F 踏 %1B%24%42%46%27 +PASS U+8E10 踐 %1B%24%42%6C%78 +PASS U+8E1D 踝 %1B%24%42%6C%76 +PASS U+8E1E 踞 %1B%24%42%6C%77 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_6001-7000-expected.txt new file mode 100644 index 0000000..16806804 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_6001-7000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 925 PASS, 75 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8E1F 踟 %1B%24%42%6C%79 +PASS U+8E2A 踪 %1B%24%42%6D%29 +PASS U+8E30 踰 %1B%24%42%6C%7C +PASS U+8E34 踴 %1B%24%42%6C%7D +PASS U+8E35 踵 %1B%24%42%6C%7B +PASS U+8E42 蹂 %1B%24%42%6C%7A +PASS U+8E44 蹄 %1B%24%42%44%7D +PASS U+8E47 蹇 %1B%24%42%6D%21 +PASS U+8E48 蹈 %1B%24%42%6D%25 +PASS U+8E49 蹉 %1B%24%42%6D%22 +PASS U+8E4A 蹊 %1B%24%42%6C%7E +PASS U+8E4C 蹌 %1B%24%42%6D%23 +PASS U+8E50 蹐 %1B%24%42%6D%24 +PASS U+8E55 蹕 %1B%24%42%6D%2B +PASS U+8E59 蹙 %1B%24%42%6D%26 +PASS U+8E5F 蹟 %1B%24%42%40%58 +PASS U+8E60 蹠 %1B%24%42%6D%28 +PASS U+8E63 蹣 %1B%24%42%6D%2A +PASS U+8E64 蹤 %1B%24%42%6D%27 +PASS U+8E72 蹲 %1B%24%42%6D%2D +PASS U+8E74 蹴 %1B%24%42%3D%33 +PASS U+8E76 蹶 %1B%24%42%6D%2C +PASS U+8E7C 蹼 %1B%24%42%6D%2E +PASS U+8E81 躁 %1B%24%42%6D%2F +PASS U+8E84 躄 %1B%24%42%6D%32 +PASS U+8E85 躅 %1B%24%42%6D%31 +PASS U+8E87 躇 %1B%24%42%6D%30 +PASS U+8E8A 躊 %1B%24%42%6D%34 +PASS U+8E8B 躋 %1B%24%42%6D%33 +PASS U+8E8D 躍 %1B%24%42%4C%76 +PASS U+8E91 躑 %1B%24%42%6D%36 +PASS U+8E93 躓 %1B%24%42%6D%35 +PASS U+8E94 躔 %1B%24%42%6D%37 +PASS U+8E99 躙 %1B%24%42%6D%38 +PASS U+8EA1 躡 %1B%24%42%6D%3A +PASS U+8EAA 躪 %1B%24%42%6D%39 +PASS U+8EAB 身 %1B%24%42%3F%48 +PASS U+8EAC 躬 %1B%24%42%6D%3B +PASS U+8EAF 躯 %1B%24%42%36%6D +PASS U+8EB0 躰 %1B%24%42%6D%3C +PASS U+8EB1 躱 %1B%24%42%6D%3E +PASS U+8EBE 躾 %1B%24%42%6D%3F +PASS U+8EC5 軅 %1B%24%42%6D%40 +PASS U+8EC6 軆 %1B%24%42%6D%3D +PASS U+8EC8 軈 %1B%24%42%6D%41 +PASS U+8ECA 車 %1B%24%42%3C%56 +PASS U+8ECB 軋 %1B%24%42%6D%42 +PASS U+8ECC 軌 %1B%24%42%35%30 +PASS U+8ECD 軍 %1B%24%42%37%33 +FAIL U+8ECF 軏 %1B%24%42%7B%76 assert_equals: expected "%1B%24%42%7B%76" but got "%26%23%33%36%35%35%39%3B" +PASS U+8ED2 軒 %1B%24%42%38%2E +PASS U+8EDB 軛 %1B%24%42%6D%43 +PASS U+8EDF 軟 %1B%24%42%46%70 +PASS U+8EE2 転 %1B%24%42%45%3E +PASS U+8EE3 軣 %1B%24%42%6D%44 +PASS U+8EEB 軫 %1B%24%42%6D%47 +PASS U+8EF8 軸 %1B%24%42%3C%34 +PASS U+8EFB 軻 %1B%24%42%6D%46 +PASS U+8EFC 軼 %1B%24%42%6D%45 +PASS U+8EFD 軽 %1B%24%42%37%5A +PASS U+8EFE 軾 %1B%24%42%6D%48 +PASS U+8F03 較 %1B%24%42%33%53 +PASS U+8F05 輅 %1B%24%42%6D%4A +PASS U+8F09 載 %1B%24%42%3A%5C +PASS U+8F0A 輊 %1B%24%42%6D%49 +PASS U+8F0C 輌 %1B%24%42%6D%52 +PASS U+8F12 輒 %1B%24%42%6D%4C +PASS U+8F13 輓 %1B%24%42%6D%4E +PASS U+8F14 輔 %1B%24%42%4A%65 +PASS U+8F15 輕 %1B%24%42%6D%4B +PASS U+8F19 輙 %1B%24%42%6D%4D +PASS U+8F1B 輛 %1B%24%42%6D%51 +PASS U+8F1C 輜 %1B%24%42%6D%4F +PASS U+8F1D 輝 %1B%24%42%35%31 +PASS U+8F1F 輟 %1B%24%42%6D%50 +PASS U+8F26 輦 %1B%24%42%6D%53 +PASS U+8F29 輩 %1B%24%42%47%5A +PASS U+8F2A 輪 %1B%24%42%4E%58 +PASS U+8F2F 輯 %1B%24%42%3D%34 +PASS U+8F33 輳 %1B%24%42%6D%54 +PASS U+8F38 輸 %1B%24%42%4D%22 +PASS U+8F39 輹 %1B%24%42%6D%56 +PASS U+8F3B 輻 %1B%24%42%6D%55 +PASS U+8F3E 輾 %1B%24%42%6D%59 +PASS U+8F3F 輿 %1B%24%42%4D%41 +PASS U+8F42 轂 %1B%24%42%6D%58 +PASS U+8F44 轄 %1B%24%42%33%6D +PASS U+8F45 轅 %1B%24%42%6D%57 +PASS U+8F46 轆 %1B%24%42%6D%5C +PASS U+8F49 轉 %1B%24%42%6D%5B +PASS U+8F4C 轌 %1B%24%42%6D%5A +PASS U+8F4D 轍 %1B%24%42%45%32 +PASS U+8F4E 轎 %1B%24%42%6D%5D +PASS U+8F57 轗 %1B%24%42%6D%5E +PASS U+8F5C 轜 %1B%24%42%6D%5F +PASS U+8F5F 轟 %1B%24%42%39%6C +PASS U+8F61 轡 %1B%24%42%37%25 +PASS U+8F62 轢 %1B%24%42%6D%60 +PASS U+8F63 轣 %1B%24%42%6D%61 +PASS U+8F64 轤 %1B%24%42%6D%62 +PASS U+8F9B 辛 %1B%24%42%3F%49 +PASS U+8F9C 辜 %1B%24%42%6D%63 +PASS U+8F9E 辞 %1B%24%42%3C%2D +PASS U+8F9F 辟 %1B%24%42%6D%64 +PASS U+8FA3 辣 %1B%24%42%6D%65 +PASS U+8FA7 辧 %1B%24%42%52%21 +PASS U+8FA8 辨 %1B%24%42%51%7E +PASS U+8FAD 辭 %1B%24%42%6D%66 +PASS U+8FAE 辮 %1B%24%42%65%70 +PASS U+8FAF 辯 %1B%24%42%6D%67 +PASS U+8FB0 辰 %1B%24%42%43%24 +PASS U+8FB1 辱 %1B%24%42%3F%2B +PASS U+8FB2 農 %1B%24%42%47%40 +PASS U+8FB7 辷 %1B%24%42%6D%68 +PASS U+8FBA 辺 %1B%24%42%4A%55 +PASS U+8FBB 辻 %1B%24%42%44%54 +PASS U+8FBC 込 %1B%24%42%39%7E +PASS U+8FBF 辿 %1B%24%42%43%29 +PASS U+8FC2 迂 %1B%24%42%31%2A +PASS U+8FC4 迄 %1B%24%42%4B%78 +PASS U+8FC5 迅 %1B%24%42%3F%57 +PASS U+8FCE 迎 %1B%24%42%37%5E +PASS U+8FD1 近 %1B%24%42%36%61 +PASS U+8FD4 返 %1B%24%42%4A%56 +PASS U+8FDA 迚 %1B%24%42%6D%69 +PASS U+8FE2 迢 %1B%24%42%6D%6B +PASS U+8FE5 迥 %1B%24%42%6D%6A +PASS U+8FE6 迦 %1B%24%42%32%60 +PASS U+8FE9 迩 %1B%24%42%46%76 +PASS U+8FEA 迪 %1B%24%42%6D%6C +PASS U+8FEB 迫 %1B%24%42%47%77 +PASS U+8FED 迭 %1B%24%42%45%33 +PASS U+8FEF 迯 %1B%24%42%6D%6D +PASS U+8FF0 述 %1B%24%42%3D%52 +PASS U+8FF4 迴 %1B%24%42%6D%6F +PASS U+8FF7 迷 %1B%24%42%4C%42 +PASS U+8FF8 迸 %1B%24%42%6D%7E +PASS U+8FF9 迹 %1B%24%42%6D%71 +PASS U+8FFA 迺 %1B%24%42%6D%72 +PASS U+8FFD 追 %1B%24%42%44%49 +PASS U+9000 退 %1B%24%42%42%60 +PASS U+9001 送 %1B%24%42%41%77 +PASS U+9003 逃 %1B%24%42%46%28 +PASS U+9005 逅 %1B%24%42%6D%70 +PASS U+9006 逆 %1B%24%42%35%55 +PASS U+900B 逋 %1B%24%42%6D%79 +PASS U+900D 逍 %1B%24%42%6D%76 +PASS U+900E 逎 %1B%24%42%6E%25 +PASS U+900F 透 %1B%24%42%46%29 +PASS U+9010 逐 %1B%24%42%43%60 +PASS U+9011 逑 %1B%24%42%6D%73 +PASS U+9013 逓 %1B%24%42%44%7E +PASS U+9014 途 %1B%24%42%45%53 +PASS U+9015 逕 %1B%24%42%6D%74 +PASS U+9016 逖 %1B%24%42%6D%78 +PASS U+9017 逗 %1B%24%42%3F%60 +PASS U+9019 這 %1B%24%42%47%67 +PASS U+901A 通 %1B%24%42%44%4C +PASS U+901D 逝 %1B%24%42%40%42 +PASS U+901E 逞 %1B%24%42%6D%77 +PASS U+901F 速 %1B%24%42%42%2E +PASS U+9020 造 %1B%24%42%42%24 +PASS U+9021 逡 %1B%24%42%6D%75 +PASS U+9022 逢 %1B%24%42%30%29 +PASS U+9023 連 %1B%24%42%4F%22 +PASS U+9027 逧 %1B%24%42%6D%7A +PASS U+902E 逮 %1B%24%42%42%61 +PASS U+9031 週 %1B%24%42%3D%35 +PASS U+9032 進 %1B%24%42%3F%4A +PASS U+9035 逵 %1B%24%42%6D%7C +PASS U+9036 逶 %1B%24%42%6D%7B +PASS U+9038 逸 %1B%24%42%30%6F +PASS U+9039 逹 %1B%24%42%6D%7D +PASS U+903C 逼 %1B%24%42%49%2F +PASS U+903E 逾 %1B%24%42%6E%27 +PASS U+9041 遁 %1B%24%42%46%5B +PASS U+9042 遂 %1B%24%42%3F%6B +PASS U+9045 遅 %1B%24%42%43%59 +PASS U+9047 遇 %1B%24%42%36%78 +PASS U+9049 遉 %1B%24%42%6E%26 +PASS U+904A 遊 %1B%24%42%4D%37 +PASS U+904B 運 %1B%24%42%31%3F +PASS U+904D 遍 %1B%24%42%4A%57 +PASS U+904E 過 %1B%24%42%32%61 +PASS U+904F 遏 %1B%24%42%6E%21 +PASS U+9050 遐 %1B%24%42%6E%22 +PASS U+9051 遑 %1B%24%42%6E%23 +PASS U+9052 遒 %1B%24%42%6E%24 +PASS U+9053 道 %1B%24%42%46%3B +PASS U+9054 達 %1B%24%42%43%23 +PASS U+9055 違 %1B%24%42%30%63 +PASS U+9056 遖 %1B%24%42%6E%28 +PASS U+9058 遘 %1B%24%42%6E%29 +PASS U+9059 遙 %1B%24%42%74%23 +PASS U+905C 遜 %1B%24%42%42%3D +PASS U+905E 遞 %1B%24%42%6E%2A +PASS U+9060 遠 %1B%24%42%31%73 +PASS U+9061 遡 %1B%24%42%41%4C +PASS U+9063 遣 %1B%24%42%38%2F +PASS U+9065 遥 %1B%24%42%4D%5A +FAIL U+9067 遧 %1B%24%42%7B%79 assert_equals: expected "%1B%24%42%7B%79" but got "%26%23%33%36%39%36%37%3B" +PASS U+9068 遨 %1B%24%42%6E%2B +PASS U+9069 適 %1B%24%42%45%2C +PASS U+906D 遭 %1B%24%42%41%78 +PASS U+906E 遮 %1B%24%42%3C%57 +PASS U+906F 遯 %1B%24%42%6E%2C +PASS U+9072 遲 %1B%24%42%6E%2F +PASS U+9075 遵 %1B%24%42%3D%65 +PASS U+9076 遶 %1B%24%42%6E%2D +PASS U+9077 遷 %1B%24%42%41%2B +PASS U+9078 選 %1B%24%42%41%2A +PASS U+907A 遺 %1B%24%42%30%64 +PASS U+907C 遼 %1B%24%42%4E%4B +PASS U+907D 遽 %1B%24%42%6E%31 +PASS U+907F 避 %1B%24%42%48%72 +PASS U+9080 邀 %1B%24%42%6E%33 +PASS U+9081 邁 %1B%24%42%6E%32 +PASS U+9082 邂 %1B%24%42%6E%30 +PASS U+9083 邃 %1B%24%42%63%64 +PASS U+9084 還 %1B%24%42%34%54 +PASS U+9087 邇 %1B%24%42%6D%6E +PASS U+9089 邉 %1B%24%42%6E%35 +PASS U+908A 邊 %1B%24%42%6E%34 +PASS U+908F 邏 %1B%24%42%6E%36 +PASS U+9091 邑 %1B%24%42%4D%38 +PASS U+90A3 那 %1B%24%42%46%61 +PASS U+90A6 邦 %1B%24%42%4B%2E +PASS U+90A8 邨 %1B%24%42%6E%37 +PASS U+90AA 邪 %1B%24%42%3C%59 +PASS U+90AF 邯 %1B%24%42%6E%38 +PASS U+90B1 邱 %1B%24%42%6E%39 +PASS U+90B5 邵 %1B%24%42%6E%3A +PASS U+90B8 邸 %1B%24%42%45%21 +PASS U+90C1 郁 %1B%24%42%30%6A +PASS U+90CA 郊 %1B%24%42%39%59 +PASS U+90CE 郎 %1B%24%42%4F%3A +PASS U+90DB 郛 %1B%24%42%6E%3E +FAIL U+90DE 郞 %1B%24%42%7B%7A assert_equals: expected "%1B%24%42%7B%7A" but got "%26%23%33%37%30%38%36%3B" +PASS U+90E1 郡 %1B%24%42%37%34 +PASS U+90E2 郢 %1B%24%42%6E%3B +PASS U+90E4 郤 %1B%24%42%6E%3C +PASS U+90E8 部 %1B%24%42%49%74 +PASS U+90ED 郭 %1B%24%42%33%54 +PASS U+90F5 郵 %1B%24%42%4D%39 +PASS U+90F7 郷 %1B%24%42%36%3F +PASS U+90FD 都 %1B%24%42%45%54 +PASS U+9102 鄂 %1B%24%42%6E%3F +PASS U+9112 鄒 %1B%24%42%6E%40 +FAIL U+9115 鄕 %1B%24%42%7B%7C assert_equals: expected "%1B%24%42%7B%7C" but got "%26%23%33%37%31%34%31%3B" +PASS U+9119 鄙 %1B%24%42%6E%41 +FAIL U+9127 鄧 %1B%24%42%7B%7D assert_equals: expected "%1B%24%42%7B%7D" but got "%26%23%33%37%31%35%39%3B" +PASS U+912D 鄭 %1B%24%42%45%22 +PASS U+9130 鄰 %1B%24%42%6E%43 +PASS U+9132 鄲 %1B%24%42%6E%42 +PASS U+9149 酉 %1B%24%42%46%53 +PASS U+914A 酊 %1B%24%42%6E%44 +PASS U+914B 酋 %1B%24%42%3D%36 +PASS U+914C 酌 %1B%24%42%3C%60 +PASS U+914D 配 %1B%24%42%47%5B +PASS U+914E 酎 %1B%24%42%43%71 +PASS U+9152 酒 %1B%24%42%3C%72 +PASS U+9154 酔 %1B%24%42%3F%6C +PASS U+9156 酖 %1B%24%42%6E%45 +PASS U+9158 酘 %1B%24%42%6E%46 +PASS U+9162 酢 %1B%24%42%3F%5D +PASS U+9163 酣 %1B%24%42%6E%47 +PASS U+9165 酥 %1B%24%42%6E%48 +PASS U+9169 酩 %1B%24%42%6E%49 +PASS U+916A 酪 %1B%24%42%4D%6F +PASS U+916C 酬 %1B%24%42%3D%37 +PASS U+9172 酲 %1B%24%42%6E%4B +PASS U+9173 酳 %1B%24%42%6E%4A +PASS U+9175 酵 %1B%24%42%39%5A +PASS U+9177 酷 %1B%24%42%39%73 +PASS U+9178 酸 %1B%24%42%3B%40 +PASS U+9182 醂 %1B%24%42%6E%4E +PASS U+9187 醇 %1B%24%42%3D%66 +PASS U+9189 醉 %1B%24%42%6E%4D +PASS U+918B 醋 %1B%24%42%6E%4C +PASS U+918D 醍 %1B%24%42%42%69 +PASS U+9190 醐 %1B%24%42%38%6F +PASS U+9192 醒 %1B%24%42%40%43 +PASS U+9197 醗 %1B%24%42%48%30 +PASS U+919C 醜 %1B%24%42%3D%39 +PASS U+91A2 醢 %1B%24%42%6E%4F +PASS U+91A4 醤 %1B%24%42%3E%5F +PASS U+91AA 醪 %1B%24%42%6E%52 +PASS U+91AB 醫 %1B%24%42%6E%50 +PASS U+91AF 醯 %1B%24%42%6E%51 +PASS U+91B4 醴 %1B%24%42%6E%54 +PASS U+91B5 醵 %1B%24%42%6E%53 +PASS U+91B8 醸 %1B%24%42%3E%7A +PASS U+91BA 醺 %1B%24%42%6E%55 +PASS U+91C0 釀 %1B%24%42%6E%56 +PASS U+91C1 釁 %1B%24%42%6E%57 +PASS U+91C6 釆 %1B%24%42%48%50 +PASS U+91C7 采 %1B%24%42%3A%53 +PASS U+91C8 釈 %1B%24%42%3C%61 +PASS U+91C9 釉 %1B%24%42%6E%58 +PASS U+91CB 釋 %1B%24%42%6E%59 +PASS U+91CC 里 %1B%24%42%4E%24 +PASS U+91CD 重 %1B%24%42%3D%45 +PASS U+91CE 野 %1B%24%42%4C%6E +PASS U+91CF 量 %1B%24%42%4E%4C +PASS U+91D0 釐 %1B%24%42%6E%5A +PASS U+91D1 金 %1B%24%42%36%62 +PASS U+91D6 釖 %1B%24%42%6E%5B +FAIL U+91D7 釗 %1B%24%42%7C%21 assert_equals: expected "%1B%24%42%7C%21" but got "%26%23%33%37%33%33%35%3B" +PASS U+91D8 釘 %1B%24%42%45%23 +FAIL U+91DA 釚 %1B%24%42%7B%7E assert_equals: expected "%1B%24%42%7B%7E" but got "%26%23%33%37%33%33%38%3B" +PASS U+91DB 釛 %1B%24%42%6E%5E +PASS U+91DC 釜 %1B%24%42%33%78 +PASS U+91DD 針 %1B%24%42%3F%4B +FAIL U+91DE 釞 %1B%24%42%7C%22 assert_equals: expected "%1B%24%42%7C%22" but got "%26%23%33%37%33%34%32%3B" +PASS U+91DF 釟 %1B%24%42%6E%5C +PASS U+91E1 釡 %1B%24%42%6E%5D +PASS U+91E3 釣 %1B%24%42%44%60 +FAIL U+91E4 釤 %1B%24%42%7C%25 assert_equals: expected "%1B%24%42%7C%25" but got "%26%23%33%37%33%34%38%3B" +FAIL U+91E5 釥 %1B%24%42%7C%26 assert_equals: expected "%1B%24%42%7C%26" but got "%26%23%33%37%33%34%39%3B" +PASS U+91E6 釦 %1B%24%42%4B%55 +PASS U+91E7 釧 %1B%24%42%36%7C +FAIL U+91ED 釭 %1B%24%42%7C%23 assert_equals: expected "%1B%24%42%7C%23" but got "%26%23%33%37%33%35%37%3B" +FAIL U+91EE 釮 %1B%24%42%7C%24 assert_equals: expected "%1B%24%42%7C%24" but got "%26%23%33%37%33%35%38%3B" +PASS U+91F5 釵 %1B%24%42%6E%60 +PASS U+91F6 釶 %1B%24%42%6E%61 +PASS U+91FC 釼 %1B%24%42%6E%5F +PASS U+91FF 釿 %1B%24%42%6E%63 +FAIL U+9206 鈆 %1B%24%42%7C%27 assert_equals: expected "%1B%24%42%7C%27" but got "%26%23%33%37%33%38%32%3B" +FAIL U+920A 鈊 %1B%24%42%7C%29 assert_equals: expected "%1B%24%42%7C%29" but got "%26%23%33%37%33%38%36%3B" +PASS U+920D 鈍 %1B%24%42%46%5F +PASS U+920E 鈎 %1B%24%42%33%43 +FAIL U+9210 鈐 %1B%24%42%7C%28 assert_equals: expected "%1B%24%42%7C%28" but got "%26%23%33%37%33%39%32%3B" +PASS U+9211 鈑 %1B%24%42%6E%67 +PASS U+9214 鈔 %1B%24%42%6E%64 +PASS U+9215 鈕 %1B%24%42%6E%66 +PASS U+921E 鈞 %1B%24%42%6E%62 +PASS U+9229 鈩 %1B%24%42%6F%4F +PASS U+922C 鈬 %1B%24%42%6E%65 +PASS U+9234 鈴 %1B%24%42%4E%6B +PASS U+9237 鈷 %1B%24%42%38%5A +FAIL U+9239 鈹 %1B%24%42%7C%30 assert_equals: expected "%1B%24%42%7C%30" but got "%26%23%33%37%34%33%33%3B" +FAIL U+923A 鈺 %1B%24%42%7C%2A assert_equals: expected "%1B%24%42%7C%2A" but got "%26%23%33%37%34%33%34%3B" +FAIL U+923C 鈼 %1B%24%42%7C%2C assert_equals: expected "%1B%24%42%7C%2C" but got "%26%23%33%37%34%33%36%3B" +PASS U+923F 鈿 %1B%24%42%6E%6F +FAIL U+9240 鉀 %1B%24%42%7C%2B assert_equals: expected "%1B%24%42%7C%2B" but got "%26%23%33%37%34%34%30%3B" +PASS U+9244 鉄 %1B%24%42%45%34 +PASS U+9245 鉅 %1B%24%42%6E%6A +PASS U+9248 鉈 %1B%24%42%6E%6D +PASS U+9249 鉉 %1B%24%42%6E%6B +PASS U+924B 鉋 %1B%24%42%6E%70 +FAIL U+924E 鉎 %1B%24%42%7C%2D assert_equals: expected "%1B%24%42%7C%2D" but got "%26%23%33%37%34%35%34%3B" +PASS U+9250 鉐 %1B%24%42%6E%71 +FAIL U+9251 鉑 %1B%24%42%7C%2F assert_equals: expected "%1B%24%42%7C%2F" but got "%26%23%33%37%34%35%37%3B" +PASS U+9257 鉗 %1B%24%42%6E%69 +FAIL U+9259 鉙 %1B%24%42%7C%2E assert_equals: expected "%1B%24%42%7C%2E" but got "%26%23%33%37%34%36%35%3B" +PASS U+925A 鉚 %1B%24%42%6E%76 +PASS U+925B 鉛 %1B%24%42%31%74 +PASS U+925E 鉞 %1B%24%42%6E%68 +PASS U+9262 鉢 %1B%24%42%48%2D +PASS U+9264 鉤 %1B%24%42%6E%6C +PASS U+9266 鉦 %1B%24%42%3E%60 +FAIL U+9267 鉧 %1B%24%42%7C%31 assert_equals: expected "%1B%24%42%7C%31" but got "%26%23%33%37%34%37%39%3B" +PASS U+9271 鉱 %1B%24%42%39%5B +FAIL U+9277 鉷 %1B%24%42%7C%33 assert_equals: expected "%1B%24%42%7C%33" but got "%26%23%33%37%34%39%35%3B" +FAIL U+9278 鉸 %1B%24%42%7C%34 assert_equals: expected "%1B%24%42%7C%34" but got "%26%23%33%37%34%39%36%3B" +PASS U+927E 鉾 %1B%24%42%4B%48 +PASS U+9280 銀 %1B%24%42%36%64 +PASS U+9283 銃 %1B%24%42%3D%46 +PASS U+9285 銅 %1B%24%42%46%3C +FAIL U+9288 銈 %1B%24%42%79%24 assert_equals: expected "%1B%24%42%79%24" but got "%26%23%33%37%35%31%32%3B" +PASS U+9291 銑 %1B%24%42%41%2D +PASS U+9293 銓 %1B%24%42%6E%74 +PASS U+9295 銕 %1B%24%42%6E%6E +PASS U+9296 銖 %1B%24%42%6E%73 +PASS U+9298 銘 %1B%24%42%4C%43 +PASS U+929A 銚 %1B%24%42%44%38 +PASS U+929B 銛 %1B%24%42%6E%75 +PASS U+929C 銜 %1B%24%42%6E%72 +FAIL U+92A7 銧 %1B%24%42%7C%32 assert_equals: expected "%1B%24%42%7C%32" but got "%26%23%33%37%35%34%33%3B" +PASS U+92AD 銭 %1B%24%42%41%2C +PASS U+92B7 銷 %1B%24%42%6E%79 +PASS U+92B9 銹 %1B%24%42%6E%78 +PASS U+92CF 鋏 %1B%24%42%6E%77 +FAIL U+92D0 鋐 %1B%24%42%7C%38 assert_equals: expected "%1B%24%42%7C%38" but got "%26%23%33%37%35%38%34%3B" +PASS U+92D2 鋒 %1B%24%42%4B%2F +FAIL U+92D3 鋓 %1B%24%42%7C%3C assert_equals: expected "%1B%24%42%7C%3C" but got "%26%23%33%37%35%38%37%3B" +FAIL U+92D5 鋕 %1B%24%42%7C%3A assert_equals: expected "%1B%24%42%7C%3A" but got "%26%23%33%37%35%38%39%3B" +FAIL U+92D7 鋗 %1B%24%42%7C%36 assert_equals: expected "%1B%24%42%7C%36" but got "%26%23%33%37%35%39%31%3B" +FAIL U+92D9 鋙 %1B%24%42%7C%37 assert_equals: expected "%1B%24%42%7C%37" but got "%26%23%33%37%35%39%33%3B" +FAIL U+92E0 鋠 %1B%24%42%7C%3B assert_equals: expected "%1B%24%42%7C%3B" but got "%26%23%33%37%36%30%30%3B" +PASS U+92E4 鋤 %1B%24%42%3D%7B +FAIL U+92E7 鋧 %1B%24%42%7C%35 assert_equals: expected "%1B%24%42%7C%35" but got "%26%23%33%37%36%30%37%3B" +PASS U+92E9 鋩 %1B%24%42%6E%7A +PASS U+92EA 鋪 %1B%24%42%4A%5F +PASS U+92ED 鋭 %1B%24%42%31%54 +PASS U+92F2 鋲 %1B%24%42%49%46 +PASS U+92F3 鋳 %1B%24%42%43%72 +PASS U+92F8 鋸 %1B%24%42%35%78 +FAIL U+92F9 鋹 %1B%24%42%79%2A assert_equals: expected "%1B%24%42%79%2A" but got "%26%23%33%37%36%32%35%3B" +PASS U+92FA 鋺 %1B%24%42%6E%7C +FAIL U+92FB 鋻 %1B%24%42%7C%3F assert_equals: expected "%1B%24%42%7C%3F" but got "%26%23%33%37%36%32%37%3B" +PASS U+92FC 鋼 %1B%24%42%39%5D +FAIL U+92FF 鋿 %1B%24%42%7C%42 assert_equals: expected "%1B%24%42%7C%42" but got "%26%23%33%37%36%33%31%3B" +FAIL U+9302 錂 %1B%24%42%7C%44 assert_equals: expected "%1B%24%42%7C%44" but got "%26%23%33%37%36%33%34%3B" +PASS U+9306 錆 %1B%24%42%3B%2C +PASS U+930F 錏 %1B%24%42%6E%7B +PASS U+9310 錐 %1B%24%42%3F%6D +PASS U+9318 錘 %1B%24%42%3F%6E +PASS U+9319 錙 %1B%24%42%6F%21 +PASS U+931A 錚 %1B%24%42%6F%23 +FAIL U+931D 錝 %1B%24%42%7C%43 assert_equals: expected "%1B%24%42%7C%43" but got "%26%23%33%37%36%36%31%3B" +FAIL U+931E 錞 %1B%24%42%7C%41 assert_equals: expected "%1B%24%42%7C%41" but got "%26%23%33%37%36%36%32%3B" +PASS U+9320 錠 %1B%24%42%3E%7B +FAIL U+9321 錡 %1B%24%42%7C%3E assert_equals: expected "%1B%24%42%7C%3E" but got "%26%23%33%37%36%36%35%3B" +PASS U+9322 錢 %1B%24%42%6F%22 +PASS U+9323 錣 %1B%24%42%6F%24 +FAIL U+9325 錥 %1B%24%42%7C%3D assert_equals: expected "%1B%24%42%7C%3D" but got "%26%23%33%37%36%36%39%3B" +PASS U+9326 錦 %1B%24%42%36%53 +PASS U+9328 錨 %1B%24%42%49%45 +PASS U+932B 錫 %1B%24%42%3C%62 +PASS U+932C 錬 %1B%24%42%4F%23 +PASS U+932E 錮 %1B%24%42%6E%7E +PASS U+932F 錯 %1B%24%42%3A%78 +PASS U+9332 録 %1B%24%42%4F%3F +PASS U+9335 錵 %1B%24%42%6F%26 +PASS U+933A 錺 %1B%24%42%6F%25 +PASS U+933B 錻 %1B%24%42%6F%27 +PASS U+9344 鍄 %1B%24%42%6E%7D +FAIL U+9348 鍈 %1B%24%42%79%23 assert_equals: expected "%1B%24%42%79%23" but got "%26%23%33%37%37%30%34%3B" +PASS U+934B 鍋 %1B%24%42%46%69 +PASS U+934D 鍍 %1B%24%42%45%55 +PASS U+9354 鍔 %1B%24%42%44%57 +PASS U+9356 鍖 %1B%24%42%6F%2C +FAIL U+9357 鍗 %1B%24%42%7C%46 assert_equals: expected "%1B%24%42%7C%46" but got "%26%23%33%37%37%31%39%3B" +PASS U+935B 鍛 %1B%24%42%43%43 +PASS U+935C 鍜 %1B%24%42%6F%28 +PASS U+9360 鍠 %1B%24%42%6F%29 +PASS U+936C 鍬 %1B%24%42%37%2D +PASS U+936E 鍮 %1B%24%42%6F%2B +FAIL U+9370 鍰 %1B%24%42%7C%45 assert_equals: expected "%1B%24%42%7C%45" but got "%26%23%33%37%37%34%34%3B" +PASS U+9375 鍵 %1B%24%42%38%30 +PASS U+937C 鍼 %1B%24%42%6F%2A +PASS U+937E 鍾 %1B%24%42%3E%61 +PASS U+938C 鎌 %1B%24%42%33%79 +PASS U+9394 鎔 %1B%24%42%6F%30 +PASS U+9396 鎖 %1B%24%42%3A%3F +PASS U+9397 鎗 %1B%24%42%41%79 +PASS U+939A 鎚 %1B%24%42%44%4A +FAIL U+93A4 鎤 %1B%24%42%7C%47 assert_equals: expected "%1B%24%42%7C%47" but got "%26%23%33%37%37%39%36%3B" +PASS U+93A7 鎧 %1B%24%42%33%3B +PASS U+93AC 鎬 %1B%24%42%6F%2E +PASS U+93AD 鎭 %1B%24%42%6F%2F +PASS U+93AE 鎮 %1B%24%42%44%43 +PASS U+93B0 鎰 %1B%24%42%6F%2D +PASS U+93B9 鎹 %1B%24%42%6F%31 +PASS U+93C3 鏃 %1B%24%42%6F%37 +FAIL U+93C6 鏆 %1B%24%42%7C%48 assert_equals: expected "%1B%24%42%7C%48" but got "%26%23%33%37%38%33%30%3B" +PASS U+93C8 鏈 %1B%24%42%6F%3A +PASS U+93D0 鏐 %1B%24%42%6F%39 +PASS U+93D1 鏑 %1B%24%42%45%2D +PASS U+93D6 鏖 %1B%24%42%6F%32 +PASS U+93D7 鏗 %1B%24%42%6F%33 +PASS U+93D8 鏘 %1B%24%42%6F%36 +PASS U+93DD 鏝 %1B%24%42%6F%38 +FAIL U+93DE 鏞 %1B%24%42%7C%49 assert_equals: expected "%1B%24%42%7C%49" but got "%26%23%33%37%38%35%34%3B" +PASS U+93E1 鏡 %1B%24%42%36%40 +PASS U+93E4 鏤 %1B%24%42%6F%3B +PASS U+93E5 鏥 %1B%24%42%6F%35 +PASS U+93E8 鏨 %1B%24%42%6F%34 +FAIL U+93F8 鏸 %1B%24%42%7C%4A assert_equals: expected "%1B%24%42%7C%4A" but got "%26%23%33%37%38%38%30%3B" +PASS U+9403 鐃 %1B%24%42%6F%3F +PASS U+9407 鐇 %1B%24%42%6F%40 +PASS U+9410 鐐 %1B%24%42%6F%41 +PASS U+9413 鐓 %1B%24%42%6F%3E +PASS U+9414 鐔 %1B%24%42%6F%3D +PASS U+9418 鐘 %1B%24%42%3E%62 +PASS U+9419 鐙 %1B%24%42%46%2A +PASS U+941A 鐚 %1B%24%42%6F%3C +PASS U+9421 鐡 %1B%24%42%6F%45 +PASS U+942B 鐫 %1B%24%42%6F%43 +FAIL U+9431 鐱 %1B%24%42%7C%4B assert_equals: expected "%1B%24%42%7C%4B" but got "%26%23%33%37%39%33%37%3B" +PASS U+9435 鐵 %1B%24%42%6F%44 +PASS U+9436 鐶 %1B%24%42%6F%42 +PASS U+9438 鐸 %1B%24%42%42%78 +PASS U+943A 鐺 %1B%24%42%6F%46 +PASS U+9441 鑁 %1B%24%42%6F%47 +PASS U+9444 鑄 %1B%24%42%6F%49 +FAIL U+9445 鑅 %1B%24%42%7C%4C assert_equals: expected "%1B%24%42%7C%4C" but got "%26%23%33%37%39%35%37%3B" +FAIL U+9448 鑈 %1B%24%42%7C%4D assert_equals: expected "%1B%24%42%7C%4D" but got "%26%23%33%37%39%36%30%3B" +PASS U+9451 鑑 %1B%24%42%34%55 +PASS U+9452 鑒 %1B%24%42%6F%48 +PASS U+9453 鑓 %1B%24%42%4C%7A +PASS U+945A 鑚 %1B%24%42%6F%54 +PASS U+945B 鑛 %1B%24%42%6F%4A +PASS U+945E 鑞 %1B%24%42%6F%4D +PASS U+9460 鑠 %1B%24%42%6F%4B +PASS U+9462 鑢 %1B%24%42%6F%4C +PASS U+946A 鑪 %1B%24%42%6F%4E +PASS U+9470 鑰 %1B%24%42%6F%50 +PASS U+9475 鑵 %1B%24%42%6F%51 +PASS U+9477 鑷 %1B%24%42%6F%52 +PASS U+947C 鑼 %1B%24%42%6F%55 +PASS U+947D 鑽 %1B%24%42%6F%53 +PASS U+947E 鑾 %1B%24%42%6F%56 +PASS U+947F 鑿 %1B%24%42%6F%58 +PASS U+9481 钁 %1B%24%42%6F%57 +PASS U+9577 長 %1B%24%42%44%39 +PASS U+9580 門 %1B%24%42%4C%67 +PASS U+9582 閂 %1B%24%42%6F%59 +PASS U+9583 閃 %1B%24%42%41%2E +PASS U+9587 閇 %1B%24%42%6F%5A +PASS U+9589 閉 %1B%24%42%4A%44 +PASS U+958A 閊 %1B%24%42%6F%5B +PASS U+958B 開 %1B%24%42%33%2B +PASS U+958F 閏 %1B%24%42%31%3C +PASS U+9591 閑 %1B%24%42%34%57 +FAIL U+9592 閒 %1B%24%42%7C%4E assert_equals: expected "%1B%24%42%7C%4E" but got "%26%23%33%38%32%39%30%3B" +PASS U+9593 間 %1B%24%42%34%56 +PASS U+9594 閔 %1B%24%42%6F%5C +PASS U+9596 閖 %1B%24%42%6F%5D +PASS U+9598 閘 %1B%24%42%6F%5E +PASS U+9599 閙 %1B%24%42%6F%5F +PASS U+95A0 閠 %1B%24%42%6F%60 +PASS U+95A2 関 %1B%24%42%34%58 +PASS U+95A3 閣 %1B%24%42%33%55 +PASS U+95A4 閤 %1B%24%42%39%5E +PASS U+95A5 閥 %1B%24%42%48%36 +PASS U+95A7 閧 %1B%24%42%6F%62 +PASS U+95A8 閨 %1B%24%42%6F%61 +PASS U+95AD 閭 %1B%24%42%6F%63 +PASS U+95B2 閲 %1B%24%42%31%5C +PASS U+95B9 閹 %1B%24%42%6F%66 +PASS U+95BB 閻 %1B%24%42%6F%65 +PASS U+95BC 閼 %1B%24%42%6F%64 +PASS U+95BE 閾 %1B%24%42%6F%67 +PASS U+95C3 闃 %1B%24%42%6F%6A +PASS U+95C7 闇 %1B%24%42%30%47 +PASS U+95CA 闊 %1B%24%42%6F%68 +PASS U+95CC 闌 %1B%24%42%6F%6C +PASS U+95CD 闍 %1B%24%42%6F%6B +PASS U+95D4 闔 %1B%24%42%6F%6E +PASS U+95D5 闕 %1B%24%42%6F%6D +PASS U+95D6 闖 %1B%24%42%6F%6F +PASS U+95D8 闘 %1B%24%42%46%2E +PASS U+95DC 關 %1B%24%42%6F%70 +PASS U+95E1 闡 %1B%24%42%6F%71 +PASS U+95E2 闢 %1B%24%42%6F%73 +PASS U+95E5 闥 %1B%24%42%6F%72 +PASS U+961C 阜 %1B%24%42%49%6C +PASS U+9621 阡 %1B%24%42%6F%74 +PASS U+9628 阨 %1B%24%42%6F%75 +PASS U+962A 阪 %1B%24%42%3A%65 +PASS U+962E 阮 %1B%24%42%6F%76 +PASS U+962F 阯 %1B%24%42%6F%77 +PASS U+9632 防 %1B%24%42%4B%49 +PASS U+963B 阻 %1B%24%42%41%4B +PASS U+963F 阿 %1B%24%42%30%24 +PASS U+9640 陀 %1B%24%42%42%4B +PASS U+9642 陂 %1B%24%42%6F%78 +PASS U+9644 附 %1B%24%42%49%6D +PASS U+964B 陋 %1B%24%42%6F%7B +PASS U+964C 陌 %1B%24%42%6F%79 +PASS U+964D 降 %1B%24%42%39%5F +PASS U+964F 陏 %1B%24%42%6F%7A +PASS U+9650 限 %1B%24%42%38%42 +PASS U+965B 陛 %1B%24%42%4A%45 +PASS U+965C 陜 %1B%24%42%6F%7D +PASS U+965D 陝 %1B%24%42%70%21 +PASS U+965E 陞 %1B%24%42%6F%7E +PASS U+965F 陟 %1B%24%42%70%22 +PASS U+9662 院 %1B%24%42%31%21 +PASS U+9663 陣 %1B%24%42%3F%58 +PASS U+9664 除 %1B%24%42%3D%7C +PASS U+9665 陥 %1B%24%42%34%59 +PASS U+9666 陦 %1B%24%42%70%23 +PASS U+966A 陪 %1B%24%42%47%66 +PASS U+966C 陬 %1B%24%42%70%25 +PASS U+9670 陰 %1B%24%42%31%22 +PASS U+9672 陲 %1B%24%42%70%24 +PASS U+9673 陳 %1B%24%42%44%44 +PASS U+9675 陵 %1B%24%42%4E%4D +PASS U+9676 陶 %1B%24%42%46%2B +PASS U+9677 陷 %1B%24%42%6F%7C +PASS U+9678 陸 %1B%24%42%4E%26 +PASS U+967A 険 %1B%24%42%38%31 +PASS U+967D 陽 %1B%24%42%4D%5B +PASS U+9685 隅 %1B%24%42%36%79 +PASS U+9686 隆 %1B%24%42%4E%34 +PASS U+9688 隈 %1B%24%42%37%28 +PASS U+968A 隊 %1B%24%42%42%62 +PASS U+968B 隋 %1B%24%42%67%21 +PASS U+968D 隍 %1B%24%42%70%26 +PASS U+968E 階 %1B%24%42%33%2C +PASS U+968F 随 %1B%24%42%3F%6F +PASS U+9694 隔 %1B%24%42%33%56 +PASS U+9695 隕 %1B%24%42%70%28 +PASS U+9697 隗 %1B%24%42%70%29 +PASS U+9698 隘 %1B%24%42%70%27 +PASS U+9699 隙 %1B%24%42%37%64 +PASS U+969B 際 %1B%24%42%3A%5D +PASS U+969C 障 %1B%24%42%3E%63 +FAIL U+969D 隝 %1B%24%42%7C%51 assert_equals: expected "%1B%24%42%7C%51" but got "%26%23%33%38%35%35%37%3B" +PASS U+96A0 隠 %1B%24%42%31%23 +PASS U+96A3 隣 %1B%24%42%4E%59 +PASS U+96A7 隧 %1B%24%42%70%2B +PASS U+96A8 隨 %1B%24%42%6E%2E +PASS U+96AA 險 %1B%24%42%70%2A +FAIL U+96AF 隯 %1B%24%42%7C%52 assert_equals: expected "%1B%24%42%7C%52" but got "%26%23%33%38%35%37%35%3B" +PASS U+96B0 隰 %1B%24%42%70%2E +PASS U+96B1 隱 %1B%24%42%70%2C +PASS U+96B2 隲 %1B%24%42%70%2D +PASS U+96B4 隴 %1B%24%42%70%2F +PASS U+96B6 隶 %1B%24%42%70%30 +PASS U+96B7 隷 %1B%24%42%4E%6C +PASS U+96B8 隸 %1B%24%42%70%31 +PASS U+96B9 隹 %1B%24%42%70%32 +PASS U+96BB 隻 %1B%24%42%40%49 +PASS U+96BC 隼 %1B%24%42%48%3B +PASS U+96C0 雀 %1B%24%42%3F%7D +PASS U+96C1 雁 %1B%24%42%34%67 +PASS U+96C4 雄 %1B%24%42%4D%3A +PASS U+96C5 雅 %1B%24%42%32%6D +PASS U+96C6 集 %1B%24%42%3D%38 +PASS U+96C7 雇 %1B%24%42%38%5B +PASS U+96C9 雉 %1B%24%42%70%35 +PASS U+96CB 雋 %1B%24%42%70%34 +PASS U+96CC 雌 %1B%24%42%3B%73 +PASS U+96CD 雍 %1B%24%42%70%36 +PASS U+96CE 雎 %1B%24%42%70%33 +PASS U+96D1 雑 %1B%24%42%3B%28 +PASS U+96D5 雕 %1B%24%42%70%3A +PASS U+96D6 雖 %1B%24%42%6A%2D +PASS U+96D9 雙 %1B%24%42%52%56 +PASS U+96DB 雛 %1B%24%42%3F%77 +PASS U+96DC 雜 %1B%24%42%70%38 +PASS U+96E2 離 %1B%24%42%4E%25 +PASS U+96E3 難 %1B%24%42%46%71 +PASS U+96E8 雨 %1B%24%42%31%2B +PASS U+96EA 雪 %1B%24%42%40%63 +PASS U+96EB 雫 %1B%24%42%3C%36 +PASS U+96F0 雰 %1B%24%42%4A%37 +PASS U+96F2 雲 %1B%24%42%31%40 +PASS U+96F6 零 %1B%24%42%4E%6D +PASS U+96F7 雷 %1B%24%42%4D%6B +PASS U+96F9 雹 %1B%24%42%70%3B +PASS U+96FB 電 %1B%24%42%45%45 +PASS U+9700 需 %1B%24%42%3C%7B +PASS U+9704 霄 %1B%24%42%70%3C +PASS U+9706 霆 %1B%24%42%70%3D +PASS U+9707 震 %1B%24%42%3F%4C +PASS U+9708 霈 %1B%24%42%70%3E +PASS U+970A 霊 %1B%24%42%4E%6E +PASS U+970D 霍 %1B%24%42%70%39 +PASS U+970E 霎 %1B%24%42%70%40 +PASS U+970F 霏 %1B%24%42%70%42 +PASS U+9711 霑 %1B%24%42%70%41 +PASS U+9713 霓 %1B%24%42%70%3F +PASS U+9716 霖 %1B%24%42%70%43 +PASS U+9719 霙 %1B%24%42%70%44 +PASS U+971C 霜 %1B%24%42%41%7A +PASS U+971E 霞 %1B%24%42%32%62 +PASS U+9724 霤 %1B%24%42%70%45 +PASS U+9727 霧 %1B%24%42%4C%38 +PASS U+972A 霪 %1B%24%42%70%46 +PASS U+9730 霰 %1B%24%42%70%47 +PASS U+9732 露 %1B%24%42%4F%2A +FAIL U+9733 霳 %1B%24%42%7C%53 assert_equals: expected "%1B%24%42%7C%53" but got "%26%23%33%38%37%30%37%3B" +PASS U+9738 霸 %1B%24%42%5B%31 +PASS U+9739 霹 %1B%24%42%70%48 +FAIL U+973B 霻 %1B%24%42%7C%54 assert_equals: expected "%1B%24%42%7C%54" but got "%26%23%33%38%37%31%35%3B" +PASS U+973D 霽 %1B%24%42%70%49 +PASS U+973E 霾 %1B%24%42%70%4A +PASS U+9742 靂 %1B%24%42%70%4E +FAIL U+9743 靃 %1B%24%42%7C%55 assert_equals: expected "%1B%24%42%7C%55" but got "%26%23%33%38%37%32%33%3B" +PASS U+9744 靄 %1B%24%42%70%4B +PASS U+9746 靆 %1B%24%42%70%4C +PASS U+9748 靈 %1B%24%42%70%4D +PASS U+9749 靉 %1B%24%42%70%4F +FAIL U+974D 靍 %1B%24%42%7C%56 assert_equals: expected "%1B%24%42%7C%56" but got "%26%23%33%38%37%33%33%3B" +FAIL U+974F 靏 %1B%24%42%7C%57 assert_equals: expected "%1B%24%42%7C%57" but got "%26%23%33%38%37%33%35%3B" +FAIL U+9751 靑 %1B%24%42%7C%58 assert_equals: expected "%1B%24%42%7C%58" but got "%26%23%33%38%37%33%37%3B" +PASS U+9752 青 %1B%24%42%40%44 +FAIL U+9755 靕 %1B%24%42%7C%59 assert_equals: expected "%1B%24%42%7C%59" but got "%26%23%33%38%37%34%31%3B" +PASS U+9756 靖 %1B%24%42%4C%77 +PASS U+9759 静 %1B%24%42%40%45 +PASS U+975C 靜 %1B%24%42%70%50 +PASS U+975E 非 %1B%24%42%48%73 +PASS U+9760 靠 %1B%24%42%70%51 +PASS U+9761 靡 %1B%24%42%73%53 +PASS U+9762 面 %1B%24%42%4C%4C +PASS U+9764 靤 %1B%24%42%70%52 +PASS U+9766 靦 %1B%24%42%70%53 +PASS U+9768 靨 %1B%24%42%70%54 +PASS U+9769 革 %1B%24%42%33%57 +PASS U+976B 靫 %1B%24%42%70%56 +PASS U+976D 靭 %1B%24%42%3F%59 +PASS U+9771 靱 %1B%24%42%70%57 +PASS U+9774 靴 %1B%24%42%37%24 +PASS U+9779 靹 %1B%24%42%70%58 +PASS U+977A 靺 %1B%24%42%70%5C +PASS U+977C 靼 %1B%24%42%70%5A +PASS U+9781 鞁 %1B%24%42%70%5B +PASS U+9784 鞄 %1B%24%42%33%73 +PASS U+9785 鞅 %1B%24%42%70%59 +PASS U+9786 鞆 %1B%24%42%70%5D +PASS U+978B 鞋 %1B%24%42%70%5E +PASS U+978D 鞍 %1B%24%42%30%48 +PASS U+978F 鞏 %1B%24%42%70%5F +PASS U+9790 鞐 %1B%24%42%70%60 +PASS U+9798 鞘 %1B%24%42%3E%64 +PASS U+979C 鞜 %1B%24%42%70%61 +PASS U+97A0 鞠 %1B%24%42%35%47 +PASS U+97A3 鞣 %1B%24%42%70%64 +PASS U+97A6 鞦 %1B%24%42%70%63 +PASS U+97A8 鞨 %1B%24%42%70%62 +PASS U+97AB 鞫 %1B%24%42%6B%71 +PASS U+97AD 鞭 %1B%24%42%4A%5C +PASS U+97B3 鞳 %1B%24%42%70%65 +PASS U+97B4 鞴 %1B%24%42%70%66 +PASS U+97C3 韃 %1B%24%42%70%67 +PASS U+97C6 韆 %1B%24%42%70%68 +PASS U+97C8 韈 %1B%24%42%70%69 +PASS U+97CB 韋 %1B%24%42%70%6A +PASS U+97D3 韓 %1B%24%42%34%5A +PASS U+97DC 韜 %1B%24%42%70%6B +PASS U+97ED 韭 %1B%24%42%70%6C +PASS U+97EE 韮 %1B%24%42%47%23 +PASS U+97F2 韲 %1B%24%42%70%6E +PASS U+97F3 音 %1B%24%42%32%3B +PASS U+97F5 韵 %1B%24%42%70%71 +PASS U+97F6 韶 %1B%24%42%70%70 +PASS U+97FB 韻 %1B%24%42%31%24 +PASS U+97FF 響 %1B%24%42%36%41 +PASS U+9801 頁 %1B%24%42%4A%47 +PASS U+9802 頂 %1B%24%42%44%3A +PASS U+9803 頃 %1B%24%42%3A%22 +PASS U+9805 項 %1B%24%42%39%60 +PASS U+9806 順 %1B%24%42%3D%67 +PASS U+9808 須 %1B%24%42%3F%5C +PASS U+980C 頌 %1B%24%42%70%73 +PASS U+980F 頏 %1B%24%42%70%72 +PASS U+9810 預 %1B%24%42%4D%42 +PASS U+9811 頑 %1B%24%42%34%68 +PASS U+9812 頒 %1B%24%42%48%52 +PASS U+9813 頓 %1B%24%42%46%5C +PASS U+9817 頗 %1B%24%42%3F%7C +PASS U+9818 領 %1B%24%42%4E%4E +PASS U+981A 頚 %1B%24%42%37%5B +PASS U+9821 頡 %1B%24%42%70%76 +PASS U+9824 頤 %1B%24%42%70%75 +PASS U+982C 頬 %1B%24%42%4B%4B +PASS U+982D 頭 %1B%24%42%46%2C +PASS U+9834 頴 %1B%24%42%31%50 +PASS U+9837 頷 %1B%24%42%70%77 +PASS U+9838 頸 %1B%24%42%70%74 +PASS U+983B 頻 %1B%24%42%49%51 +PASS U+983C 頼 %1B%24%42%4D%6A +PASS U+983D 頽 %1B%24%42%70%78 +PASS U+9846 顆 %1B%24%42%70%79 +PASS U+984B 顋 %1B%24%42%70%7B +PASS U+984C 題 %1B%24%42%42%6A +PASS U+984D 額 %1B%24%42%33%5B +PASS U+984E 顎 %1B%24%42%33%5C +PASS U+984F 顏 %1B%24%42%70%7A +PASS U+9854 顔 %1B%24%42%34%69 +PASS U+9855 顕 %1B%24%42%38%32 +FAIL U+9857 顗 %1B%24%42%7C%5A assert_equals: expected "%1B%24%42%7C%5A" but got "%26%23%33%38%39%39%39%3B" +PASS U+9858 願 %1B%24%42%34%6A +PASS U+985B 顛 %1B%24%42%45%3F +PASS U+985E 類 %1B%24%42%4E%60 +FAIL U+9865 顥 %1B%24%42%7C%5B assert_equals: expected "%1B%24%42%7C%5B" but got "%26%23%33%39%30%31%33%3B" +PASS U+9867 顧 %1B%24%42%38%5C +PASS U+986B 顫 %1B%24%42%70%7C +PASS U+986F 顯 %1B%24%42%70%7D +PASS U+9870 顰 %1B%24%42%70%7E +PASS U+9871 顱 %1B%24%42%71%21 +PASS U+9873 顳 %1B%24%42%71%23 +PASS U+9874 顴 %1B%24%42%71%22 +PASS U+98A8 風 %1B%24%42%49%77 +PASS U+98AA 颪 %1B%24%42%71%24 +PASS U+98AF 颯 %1B%24%42%71%25 +PASS U+98B1 颱 %1B%24%42%71%26 +PASS U+98B6 颶 %1B%24%42%71%27 +PASS U+98C3 飃 %1B%24%42%71%29 +PASS U+98C4 飄 %1B%24%42%71%28 +PASS U+98C6 飆 %1B%24%42%71%2A +PASS U+98DB 飛 %1B%24%42%48%74 +PASS U+98DC 飜 %1B%24%42%66%4C +PASS U+98DF 食 %1B%24%42%3F%29 +PASS U+98E2 飢 %1B%24%42%35%32 +PASS U+98E9 飩 %1B%24%42%71%2B +PASS U+98EB 飫 %1B%24%42%71%2C +PASS U+98ED 飭 %1B%24%42%52%2C +PASS U+98EE 飮 %1B%24%42%5D%3B +PASS U+98EF 飯 %1B%24%42%48%53 +PASS U+98F2 飲 %1B%24%42%30%7B +PASS U+98F4 飴 %1B%24%42%30%3B +PASS U+98FC 飼 %1B%24%42%3B%74 +PASS U+98FD 飽 %1B%24%42%4B%30 +PASS U+98FE 飾 %1B%24%42%3E%7E +PASS U+9903 餃 %1B%24%42%71%2D +PASS U+9905 餅 %1B%24%42%4C%5F +PASS U+9909 餉 %1B%24%42%71%2E +PASS U+990A 養 %1B%24%42%4D%5C +PASS U+990C 餌 %1B%24%42%31%42 +PASS U+9910 餐 %1B%24%42%3B%41 +PASS U+9912 餒 %1B%24%42%71%2F +PASS U+9913 餓 %1B%24%42%32%6E +PASS U+9914 餔 %1B%24%42%71%30 +PASS U+9918 餘 %1B%24%42%71%31 +PASS U+991D 餝 %1B%24%42%71%33 +PASS U+991E 餞 %1B%24%42%71%34 +PASS U+9920 餠 %1B%24%42%71%36 +PASS U+9921 餡 %1B%24%42%71%32 +PASS U+9924 餤 %1B%24%42%71%35 +FAIL U+9927 餧 %1B%24%42%7C%5E assert_equals: expected "%1B%24%42%7C%5E" but got "%26%23%33%39%32%30%37%3B" +PASS U+9928 館 %1B%24%42%34%5B +PASS U+992C 餬 %1B%24%42%71%37 +PASS U+992E 餮 %1B%24%42%71%38 +PASS U+993D 餽 %1B%24%42%71%39 +PASS U+993E 餾 %1B%24%42%71%3A +PASS U+9942 饂 %1B%24%42%71%3B +PASS U+9945 饅 %1B%24%42%71%3D +PASS U+9949 饉 %1B%24%42%71%3C +PASS U+994B 饋 %1B%24%42%71%3F +PASS U+994C 饌 %1B%24%42%71%42 +PASS U+9950 饐 %1B%24%42%71%3E +PASS U+9951 饑 %1B%24%42%71%40 +PASS U+9952 饒 %1B%24%42%71%41 +PASS U+9955 饕 %1B%24%42%71%43 +PASS U+9957 饗 %1B%24%42%36%42 +PASS U+9996 首 %1B%24%42%3C%73 +PASS U+9997 馗 %1B%24%42%71%44 +PASS U+9998 馘 %1B%24%42%71%45 +PASS U+9999 香 %1B%24%42%39%61 +FAIL U+999E 馞 %1B%24%42%7C%60 assert_equals: expected "%1B%24%42%7C%60" but got "%26%23%33%39%33%32%36%3B" +PASS U+99A5 馥 %1B%24%42%71%46 +PASS U+99A8 馨 %1B%24%42%33%3E +PASS U+99AC 馬 %1B%24%42%47%4F +PASS U+99AD 馭 %1B%24%42%71%47 +PASS U+99AE 馮 %1B%24%42%71%48 +PASS U+99B3 馳 %1B%24%42%43%5A +PASS U+99B4 馴 %1B%24%42%46%6B +PASS U+99BC 馼 %1B%24%42%71%49 +PASS U+99C1 駁 %1B%24%42%47%7D +PASS U+99C4 駄 %1B%24%42%42%4C +PASS U+99C5 駅 %1B%24%42%31%58 +PASS U+99C6 駆 %1B%24%42%36%6E +PASS U+99C8 駈 %1B%24%42%36%6F +PASS U+99D0 駐 %1B%24%42%43%73 +PASS U+99D1 駑 %1B%24%42%71%4E +PASS U+99D2 駒 %1B%24%42%36%70 +PASS U+99D5 駕 %1B%24%42%32%6F +PASS U+99D8 駘 %1B%24%42%71%4D +PASS U+99DB 駛 %1B%24%42%71%4B +PASS U+99DD 駝 %1B%24%42%71%4C +PASS U+99DF 駟 %1B%24%42%71%4A +PASS U+99E2 駢 %1B%24%42%71%58 +PASS U+99ED 駭 %1B%24%42%71%4F +PASS U+99EE 駮 %1B%24%42%71%50 +PASS U+99F1 駱 %1B%24%42%71%51 +PASS U+99F2 駲 %1B%24%42%71%52 +PASS U+99F8 駸 %1B%24%42%71%54 +PASS U+99FB 駻 %1B%24%42%71%53 +PASS U+99FF 駿 %1B%24%42%3D%59 +PASS U+9A01 騁 %1B%24%42%71%55 +PASS U+9A05 騅 %1B%24%42%71%57 +PASS U+9A0E 騎 %1B%24%42%35%33 +PASS U+9A0F 騏 %1B%24%42%71%56 +PASS U+9A12 騒 %1B%24%42%41%7B +PASS U+9A13 験 %1B%24%42%38%33 +PASS U+9A19 騙 %1B%24%42%71%59 +PASS U+9A28 騨 %1B%24%42%42%4D +PASS U+9A2B 騫 %1B%24%42%71%5A +PASS U+9A30 騰 %1B%24%42%46%2D +PASS U+9A37 騷 %1B%24%42%71%5B +PASS U+9A3E 騾 %1B%24%42%71%60 +PASS U+9A40 驀 %1B%24%42%71%5E +PASS U+9A42 驂 %1B%24%42%71%5D +PASS U+9A43 驃 %1B%24%42%71%5F +PASS U+9A45 驅 %1B%24%42%71%5C +PASS U+9A4D 驍 %1B%24%42%71%62 +FAIL U+9A4E 驎 %1B%24%42%7C%61 assert_equals: expected "%1B%24%42%7C%61" but got "%26%23%33%39%35%30%32%3B" +PASS U+9A55 驕 %1B%24%42%71%61 +PASS U+9A57 驗 %1B%24%42%71%64 +PASS U+9A5A 驚 %1B%24%42%36%43 +PASS U+9A5B 驛 %1B%24%42%71%63 +PASS U+9A5F 驟 %1B%24%42%71%65 +PASS U+9A62 驢 %1B%24%42%71%66 +PASS U+9A64 驤 %1B%24%42%71%68 +PASS U+9A65 驥 %1B%24%42%71%67 +PASS U+9A69 驩 %1B%24%42%71%69 +PASS U+9A6A 驪 %1B%24%42%71%6B +PASS U+9A6B 驫 %1B%24%42%71%6A +PASS U+9AA8 骨 %1B%24%42%39%7C +PASS U+9AAD 骭 %1B%24%42%71%6C +PASS U+9AB0 骰 %1B%24%42%71%6D +PASS U+9AB8 骸 %1B%24%42%33%3C +PASS U+9ABC 骼 %1B%24%42%71%6E +PASS U+9AC0 髀 %1B%24%42%71%6F +PASS U+9AC4 髄 %1B%24%42%3F%71 +PASS U+9ACF 髏 %1B%24%42%71%70 +PASS U+9AD1 髑 %1B%24%42%71%71 +PASS U+9AD3 髓 %1B%24%42%71%72 +PASS U+9AD4 體 %1B%24%42%71%73 +PASS U+9AD8 高 %1B%24%42%39%62 +FAIL U+9AD9 髙 %1B%24%42%7C%62 assert_equals: expected "%1B%24%42%7C%62" but got "%26%23%33%39%36%34%31%3B" +FAIL U+9ADC 髜 %1B%24%42%7C%63 assert_equals: expected "%1B%24%42%7C%63" but got "%26%23%33%39%36%34%34%3B" +PASS U+9ADE 髞 %1B%24%42%71%74 +PASS U+9ADF 髟 %1B%24%42%71%75 +PASS U+9AE2 髢 %1B%24%42%71%76 +PASS U+9AE3 髣 %1B%24%42%71%77 +PASS U+9AE6 髦 %1B%24%42%71%78 +PASS U+9AEA 髪 %1B%24%42%48%31 +PASS U+9AEB 髫 %1B%24%42%71%7A +PASS U+9AED 髭 %1B%24%42%49%26 +PASS U+9AEE 髮 %1B%24%42%71%7B +PASS U+9AEF 髯 %1B%24%42%71%79 +PASS U+9AF1 髱 %1B%24%42%71%7D +PASS U+9AF4 髴 %1B%24%42%71%7C +PASS U+9AF7 髷 %1B%24%42%71%7E +PASS U+9AFB 髻 %1B%24%42%72%21 +PASS U+9B06 鬆 %1B%24%42%72%22 +PASS U+9B18 鬘 %1B%24%42%72%23 +PASS U+9B1A 鬚 %1B%24%42%72%24 +PASS U+9B1F 鬟 %1B%24%42%72%25 +PASS U+9B22 鬢 %1B%24%42%72%26 +PASS U+9B23 鬣 %1B%24%42%72%27 +PASS U+9B25 鬥 %1B%24%42%72%28 +PASS U+9B27 鬧 %1B%24%42%72%29 +PASS U+9B28 鬨 %1B%24%42%72%2A +PASS U+9B29 鬩 %1B%24%42%72%2B +PASS U+9B2A 鬪 %1B%24%42%72%2C +PASS U+9B2E 鬮 %1B%24%42%72%2D +PASS U+9B2F 鬯 %1B%24%42%72%2E +PASS U+9B31 鬱 %1B%24%42%5D%35 +PASS U+9B32 鬲 %1B%24%42%72%2F +PASS U+9B3B 鬻 %1B%24%42%64%78 +PASS U+9B3C 鬼 %1B%24%42%35%34 +PASS U+9B41 魁 %1B%24%42%33%21 +PASS U+9B42 魂 %1B%24%42%3A%32 +PASS U+9B43 魃 %1B%24%42%72%31 +PASS U+9B44 魄 %1B%24%42%72%30 +PASS U+9B45 魅 %1B%24%42%4C%25 +PASS U+9B4D 魍 %1B%24%42%72%33 +PASS U+9B4E 魎 %1B%24%42%72%34 +PASS U+9B4F 魏 %1B%24%42%72%32 +PASS U+9B51 魑 %1B%24%42%72%35 +PASS U+9B54 魔 %1B%24%42%4B%62 +PASS U+9B58 魘 %1B%24%42%72%36 +PASS U+9B5A 魚 %1B%24%42%35%7B +PASS U+9B6F 魯 %1B%24%42%4F%25 +FAIL U+9B72 魲 %1B%24%42%7C%65 assert_equals: expected "%1B%24%42%7C%65" but got "%26%23%33%39%37%39%34%3B" +PASS U+9B74 魴 %1B%24%42%72%37 +FAIL U+9B75 魵 %1B%24%42%7C%64 assert_equals: expected "%1B%24%42%7C%64" but got "%26%23%33%39%37%39%37%3B" +PASS U+9B83 鮃 %1B%24%42%72%39 +PASS U+9B8E 鮎 %1B%24%42%30%3E +FAIL U+9B8F 鮏 %1B%24%42%7C%66 assert_equals: expected "%1B%24%42%7C%66" but got "%26%23%33%39%38%32%33%3B" +PASS U+9B91 鮑 %1B%24%42%72%3A +PASS U+9B92 鮒 %1B%24%42%4A%2B +PASS U+9B93 鮓 %1B%24%42%72%38 +PASS U+9B96 鮖 %1B%24%42%72%3B +PASS U+9B97 鮗 %1B%24%42%72%3C +PASS U+9B9F 鮟 %1B%24%42%72%3D +PASS U+9BA0 鮠 %1B%24%42%72%3E +PASS U+9BA8 鮨 %1B%24%42%72%3F +PASS U+9BAA 鮪 %1B%24%42%4B%6E +PASS U+9BAB 鮫 %1B%24%42%3B%2D +PASS U+9BAD 鮭 %1B%24%42%3A%7A +PASS U+9BAE 鮮 %1B%24%42%41%2F +FAIL U+9BB1 鮱 %1B%24%42%7C%67 assert_equals: expected "%1B%24%42%7C%67" but got "%26%23%33%39%38%35%37%3B" +PASS U+9BB4 鮴 %1B%24%42%72%40 +PASS U+9BB9 鮹 %1B%24%42%72%43 +FAIL U+9BBB 鮻 %1B%24%42%7C%68 assert_equals: expected "%1B%24%42%7C%68" but got "%26%23%33%39%38%36%37%3B" +PASS U+9BC0 鯀 %1B%24%42%72%41 +PASS U+9BC6 鯆 %1B%24%42%72%44 +PASS U+9BC9 鯉 %1B%24%42%38%71 +PASS U+9BCA 鯊 %1B%24%42%72%42 +PASS U+9BCF 鯏 %1B%24%42%72%45 +PASS U+9BD1 鯑 %1B%24%42%72%46 +PASS U+9BD2 鯒 %1B%24%42%72%47 +PASS U+9BD4 鯔 %1B%24%42%72%4B +PASS U+9BD6 鯖 %1B%24%42%3B%2A +PASS U+9BDB 鯛 %1B%24%42%42%64 +PASS U+9BE1 鯡 %1B%24%42%72%4C +PASS U+9BE2 鯢 %1B%24%42%72%49 +PASS U+9BE3 鯣 %1B%24%42%72%48 +PASS U+9BE4 鯤 %1B%24%42%72%4A +PASS U+9BE8 鯨 %1B%24%42%37%5F +PASS U+9BF0 鯰 %1B%24%42%72%50 +PASS U+9BF1 鯱 %1B%24%42%72%4F +PASS U+9BF2 鯲 %1B%24%42%72%4E +PASS U+9BF5 鯵 %1B%24%42%30%33 +FAIL U+9C00 鰀 %1B%24%42%7C%69 assert_equals: expected "%1B%24%42%7C%69" but got "%26%23%33%39%39%33%36%3B" +PASS U+9C04 鰄 %1B%24%42%72%5A +PASS U+9C06 鰆 %1B%24%42%72%56 +PASS U+9C08 鰈 %1B%24%42%72%57 +PASS U+9C09 鰉 %1B%24%42%72%53 +PASS U+9C0A 鰊 %1B%24%42%72%59 +PASS U+9C0C 鰌 %1B%24%42%72%55 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_7001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_7001-last-expected.txt new file mode 100644 index 0000000..5251ac5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form_7001-last-expected.txt
@@ -0,0 +1,396 @@ +This is a testharness.js-based test. +Found 392 tests; 351 PASS, 41 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+9C0D 鰍 %1B%24%42%33%62 +PASS U+9C10 鰐 %1B%24%42%4F%4C +PASS U+9C12 鰒 %1B%24%42%72%58 +PASS U+9C13 鰓 %1B%24%42%72%54 +PASS U+9C14 鰔 %1B%24%42%72%52 +PASS U+9C15 鰕 %1B%24%42%72%51 +PASS U+9C1B 鰛 %1B%24%42%72%5C +PASS U+9C21 鰡 %1B%24%42%72%5F +PASS U+9C24 鰤 %1B%24%42%72%5E +PASS U+9C25 鰥 %1B%24%42%72%5D +PASS U+9C2D 鰭 %1B%24%42%49%49 +PASS U+9C2E 鰮 %1B%24%42%72%5B +PASS U+9C2F 鰯 %1B%24%42%30%73 +PASS U+9C30 鰰 %1B%24%42%72%60 +PASS U+9C32 鰲 %1B%24%42%72%62 +PASS U+9C39 鰹 %1B%24%42%33%6F +PASS U+9C3A 鰺 %1B%24%42%72%4D +PASS U+9C3B 鰻 %1B%24%42%31%37 +PASS U+9C3E 鰾 %1B%24%42%72%64 +PASS U+9C46 鱆 %1B%24%42%72%63 +PASS U+9C47 鱇 %1B%24%42%72%61 +PASS U+9C48 鱈 %1B%24%42%43%2D +PASS U+9C52 鱒 %1B%24%42%4B%70 +PASS U+9C57 鱗 %1B%24%42%4E%5A +PASS U+9C5A 鱚 %1B%24%42%72%65 +PASS U+9C60 鱠 %1B%24%42%72%66 +PASS U+9C67 鱧 %1B%24%42%72%67 +PASS U+9C76 鱶 %1B%24%42%72%68 +PASS U+9C78 鱸 %1B%24%42%72%69 +PASS U+9CE5 鳥 %1B%24%42%44%3B +PASS U+9CE7 鳧 %1B%24%42%72%6A +PASS U+9CE9 鳩 %1B%24%42%48%37 +PASS U+9CEB 鳫 %1B%24%42%72%6F +PASS U+9CEC 鳬 %1B%24%42%72%6B +PASS U+9CF0 鳰 %1B%24%42%72%6C +PASS U+9CF3 鳳 %1B%24%42%4B%31 +PASS U+9CF4 鳴 %1B%24%42%4C%44 +PASS U+9CF6 鳶 %1B%24%42%46%50 +PASS U+9D03 鴃 %1B%24%42%72%70 +PASS U+9D06 鴆 %1B%24%42%72%71 +PASS U+9D07 鴇 %1B%24%42%46%3E +PASS U+9D08 鴈 %1B%24%42%72%6E +PASS U+9D09 鴉 %1B%24%42%72%6D +PASS U+9D0E 鴎 %1B%24%42%32%2A +PASS U+9D12 鴒 %1B%24%42%72%79 +PASS U+9D15 鴕 %1B%24%42%72%78 +PASS U+9D1B 鴛 %1B%24%42%31%75 +PASS U+9D1F 鴟 %1B%24%42%72%76 +PASS U+9D23 鴣 %1B%24%42%72%75 +PASS U+9D26 鴦 %1B%24%42%72%73 +PASS U+9D28 鴨 %1B%24%42%33%7B +PASS U+9D2A 鴪 %1B%24%42%72%72 +PASS U+9D2B 鴫 %1B%24%42%3C%32 +PASS U+9D2C 鴬 %1B%24%42%32%29 +PASS U+9D3B 鴻 %1B%24%42%39%63 +PASS U+9D3E 鴾 %1B%24%42%72%7C +PASS U+9D3F 鴿 %1B%24%42%72%7B +PASS U+9D41 鵁 %1B%24%42%72%7A +PASS U+9D44 鵄 %1B%24%42%72%77 +PASS U+9D46 鵆 %1B%24%42%72%7D +PASS U+9D48 鵈 %1B%24%42%72%7E +PASS U+9D50 鵐 %1B%24%42%73%25 +PASS U+9D51 鵑 %1B%24%42%73%24 +PASS U+9D59 鵙 %1B%24%42%73%26 +PASS U+9D5C 鵜 %1B%24%42%31%2D +PASS U+9D5D 鵝 %1B%24%42%73%21 +PASS U+9D5E 鵞 %1B%24%42%73%22 +PASS U+9D60 鵠 %1B%24%42%39%74 +PASS U+9D61 鵡 %1B%24%42%4C%39 +PASS U+9D64 鵤 %1B%24%42%73%23 +FAIL U+9D6B 鵫 %1B%24%42%7C%6B assert_equals: expected "%1B%24%42%7C%6B" but got "%26%23%34%30%32%39%39%3B" +PASS U+9D6C 鵬 %1B%24%42%4B%32 +PASS U+9D6F 鵯 %1B%24%42%73%2B +FAIL U+9D70 鵰 %1B%24%42%7C%6A assert_equals: expected "%1B%24%42%7C%6A" but got "%26%23%34%30%33%30%34%3B" +PASS U+9D72 鵲 %1B%24%42%73%27 +PASS U+9D7A 鵺 %1B%24%42%73%2C +PASS U+9D87 鶇 %1B%24%42%73%29 +PASS U+9D89 鶉 %1B%24%42%73%28 +PASS U+9D8F 鶏 %1B%24%42%37%5C +PASS U+9D9A 鶚 %1B%24%42%73%2D +PASS U+9DA4 鶤 %1B%24%42%73%2E +PASS U+9DA9 鶩 %1B%24%42%73%2F +PASS U+9DAB 鶫 %1B%24%42%73%2A +PASS U+9DAF 鶯 %1B%24%42%72%74 +PASS U+9DB2 鶲 %1B%24%42%73%30 +PASS U+9DB4 鶴 %1B%24%42%44%61 +PASS U+9DB8 鶸 %1B%24%42%73%34 +PASS U+9DBA 鶺 %1B%24%42%73%35 +PASS U+9DBB 鶻 %1B%24%42%73%33 +PASS U+9DC1 鷁 %1B%24%42%73%32 +PASS U+9DC2 鷂 %1B%24%42%73%38 +PASS U+9DC4 鷄 %1B%24%42%73%31 +PASS U+9DC6 鷆 %1B%24%42%73%36 +PASS U+9DCF 鷏 %1B%24%42%73%37 +PASS U+9DD3 鷓 %1B%24%42%73%3A +PASS U+9DD9 鷙 %1B%24%42%73%39 +PASS U+9DE6 鷦 %1B%24%42%73%3C +PASS U+9DED 鷭 %1B%24%42%73%3D +PASS U+9DEF 鷯 %1B%24%42%73%3E +PASS U+9DF2 鷲 %1B%24%42%4F%49 +PASS U+9DF8 鷸 %1B%24%42%73%3B +PASS U+9DF9 鷹 %1B%24%42%42%6B +PASS U+9DFA 鷺 %1B%24%42%3A%6D +PASS U+9DFD 鷽 %1B%24%42%73%3F +FAIL U+9E19 鸙 %1B%24%42%7C%6D assert_equals: expected "%1B%24%42%7C%6D" but got "%26%23%34%30%34%37%33%3B" +PASS U+9E1A 鸚 %1B%24%42%73%40 +PASS U+9E1B 鸛 %1B%24%42%73%41 +PASS U+9E1E 鸞 %1B%24%42%73%42 +PASS U+9E75 鹵 %1B%24%42%73%43 +PASS U+9E78 鹸 %1B%24%42%38%34 +PASS U+9E79 鹹 %1B%24%42%73%44 +PASS U+9E7D 鹽 %1B%24%42%73%45 +PASS U+9E7F 鹿 %1B%24%42%3C%2F +PASS U+9E81 麁 %1B%24%42%73%46 +PASS U+9E88 麈 %1B%24%42%73%47 +PASS U+9E8B 麋 %1B%24%42%73%48 +PASS U+9E8C 麌 %1B%24%42%73%49 +PASS U+9E91 麑 %1B%24%42%73%4C +PASS U+9E92 麒 %1B%24%42%73%4A +PASS U+9E93 麓 %1B%24%42%4F%3C +PASS U+9E95 麕 %1B%24%42%73%4B +PASS U+9E97 麗 %1B%24%42%4E%6F +PASS U+9E9D 麝 %1B%24%42%73%4D +PASS U+9E9F 麟 %1B%24%42%4E%5B +PASS U+9EA5 麥 %1B%24%42%73%4E +PASS U+9EA6 麦 %1B%24%42%47%7E +PASS U+9EA9 麩 %1B%24%42%73%4F +PASS U+9EAA 麪 %1B%24%42%73%51 +PASS U+9EAD 麭 %1B%24%42%73%52 +PASS U+9EB8 麸 %1B%24%42%73%50 +PASS U+9EB9 麹 %1B%24%42%39%6D +PASS U+9EBA 麺 %1B%24%42%4C%4D +PASS U+9EBB 麻 %1B%24%42%4B%63 +PASS U+9EBC 麼 %1B%24%42%56%77 +PASS U+9EBE 麾 %1B%24%42%5D%60 +PASS U+9EBF 麿 %1B%24%42%4B%7B +PASS U+9EC4 黄 %1B%24%42%32%2B +PASS U+9ECC 黌 %1B%24%42%73%54 +PASS U+9ECD 黍 %1B%24%42%35%50 +PASS U+9ECE 黎 %1B%24%42%73%55 +PASS U+9ECF 黏 %1B%24%42%73%56 +PASS U+9ED0 黐 %1B%24%42%73%57 +FAIL U+9ED1 黑 %1B%24%42%7C%6E assert_equals: expected "%1B%24%42%7C%6E" but got "%26%23%34%30%36%35%37%3B" +PASS U+9ED2 黒 %1B%24%42%39%75 +PASS U+9ED4 黔 %1B%24%42%73%58 +PASS U+9ED8 默 %1B%24%42%60%54 +PASS U+9ED9 黙 %1B%24%42%4C%5B +PASS U+9EDB 黛 %1B%24%42%42%63 +PASS U+9EDC 黜 %1B%24%42%73%59 +PASS U+9EDD 黝 %1B%24%42%73%5B +PASS U+9EDE 點 %1B%24%42%73%5A +PASS U+9EE0 黠 %1B%24%42%73%5C +PASS U+9EE5 黥 %1B%24%42%73%5D +PASS U+9EE8 黨 %1B%24%42%73%5E +PASS U+9EEF 黯 %1B%24%42%73%5F +PASS U+9EF4 黴 %1B%24%42%73%60 +PASS U+9EF6 黶 %1B%24%42%73%61 +PASS U+9EF7 黷 %1B%24%42%73%62 +PASS U+9EF9 黹 %1B%24%42%73%63 +PASS U+9EFB 黻 %1B%24%42%73%64 +PASS U+9EFC 黼 %1B%24%42%73%65 +PASS U+9EFD 黽 %1B%24%42%73%66 +PASS U+9F07 鼇 %1B%24%42%73%67 +PASS U+9F08 鼈 %1B%24%42%73%68 +PASS U+9F0E 鼎 %1B%24%42%45%24 +PASS U+9F13 鼓 %1B%24%42%38%5D +PASS U+9F15 鼕 %1B%24%42%73%6A +PASS U+9F20 鼠 %1B%24%42%41%4D +PASS U+9F21 鼡 %1B%24%42%73%6B +PASS U+9F2C 鼬 %1B%24%42%73%6C +PASS U+9F3B 鼻 %1B%24%42%49%21 +PASS U+9F3E 鼾 %1B%24%42%73%6D +PASS U+9F4A 齊 %1B%24%42%73%6E +PASS U+9F4B 齋 %1B%24%42%63%37 +PASS U+9F4E 齎 %1B%24%42%6C%5A +PASS U+9F4F 齏 %1B%24%42%70%6D +PASS U+9F52 齒 %1B%24%42%73%6F +PASS U+9F54 齔 %1B%24%42%73%70 +PASS U+9F5F 齟 %1B%24%42%73%72 +PASS U+9F60 齠 %1B%24%42%73%73 +PASS U+9F61 齡 %1B%24%42%73%74 +PASS U+9F62 齢 %1B%24%42%4E%70 +PASS U+9F63 齣 %1B%24%42%73%71 +PASS U+9F66 齦 %1B%24%42%73%75 +PASS U+9F67 齧 %1B%24%42%73%76 +PASS U+9F6A 齪 %1B%24%42%73%78 +PASS U+9F6C 齬 %1B%24%42%73%77 +PASS U+9F72 齲 %1B%24%42%73%7A +PASS U+9F76 齶 %1B%24%42%73%7B +PASS U+9F77 齷 %1B%24%42%73%79 +PASS U+9F8D 龍 %1B%24%42%4E%36 +PASS U+9F95 龕 %1B%24%42%73%7C +PASS U+9F9C 龜 %1B%24%42%73%7D +PASS U+9F9D 龝 %1B%24%42%63%54 +PASS U+9FA0 龠 %1B%24%42%73%7E +FAIL U+F929 朗 %1B%24%42%7A%46 assert_equals: expected "%1B%24%42%7A%46" but got "%26%23%36%33%37%38%35%3B" +FAIL U+F9DC 隆 %1B%24%42%7C%4F assert_equals: expected "%1B%24%42%7C%4F" but got "%26%23%36%33%39%36%34%3B" +FAIL U+FA0E 﨎 %1B%24%42%79%54 assert_equals: expected "%1B%24%42%79%54" but got "%26%23%36%34%30%31%34%3B" +FAIL U+FA0F 﨏 %1B%24%42%79%5F assert_equals: expected "%1B%24%42%79%5F" but got "%26%23%36%34%30%31%35%3B" +FAIL U+FA10 塚 %1B%24%42%79%60 assert_equals: expected "%1B%24%42%79%60" but got "%26%23%36%34%30%31%36%3B" +FAIL U+FA11 﨑 %1B%24%42%79%75 assert_equals: expected "%1B%24%42%79%75" but got "%26%23%36%34%30%31%37%3B" +FAIL U+FA12 晴 %1B%24%42%7A%3E assert_equals: expected "%1B%24%42%7A%3E" but got "%26%23%36%34%30%31%38%3B" +FAIL U+FA13 﨓 %1B%24%42%7A%4E assert_equals: expected "%1B%24%42%7A%4E" but got "%26%23%36%34%30%31%39%3B" +FAIL U+FA14 﨔 %1B%24%42%7A%50 assert_equals: expected "%1B%24%42%7A%50" but got "%26%23%36%34%30%32%30%3B" +FAIL U+FA15 凞 %1B%24%42%7A%7B assert_equals: expected "%1B%24%42%7A%7B" but got "%26%23%36%34%30%32%31%3B" +FAIL U+FA16 猪 %1B%24%42%7B%23 assert_equals: expected "%1B%24%42%7B%23" but got "%26%23%36%34%30%32%32%3B" +FAIL U+FA17 益 %1B%24%42%7B%3A assert_equals: expected "%1B%24%42%7B%3A" but got "%26%23%36%34%30%32%33%3B" +FAIL U+FA18 礼 %1B%24%42%7B%42 assert_equals: expected "%1B%24%42%7B%42" but got "%26%23%36%34%30%32%34%3B" +FAIL U+FA19 神 %1B%24%42%7B%43 assert_equals: expected "%1B%24%42%7B%43" but got "%26%23%36%34%30%32%35%3B" +FAIL U+FA1A 祥 %1B%24%42%7B%44 assert_equals: expected "%1B%24%42%7B%44" but got "%26%23%36%34%30%32%36%3B" +FAIL U+FA1B 福 %1B%24%42%7B%46 assert_equals: expected "%1B%24%42%7B%46" but got "%26%23%36%34%30%32%37%3B" +FAIL U+FA1C 靖 %1B%24%42%7B%4A assert_equals: expected "%1B%24%42%7B%4A" but got "%26%23%36%34%30%32%38%3B" +FAIL U+FA1D 精 %1B%24%42%7B%4D assert_equals: expected "%1B%24%42%7B%4D" but got "%26%23%36%34%30%32%39%3B" +FAIL U+FA1E 羽 %1B%24%42%7B%56 assert_equals: expected "%1B%24%42%7B%56" but got "%26%23%36%34%30%33%30%3B" +FAIL U+FA1F 﨟 %1B%24%42%7B%61 assert_equals: expected "%1B%24%42%7B%61" but got "%26%23%36%34%30%33%31%3B" +FAIL U+FA20 蘒 %1B%24%42%7B%63 assert_equals: expected "%1B%24%42%7B%63" but got "%26%23%36%34%30%33%32%3B" +FAIL U+FA21 﨡 %1B%24%42%7B%64 assert_equals: expected "%1B%24%42%7B%64" but got "%26%23%36%34%30%33%33%3B" +FAIL U+FA22 諸 %1B%24%42%7B%6D assert_equals: expected "%1B%24%42%7B%6D" but got "%26%23%36%34%30%33%34%3B" +FAIL U+FA23 﨣 %1B%24%42%7B%75 assert_equals: expected "%1B%24%42%7B%75" but got "%26%23%36%34%30%33%35%3B" +FAIL U+FA24 﨤 %1B%24%42%7B%77 assert_equals: expected "%1B%24%42%7B%77" but got "%26%23%36%34%30%33%36%3B" +FAIL U+FA25 逸 %1B%24%42%7B%78 assert_equals: expected "%1B%24%42%7B%78" but got "%26%23%36%34%30%33%37%3B" +FAIL U+FA26 都 %1B%24%42%7B%7B assert_equals: expected "%1B%24%42%7B%7B" but got "%26%23%36%34%30%33%38%3B" +FAIL U+FA27 﨧 %1B%24%42%7C%39 assert_equals: expected "%1B%24%42%7C%39" but got "%26%23%36%34%30%33%39%3B" +FAIL U+FA28 﨨 %1B%24%42%7C%40 assert_equals: expected "%1B%24%42%7C%40" but got "%26%23%36%34%30%34%30%3B" +FAIL U+FA29 﨩 %1B%24%42%7C%50 assert_equals: expected "%1B%24%42%7C%50" but got "%26%23%36%34%30%34%31%3B" +FAIL U+FA2A 飯 %1B%24%42%7C%5C assert_equals: expected "%1B%24%42%7C%5C" but got "%26%23%36%34%30%34%32%3B" +FAIL U+FA2B 飼 %1B%24%42%7C%5D assert_equals: expected "%1B%24%42%7C%5D" but got "%26%23%36%34%30%34%33%3B" +FAIL U+FA2C 館 %1B%24%42%7C%5F assert_equals: expected "%1B%24%42%7C%5F" but got "%26%23%36%34%30%34%34%3B" +FAIL U+FA2D 鶴 %1B%24%42%7C%6C assert_equals: expected "%1B%24%42%7C%6C" but got "%26%23%36%34%30%34%35%3B" +PASS U+FF01 ! %1B%24%42%21%2A +FAIL U+FF02 " %1B%24%42%7C%7E assert_equals: expected "%1B%24%42%7C%7E" but got "%26%23%36%35%32%38%32%3B" +PASS U+FF03 # %1B%24%42%21%74 +PASS U+FF04 $ %1B%24%42%21%70 +PASS U+FF05 % %1B%24%42%21%73 +PASS U+FF06 & %1B%24%42%21%75 +FAIL U+FF07 ' %1B%24%42%7C%7D assert_equals: expected "%1B%24%42%7C%7D" but got "%26%23%36%35%32%38%37%3B" +PASS U+FF08 ( %1B%24%42%21%4A +PASS U+FF09 ) %1B%24%42%21%4B +PASS U+FF0A * %1B%24%42%21%76 +PASS U+FF0B + %1B%24%42%21%5C +PASS U+FF0C , %1B%24%42%21%24 +PASS U+FF0D - %1B%24%42%21%5D +PASS U+FF0E . %1B%24%42%21%25 +PASS U+FF0F / %1B%24%42%21%3F +PASS U+FF10 0 %1B%24%42%23%30 +PASS U+FF11 1 %1B%24%42%23%31 +PASS U+FF12 2 %1B%24%42%23%32 +PASS U+FF13 3 %1B%24%42%23%33 +PASS U+FF14 4 %1B%24%42%23%34 +PASS U+FF15 5 %1B%24%42%23%35 +PASS U+FF16 6 %1B%24%42%23%36 +PASS U+FF17 7 %1B%24%42%23%37 +PASS U+FF18 8 %1B%24%42%23%38 +PASS U+FF19 9 %1B%24%42%23%39 +PASS U+FF1A : %1B%24%42%21%27 +PASS U+FF1B ; %1B%24%42%21%28 +PASS U+FF1C < %1B%24%42%21%63 +PASS U+FF1D = %1B%24%42%21%61 +PASS U+FF1E > %1B%24%42%21%64 +PASS U+FF1F ? %1B%24%42%21%29 +PASS U+FF20 @ %1B%24%42%21%77 +PASS U+FF21 A %1B%24%42%23%41 +PASS U+FF22 B %1B%24%42%23%42 +PASS U+FF23 C %1B%24%42%23%43 +PASS U+FF24 D %1B%24%42%23%44 +PASS U+FF25 E %1B%24%42%23%45 +PASS U+FF26 F %1B%24%42%23%46 +PASS U+FF27 G %1B%24%42%23%47 +PASS U+FF28 H %1B%24%42%23%48 +PASS U+FF29 I %1B%24%42%23%49 +PASS U+FF2A J %1B%24%42%23%4A +PASS U+FF2B K %1B%24%42%23%4B +PASS U+FF2C L %1B%24%42%23%4C +PASS U+FF2D M %1B%24%42%23%4D +PASS U+FF2E N %1B%24%42%23%4E +PASS U+FF2F O %1B%24%42%23%4F +PASS U+FF30 P %1B%24%42%23%50 +PASS U+FF31 Q %1B%24%42%23%51 +PASS U+FF32 R %1B%24%42%23%52 +PASS U+FF33 S %1B%24%42%23%53 +PASS U+FF34 T %1B%24%42%23%54 +PASS U+FF35 U %1B%24%42%23%55 +PASS U+FF36 V %1B%24%42%23%56 +PASS U+FF37 W %1B%24%42%23%57 +PASS U+FF38 X %1B%24%42%23%58 +PASS U+FF39 Y %1B%24%42%23%59 +PASS U+FF3A Z %1B%24%42%23%5A +PASS U+FF3B [ %1B%24%42%21%4E +PASS U+FF3C \ %1B%24%42%21%40 +PASS U+FF3D ] %1B%24%42%21%4F +PASS U+FF3E ^ %1B%24%42%21%30 +PASS U+FF3F _ %1B%24%42%21%32 +PASS U+FF40 ` %1B%24%42%21%2E +PASS U+FF41 a %1B%24%42%23%61 +PASS U+FF42 b %1B%24%42%23%62 +PASS U+FF43 c %1B%24%42%23%63 +PASS U+FF44 d %1B%24%42%23%64 +PASS U+FF45 e %1B%24%42%23%65 +PASS U+FF46 f %1B%24%42%23%66 +PASS U+FF47 g %1B%24%42%23%67 +PASS U+FF48 h %1B%24%42%23%68 +PASS U+FF49 i %1B%24%42%23%69 +PASS U+FF4A j %1B%24%42%23%6A +PASS U+FF4B k %1B%24%42%23%6B +PASS U+FF4C l %1B%24%42%23%6C +PASS U+FF4D m %1B%24%42%23%6D +PASS U+FF4E n %1B%24%42%23%6E +PASS U+FF4F o %1B%24%42%23%6F +PASS U+FF50 p %1B%24%42%23%70 +PASS U+FF51 q %1B%24%42%23%71 +PASS U+FF52 r %1B%24%42%23%72 +PASS U+FF53 s %1B%24%42%23%73 +PASS U+FF54 t %1B%24%42%23%74 +PASS U+FF55 u %1B%24%42%23%75 +PASS U+FF56 v %1B%24%42%23%76 +PASS U+FF57 w %1B%24%42%23%77 +PASS U+FF58 x %1B%24%42%23%78 +PASS U+FF59 y %1B%24%42%23%79 +PASS U+FF5A z %1B%24%42%23%7A +PASS U+FF5B { %1B%24%42%21%50 +PASS U+FF5C | %1B%24%42%21%43 +PASS U+FF5D } %1B%24%42%21%51 +PASS U+FF5E ~ %1B%24%42%21%41 +PASS U+FF61 。 %1B%24%42%21%23 +PASS U+FF62 「 %1B%24%42%21%56 +PASS U+FF63 」 %1B%24%42%21%57 +PASS U+FF64 、 %1B%24%42%21%22 +PASS U+FF65 ・ %1B%24%42%21%26 +PASS U+FF66 ヲ %1B%24%42%25%72 +PASS U+FF67 ァ %1B%24%42%25%21 +PASS U+FF68 ィ %1B%24%42%25%23 +PASS U+FF69 ゥ %1B%24%42%25%25 +PASS U+FF6A ェ %1B%24%42%25%27 +PASS U+FF6B ォ %1B%24%42%25%29 +PASS U+FF6C ャ %1B%24%42%25%63 +PASS U+FF6D ュ %1B%24%42%25%65 +PASS U+FF6E ョ %1B%24%42%25%67 +PASS U+FF6F ッ %1B%24%42%25%43 +PASS U+FF70 ー %1B%24%42%21%3C +PASS U+FF71 ア %1B%24%42%25%22 +PASS U+FF72 イ %1B%24%42%25%24 +PASS U+FF73 ウ %1B%24%42%25%26 +PASS U+FF74 エ %1B%24%42%25%28 +PASS U+FF75 オ %1B%24%42%25%2A +PASS U+FF76 カ %1B%24%42%25%2B +PASS U+FF77 キ %1B%24%42%25%2D +PASS U+FF78 ク %1B%24%42%25%2F +PASS U+FF79 ケ %1B%24%42%25%31 +PASS U+FF7A コ %1B%24%42%25%33 +PASS U+FF7B サ %1B%24%42%25%35 +PASS U+FF7C シ %1B%24%42%25%37 +PASS U+FF7D ス %1B%24%42%25%39 +PASS U+FF7E セ %1B%24%42%25%3B +PASS U+FF7F ソ %1B%24%42%25%3D +PASS U+FF80 タ %1B%24%42%25%3F +PASS U+FF81 チ %1B%24%42%25%41 +PASS U+FF82 ツ %1B%24%42%25%44 +PASS U+FF83 テ %1B%24%42%25%46 +PASS U+FF84 ト %1B%24%42%25%48 +PASS U+FF85 ナ %1B%24%42%25%4A +PASS U+FF86 ニ %1B%24%42%25%4B +PASS U+FF87 ヌ %1B%24%42%25%4C +PASS U+FF88 ネ %1B%24%42%25%4D +PASS U+FF89 ノ %1B%24%42%25%4E +PASS U+FF8A ハ %1B%24%42%25%4F +PASS U+FF8B ヒ %1B%24%42%25%52 +PASS U+FF8C フ %1B%24%42%25%55 +PASS U+FF8D ヘ %1B%24%42%25%58 +PASS U+FF8E ホ %1B%24%42%25%5B +PASS U+FF8F マ %1B%24%42%25%5E +PASS U+FF90 ミ %1B%24%42%25%5F +PASS U+FF91 ム %1B%24%42%25%60 +PASS U+FF92 メ %1B%24%42%25%61 +PASS U+FF93 モ %1B%24%42%25%62 +PASS U+FF94 ヤ %1B%24%42%25%64 +PASS U+FF95 ユ %1B%24%42%25%66 +PASS U+FF96 ヨ %1B%24%42%25%68 +PASS U+FF97 ラ %1B%24%42%25%69 +PASS U+FF98 リ %1B%24%42%25%6A +PASS U+FF99 ル %1B%24%42%25%6B +PASS U+FF9A レ %1B%24%42%25%6C +PASS U+FF9B ロ %1B%24%42%25%6D +PASS U+FF9C ワ %1B%24%42%25%6F +PASS U+FF9D ン %1B%24%42%25%73 +PASS U+FF9E ゙ %1B%24%42%21%2B +PASS U+FF9F ゚ %1B%24%42%21%2C +PASS U+FFE0 ¢ %1B%24%42%21%71 +PASS U+FFE1 £ %1B%24%42%21%72 +PASS U+FFE2 ¬ %1B%24%42%22%4C +PASS U+FFE3  ̄ %1B%24%42%21%31 +FAIL U+FFE4 ¦ %1B%24%42%7C%7C assert_equals: expected "%1B%24%42%7C%7C" but got "%26%23%36%35%35%30%38%3B" +PASS U+FFE5 ¥ %1B%24%42%21%6F +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html index f12da70..125d041 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html
@@ -4,95 +4,49 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022-JP encoding errors (href, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the iso-2022-jp encoding."> +<script src="../../resources/ranges.js"></script> <script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesHan; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0x4e00; i < 0x9fba; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } - -for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0xfa70; i < 0xfada; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters </script> +<script src="../../resources/encode-href-common.js"></script> </head> <body> <div id="log"></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html index 04dc69d..6e58835 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html
@@ -4,60 +4,40 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022-JP encoding errors (href, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding hangul characters that are not in the iso-2022-jp encoding."> +<script src="../../resources/ranges.js"></script> <script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesHangul; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0xac00; i < 0xd7af; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters </script> +<script src="../../resources/encode-href-common.js"></script> </head> <body> <div id="log"></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html index 5fee8bb7..8d8150d3 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html
@@ -4,104 +4,32 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022-JP encoding errors (href, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the iso-2022-jp encoding."> +<script src="../../resources/ranges.js"></script> <script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); +var errors = true; +var encoder = iso2022jpEncoder; +var ranges = rangesMisc; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (var i = 0x80; i < 0x4ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } - -for (i = 0x2000; i < 0x23ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } -} - -for (i = 0x2460; i < 0x26ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } -} - -for (i = 0x3000; i < 0x33ff; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } -} - -for (i = 0xff00; i < 0xffef; i++) { - result = iso2022jpEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters </script> +<script src="../../resources/encode-href-common.js"></script> </head> <body> <div id="log"></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html index dcea8fc..08b8c26 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html
@@ -4,58 +4,32 @@ <meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this --> <title>ISO 2022-JP encoding (href)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="iso2022jp-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp"> <meta name="assert" content="The browser produces the expected byte sequences for all characters in the iso-2022-jp encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification."> +<script src="../../resources/ranges.js"></script> <script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(normalizeStr(result), normalizeStr(expected)); - }, desc); +var errors = false; +var encoder = iso2022jpEncoder; +var ranges = rangesAll; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%").replace(/%1B%28%42$/, "");; } - -// create a simple list of just those code points for which there is an encoding possible -codepoints = []; -for (var i = 0x80; i < 0xffff; i++) { - var result = iso2022jpEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - item.expected = item.expected.replace(/%1B%28%42$/, ""); - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - "U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters </script> +<script src="../../resources/encode-href-common.js"></script> </head> <body> <div id="log"></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1-1000-expected.txt new file mode 100644 index 0000000..ce42d549 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1-1000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 961 PASS, 39 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+A5 ¥ %1B%28%4A%5C +PASS U+A7 § %1B%24%42%21%78 +PASS U+A8 ¨ %1B%24%42%21%2F +PASS U+B0 ° %1B%24%42%21%6B +PASS U+B1 ± %1B%24%42%21%5E +PASS U+B4 ´ %1B%24%42%21%2D +PASS U+B6 ¶ %1B%24%42%22%79 +PASS U+D7 × %1B%24%42%21%5F +PASS U+F7 ÷ %1B%24%42%21%60 +PASS U+391 Α %1B%24%42%26%21 +PASS U+392 Β %1B%24%42%26%22 +PASS U+393 Γ %1B%24%42%26%23 +PASS U+394 Δ %1B%24%42%26%24 +PASS U+395 Ε %1B%24%42%26%25 +PASS U+396 Ζ %1B%24%42%26%26 +PASS U+397 Η %1B%24%42%26%27 +PASS U+398 Θ %1B%24%42%26%28 +PASS U+399 Ι %1B%24%42%26%29 +PASS U+39A Κ %1B%24%42%26%2A +PASS U+39B Λ %1B%24%42%26%2B +PASS U+39C Μ %1B%24%42%26%2C +PASS U+39D Ν %1B%24%42%26%2D +PASS U+39E Ξ %1B%24%42%26%2E +PASS U+39F Ο %1B%24%42%26%2F +PASS U+3A0 Π %1B%24%42%26%30 +PASS U+3A1 Ρ %1B%24%42%26%31 +PASS U+3A3 Σ %1B%24%42%26%32 +PASS U+3A4 Τ %1B%24%42%26%33 +PASS U+3A5 Υ %1B%24%42%26%34 +PASS U+3A6 Φ %1B%24%42%26%35 +PASS U+3A7 Χ %1B%24%42%26%36 +PASS U+3A8 Ψ %1B%24%42%26%37 +PASS U+3A9 Ω %1B%24%42%26%38 +PASS U+3B1 α %1B%24%42%26%41 +PASS U+3B2 β %1B%24%42%26%42 +PASS U+3B3 γ %1B%24%42%26%43 +PASS U+3B4 δ %1B%24%42%26%44 +PASS U+3B5 ε %1B%24%42%26%45 +PASS U+3B6 ζ %1B%24%42%26%46 +PASS U+3B7 η %1B%24%42%26%47 +PASS U+3B8 θ %1B%24%42%26%48 +PASS U+3B9 ι %1B%24%42%26%49 +PASS U+3BA κ %1B%24%42%26%4A +PASS U+3BB λ %1B%24%42%26%4B +PASS U+3BC μ %1B%24%42%26%4C +PASS U+3BD ν %1B%24%42%26%4D +PASS U+3BE ξ %1B%24%42%26%4E +PASS U+3BF ο %1B%24%42%26%4F +PASS U+3C0 π %1B%24%42%26%50 +PASS U+3C1 ρ %1B%24%42%26%51 +PASS U+3C3 σ %1B%24%42%26%52 +PASS U+3C4 τ %1B%24%42%26%53 +PASS U+3C5 υ %1B%24%42%26%54 +PASS U+3C6 φ %1B%24%42%26%55 +PASS U+3C7 χ %1B%24%42%26%56 +PASS U+3C8 ψ %1B%24%42%26%57 +PASS U+3C9 ω %1B%24%42%26%58 +PASS U+401 Ё %1B%24%42%27%27 +PASS U+410 А %1B%24%42%27%21 +PASS U+411 Б %1B%24%42%27%22 +PASS U+412 В %1B%24%42%27%23 +PASS U+413 Г %1B%24%42%27%24 +PASS U+414 Д %1B%24%42%27%25 +PASS U+415 Е %1B%24%42%27%26 +PASS U+416 Ж %1B%24%42%27%28 +PASS U+417 З %1B%24%42%27%29 +PASS U+418 И %1B%24%42%27%2A +PASS U+419 Й %1B%24%42%27%2B +PASS U+41A К %1B%24%42%27%2C +PASS U+41B Л %1B%24%42%27%2D +PASS U+41C М %1B%24%42%27%2E +PASS U+41D Н %1B%24%42%27%2F +PASS U+41E О %1B%24%42%27%30 +PASS U+41F П %1B%24%42%27%31 +PASS U+420 Р %1B%24%42%27%32 +PASS U+421 С %1B%24%42%27%33 +PASS U+422 Т %1B%24%42%27%34 +PASS U+423 У %1B%24%42%27%35 +PASS U+424 Ф %1B%24%42%27%36 +PASS U+425 Х %1B%24%42%27%37 +PASS U+426 Ц %1B%24%42%27%38 +PASS U+427 Ч %1B%24%42%27%39 +PASS U+428 Ш %1B%24%42%27%3A +PASS U+429 Щ %1B%24%42%27%3B +PASS U+42A Ъ %1B%24%42%27%3C +PASS U+42B Ы %1B%24%42%27%3D +PASS U+42C Ь %1B%24%42%27%3E +PASS U+42D Э %1B%24%42%27%3F +PASS U+42E Ю %1B%24%42%27%40 +PASS U+42F Я %1B%24%42%27%41 +PASS U+430 а %1B%24%42%27%51 +PASS U+431 б %1B%24%42%27%52 +PASS U+432 в %1B%24%42%27%53 +PASS U+433 г %1B%24%42%27%54 +PASS U+434 д %1B%24%42%27%55 +PASS U+435 е %1B%24%42%27%56 +PASS U+436 ж %1B%24%42%27%58 +PASS U+437 з %1B%24%42%27%59 +PASS U+438 и %1B%24%42%27%5A +PASS U+439 й %1B%24%42%27%5B +PASS U+43A к %1B%24%42%27%5C +PASS U+43B л %1B%24%42%27%5D +PASS U+43C м %1B%24%42%27%5E +PASS U+43D н %1B%24%42%27%5F +PASS U+43E о %1B%24%42%27%60 +PASS U+43F п %1B%24%42%27%61 +PASS U+440 р %1B%24%42%27%62 +PASS U+441 с %1B%24%42%27%63 +PASS U+442 т %1B%24%42%27%64 +PASS U+443 у %1B%24%42%27%65 +PASS U+444 ф %1B%24%42%27%66 +PASS U+445 х %1B%24%42%27%67 +PASS U+446 ц %1B%24%42%27%68 +PASS U+447 ч %1B%24%42%27%69 +PASS U+448 ш %1B%24%42%27%6A +PASS U+449 щ %1B%24%42%27%6B +PASS U+44A ъ %1B%24%42%27%6C +PASS U+44B ы %1B%24%42%27%6D +PASS U+44C ь %1B%24%42%27%6E +PASS U+44D э %1B%24%42%27%6F +PASS U+44E ю %1B%24%42%27%70 +PASS U+44F я %1B%24%42%27%71 +PASS U+451 ё %1B%24%42%27%57 +PASS U+2010 ‐ %1B%24%42%21%3E +PASS U+2015 ― %1B%24%42%21%3D +PASS U+2018 ‘ %1B%24%42%21%46 +PASS U+2019 ’ %1B%24%42%21%47 +PASS U+201C “ %1B%24%42%21%48 +PASS U+201D ” %1B%24%42%21%49 +PASS U+2020 † %1B%24%42%22%77 +PASS U+2021 ‡ %1B%24%42%22%78 +PASS U+2025 ‥ %1B%24%42%21%45 +PASS U+2026 … %1B%24%42%21%44 +PASS U+2030 ‰ %1B%24%42%22%73 +PASS U+2032 ′ %1B%24%42%21%6C +PASS U+2033 ″ %1B%24%42%21%6D +PASS U+203B ※ %1B%24%42%22%28 +PASS U+203E ‾ %1B%28%4A%7E +PASS U+2103 ℃ %1B%24%42%21%6E +PASS U+2116 № %1B%24%42%2D%62 +PASS U+2121 ℡ %1B%24%42%2D%64 +PASS U+212B Å %1B%24%42%22%72 +PASS U+2160 Ⅰ %1B%24%42%2D%35 +PASS U+2161 Ⅱ %1B%24%42%2D%36 +PASS U+2162 Ⅲ %1B%24%42%2D%37 +PASS U+2163 Ⅳ %1B%24%42%2D%38 +PASS U+2164 Ⅴ %1B%24%42%2D%39 +PASS U+2165 Ⅵ %1B%24%42%2D%3A +PASS U+2166 Ⅶ %1B%24%42%2D%3B +PASS U+2167 Ⅷ %1B%24%42%2D%3C +PASS U+2168 Ⅸ %1B%24%42%2D%3D +PASS U+2169 Ⅹ %1B%24%42%2D%3E +FAIL U+2170 ⅰ %1B%24%42%7C%71 assert_equals: expected "%1B%24%42%7C%71" but got "%26%23%38%35%36%30%3B" +FAIL U+2171 ⅱ %1B%24%42%7C%72 assert_equals: expected "%1B%24%42%7C%72" but got "%26%23%38%35%36%31%3B" +FAIL U+2172 ⅲ %1B%24%42%7C%73 assert_equals: expected "%1B%24%42%7C%73" but got "%26%23%38%35%36%32%3B" +FAIL U+2173 ⅳ %1B%24%42%7C%74 assert_equals: expected "%1B%24%42%7C%74" but got "%26%23%38%35%36%33%3B" +FAIL U+2174 ⅴ %1B%24%42%7C%75 assert_equals: expected "%1B%24%42%7C%75" but got "%26%23%38%35%36%34%3B" +FAIL U+2175 ⅵ %1B%24%42%7C%76 assert_equals: expected "%1B%24%42%7C%76" but got "%26%23%38%35%36%35%3B" +FAIL U+2176 ⅶ %1B%24%42%7C%77 assert_equals: expected "%1B%24%42%7C%77" but got "%26%23%38%35%36%36%3B" +FAIL U+2177 ⅷ %1B%24%42%7C%78 assert_equals: expected "%1B%24%42%7C%78" but got "%26%23%38%35%36%37%3B" +FAIL U+2178 ⅸ %1B%24%42%7C%79 assert_equals: expected "%1B%24%42%7C%79" but got "%26%23%38%35%36%38%3B" +FAIL U+2179 ⅹ %1B%24%42%7C%7A assert_equals: expected "%1B%24%42%7C%7A" but got "%26%23%38%35%36%39%3B" +PASS U+2190 ← %1B%24%42%22%2B +PASS U+2191 ↑ %1B%24%42%22%2C +PASS U+2192 → %1B%24%42%22%2A +PASS U+2193 ↓ %1B%24%42%22%2D +PASS U+21D2 ⇒ %1B%24%42%22%4D +PASS U+21D4 ⇔ %1B%24%42%22%4E +PASS U+2200 ∀ %1B%24%42%22%4F +PASS U+2202 ∂ %1B%24%42%22%5F +PASS U+2203 ∃ %1B%24%42%22%50 +PASS U+2207 ∇ %1B%24%42%22%60 +PASS U+2208 ∈ %1B%24%42%22%3A +PASS U+220B ∋ %1B%24%42%22%3B +PASS U+2211 ∑ %1B%24%42%2D%74 +PASS U+2212 − %1B%24%42%21%5D +PASS U+221A √ %1B%24%42%22%65 +PASS U+221D ∝ %1B%24%42%22%67 +PASS U+221E ∞ %1B%24%42%21%67 +PASS U+221F ∟ %1B%24%42%2D%78 +PASS U+2220 ∠ %1B%24%42%22%5C +PASS U+2225 ∥ %1B%24%42%21%42 +PASS U+2227 ∧ %1B%24%42%22%4A +PASS U+2228 ∨ %1B%24%42%22%4B +PASS U+2229 ∩ %1B%24%42%22%41 +PASS U+222A ∪ %1B%24%42%22%40 +PASS U+222B ∫ %1B%24%42%22%69 +PASS U+222C ∬ %1B%24%42%22%6A +PASS U+222E ∮ %1B%24%42%2D%73 +PASS U+2234 ∴ %1B%24%42%21%68 +PASS U+2235 ∵ %1B%24%42%22%68 +PASS U+223D ∽ %1B%24%42%22%66 +PASS U+2252 ≒ %1B%24%42%22%62 +PASS U+2260 ≠ %1B%24%42%21%62 +PASS U+2261 ≡ %1B%24%42%22%61 +PASS U+2266 ≦ %1B%24%42%21%65 +PASS U+2267 ≧ %1B%24%42%21%66 +PASS U+226A ≪ %1B%24%42%22%63 +PASS U+226B ≫ %1B%24%42%22%64 +PASS U+2282 ⊂ %1B%24%42%22%3E +PASS U+2283 ⊃ %1B%24%42%22%3F +PASS U+2286 ⊆ %1B%24%42%22%3C +PASS U+2287 ⊇ %1B%24%42%22%3D +PASS U+22A5 ⊥ %1B%24%42%22%5D +PASS U+22BF ⊿ %1B%24%42%2D%79 +PASS U+2312 ⌒ %1B%24%42%22%5E +PASS U+2460 ① %1B%24%42%2D%21 +PASS U+2461 ② %1B%24%42%2D%22 +PASS U+2462 ③ %1B%24%42%2D%23 +PASS U+2463 ④ %1B%24%42%2D%24 +PASS U+2464 ⑤ %1B%24%42%2D%25 +PASS U+2465 ⑥ %1B%24%42%2D%26 +PASS U+2466 ⑦ %1B%24%42%2D%27 +PASS U+2467 ⑧ %1B%24%42%2D%28 +PASS U+2468 ⑨ %1B%24%42%2D%29 +PASS U+2469 ⑩ %1B%24%42%2D%2A +PASS U+246A ⑪ %1B%24%42%2D%2B +PASS U+246B ⑫ %1B%24%42%2D%2C +PASS U+246C ⑬ %1B%24%42%2D%2D +PASS U+246D ⑭ %1B%24%42%2D%2E +PASS U+246E ⑮ %1B%24%42%2D%2F +PASS U+246F ⑯ %1B%24%42%2D%30 +PASS U+2470 ⑰ %1B%24%42%2D%31 +PASS U+2471 ⑱ %1B%24%42%2D%32 +PASS U+2472 ⑲ %1B%24%42%2D%33 +PASS U+2473 ⑳ %1B%24%42%2D%34 +PASS U+2500 ─ %1B%24%42%28%21 +PASS U+2501 ━ %1B%24%42%28%2C +PASS U+2502 │ %1B%24%42%28%22 +PASS U+2503 ┃ %1B%24%42%28%2D +PASS U+250C ┌ %1B%24%42%28%23 +PASS U+250F ┏ %1B%24%42%28%2E +PASS U+2510 ┐ %1B%24%42%28%24 +PASS U+2513 ┓ %1B%24%42%28%2F +PASS U+2514 └ %1B%24%42%28%26 +PASS U+2517 ┗ %1B%24%42%28%31 +PASS U+2518 ┘ %1B%24%42%28%25 +PASS U+251B ┛ %1B%24%42%28%30 +PASS U+251C ├ %1B%24%42%28%27 +PASS U+251D ┝ %1B%24%42%28%3C +PASS U+2520 ┠ %1B%24%42%28%37 +PASS U+2523 ┣ %1B%24%42%28%32 +PASS U+2524 ┤ %1B%24%42%28%29 +PASS U+2525 ┥ %1B%24%42%28%3E +PASS U+2528 ┨ %1B%24%42%28%39 +PASS U+252B ┫ %1B%24%42%28%34 +PASS U+252C ┬ %1B%24%42%28%28 +PASS U+252F ┯ %1B%24%42%28%38 +PASS U+2530 ┰ %1B%24%42%28%3D +PASS U+2533 ┳ %1B%24%42%28%33 +PASS U+2534 ┴ %1B%24%42%28%2A +PASS U+2537 ┷ %1B%24%42%28%3A +PASS U+2538 ┸ %1B%24%42%28%3F +PASS U+253B ┻ %1B%24%42%28%35 +PASS U+253C ┼ %1B%24%42%28%2B +PASS U+253F ┿ %1B%24%42%28%3B +PASS U+2542 ╂ %1B%24%42%28%40 +PASS U+254B ╋ %1B%24%42%28%36 +PASS U+25A0 ■ %1B%24%42%22%23 +PASS U+25A1 □ %1B%24%42%22%22 +PASS U+25B2 ▲ %1B%24%42%22%25 +PASS U+25B3 △ %1B%24%42%22%24 +PASS U+25BC ▼ %1B%24%42%22%27 +PASS U+25BD ▽ %1B%24%42%22%26 +PASS U+25C6 ◆ %1B%24%42%22%21 +PASS U+25C7 ◇ %1B%24%42%21%7E +PASS U+25CB ○ %1B%24%42%21%7B +PASS U+25CE ◎ %1B%24%42%21%7D +PASS U+25CF ● %1B%24%42%21%7C +PASS U+25EF ◯ %1B%24%42%22%7E +PASS U+2605 ★ %1B%24%42%21%7A +PASS U+2606 ☆ %1B%24%42%21%79 +PASS U+2640 ♀ %1B%24%42%21%6A +PASS U+2642 ♂ %1B%24%42%21%69 +PASS U+266A ♪ %1B%24%42%22%76 +PASS U+266D ♭ %1B%24%42%22%75 +PASS U+266F ♯ %1B%24%42%22%74 +PASS U+3000 %1B%24%42%21%21 +PASS U+3001 、 %1B%24%42%21%22 +PASS U+3002 。 %1B%24%42%21%23 +PASS U+3003 〃 %1B%24%42%21%37 +PASS U+3005 々 %1B%24%42%21%39 +PASS U+3006 〆 %1B%24%42%21%3A +PASS U+3007 〇 %1B%24%42%21%3B +PASS U+3008 〈 %1B%24%42%21%52 +PASS U+3009 〉 %1B%24%42%21%53 +PASS U+300A 《 %1B%24%42%21%54 +PASS U+300B 》 %1B%24%42%21%55 +PASS U+300C 「 %1B%24%42%21%56 +PASS U+300D 」 %1B%24%42%21%57 +PASS U+300E 『 %1B%24%42%21%58 +PASS U+300F 』 %1B%24%42%21%59 +PASS U+3010 【 %1B%24%42%21%5A +PASS U+3011 】 %1B%24%42%21%5B +PASS U+3012 〒 %1B%24%42%22%29 +PASS U+3013 〓 %1B%24%42%22%2E +PASS U+3014 〔 %1B%24%42%21%4C +PASS U+3015 〕 %1B%24%42%21%4D +PASS U+301D 〝 %1B%24%42%2D%60 +PASS U+301F 〟 %1B%24%42%2D%61 +PASS U+3041 ぁ %1B%24%42%24%21 +PASS U+3042 あ %1B%24%42%24%22 +PASS U+3043 ぃ %1B%24%42%24%23 +PASS U+3044 い %1B%24%42%24%24 +PASS U+3045 ぅ %1B%24%42%24%25 +PASS U+3046 う %1B%24%42%24%26 +PASS U+3047 ぇ %1B%24%42%24%27 +PASS U+3048 え %1B%24%42%24%28 +PASS U+3049 ぉ %1B%24%42%24%29 +PASS U+304A お %1B%24%42%24%2A +PASS U+304B か %1B%24%42%24%2B +PASS U+304C が %1B%24%42%24%2C +PASS U+304D き %1B%24%42%24%2D +PASS U+304E ぎ %1B%24%42%24%2E +PASS U+304F く %1B%24%42%24%2F +PASS U+3050 ぐ %1B%24%42%24%30 +PASS U+3051 け %1B%24%42%24%31 +PASS U+3052 げ %1B%24%42%24%32 +PASS U+3053 こ %1B%24%42%24%33 +PASS U+3054 ご %1B%24%42%24%34 +PASS U+3055 さ %1B%24%42%24%35 +PASS U+3056 ざ %1B%24%42%24%36 +PASS U+3057 し %1B%24%42%24%37 +PASS U+3058 じ %1B%24%42%24%38 +PASS U+3059 す %1B%24%42%24%39 +PASS U+305A ず %1B%24%42%24%3A +PASS U+305B せ %1B%24%42%24%3B +PASS U+305C ぜ %1B%24%42%24%3C +PASS U+305D そ %1B%24%42%24%3D +PASS U+305E ぞ %1B%24%42%24%3E +PASS U+305F た %1B%24%42%24%3F +PASS U+3060 だ %1B%24%42%24%40 +PASS U+3061 ち %1B%24%42%24%41 +PASS U+3062 ぢ %1B%24%42%24%42 +PASS U+3063 っ %1B%24%42%24%43 +PASS U+3064 つ %1B%24%42%24%44 +PASS U+3065 づ %1B%24%42%24%45 +PASS U+3066 て %1B%24%42%24%46 +PASS U+3067 で %1B%24%42%24%47 +PASS U+3068 と %1B%24%42%24%48 +PASS U+3069 ど %1B%24%42%24%49 +PASS U+306A な %1B%24%42%24%4A +PASS U+306B に %1B%24%42%24%4B +PASS U+306C ぬ %1B%24%42%24%4C +PASS U+306D ね %1B%24%42%24%4D +PASS U+306E の %1B%24%42%24%4E +PASS U+306F は %1B%24%42%24%4F +PASS U+3070 ば %1B%24%42%24%50 +PASS U+3071 ぱ %1B%24%42%24%51 +PASS U+3072 ひ %1B%24%42%24%52 +PASS U+3073 び %1B%24%42%24%53 +PASS U+3074 ぴ %1B%24%42%24%54 +PASS U+3075 ふ %1B%24%42%24%55 +PASS U+3076 ぶ %1B%24%42%24%56 +PASS U+3077 ぷ %1B%24%42%24%57 +PASS U+3078 へ %1B%24%42%24%58 +PASS U+3079 べ %1B%24%42%24%59 +PASS U+307A ぺ %1B%24%42%24%5A +PASS U+307B ほ %1B%24%42%24%5B +PASS U+307C ぼ %1B%24%42%24%5C +PASS U+307D ぽ %1B%24%42%24%5D +PASS U+307E ま %1B%24%42%24%5E +PASS U+307F み %1B%24%42%24%5F +PASS U+3080 む %1B%24%42%24%60 +PASS U+3081 め %1B%24%42%24%61 +PASS U+3082 も %1B%24%42%24%62 +PASS U+3083 ゃ %1B%24%42%24%63 +PASS U+3084 や %1B%24%42%24%64 +PASS U+3085 ゅ %1B%24%42%24%65 +PASS U+3086 ゆ %1B%24%42%24%66 +PASS U+3087 ょ %1B%24%42%24%67 +PASS U+3088 よ %1B%24%42%24%68 +PASS U+3089 ら %1B%24%42%24%69 +PASS U+308A り %1B%24%42%24%6A +PASS U+308B る %1B%24%42%24%6B +PASS U+308C れ %1B%24%42%24%6C +PASS U+308D ろ %1B%24%42%24%6D +PASS U+308E ゎ %1B%24%42%24%6E +PASS U+308F わ %1B%24%42%24%6F +PASS U+3090 ゐ %1B%24%42%24%70 +PASS U+3091 ゑ %1B%24%42%24%71 +PASS U+3092 を %1B%24%42%24%72 +PASS U+3093 ん %1B%24%42%24%73 +PASS U+309B ゛ %1B%24%42%21%2B +PASS U+309C ゜ %1B%24%42%21%2C +PASS U+309D ゝ %1B%24%42%21%35 +PASS U+309E ゞ %1B%24%42%21%36 +PASS U+30A1 ァ %1B%24%42%25%21 +PASS U+30A2 ア %1B%24%42%25%22 +PASS U+30A3 ィ %1B%24%42%25%23 +PASS U+30A4 イ %1B%24%42%25%24 +PASS U+30A5 ゥ %1B%24%42%25%25 +PASS U+30A6 ウ %1B%24%42%25%26 +PASS U+30A7 ェ %1B%24%42%25%27 +PASS U+30A8 エ %1B%24%42%25%28 +PASS U+30A9 ォ %1B%24%42%25%29 +PASS U+30AA オ %1B%24%42%25%2A +PASS U+30AB カ %1B%24%42%25%2B +PASS U+30AC ガ %1B%24%42%25%2C +PASS U+30AD キ %1B%24%42%25%2D +PASS U+30AE ギ %1B%24%42%25%2E +PASS U+30AF ク %1B%24%42%25%2F +PASS U+30B0 グ %1B%24%42%25%30 +PASS U+30B1 ケ %1B%24%42%25%31 +PASS U+30B2 ゲ %1B%24%42%25%32 +PASS U+30B3 コ %1B%24%42%25%33 +PASS U+30B4 ゴ %1B%24%42%25%34 +PASS U+30B5 サ %1B%24%42%25%35 +PASS U+30B6 ザ %1B%24%42%25%36 +PASS U+30B7 シ %1B%24%42%25%37 +PASS U+30B8 ジ %1B%24%42%25%38 +PASS U+30B9 ス %1B%24%42%25%39 +PASS U+30BA ズ %1B%24%42%25%3A +PASS U+30BB セ %1B%24%42%25%3B +PASS U+30BC ゼ %1B%24%42%25%3C +PASS U+30BD ソ %1B%24%42%25%3D +PASS U+30BE ゾ %1B%24%42%25%3E +PASS U+30BF タ %1B%24%42%25%3F +PASS U+30C0 ダ %1B%24%42%25%40 +PASS U+30C1 チ %1B%24%42%25%41 +PASS U+30C2 ヂ %1B%24%42%25%42 +PASS U+30C3 ッ %1B%24%42%25%43 +PASS U+30C4 ツ %1B%24%42%25%44 +PASS U+30C5 ヅ %1B%24%42%25%45 +PASS U+30C6 テ %1B%24%42%25%46 +PASS U+30C7 デ %1B%24%42%25%47 +PASS U+30C8 ト %1B%24%42%25%48 +PASS U+30C9 ド %1B%24%42%25%49 +PASS U+30CA ナ %1B%24%42%25%4A +PASS U+30CB ニ %1B%24%42%25%4B +PASS U+30CC ヌ %1B%24%42%25%4C +PASS U+30CD ネ %1B%24%42%25%4D +PASS U+30CE ノ %1B%24%42%25%4E +PASS U+30CF ハ %1B%24%42%25%4F +PASS U+30D0 バ %1B%24%42%25%50 +PASS U+30D1 パ %1B%24%42%25%51 +PASS U+30D2 ヒ %1B%24%42%25%52 +PASS U+30D3 ビ %1B%24%42%25%53 +PASS U+30D4 ピ %1B%24%42%25%54 +PASS U+30D5 フ %1B%24%42%25%55 +PASS U+30D6 ブ %1B%24%42%25%56 +PASS U+30D7 プ %1B%24%42%25%57 +PASS U+30D8 ヘ %1B%24%42%25%58 +PASS U+30D9 ベ %1B%24%42%25%59 +PASS U+30DA ペ %1B%24%42%25%5A +PASS U+30DB ホ %1B%24%42%25%5B +PASS U+30DC ボ %1B%24%42%25%5C +PASS U+30DD ポ %1B%24%42%25%5D +PASS U+30DE マ %1B%24%42%25%5E +PASS U+30DF ミ %1B%24%42%25%5F +PASS U+30E0 ム %1B%24%42%25%60 +PASS U+30E1 メ %1B%24%42%25%61 +PASS U+30E2 モ %1B%24%42%25%62 +PASS U+30E3 ャ %1B%24%42%25%63 +PASS U+30E4 ヤ %1B%24%42%25%64 +PASS U+30E5 ュ %1B%24%42%25%65 +PASS U+30E6 ユ %1B%24%42%25%66 +PASS U+30E7 ョ %1B%24%42%25%67 +PASS U+30E8 ヨ %1B%24%42%25%68 +PASS U+30E9 ラ %1B%24%42%25%69 +PASS U+30EA リ %1B%24%42%25%6A +PASS U+30EB ル %1B%24%42%25%6B +PASS U+30EC レ %1B%24%42%25%6C +PASS U+30ED ロ %1B%24%42%25%6D +PASS U+30EE ヮ %1B%24%42%25%6E +PASS U+30EF ワ %1B%24%42%25%6F +PASS U+30F0 ヰ %1B%24%42%25%70 +PASS U+30F1 ヱ %1B%24%42%25%71 +PASS U+30F2 ヲ %1B%24%42%25%72 +PASS U+30F3 ン %1B%24%42%25%73 +PASS U+30F4 ヴ %1B%24%42%25%74 +PASS U+30F5 ヵ %1B%24%42%25%75 +PASS U+30F6 ヶ %1B%24%42%25%76 +PASS U+30FB ・ %1B%24%42%21%26 +PASS U+30FC ー %1B%24%42%21%3C +PASS U+30FD ヽ %1B%24%42%21%33 +PASS U+30FE ヾ %1B%24%42%21%34 +PASS U+3231 ㈱ %1B%24%42%2D%6A +PASS U+3232 ㈲ %1B%24%42%2D%6B +PASS U+3239 ㈹ %1B%24%42%2D%6C +PASS U+32A4 ㊤ %1B%24%42%2D%65 +PASS U+32A5 ㊥ %1B%24%42%2D%66 +PASS U+32A6 ㊦ %1B%24%42%2D%67 +PASS U+32A7 ㊧ %1B%24%42%2D%68 +PASS U+32A8 ㊨ %1B%24%42%2D%69 +PASS U+3303 ㌃ %1B%24%42%2D%46 +PASS U+330D ㌍ %1B%24%42%2D%4A +PASS U+3314 ㌔ %1B%24%42%2D%41 +PASS U+3318 ㌘ %1B%24%42%2D%44 +PASS U+3322 ㌢ %1B%24%42%2D%42 +PASS U+3323 ㌣ %1B%24%42%2D%4C +PASS U+3326 ㌦ %1B%24%42%2D%4B +PASS U+3327 ㌧ %1B%24%42%2D%45 +PASS U+332B ㌫ %1B%24%42%2D%4D +PASS U+3336 ㌶ %1B%24%42%2D%47 +PASS U+333B ㌻ %1B%24%42%2D%4F +PASS U+3349 ㍉ %1B%24%42%2D%40 +PASS U+334A ㍊ %1B%24%42%2D%4E +PASS U+334D ㍍ %1B%24%42%2D%43 +PASS U+3351 ㍑ %1B%24%42%2D%48 +PASS U+3357 ㍗ %1B%24%42%2D%49 +PASS U+337B ㍻ %1B%24%42%2D%5F +PASS U+337C ㍼ %1B%24%42%2D%6F +PASS U+337D ㍽ %1B%24%42%2D%6E +PASS U+337E ㍾ %1B%24%42%2D%6D +PASS U+338E ㎎ %1B%24%42%2D%53 +PASS U+338F ㎏ %1B%24%42%2D%54 +PASS U+339C ㎜ %1B%24%42%2D%50 +PASS U+339D ㎝ %1B%24%42%2D%51 +PASS U+339E ㎞ %1B%24%42%2D%52 +PASS U+33A1 ㎡ %1B%24%42%2D%56 +PASS U+33C4 ㏄ %1B%24%42%2D%55 +PASS U+33CD ㏍ %1B%24%42%2D%63 +PASS U+4E00 一 %1B%24%42%30%6C +PASS U+4E01 丁 %1B%24%42%43%7A +PASS U+4E03 七 %1B%24%42%3C%37 +PASS U+4E07 万 %1B%24%42%4B%7C +PASS U+4E08 丈 %1B%24%42%3E%66 +PASS U+4E09 三 %1B%24%42%3B%30 +PASS U+4E0A 上 %1B%24%42%3E%65 +PASS U+4E0B 下 %1B%24%42%32%3C +PASS U+4E0D 不 %1B%24%42%49%54 +PASS U+4E0E 与 %1B%24%42%4D%3F +PASS U+4E10 丐 %1B%24%42%50%22 +PASS U+4E11 丑 %1B%24%42%31%2F +PASS U+4E14 且 %1B%24%42%33%6E +PASS U+4E15 丕 %1B%24%42%50%23 +PASS U+4E16 世 %1B%24%42%40%24 +PASS U+4E17 丗 %1B%24%42%52%42 +PASS U+4E18 丘 %1B%24%42%35%56 +PASS U+4E19 丙 %1B%24%42%4A%3A +PASS U+4E1E 丞 %1B%24%42%3E%67 +PASS U+4E21 両 %1B%24%42%4E%3E +PASS U+4E26 並 %1B%24%42%4A%42 +FAIL U+4E28 丨 %1B%24%42%79%2D assert_equals: expected "%1B%24%42%79%2D" but got "%26%23%32%30%30%30%38%3B" +PASS U+4E2A 个 %1B%24%42%50%24 +PASS U+4E2D 中 %1B%24%42%43%66 +PASS U+4E31 丱 %1B%24%42%50%25 +PASS U+4E32 串 %1B%24%42%36%7A +PASS U+4E36 丶 %1B%24%42%50%26 +PASS U+4E38 丸 %1B%24%42%34%5D +PASS U+4E39 丹 %1B%24%42%43%30 +PASS U+4E3B 主 %1B%24%42%3C%67 +PASS U+4E3C 丼 %1B%24%42%50%27 +PASS U+4E3F 丿 %1B%24%42%50%28 +PASS U+4E42 乂 %1B%24%42%50%29 +PASS U+4E43 乃 %1B%24%42%47%35 +PASS U+4E45 久 %1B%24%42%35%57 +PASS U+4E4B 之 %1B%24%42%47%37 +PASS U+4E4D 乍 %1B%24%42%46%63 +PASS U+4E4E 乎 %1B%24%42%38%43 +PASS U+4E4F 乏 %1B%24%42%4B%33 +PASS U+4E55 乕 %1B%24%42%69%49 +PASS U+4E56 乖 %1B%24%42%50%2A +PASS U+4E57 乗 %1B%24%42%3E%68 +PASS U+4E58 乘 %1B%24%42%50%2B +PASS U+4E59 乙 %1B%24%42%32%35 +PASS U+4E5D 九 %1B%24%42%36%65 +PASS U+4E5E 乞 %1B%24%42%38%70 +PASS U+4E5F 也 %1B%24%42%4C%69 +PASS U+4E62 乢 %1B%24%42%56%26 +PASS U+4E71 乱 %1B%24%42%4D%70 +PASS U+4E73 乳 %1B%24%42%46%7D +PASS U+4E7E 乾 %1B%24%42%34%25 +PASS U+4E80 亀 %1B%24%42%35%35 +PASS U+4E82 亂 %1B%24%42%50%2C +PASS U+4E85 亅 %1B%24%42%50%2D +PASS U+4E86 了 %1B%24%42%4E%3B +PASS U+4E88 予 %1B%24%42%4D%3D +PASS U+4E89 争 %1B%24%42%41%68 +PASS U+4E8A 亊 %1B%24%42%50%2F +PASS U+4E8B 事 %1B%24%42%3B%76 +PASS U+4E8C 二 %1B%24%42%46%73 +PASS U+4E8E 于 %1B%24%42%50%32 +PASS U+4E91 云 %1B%24%42%31%3E +PASS U+4E92 互 %1B%24%42%38%5F +PASS U+4E94 五 %1B%24%42%38%5E +PASS U+4E95 井 %1B%24%42%30%66 +PASS U+4E98 亘 %1B%24%42%4F%4B +PASS U+4E99 亙 %1B%24%42%4F%4A +PASS U+4E9B 些 %1B%24%42%3A%33 +PASS U+4E9C 亜 %1B%24%42%30%21 +PASS U+4E9E 亞 %1B%24%42%50%33 +PASS U+4E9F 亟 %1B%24%42%50%34 +PASS U+4EA0 亠 %1B%24%42%50%35 +PASS U+4EA1 亡 %1B%24%42%4B%34 +PASS U+4EA2 亢 %1B%24%42%50%36 +PASS U+4EA4 交 %1B%24%42%38%72 +PASS U+4EA5 亥 %1B%24%42%30%67 +PASS U+4EA6 亦 %1B%24%42%4B%72 +PASS U+4EA8 亨 %1B%24%42%35%7C +PASS U+4EAB 享 %1B%24%42%35%7D +PASS U+4EAC 京 %1B%24%42%35%7E +PASS U+4EAD 亭 %1B%24%42%44%62 +PASS U+4EAE 亮 %1B%24%42%4E%3C +PASS U+4EB0 亰 %1B%24%42%50%37 +PASS U+4EB3 亳 %1B%24%42%50%38 +PASS U+4EB6 亶 %1B%24%42%50%39 +PASS U+4EBA 人 %1B%24%42%3F%4D +PASS U+4EC0 什 %1B%24%42%3D%3A +PASS U+4EC1 仁 %1B%24%42%3F%4E +PASS U+4EC2 仂 %1B%24%42%50%3E +PASS U+4EC4 仄 %1B%24%42%50%3C +PASS U+4EC6 仆 %1B%24%42%50%3D +PASS U+4EC7 仇 %1B%24%42%35%58 +PASS U+4ECA 今 %1B%24%42%3A%23 +PASS U+4ECB 介 %1B%24%42%32%70 +PASS U+4ECD 仍 %1B%24%42%50%3B +PASS U+4ECE 从 %1B%24%42%50%3A +PASS U+4ECF 仏 %1B%24%42%4A%29 +PASS U+4ED4 仔 %1B%24%42%3B%46 +PASS U+4ED5 仕 %1B%24%42%3B%45 +PASS U+4ED6 他 %1B%24%42%42%3E +PASS U+4ED7 仗 %1B%24%42%50%3F +PASS U+4ED8 付 %1B%24%42%49%55 +PASS U+4ED9 仙 %1B%24%42%40%67 +PASS U+4EDD 仝 %1B%24%42%21%38 +PASS U+4EDE 仞 %1B%24%42%50%40 +PASS U+4EDF 仟 %1B%24%42%50%42 +FAIL U+4EE1 仡 %1B%24%42%79%2E assert_equals: expected "%1B%24%42%79%2E" but got "%26%23%32%30%31%39%33%3B" +PASS U+4EE3 代 %1B%24%42%42%65 +PASS U+4EE4 令 %1B%24%42%4E%61 +PASS U+4EE5 以 %1B%24%42%30%4A +PASS U+4EED 仭 %1B%24%42%50%41 +PASS U+4EEE 仮 %1B%24%42%32%3E +PASS U+4EF0 仰 %1B%24%42%36%44 +PASS U+4EF2 仲 %1B%24%42%43%67 +PASS U+4EF6 件 %1B%24%42%37%6F +PASS U+4EF7 价 %1B%24%42%50%43 +PASS U+4EFB 任 %1B%24%42%47%24 +FAIL U+4EFC 仼 %1B%24%42%79%2F assert_equals: expected "%1B%24%42%79%2F" but got "%26%23%32%30%32%32%30%3B" +FAIL U+4F00 伀 %1B%24%42%79%30 assert_equals: expected "%1B%24%42%79%30" but got "%26%23%32%30%32%32%34%3B" +PASS U+4F01 企 %1B%24%42%34%6B +FAIL U+4F03 伃 %1B%24%42%79%31 assert_equals: expected "%1B%24%42%79%31" but got "%26%23%32%30%32%32%37%3B" +PASS U+4F09 伉 %1B%24%42%50%44 +PASS U+4F0A 伊 %1B%24%42%30%4B +PASS U+4F0D 伍 %1B%24%42%38%60 +PASS U+4F0E 伎 %1B%24%42%34%6C +PASS U+4F0F 伏 %1B%24%42%49%7A +PASS U+4F10 伐 %1B%24%42%48%32 +PASS U+4F11 休 %1B%24%42%35%59 +PASS U+4F1A 会 %1B%24%42%32%71 +PASS U+4F1C 伜 %1B%24%42%50%67 +PASS U+4F1D 伝 %1B%24%42%45%41 +PASS U+4F2F 伯 %1B%24%42%47%6C +PASS U+4F30 估 %1B%24%42%50%46 +PASS U+4F34 伴 %1B%24%42%48%3C +PASS U+4F36 伶 %1B%24%42%4E%62 +PASS U+4F38 伸 %1B%24%42%3F%2D +FAIL U+4F39 伹 %1B%24%42%79%32 assert_equals: expected "%1B%24%42%79%32" but got "%26%23%32%30%32%38%31%3B" +PASS U+4F3A 伺 %1B%24%42%3B%47 +PASS U+4F3C 似 %1B%24%42%3B%77 +PASS U+4F3D 伽 %1B%24%42%32%40 +PASS U+4F43 佃 %1B%24%42%44%51 +PASS U+4F46 但 %1B%24%42%43%22 +PASS U+4F47 佇 %1B%24%42%50%4A +PASS U+4F4D 位 %1B%24%42%30%4C +PASS U+4F4E 低 %1B%24%42%44%63 +PASS U+4F4F 住 %1B%24%42%3D%3B +PASS U+4F50 佐 %1B%24%42%3A%34 +PASS U+4F51 佑 %1B%24%42%4D%24 +PASS U+4F53 体 %1B%24%42%42%4E +PASS U+4F55 何 %1B%24%42%32%3F +FAIL U+4F56 佖 %1B%24%42%79%33 assert_equals: expected "%1B%24%42%79%33" but got "%26%23%32%30%33%31%30%3B" +PASS U+4F57 佗 %1B%24%42%50%49 +PASS U+4F59 余 %1B%24%42%4D%3E +PASS U+4F5A 佚 %1B%24%42%50%45 +PASS U+4F5B 佛 %1B%24%42%50%47 +PASS U+4F5C 作 %1B%24%42%3A%6E +PASS U+4F5D 佝 %1B%24%42%50%48 +PASS U+4F5E 佞 %1B%24%42%55%24 +PASS U+4F69 佩 %1B%24%42%50%50 +PASS U+4F6F 佯 %1B%24%42%50%53 +PASS U+4F70 佰 %1B%24%42%50%51 +PASS U+4F73 佳 %1B%24%42%32%42 +PASS U+4F75 併 %1B%24%42%4A%3B +PASS U+4F76 佶 %1B%24%42%50%4B +PASS U+4F7B 佻 %1B%24%42%50%4F +PASS U+4F7C 佼 %1B%24%42%38%73 +PASS U+4F7F 使 %1B%24%42%3B%48 +PASS U+4F83 侃 %1B%24%42%34%26 +PASS U+4F86 來 %1B%24%42%50%54 +PASS U+4F88 侈 %1B%24%42%50%4C +FAIL U+4F8A 侊 %1B%24%42%79%35 assert_equals: expected "%1B%24%42%79%35" but got "%26%23%32%30%33%36%32%3B" +PASS U+4F8B 例 %1B%24%42%4E%63 +PASS U+4F8D 侍 %1B%24%42%3B%78 +PASS U+4F8F 侏 %1B%24%42%50%4D +PASS U+4F91 侑 %1B%24%42%50%52 +FAIL U+4F92 侒 %1B%24%42%79%34 assert_equals: expected "%1B%24%42%79%34" but got "%26%23%32%30%33%37%30%3B" +FAIL U+4F94 侔 %1B%24%42%79%37 assert_equals: expected "%1B%24%42%79%37" but got "%26%23%32%30%33%37%32%3B" +PASS U+4F96 侖 %1B%24%42%50%55 +PASS U+4F98 侘 %1B%24%42%50%4E +FAIL U+4F9A 侚 %1B%24%42%79%36 assert_equals: expected "%1B%24%42%79%36" but got "%26%23%32%30%33%37%38%3B" +PASS U+4F9B 供 %1B%24%42%36%21 +PASS U+4F9D 依 %1B%24%42%30%4D +PASS U+4FA0 侠 %1B%24%42%36%22 +PASS U+4FA1 価 %1B%24%42%32%41 +PASS U+4FAB 侫 %1B%24%42%55%25 +PASS U+4FAD 侭 %1B%24%42%4B%79 +PASS U+4FAE 侮 %1B%24%42%49%6E +PASS U+4FAF 侯 %1B%24%42%38%74 +PASS U+4FB5 侵 %1B%24%42%3F%2F +PASS U+4FB6 侶 %1B%24%42%4E%37 +PASS U+4FBF 便 %1B%24%42%4A%58 +PASS U+4FC2 係 %1B%24%42%37%38 +PASS U+4FC3 促 %1B%24%42%42%25 +PASS U+4FC4 俄 %1B%24%42%32%64 +FAIL U+4FC9 俉 %1B%24%42%79%26 assert_equals: expected "%1B%24%42%79%26" but got "%26%23%32%30%34%32%35%3B" +PASS U+4FCA 俊 %1B%24%42%3D%53 +FAIL U+4FCD 俍 %1B%24%42%79%38 assert_equals: expected "%1B%24%42%79%38" but got "%26%23%32%30%34%32%39%3B" +PASS U+4FCE 俎 %1B%24%42%50%59 +PASS U+4FD0 俐 %1B%24%42%50%5E +PASS U+4FD1 俑 %1B%24%42%50%5C +PASS U+4FD4 俔 %1B%24%42%50%57 +PASS U+4FD7 俗 %1B%24%42%42%2F +PASS U+4FD8 俘 %1B%24%42%50%5A +PASS U+4FDA 俚 %1B%24%42%50%5D +PASS U+4FDB 俛 %1B%24%42%50%5B +PASS U+4FDD 保 %1B%24%42%4A%5D +PASS U+4FDF 俟 %1B%24%42%50%58 +PASS U+4FE1 信 %1B%24%42%3F%2E +PASS U+4FE3 俣 %1B%24%42%4B%73 +PASS U+4FE4 俤 %1B%24%42%50%5F +PASS U+4FE5 俥 %1B%24%42%50%60 +PASS U+4FEE 修 %1B%24%42%3D%24 +PASS U+4FEF 俯 %1B%24%42%50%6D +PASS U+4FF3 俳 %1B%24%42%47%50 +PASS U+4FF5 俵 %1B%24%42%49%36 +PASS U+4FF6 俶 %1B%24%42%50%68 +PASS U+4FF8 俸 %1B%24%42%4A%70 +PASS U+4FFA 俺 %1B%24%42%32%36 +PASS U+4FFE 俾 %1B%24%42%50%6C +FAIL U+4FFF 俿 %1B%24%42%79%3B assert_equals: expected "%1B%24%42%79%3B" but got "%26%23%32%30%34%37%39%3B" +PASS U+5005 倅 %1B%24%42%50%66 +PASS U+5006 倆 %1B%24%42%50%6F +PASS U+5009 倉 %1B%24%42%41%52 +PASS U+500B 個 %1B%24%42%38%44 +PASS U+500D 倍 %1B%24%42%47%5C +PASS U+500F 倏 %1B%24%42%60%47 +PASS U+5011 們 %1B%24%42%50%6E +PASS U+5012 倒 %1B%24%42%45%5D +PASS U+5014 倔 %1B%24%42%50%63 +PASS U+5016 倖 %1B%24%42%38%76 +PASS U+5019 候 %1B%24%42%38%75 +PASS U+501A 倚 %1B%24%42%50%61 +FAIL U+501E 倞 %1B%24%42%79%3C assert_equals: expected "%1B%24%42%79%3C" but got "%26%23%32%30%35%31%30%3B" +PASS U+501F 借 %1B%24%42%3C%5A +PASS U+5021 倡 %1B%24%42%50%69 +FAIL U+5022 倢 %1B%24%42%79%3A assert_equals: expected "%1B%24%42%79%3A" but got "%26%23%32%30%35%31%34%3B" +PASS U+5023 倣 %1B%24%42%4A%6F +PASS U+5024 値 %1B%24%42%43%4D +PASS U+5025 倥 %1B%24%42%50%65 +PASS U+5026 倦 %1B%24%42%37%71 +PASS U+5028 倨 %1B%24%42%50%62 +PASS U+5029 倩 %1B%24%42%50%6A +PASS U+502A 倪 %1B%24%42%50%64 +PASS U+502B 倫 %1B%24%42%4E%51 +PASS U+502C 倬 %1B%24%42%50%6B +PASS U+502D 倭 %1B%24%42%4F%41 +PASS U+5036 倶 %1B%24%42%36%66 +PASS U+5039 倹 %1B%24%42%37%70 +FAIL U+5040 偀 %1B%24%42%79%39 assert_equals: expected "%1B%24%42%79%39" but got "%26%23%32%30%35%34%34%3B" +FAIL U+5042 偂 %1B%24%42%79%3F assert_equals: expected "%1B%24%42%79%3F" but got "%26%23%32%30%35%34%36%3B" +PASS U+5043 偃 %1B%24%42%50%70 +FAIL U+5046 偆 %1B%24%42%79%3D assert_equals: expected "%1B%24%42%79%3D" but got "%26%23%32%30%35%35%30%3B" +PASS U+5047 假 %1B%24%42%50%71 +PASS U+5048 偈 %1B%24%42%50%75 +PASS U+5049 偉 %1B%24%42%30%4E +PASS U+504F 偏 %1B%24%42%4A%50 +PASS U+5050 偐 %1B%24%42%50%74 +PASS U+5055 偕 %1B%24%42%50%73 +PASS U+5056 偖 %1B%24%42%50%77 +PASS U+505A 做 %1B%24%42%50%76 +PASS U+505C 停 %1B%24%42%44%64 +PASS U+5065 健 %1B%24%42%37%72 +PASS U+506C 偬 %1B%24%42%50%78 +FAIL U+5070 偰 %1B%24%42%79%3E assert_equals: expected "%1B%24%42%79%3E" but got "%26%23%32%30%35%39%32%3B" +PASS U+5072 偲 %1B%24%42%3C%45 +PASS U+5074 側 %1B%24%42%42%26 +PASS U+5075 偵 %1B%24%42%44%65 +PASS U+5076 偶 %1B%24%42%36%76 +PASS U+5078 偸 %1B%24%42%50%79 +PASS U+507D 偽 %1B%24%42%35%36 +PASS U+5080 傀 %1B%24%42%50%7A +PASS U+5085 傅 %1B%24%42%50%7C +PASS U+508D 傍 %1B%24%42%4B%35 +PASS U+5091 傑 %1B%24%42%37%66 +FAIL U+5094 傔 %1B%24%42%79%40 assert_equals: expected "%1B%24%42%79%40" but got "%26%23%32%30%36%32%38%3B" +PASS U+5098 傘 %1B%24%42%3B%31 +PASS U+5099 備 %1B%24%42%48%77 +PASS U+509A 傚 %1B%24%42%50%7B +PASS U+50AC 催 %1B%24%42%3A%45 +PASS U+50AD 傭 %1B%24%42%4D%43 +PASS U+50B2 傲 %1B%24%42%50%7E +PASS U+50B3 傳 %1B%24%42%51%23 +PASS U+50B4 傴 %1B%24%42%50%7D +PASS U+50B5 債 %1B%24%42%3A%44 +PASS U+50B7 傷 %1B%24%42%3D%7D +PASS U+50BE 傾 %1B%24%42%37%39 +PASS U+50C2 僂 %1B%24%42%51%24 +PASS U+50C5 僅 %1B%24%42%36%4F +PASS U+50C9 僉 %1B%24%42%51%21 +PASS U+50CA 僊 %1B%24%42%51%22 +PASS U+50CD 働 %1B%24%42%46%2F +PASS U+50CF 像 %1B%24%42%41%7C +PASS U+50D1 僑 %1B%24%42%36%23 +PASS U+50D5 僕 %1B%24%42%4B%4D +PASS U+50D6 僖 %1B%24%42%51%25 +FAIL U+50D8 僘 %1B%24%42%79%42 assert_equals: expected "%1B%24%42%79%42" but got "%26%23%32%30%36%39%36%3B" +PASS U+50DA 僚 %1B%24%42%4E%3D +PASS U+50DE 僞 %1B%24%42%51%26 +PASS U+50E3 僣 %1B%24%42%51%29 +PASS U+50E5 僥 %1B%24%42%51%27 +PASS U+50E7 僧 %1B%24%42%41%4E +PASS U+50ED 僭 %1B%24%42%51%28 +PASS U+50EE 僮 %1B%24%42%51%2A +FAIL U+50F4 僴 %1B%24%42%79%41 assert_equals: expected "%1B%24%42%79%41" but got "%26%23%32%30%37%32%34%3B" +PASS U+50F5 僵 %1B%24%42%51%2C +PASS U+50F9 價 %1B%24%42%51%2B +PASS U+50FB 僻 %1B%24%42%4A%48 +PASS U+5100 儀 %1B%24%42%35%37 +PASS U+5101 儁 %1B%24%42%51%2E +PASS U+5102 儂 %1B%24%42%51%2F +PASS U+5104 億 %1B%24%42%32%2F +PASS U+5109 儉 %1B%24%42%51%2D +PASS U+5112 儒 %1B%24%42%3C%74 +PASS U+5114 儔 %1B%24%42%51%32 +PASS U+5115 儕 %1B%24%42%51%31 +PASS U+5116 儖 %1B%24%42%51%30 +PASS U+5118 儘 %1B%24%42%50%56 +PASS U+511A 儚 %1B%24%42%51%33 +PASS U+511F 償 %1B%24%42%3D%7E +PASS U+5121 儡 %1B%24%42%51%34 +PASS U+512A 優 %1B%24%42%4D%25 +PASS U+5132 儲 %1B%24%42%4C%59 +PASS U+5137 儷 %1B%24%42%51%36 +PASS U+513A 儺 %1B%24%42%51%35 +PASS U+513B 儻 %1B%24%42%51%38 +PASS U+513C 儼 %1B%24%42%51%37 +PASS U+513F 儿 %1B%24%42%51%39 +PASS U+5140 兀 %1B%24%42%51%3A +PASS U+5141 允 %1B%24%42%30%74 +PASS U+5143 元 %1B%24%42%38%35 +PASS U+5144 兄 %1B%24%42%37%3B +PASS U+5145 充 %1B%24%42%3D%3C +PASS U+5146 兆 %1B%24%42%43%7B +PASS U+5147 兇 %1B%24%42%36%24 +PASS U+5148 先 %1B%24%42%40%68 +PASS U+5149 光 %1B%24%42%38%77 +FAIL U+514A 兊 %1B%24%42%79%43 assert_equals: expected "%1B%24%42%79%43" but got "%26%23%32%30%38%31%30%3B" +PASS U+514B 克 %1B%24%42%39%6E +PASS U+514C 兌 %1B%24%42%51%3C +PASS U+514D 免 %1B%24%42%4C%48 +PASS U+514E 兎 %1B%24%42%45%46 +PASS U+5150 児 %1B%24%42%3B%79 +PASS U+5152 兒 %1B%24%42%51%3B +PASS U+5154 兔 %1B%24%42%51%3D +PASS U+515A 党 %1B%24%42%45%5E +PASS U+515C 兜 %1B%24%42%33%75 +PASS U+5162 兢 %1B%24%42%51%3E +FAIL U+5164 兤 %1B%24%42%79%44 assert_equals: expected "%1B%24%42%79%44" but got "%26%23%32%30%38%33%36%3B" +PASS U+5165 入 %1B%24%42%46%7E +PASS U+5168 全 %1B%24%42%41%34 +PASS U+5169 兩 %1B%24%42%51%40 +PASS U+516A 兪 %1B%24%42%51%41 +PASS U+516B 八 %1B%24%42%48%2C +PASS U+516C 公 %1B%24%42%38%78 +PASS U+516D 六 %1B%24%42%4F%3B +PASS U+516E 兮 %1B%24%42%51%42 +PASS U+5171 共 %1B%24%42%36%26 +PASS U+5175 兵 %1B%24%42%4A%3C +PASS U+5176 其 %1B%24%42%42%36 +PASS U+5177 具 %1B%24%42%36%71 +PASS U+5178 典 %1B%24%42%45%35 +PASS U+517C 兼 %1B%24%42%37%73 +PASS U+5180 冀 %1B%24%42%51%43 +PASS U+5182 冂 %1B%24%42%51%44 +PASS U+5185 内 %1B%24%42%46%62 +PASS U+5186 円 %1B%24%42%31%5F +PASS U+5189 冉 %1B%24%42%51%47 +PASS U+518A 冊 %1B%24%42%3A%7D +PASS U+518C 册 %1B%24%42%51%46 +PASS U+518D 再 %1B%24%42%3A%46 +PASS U+518F 冏 %1B%24%42%51%48 +PASS U+5190 冐 %1B%24%42%66%6E +PASS U+5191 冑 %1B%24%42%51%49 +PASS U+5192 冒 %1B%24%42%4B%41 +PASS U+5193 冓 %1B%24%42%51%4A +PASS U+5195 冕 %1B%24%42%51%4B +PASS U+5196 冖 %1B%24%42%51%4C +PASS U+5197 冗 %1B%24%42%3E%69 +PASS U+5199 写 %1B%24%42%3C%4C +FAIL U+519D 冝 %1B%24%42%79%45 assert_equals: expected "%1B%24%42%79%45" but got "%26%23%32%30%38%39%33%3B" +PASS U+51A0 冠 %1B%24%42%34%27 +PASS U+51A2 冢 %1B%24%42%51%4F +PASS U+51A4 冤 %1B%24%42%51%4D +PASS U+51A5 冥 %1B%24%42%4C%3D +PASS U+51A6 冦 %1B%24%42%51%4E +PASS U+51A8 冨 %1B%24%42%49%5A +PASS U+51A9 冩 %1B%24%42%51%50 +PASS U+51AA 冪 %1B%24%42%51%51 +PASS U+51AB 冫 %1B%24%42%51%52 +PASS U+51AC 冬 %1B%24%42%45%5F +PASS U+51B0 冰 %1B%24%42%51%56 +PASS U+51B1 冱 %1B%24%42%51%54 +PASS U+51B2 冲 %1B%24%42%51%55 +PASS U+51B3 决 %1B%24%42%51%53 +PASS U+51B4 冴 %1B%24%42%3A%63 +PASS U+51B5 况 %1B%24%42%51%57 +PASS U+51B6 冶 %1B%24%42%4C%6A +PASS U+51B7 冷 %1B%24%42%4E%64 +PASS U+51BD 冽 %1B%24%42%51%58 +FAIL U+51BE 冾 %1B%24%42%79%46 assert_equals: expected "%1B%24%42%79%46" but got "%26%23%32%30%39%32%36%3B" +PASS U+51C4 凄 %1B%24%42%40%28 +PASS U+51C5 凅 %1B%24%42%51%59 +PASS U+51C6 准 %1B%24%42%3D%5A +PASS U+51C9 凉 %1B%24%42%51%5A +PASS U+51CB 凋 %1B%24%42%43%7C +PASS U+51CC 凌 %1B%24%42%4E%3F +PASS U+51CD 凍 %1B%24%42%45%60 +PASS U+51D6 凖 %1B%24%42%52%45 +PASS U+51DB 凛 %1B%24%42%51%5B +PASS U+51DC 凜 %1B%24%42%74%25 +PASS U+51DD 凝 %1B%24%42%36%45 +PASS U+51E0 几 %1B%24%42%51%5C +PASS U+51E1 凡 %1B%24%42%4B%5E +PASS U+51E6 処 %1B%24%42%3D%68 +PASS U+51E7 凧 %1B%24%42%42%7C +PASS U+51E9 凩 %1B%24%42%51%5E +PASS U+51EA 凪 %1B%24%42%46%64 +FAIL U+51EC 凬 %1B%24%42%79%47 assert_equals: expected "%1B%24%42%79%47" but got "%26%23%32%30%39%37%32%3B" +PASS U+51ED 凭 %1B%24%42%51%5F +PASS U+51F0 凰 %1B%24%42%51%60 +PASS U+51F1 凱 %1B%24%42%33%2E +PASS U+51F5 凵 %1B%24%42%51%61 +PASS U+51F6 凶 %1B%24%42%36%27 +PASS U+51F8 凸 %1B%24%42%46%4C +PASS U+51F9 凹 %1B%24%42%31%7A +PASS U+51FA 出 %1B%24%42%3D%50 +PASS U+51FD 函 %1B%24%42%48%21 +PASS U+51FE 凾 %1B%24%42%51%62 +PASS U+5200 刀 %1B%24%42%45%61 +PASS U+5203 刃 %1B%24%42%3F%4F +PASS U+5204 刄 %1B%24%42%51%63 +PASS U+5206 分 %1B%24%42%4A%2C +PASS U+5207 切 %1B%24%42%40%5A +PASS U+5208 刈 %1B%24%42%34%22 +PASS U+520A 刊 %1B%24%42%34%29 +PASS U+520B 刋 %1B%24%42%51%64 +PASS U+520E 刎 %1B%24%42%51%66 +PASS U+5211 刑 %1B%24%42%37%3A +PASS U+5214 刔 %1B%24%42%51%65 +FAIL U+5215 刕 %1B%24%42%79%48 assert_equals: expected "%1B%24%42%79%48" but got "%26%23%32%31%30%31%33%3B" +PASS U+5217 列 %1B%24%42%4E%73 +PASS U+521D 初 %1B%24%42%3D%69 +PASS U+5224 判 %1B%24%42%48%3D +PASS U+5225 別 %1B%24%42%4A%4C +PASS U+5227 刧 %1B%24%42%51%67 +PASS U+5229 利 %1B%24%42%4D%78 +PASS U+522A 刪 %1B%24%42%51%68 +PASS U+522E 刮 %1B%24%42%51%69 +PASS U+5230 到 %1B%24%42%45%7E +PASS U+5233 刳 %1B%24%42%51%6A +PASS U+5236 制 %1B%24%42%40%29 +PASS U+5237 刷 %1B%24%42%3A%7E +PASS U+5238 券 %1B%24%42%37%74 +PASS U+5239 刹 %1B%24%42%51%6B +PASS U+523A 刺 %1B%24%42%3B%49 +PASS U+523B 刻 %1B%24%42%39%6F +PASS U+5243 剃 %1B%24%42%44%66 +PASS U+5244 剄 %1B%24%42%51%6D +PASS U+5247 則 %1B%24%42%42%27 +PASS U+524A 削 %1B%24%42%3A%6F +PASS U+524B 剋 %1B%24%42%51%6E +PASS U+524C 剌 %1B%24%42%51%6F +PASS U+524D 前 %1B%24%42%41%30 +PASS U+524F 剏 %1B%24%42%51%6C +PASS U+5254 剔 %1B%24%42%51%71 +PASS U+5256 剖 %1B%24%42%4B%36 +PASS U+525B 剛 %1B%24%42%39%64 +PASS U+525E 剞 %1B%24%42%51%70 +PASS U+5263 剣 %1B%24%42%37%75 +PASS U+5264 剤 %1B%24%42%3A%5E +PASS U+5265 剥 %1B%24%42%47%6D +PASS U+5269 剩 %1B%24%42%51%74 +PASS U+526A 剪 %1B%24%42%51%72 +PASS U+526F 副 %1B%24%42%49%7B +PASS U+5270 剰 %1B%24%42%3E%6A +PASS U+5271 剱 %1B%24%42%51%7B +PASS U+5272 割 %1B%24%42%33%64 +PASS U+5273 剳 %1B%24%42%51%75 +PASS U+5274 剴 %1B%24%42%51%73 +PASS U+5275 創 %1B%24%42%41%4F +PASS U+527D 剽 %1B%24%42%51%77 +PASS U+527F 剿 %1B%24%42%51%76 +PASS U+5283 劃 %1B%24%42%33%44 +PASS U+5287 劇 %1B%24%42%37%60 +PASS U+5288 劈 %1B%24%42%51%7C +PASS U+5289 劉 %1B%24%42%4E%2D +PASS U+528D 劍 %1B%24%42%51%78 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1001-2000-expected.txt new file mode 100644 index 0000000..61505b01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_1001-2000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 954 PASS, 46 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5291 劑 %1B%24%42%51%7D +PASS U+5292 劒 %1B%24%42%51%7A +PASS U+5294 劔 %1B%24%42%51%79 +PASS U+529B 力 %1B%24%42%4E%4F +FAIL U+529C 劜 %1B%24%42%79%49 assert_equals: expected "%1B%24%42%79%49" but got "%26%23%32%31%31%34%38%3B" +PASS U+529F 功 %1B%24%42%38%79 +PASS U+52A0 加 %1B%24%42%32%43 +PASS U+52A3 劣 %1B%24%42%4E%74 +FAIL U+52A6 劦 %1B%24%42%79%4A assert_equals: expected "%1B%24%42%79%4A" but got "%26%23%32%31%31%35%38%3B" +PASS U+52A9 助 %1B%24%42%3D%75 +PASS U+52AA 努 %1B%24%42%45%58 +PASS U+52AB 劫 %1B%24%42%39%65 +PASS U+52AC 劬 %1B%24%42%52%22 +PASS U+52AD 劭 %1B%24%42%52%23 +FAIL U+52AF 劯 %1B%24%42%7B%3C assert_equals: expected "%1B%24%42%7B%3C" but got "%26%23%32%31%31%36%37%3B" +PASS U+52B1 励 %1B%24%42%4E%65 +PASS U+52B4 労 %1B%24%42%4F%2B +PASS U+52B5 劵 %1B%24%42%52%25 +PASS U+52B9 効 %1B%24%42%38%7A +PASS U+52BC 劼 %1B%24%42%52%24 +PASS U+52BE 劾 %1B%24%42%33%2F +FAIL U+52C0 勀 %1B%24%42%79%4B assert_equals: expected "%1B%24%42%79%4B" but got "%26%23%32%31%31%38%34%3B" +PASS U+52C1 勁 %1B%24%42%52%26 +PASS U+52C3 勃 %1B%24%42%4B%56 +PASS U+52C5 勅 %1B%24%42%44%3C +PASS U+52C7 勇 %1B%24%42%4D%26 +PASS U+52C9 勉 %1B%24%42%4A%59 +PASS U+52CD 勍 %1B%24%42%52%27 +PASS U+52D2 勒 %1B%24%42%70%55 +PASS U+52D5 動 %1B%24%42%46%30 +PASS U+52D7 勗 %1B%24%42%52%28 +PASS U+52D8 勘 %1B%24%42%34%2A +PASS U+52D9 務 %1B%24%42%4C%33 +FAIL U+52DB 勛 %1B%24%42%79%4C assert_equals: expected "%1B%24%42%79%4C" but got "%26%23%32%31%32%31%31%3B" +PASS U+52DD 勝 %1B%24%42%3E%21 +PASS U+52DE 勞 %1B%24%42%52%29 +PASS U+52DF 募 %1B%24%42%4A%67 +PASS U+52E0 勠 %1B%24%42%52%2D +PASS U+52E2 勢 %1B%24%42%40%2A +PASS U+52E3 勣 %1B%24%42%52%2A +PASS U+52E4 勤 %1B%24%42%36%50 +PASS U+52E6 勦 %1B%24%42%52%2B +PASS U+52E7 勧 %1B%24%42%34%2B +PASS U+52F2 勲 %1B%24%42%37%2E +PASS U+52F3 勳 %1B%24%42%52%2E +PASS U+52F5 勵 %1B%24%42%52%2F +PASS U+52F8 勸 %1B%24%42%52%30 +PASS U+52F9 勹 %1B%24%42%52%31 +PASS U+52FA 勺 %1B%24%42%3C%5B +PASS U+52FE 勾 %1B%24%42%38%7B +PASS U+52FF 勿 %1B%24%42%4C%5E +FAIL U+5300 匀 %1B%24%42%79%4D assert_equals: expected "%1B%24%42%79%4D" but got "%26%23%32%31%32%34%38%3B" +PASS U+5301 匁 %1B%24%42%4C%68 +PASS U+5302 匂 %1B%24%42%46%77 +PASS U+5305 包 %1B%24%42%4A%71 +PASS U+5306 匆 %1B%24%42%52%32 +FAIL U+5307 匇 %1B%24%42%79%4E assert_equals: expected "%1B%24%42%79%4E" but got "%26%23%32%31%32%35%35%3B" +PASS U+5308 匈 %1B%24%42%52%33 +PASS U+530D 匍 %1B%24%42%52%35 +PASS U+530F 匏 %1B%24%42%52%37 +PASS U+5310 匐 %1B%24%42%52%36 +PASS U+5315 匕 %1B%24%42%52%38 +PASS U+5316 化 %1B%24%42%32%3D +PASS U+5317 北 %1B%24%42%4B%4C +PASS U+5319 匙 %1B%24%42%3A%7C +PASS U+531A 匚 %1B%24%42%52%39 +PASS U+531D 匝 %1B%24%42%41%59 +PASS U+5320 匠 %1B%24%42%3E%22 +PASS U+5321 匡 %1B%24%42%36%29 +PASS U+5323 匣 %1B%24%42%52%3A +FAIL U+5324 匤 %1B%24%42%79%4F assert_equals: expected "%1B%24%42%79%4F" but got "%26%23%32%31%32%38%34%3B" +PASS U+532A 匪 %1B%24%42%48%5B +PASS U+532F 匯 %1B%24%42%52%3B +PASS U+5331 匱 %1B%24%42%52%3C +PASS U+5333 匳 %1B%24%42%52%3D +PASS U+5338 匸 %1B%24%42%52%3E +PASS U+5339 匹 %1B%24%42%49%24 +PASS U+533A 区 %1B%24%42%36%68 +PASS U+533B 医 %1B%24%42%30%65 +PASS U+533F 匿 %1B%24%42%46%3F +PASS U+5340 區 %1B%24%42%52%3F +PASS U+5341 十 %1B%24%42%3D%3D +PASS U+5343 千 %1B%24%42%40%69 +PASS U+5345 卅 %1B%24%42%52%41 +PASS U+5346 卆 %1B%24%42%52%40 +PASS U+5347 升 %1B%24%42%3E%23 +PASS U+5348 午 %1B%24%42%38%61 +PASS U+5349 卉 %1B%24%42%52%43 +PASS U+534A 半 %1B%24%42%48%3E +PASS U+534D 卍 %1B%24%42%52%44 +PASS U+5351 卑 %1B%24%42%48%5C +PASS U+5352 卒 %1B%24%42%42%34 +PASS U+5353 卓 %1B%24%42%42%6E +PASS U+5354 協 %1B%24%42%36%28 +PASS U+5357 南 %1B%24%42%46%6E +PASS U+5358 単 %1B%24%42%43%31 +PASS U+535A 博 %1B%24%42%47%6E +PASS U+535C 卜 %1B%24%42%4B%4E +PASS U+535E 卞 %1B%24%42%52%46 +PASS U+5360 占 %1B%24%42%40%6A +PASS U+5366 卦 %1B%24%42%37%35 +PASS U+5369 卩 %1B%24%42%52%47 +PASS U+536E 卮 %1B%24%42%52%48 +PASS U+536F 卯 %1B%24%42%31%2C +PASS U+5370 印 %1B%24%42%30%75 +PASS U+5371 危 %1B%24%42%34%6D +FAIL U+5372 卲 %1B%24%42%79%50 assert_equals: expected "%1B%24%42%79%50" but got "%26%23%32%31%33%36%32%3B" +PASS U+5373 即 %1B%24%42%42%28 +PASS U+5374 却 %1B%24%42%35%51 +PASS U+5375 卵 %1B%24%42%4D%71 +PASS U+5377 卷 %1B%24%42%52%4B +PASS U+5378 卸 %1B%24%42%32%37 +PASS U+537B 卻 %1B%24%42%52%4A +PASS U+537F 卿 %1B%24%42%36%2A +PASS U+5382 厂 %1B%24%42%52%4C +PASS U+5384 厄 %1B%24%42%4C%71 +FAIL U+5393 厓 %1B%24%42%79%51 assert_equals: expected "%1B%24%42%79%51" but got "%26%23%32%31%33%39%35%3B" +PASS U+5396 厖 %1B%24%42%52%4D +PASS U+5398 厘 %1B%24%42%4E%52 +PASS U+539A 厚 %1B%24%42%38%7C +PASS U+539F 原 %1B%24%42%38%36 +PASS U+53A0 厠 %1B%24%42%52%4E +PASS U+53A5 厥 %1B%24%42%52%50 +PASS U+53A6 厦 %1B%24%42%52%4F +PASS U+53A8 厨 %1B%24%42%3F%5F +PASS U+53A9 厩 %1B%24%42%31%39 +PASS U+53AD 厭 %1B%24%42%31%5E +PASS U+53AE 厮 %1B%24%42%52%51 +PASS U+53B0 厰 %1B%24%42%52%52 +FAIL U+53B2 厲 %1B%24%42%79%52 assert_equals: expected "%1B%24%42%79%52" but got "%26%23%32%31%34%32%36%3B" +PASS U+53B3 厳 %1B%24%42%38%37 +PASS U+53B6 厶 %1B%24%42%52%53 +PASS U+53BB 去 %1B%24%42%35%6E +PASS U+53C2 参 %1B%24%42%3B%32 +PASS U+53C3 參 %1B%24%42%52%54 +PASS U+53C8 又 %1B%24%42%4B%74 +PASS U+53C9 叉 %1B%24%42%3A%35 +PASS U+53CA 及 %1B%24%42%35%5A +PASS U+53CB 友 %1B%24%42%4D%27 +PASS U+53CC 双 %1B%24%42%41%50 +PASS U+53CD 反 %1B%24%42%48%3F +PASS U+53CE 収 %1B%24%42%3C%7D +PASS U+53D4 叔 %1B%24%42%3D%47 +PASS U+53D6 取 %1B%24%42%3C%68 +PASS U+53D7 受 %1B%24%42%3C%75 +PASS U+53D9 叙 %1B%24%42%3D%76 +PASS U+53DB 叛 %1B%24%42%48%40 +FAIL U+53DD 叝 %1B%24%42%79%53 assert_equals: expected "%1B%24%42%79%53" but got "%26%23%32%31%34%36%39%3B" +PASS U+53DF 叟 %1B%24%42%52%57 +PASS U+53E1 叡 %1B%24%42%31%43 +PASS U+53E2 叢 %1B%24%42%41%51 +PASS U+53E3 口 %1B%24%42%38%7D +PASS U+53E4 古 %1B%24%42%38%45 +PASS U+53E5 句 %1B%24%42%36%67 +PASS U+53E8 叨 %1B%24%42%52%5B +PASS U+53E9 叩 %1B%24%42%43%21 +PASS U+53EA 只 %1B%24%42%42%7E +PASS U+53EB 叫 %1B%24%42%36%2B +PASS U+53EC 召 %1B%24%42%3E%24 +PASS U+53ED 叭 %1B%24%42%52%5C +PASS U+53EE 叮 %1B%24%42%52%5A +PASS U+53EF 可 %1B%24%42%32%44 +PASS U+53F0 台 %1B%24%42%42%66 +PASS U+53F1 叱 %1B%24%42%3C%38 +PASS U+53F2 史 %1B%24%42%3B%4B +PASS U+53F3 右 %1B%24%42%31%26 +PASS U+53F6 叶 %1B%24%42%33%70 +PASS U+53F7 号 %1B%24%42%39%66 +PASS U+53F8 司 %1B%24%42%3B%4A +PASS U+53FA 叺 %1B%24%42%52%5D +PASS U+5401 吁 %1B%24%42%52%5E +PASS U+5403 吃 %1B%24%42%35%49 +PASS U+5404 各 %1B%24%42%33%46 +PASS U+5408 合 %1B%24%42%39%67 +PASS U+5409 吉 %1B%24%42%35%48 +PASS U+540A 吊 %1B%24%42%44%5F +PASS U+540B 吋 %1B%24%42%31%25 +PASS U+540C 同 %1B%24%42%46%31 +PASS U+540D 名 %1B%24%42%4C%3E +PASS U+540E 后 %1B%24%42%39%21 +PASS U+540F 吏 %1B%24%42%4D%79 +PASS U+5410 吐 %1B%24%42%45%47 +PASS U+5411 向 %1B%24%42%38%7E +PASS U+541B 君 %1B%24%42%37%2F +PASS U+541D 吝 %1B%24%42%52%67 +PASS U+541F 吟 %1B%24%42%36%63 +PASS U+5420 吠 %1B%24%42%4B%4A +PASS U+5426 否 %1B%24%42%48%5D +PASS U+5429 吩 %1B%24%42%52%66 +PASS U+542B 含 %1B%24%42%34%5E +PASS U+542C 听 %1B%24%42%52%61 +PASS U+542D 吭 %1B%24%42%52%62 +PASS U+542E 吮 %1B%24%42%52%64 +PASS U+5436 吶 %1B%24%42%52%65 +PASS U+5438 吸 %1B%24%42%35%5B +PASS U+5439 吹 %1B%24%42%3F%61 +PASS U+543B 吻 %1B%24%42%4A%2D +PASS U+543C 吼 %1B%24%42%52%63 +PASS U+543D 吽 %1B%24%42%52%5F +PASS U+543E 吾 %1B%24%42%38%63 +PASS U+5440 呀 %1B%24%42%52%60 +PASS U+5442 呂 %1B%24%42%4F%24 +PASS U+5446 呆 %1B%24%42%4A%72 +PASS U+5448 呈 %1B%24%42%44%68 +PASS U+5449 呉 %1B%24%42%38%62 +PASS U+544A 告 %1B%24%42%39%70 +PASS U+544E 呎 %1B%24%42%52%68 +PASS U+5451 呑 %1B%24%42%46%5D +PASS U+545F 呟 %1B%24%42%52%6C +PASS U+5468 周 %1B%24%42%3C%7E +PASS U+546A 呪 %1B%24%42%3C%76 +PASS U+5470 呰 %1B%24%42%52%6F +PASS U+5471 呱 %1B%24%42%52%6D +PASS U+5473 味 %1B%24%42%4C%23 +PASS U+5475 呵 %1B%24%42%52%6A +PASS U+5476 呶 %1B%24%42%52%73 +PASS U+5477 呷 %1B%24%42%52%6E +PASS U+547B 呻 %1B%24%42%52%71 +PASS U+547C 呼 %1B%24%42%38%46 +PASS U+547D 命 %1B%24%42%4C%3F +PASS U+5480 咀 %1B%24%42%52%72 +PASS U+5484 咄 %1B%24%42%52%74 +PASS U+5486 咆 %1B%24%42%52%76 +FAIL U+548A 咊 %1B%24%42%79%56 assert_equals: expected "%1B%24%42%79%56" but got "%26%23%32%31%36%34%32%3B" +PASS U+548B 咋 %1B%24%42%3A%70 +PASS U+548C 和 %1B%24%42%4F%42 +PASS U+548E 咎 %1B%24%42%52%6B +PASS U+548F 咏 %1B%24%42%52%69 +PASS U+5490 咐 %1B%24%42%52%75 +PASS U+5492 咒 %1B%24%42%52%70 +FAIL U+549C 咜 %1B%24%42%79%55 assert_equals: expected "%1B%24%42%79%55" but got "%26%23%32%31%36%36%30%3B" +PASS U+54A2 咢 %1B%24%42%52%78 +PASS U+54A4 咤 %1B%24%42%53%23 +PASS U+54A5 咥 %1B%24%42%52%7A +PASS U+54A8 咨 %1B%24%42%52%7E +FAIL U+54A9 咩 %1B%24%42%79%57 assert_equals: expected "%1B%24%42%79%57" but got "%26%23%32%31%36%37%33%3B" +PASS U+54AB 咫 %1B%24%42%53%21 +PASS U+54AC 咬 %1B%24%42%52%7B +PASS U+54AF 咯 %1B%24%42%53%3E +PASS U+54B2 咲 %1B%24%42%3A%69 +PASS U+54B3 咳 %1B%24%42%33%31 +PASS U+54B8 咸 %1B%24%42%52%79 +PASS U+54BC 咼 %1B%24%42%53%25 +PASS U+54BD 咽 %1B%24%42%30%76 +PASS U+54BE 咾 %1B%24%42%53%24 +PASS U+54C0 哀 %1B%24%42%30%25 +PASS U+54C1 品 %1B%24%42%49%4A +PASS U+54C2 哂 %1B%24%42%53%22 +PASS U+54C4 哄 %1B%24%42%52%7C +PASS U+54C7 哇 %1B%24%42%52%77 +PASS U+54C8 哈 %1B%24%42%52%7D +PASS U+54C9 哉 %1B%24%42%3A%48 +PASS U+54D8 哘 %1B%24%42%53%26 +PASS U+54E1 員 %1B%24%42%30%77 +PASS U+54E2 哢 %1B%24%42%53%2F +PASS U+54E5 哥 %1B%24%42%53%27 +PASS U+54E6 哦 %1B%24%42%53%28 +PASS U+54E8 哨 %1B%24%42%3E%25 +PASS U+54E9 哩 %1B%24%42%4B%69 +PASS U+54ED 哭 %1B%24%42%53%2D +PASS U+54EE 哮 %1B%24%42%53%2C +PASS U+54F2 哲 %1B%24%42%45%2F +PASS U+54FA 哺 %1B%24%42%53%2E +PASS U+54FD 哽 %1B%24%42%53%2B +FAIL U+54FF 哿 %1B%24%42%79%58 assert_equals: expected "%1B%24%42%79%58" but got "%26%23%32%31%37%35%39%3B" +PASS U+5504 唄 %1B%24%42%31%34 +PASS U+5506 唆 %1B%24%42%3A%36 +PASS U+5507 唇 %1B%24%42%3F%30 +PASS U+550F 唏 %1B%24%42%53%29 +PASS U+5510 唐 %1B%24%42%45%62 +PASS U+5514 唔 %1B%24%42%53%2A +PASS U+5516 唖 %1B%24%42%30%22 +PASS U+552E 售 %1B%24%42%53%34 +PASS U+552F 唯 %1B%24%42%4D%23 +PASS U+5531 唱 %1B%24%42%3E%27 +PASS U+5533 唳 %1B%24%42%53%3A +PASS U+5538 唸 %1B%24%42%53%39 +PASS U+5539 唹 %1B%24%42%53%30 +PASS U+553E 唾 %1B%24%42%42%43 +PASS U+5540 啀 %1B%24%42%53%31 +PASS U+5544 啄 %1B%24%42%42%6F +PASS U+5545 啅 %1B%24%42%53%36 +PASS U+5546 商 %1B%24%42%3E%26 +PASS U+554C 啌 %1B%24%42%53%33 +PASS U+554F 問 %1B%24%42%4C%64 +PASS U+5553 啓 %1B%24%42%37%3C +PASS U+5556 啖 %1B%24%42%53%37 +PASS U+5557 啗 %1B%24%42%53%38 +PASS U+555C 啜 %1B%24%42%53%35 +PASS U+555D 啝 %1B%24%42%53%3B +PASS U+5563 啣 %1B%24%42%53%32 +PASS U+557B 啻 %1B%24%42%53%41 +PASS U+557C 啼 %1B%24%42%53%46 +PASS U+557E 啾 %1B%24%42%53%42 +PASS U+5580 喀 %1B%24%42%53%3D +PASS U+5583 喃 %1B%24%42%53%47 +PASS U+5584 善 %1B%24%42%41%31 +FAIL U+5586 喆 %1B%24%42%79%59 assert_equals: expected "%1B%24%42%79%59" but got "%26%23%32%31%38%39%34%3B" +PASS U+5587 喇 %1B%24%42%53%49 +PASS U+5589 喉 %1B%24%42%39%22 +PASS U+558A 喊 %1B%24%42%53%3F +PASS U+558B 喋 %1B%24%42%43%7D +PASS U+5598 喘 %1B%24%42%53%43 +PASS U+5599 喙 %1B%24%42%53%3C +PASS U+559A 喚 %1B%24%42%34%2D +PASS U+559C 喜 %1B%24%42%34%6E +PASS U+559D 喝 %1B%24%42%33%65 +PASS U+559E 喞 %1B%24%42%53%44 +PASS U+559F 喟 %1B%24%42%53%40 +PASS U+55A7 喧 %1B%24%42%37%76 +PASS U+55A8 喨 %1B%24%42%53%4A +PASS U+55A9 喩 %1B%24%42%53%48 +PASS U+55AA 喪 %1B%24%42%41%53 +PASS U+55AB 喫 %1B%24%42%35%4A +PASS U+55AC 喬 %1B%24%42%36%2C +PASS U+55AE 單 %1B%24%42%53%45 +PASS U+55B0 喰 %1B%24%42%36%74 +PASS U+55B6 営 %1B%24%42%31%44 +PASS U+55C4 嗄 %1B%24%42%53%4E +PASS U+55C5 嗅 %1B%24%42%53%4C +PASS U+55C7 嗇 %1B%24%42%54%27 +PASS U+55D4 嗔 %1B%24%42%53%51 +PASS U+55DA 嗚 %1B%24%42%53%4B +PASS U+55DC 嗜 %1B%24%42%53%4F +PASS U+55DF 嗟 %1B%24%42%53%4D +PASS U+55E3 嗣 %1B%24%42%3B%4C +PASS U+55E4 嗤 %1B%24%42%53%50 +PASS U+55F7 嗷 %1B%24%42%53%53 +PASS U+55F9 嗹 %1B%24%42%53%58 +PASS U+55FD 嗽 %1B%24%42%53%56 +PASS U+55FE 嗾 %1B%24%42%53%55 +PASS U+5606 嘆 %1B%24%42%43%32 +PASS U+5609 嘉 %1B%24%42%32%45 +PASS U+5614 嘔 %1B%24%42%53%52 +PASS U+5616 嘖 %1B%24%42%53%54 +PASS U+5617 嘗 %1B%24%42%3E%28 +PASS U+5618 嘘 %1B%24%42%31%33 +PASS U+561B 嘛 %1B%24%42%53%57 +PASS U+5629 嘩 %1B%24%42%32%5E +PASS U+562F 嘯 %1B%24%42%53%62 +PASS U+5631 嘱 %1B%24%42%3E%7C +PASS U+5632 嘲 %1B%24%42%53%5E +PASS U+5634 嘴 %1B%24%42%53%5C +PASS U+5636 嘶 %1B%24%42%53%5D +PASS U+5638 嘸 %1B%24%42%53%5F +PASS U+5642 噂 %1B%24%42%31%3D +PASS U+564C 噌 %1B%24%42%41%39 +PASS U+564E 噎 %1B%24%42%53%59 +PASS U+5650 噐 %1B%24%42%53%5A +PASS U+565B 噛 %1B%24%42%33%7A +PASS U+5664 噤 %1B%24%42%53%61 +PASS U+5668 器 %1B%24%42%34%6F +PASS U+566A 噪 %1B%24%42%53%64 +PASS U+566B 噫 %1B%24%42%53%60 +PASS U+566C 噬 %1B%24%42%53%63 +PASS U+5674 噴 %1B%24%42%4A%2E +PASS U+5678 噸 %1B%24%42%46%55 +PASS U+567A 噺 %1B%24%42%48%38 +PASS U+5680 嚀 %1B%24%42%53%66 +PASS U+5686 嚆 %1B%24%42%53%65 +PASS U+5687 嚇 %1B%24%42%33%45 +PASS U+568A 嚊 %1B%24%42%53%67 +PASS U+568F 嚏 %1B%24%42%53%6A +PASS U+5694 嚔 %1B%24%42%53%69 +PASS U+56A0 嚠 %1B%24%42%53%68 +PASS U+56A2 嚢 %1B%24%42%47%39 +PASS U+56A5 嚥 %1B%24%42%53%6B +PASS U+56AE 嚮 %1B%24%42%53%6C +PASS U+56B4 嚴 %1B%24%42%53%6E +PASS U+56B6 嚶 %1B%24%42%53%6D +PASS U+56BC 嚼 %1B%24%42%53%70 +PASS U+56C0 囀 %1B%24%42%53%73 +PASS U+56C1 囁 %1B%24%42%53%71 +PASS U+56C2 囂 %1B%24%42%53%6F +PASS U+56C3 囃 %1B%24%42%53%72 +PASS U+56C8 囈 %1B%24%42%53%74 +PASS U+56CE 囎 %1B%24%42%53%75 +PASS U+56D1 囑 %1B%24%42%53%76 +PASS U+56D3 囓 %1B%24%42%53%77 +PASS U+56D7 囗 %1B%24%42%53%78 +PASS U+56D8 囘 %1B%24%42%51%45 +PASS U+56DA 囚 %1B%24%42%3C%7C +PASS U+56DB 四 %1B%24%42%3B%4D +PASS U+56DE 回 %1B%24%42%32%73 +PASS U+56E0 因 %1B%24%42%30%78 +PASS U+56E3 団 %1B%24%42%43%44 +PASS U+56EE 囮 %1B%24%42%53%79 +PASS U+56F0 困 %1B%24%42%3A%24 +PASS U+56F2 囲 %1B%24%42%30%4F +PASS U+56F3 図 %1B%24%42%3F%5E +PASS U+56F9 囹 %1B%24%42%53%7A +PASS U+56FA 固 %1B%24%42%38%47 +PASS U+56FD 国 %1B%24%42%39%71 +PASS U+56FF 囿 %1B%24%42%53%7C +PASS U+5700 圀 %1B%24%42%53%7B +PASS U+5703 圃 %1B%24%42%4A%60 +PASS U+5704 圄 %1B%24%42%53%7D +PASS U+5708 圈 %1B%24%42%54%21 +PASS U+5709 圉 %1B%24%42%53%7E +PASS U+570B 國 %1B%24%42%54%22 +PASS U+570D 圍 %1B%24%42%54%23 +PASS U+570F 圏 %1B%24%42%37%77 +PASS U+5712 園 %1B%24%42%31%60 +PASS U+5713 圓 %1B%24%42%54%24 +PASS U+5716 圖 %1B%24%42%54%26 +PASS U+5718 團 %1B%24%42%54%25 +PASS U+571C 圜 %1B%24%42%54%28 +PASS U+571F 土 %1B%24%42%45%5A +PASS U+5726 圦 %1B%24%42%54%29 +PASS U+5727 圧 %1B%24%42%30%35 +PASS U+5728 在 %1B%24%42%3A%5F +PASS U+572D 圭 %1B%24%42%37%3D +PASS U+5730 地 %1B%24%42%43%4F +PASS U+5737 圷 %1B%24%42%54%2A +PASS U+5738 圸 %1B%24%42%54%2B +PASS U+573B 圻 %1B%24%42%54%2D +PASS U+5740 址 %1B%24%42%54%2E +PASS U+5742 坂 %1B%24%42%3A%64 +PASS U+5747 均 %1B%24%42%36%51 +PASS U+574A 坊 %1B%24%42%4B%37 +PASS U+574E 坎 %1B%24%42%54%2C +PASS U+574F 坏 %1B%24%42%54%2F +PASS U+5750 坐 %1B%24%42%3A%41 +PASS U+5751 坑 %1B%24%42%39%23 +FAIL U+5759 坙 %1B%24%42%79%5A assert_equals: expected "%1B%24%42%79%5A" but got "%26%23%32%32%33%36%31%3B" +PASS U+5761 坡 %1B%24%42%54%33 +PASS U+5764 坤 %1B%24%42%3A%25 +FAIL U+5765 坥 %1B%24%42%79%5B assert_equals: expected "%1B%24%42%79%5B" but got "%26%23%32%32%33%37%33%3B" +PASS U+5766 坦 %1B%24%42%43%33 +PASS U+5769 坩 %1B%24%42%54%30 +PASS U+576A 坪 %1B%24%42%44%5A +PASS U+577F 坿 %1B%24%42%54%34 +PASS U+5782 垂 %1B%24%42%3F%62 +PASS U+5788 垈 %1B%24%42%54%32 +PASS U+5789 垉 %1B%24%42%54%35 +PASS U+578B 型 %1B%24%42%37%3F +PASS U+5793 垓 %1B%24%42%54%36 +PASS U+57A0 垠 %1B%24%42%54%37 +PASS U+57A2 垢 %1B%24%42%39%24 +PASS U+57A3 垣 %1B%24%42%33%40 +PASS U+57A4 垤 %1B%24%42%54%39 +PASS U+57AA 垪 %1B%24%42%54%3A +FAIL U+57AC 垬 %1B%24%42%79%5C assert_equals: expected "%1B%24%42%79%5C" but got "%26%23%32%32%34%34%34%3B" +PASS U+57B0 垰 %1B%24%42%54%3B +PASS U+57B3 垳 %1B%24%42%54%38 +PASS U+57C0 埀 %1B%24%42%54%31 +PASS U+57C3 埃 %1B%24%42%54%3C +PASS U+57C6 埆 %1B%24%42%54%3D +FAIL U+57C7 埇 %1B%24%42%79%5E assert_equals: expected "%1B%24%42%79%5E" but got "%26%23%32%32%34%37%31%3B" +FAIL U+57C8 埈 %1B%24%42%79%5D assert_equals: expected "%1B%24%42%79%5D" but got "%26%23%32%32%34%37%32%3B" +PASS U+57CB 埋 %1B%24%42%4B%64 +PASS U+57CE 城 %1B%24%42%3E%6B +PASS U+57D2 埒 %1B%24%42%54%3F +PASS U+57D3 埓 %1B%24%42%54%40 +PASS U+57D4 埔 %1B%24%42%54%3E +PASS U+57D6 埖 %1B%24%42%54%42 +PASS U+57DC 埜 %1B%24%42%47%38 +PASS U+57DF 域 %1B%24%42%30%68 +PASS U+57E0 埠 %1B%24%42%49%56 +PASS U+57E3 埣 %1B%24%42%54%43 +PASS U+57F4 埴 %1B%24%42%3E%7D +PASS U+57F7 執 %1B%24%42%3C%39 +PASS U+57F9 培 %1B%24%42%47%5D +PASS U+57FA 基 %1B%24%42%34%70 +PASS U+57FC 埼 %1B%24%42%3A%6B +PASS U+5800 堀 %1B%24%42%4B%59 +PASS U+5802 堂 %1B%24%42%46%32 +PASS U+5805 堅 %1B%24%42%37%78 +PASS U+5806 堆 %1B%24%42%42%4F +PASS U+580A 堊 %1B%24%42%54%41 +PASS U+580B 堋 %1B%24%42%54%44 +PASS U+5815 堕 %1B%24%42%42%44 +PASS U+5819 堙 %1B%24%42%54%45 +PASS U+581D 堝 %1B%24%42%54%46 +PASS U+5821 堡 %1B%24%42%54%48 +PASS U+5824 堤 %1B%24%42%44%69 +PASS U+582A 堪 %1B%24%42%34%2E +PASS U+582F 堯 %1B%24%42%74%21 +PASS U+5830 堰 %1B%24%42%31%61 +PASS U+5831 報 %1B%24%42%4A%73 +PASS U+5834 場 %1B%24%42%3E%6C +PASS U+5835 堵 %1B%24%42%45%48 +PASS U+583A 堺 %1B%24%42%3A%66 +PASS U+583D 堽 %1B%24%42%54%4E +PASS U+5840 塀 %1B%24%42%4A%3D +PASS U+5841 塁 %1B%24%42%4E%5D +PASS U+584A 塊 %1B%24%42%32%74 +PASS U+584B 塋 %1B%24%42%54%4A +PASS U+5851 塑 %1B%24%42%41%3A +PASS U+5852 塒 %1B%24%42%54%4D +PASS U+5854 塔 %1B%24%42%45%63 +PASS U+5857 塗 %1B%24%42%45%49 +PASS U+5858 塘 %1B%24%42%45%64 +PASS U+5859 塙 %1B%24%42%48%39 +PASS U+585A 塚 %1B%24%42%44%4D +PASS U+585E 塞 %1B%24%42%3A%49 +PASS U+5862 塢 %1B%24%42%54%49 +PASS U+5869 塩 %1B%24%42%31%76 +PASS U+586B 填 %1B%24%42%45%36 +PASS U+5870 塰 %1B%24%42%54%4B +PASS U+5872 塲 %1B%24%42%54%47 +PASS U+5875 塵 %1B%24%42%3F%50 +PASS U+5879 塹 %1B%24%42%54%4F +PASS U+587E 塾 %1B%24%42%3D%4E +PASS U+5883 境 %1B%24%42%36%2D +PASS U+5885 墅 %1B%24%42%54%50 +PASS U+5893 墓 %1B%24%42%4A%68 +PASS U+5897 増 %1B%24%42%41%7D +PASS U+589C 墜 %1B%24%42%44%46 +FAIL U+589E 增 %1B%24%42%79%61 assert_equals: expected "%1B%24%42%79%61" but got "%26%23%32%32%36%38%36%3B" +PASS U+589F 墟 %1B%24%42%54%52 +PASS U+58A8 墨 %1B%24%42%4B%4F +PASS U+58AB 墫 %1B%24%42%54%53 +PASS U+58AE 墮 %1B%24%42%54%58 +FAIL U+58B2 墲 %1B%24%42%79%62 assert_equals: expected "%1B%24%42%79%62" but got "%26%23%32%32%37%30%36%3B" +PASS U+58B3 墳 %1B%24%42%4A%2F +PASS U+58B8 墸 %1B%24%42%54%57 +PASS U+58B9 墹 %1B%24%42%54%51 +PASS U+58BA 墺 %1B%24%42%54%54 +PASS U+58BB 墻 %1B%24%42%54%56 +PASS U+58BE 墾 %1B%24%42%3A%26 +PASS U+58C1 壁 %1B%24%42%4A%49 +PASS U+58C5 壅 %1B%24%42%54%59 +PASS U+58C7 壇 %1B%24%42%43%45 +PASS U+58CA 壊 %1B%24%42%32%75 +PASS U+58CC 壌 %1B%24%42%3E%6D +PASS U+58D1 壑 %1B%24%42%54%5B +PASS U+58D3 壓 %1B%24%42%54%5A +PASS U+58D5 壕 %1B%24%42%39%68 +PASS U+58D7 壗 %1B%24%42%54%5C +PASS U+58D8 壘 %1B%24%42%54%5E +PASS U+58D9 壙 %1B%24%42%54%5D +PASS U+58DC 壜 %1B%24%42%54%60 +PASS U+58DE 壞 %1B%24%42%54%55 +PASS U+58DF 壟 %1B%24%42%54%62 +PASS U+58E4 壤 %1B%24%42%54%61 +PASS U+58E5 壥 %1B%24%42%54%5F +PASS U+58EB 士 %1B%24%42%3B%4E +PASS U+58EC 壬 %1B%24%42%3F%51 +PASS U+58EE 壮 %1B%24%42%41%54 +PASS U+58EF 壯 %1B%24%42%54%63 +PASS U+58F0 声 %1B%24%42%40%3C +PASS U+58F1 壱 %1B%24%42%30%6D +PASS U+58F2 売 %1B%24%42%47%64 +PASS U+58F7 壷 %1B%24%42%44%5B +PASS U+58F9 壹 %1B%24%42%54%65 +PASS U+58FA 壺 %1B%24%42%54%64 +PASS U+58FB 壻 %1B%24%42%54%66 +PASS U+58FC 壼 %1B%24%42%54%67 +PASS U+58FD 壽 %1B%24%42%54%68 +PASS U+5902 夂 %1B%24%42%54%69 +PASS U+5909 変 %1B%24%42%4A%51 +PASS U+590A 夊 %1B%24%42%54%6A +FAIL U+590B 夋 %1B%24%42%79%63 assert_equals: expected "%1B%24%42%79%63" but got "%26%23%32%32%37%39%35%3B" +PASS U+590F 夏 %1B%24%42%32%46 +PASS U+5910 夐 %1B%24%42%54%6B +PASS U+5915 夕 %1B%24%42%4D%3C +PASS U+5916 外 %1B%24%42%33%30 +PASS U+5918 夘 %1B%24%42%52%49 +PASS U+5919 夙 %1B%24%42%3D%48 +PASS U+591A 多 %1B%24%42%42%3F +PASS U+591B 夛 %1B%24%42%54%6C +PASS U+591C 夜 %1B%24%42%4C%6B +PASS U+5922 夢 %1B%24%42%4C%34 +PASS U+5925 夥 %1B%24%42%54%6E +PASS U+5927 大 %1B%24%42%42%67 +PASS U+5929 天 %1B%24%42%45%37 +PASS U+592A 太 %1B%24%42%42%40 +PASS U+592B 夫 %1B%24%42%49%57 +PASS U+592C 夬 %1B%24%42%54%6F +PASS U+592D 夭 %1B%24%42%54%70 +PASS U+592E 央 %1B%24%42%31%7B +PASS U+5931 失 %1B%24%42%3C%3A +PASS U+5932 夲 %1B%24%42%54%71 +PASS U+5937 夷 %1B%24%42%30%50 +PASS U+5938 夸 %1B%24%42%54%72 +PASS U+593E 夾 %1B%24%42%54%73 +PASS U+5944 奄 %1B%24%42%31%62 +PASS U+5947 奇 %1B%24%42%34%71 +PASS U+5948 奈 %1B%24%42%46%60 +PASS U+5949 奉 %1B%24%42%4A%74 +PASS U+594E 奎 %1B%24%42%54%77 +PASS U+594F 奏 %1B%24%42%41%55 +PASS U+5950 奐 %1B%24%42%54%76 +PASS U+5951 契 %1B%24%42%37%40 +FAIL U+5953 奓 %1B%24%42%79%64 assert_equals: expected "%1B%24%42%79%64" but got "%26%23%32%32%38%36%37%3B" +PASS U+5954 奔 %1B%24%42%4B%5B +PASS U+5955 奕 %1B%24%42%54%75 +PASS U+5957 套 %1B%24%42%45%65 +PASS U+5958 奘 %1B%24%42%54%79 +PASS U+595A 奚 %1B%24%42%54%78 +FAIL U+595B 奛 %1B%24%42%79%65 assert_equals: expected "%1B%24%42%79%65" but got "%26%23%32%32%38%37%35%3B" +FAIL U+595D 奝 %1B%24%42%79%66 assert_equals: expected "%1B%24%42%79%66" but got "%26%23%32%32%38%37%37%3B" +PASS U+5960 奠 %1B%24%42%54%7B +PASS U+5962 奢 %1B%24%42%54%7A +FAIL U+5963 奣 %1B%24%42%79%67 assert_equals: expected "%1B%24%42%79%67" but got "%26%23%32%32%38%38%33%3B" +PASS U+5965 奥 %1B%24%42%31%7C +PASS U+5967 奧 %1B%24%42%54%7C +PASS U+5968 奨 %1B%24%42%3E%29 +PASS U+5969 奩 %1B%24%42%54%7E +PASS U+596A 奪 %1B%24%42%43%25 +PASS U+596C 奬 %1B%24%42%54%7D +PASS U+596E 奮 %1B%24%42%4A%33 +PASS U+5973 女 %1B%24%42%3D%77 +PASS U+5974 奴 %1B%24%42%45%5B +PASS U+5978 奸 %1B%24%42%55%21 +PASS U+597D 好 %1B%24%42%39%25 +PASS U+5981 妁 %1B%24%42%55%22 +PASS U+5982 如 %1B%24%42%47%21 +PASS U+5983 妃 %1B%24%42%48%5E +PASS U+5984 妄 %1B%24%42%4C%51 +PASS U+598A 妊 %1B%24%42%47%25 +PASS U+598D 妍 %1B%24%42%55%2B +PASS U+5993 妓 %1B%24%42%35%38 +PASS U+5996 妖 %1B%24%42%4D%45 +PASS U+5999 妙 %1B%24%42%4C%2F +PASS U+599B 妛 %1B%24%42%56%2C +PASS U+599D 妝 %1B%24%42%55%23 +PASS U+59A3 妣 %1B%24%42%55%26 +FAIL U+59A4 妤 %1B%24%42%79%68 assert_equals: expected "%1B%24%42%79%68" but got "%26%23%32%32%39%34%38%3B" +PASS U+59A5 妥 %1B%24%42%42%45 +PASS U+59A8 妨 %1B%24%42%4B%38 +PASS U+59AC 妬 %1B%24%42%45%4A +PASS U+59B2 妲 %1B%24%42%55%27 +PASS U+59B9 妹 %1B%24%42%4B%65 +FAIL U+59BA 妺 %1B%24%42%79%69 assert_equals: expected "%1B%24%42%79%69" but got "%26%23%32%32%39%37%30%3B" +PASS U+59BB 妻 %1B%24%42%3A%4A +PASS U+59BE 妾 %1B%24%42%3E%2A +PASS U+59C6 姆 %1B%24%42%55%28 +PASS U+59C9 姉 %1B%24%42%3B%50 +PASS U+59CB 始 %1B%24%42%3B%4F +PASS U+59D0 姐 %1B%24%42%30%39 +PASS U+59D1 姑 %1B%24%42%38%48 +PASS U+59D3 姓 %1B%24%42%40%2B +PASS U+59D4 委 %1B%24%42%30%51 +PASS U+59D9 姙 %1B%24%42%55%2C +PASS U+59DA 姚 %1B%24%42%55%2D +PASS U+59DC 姜 %1B%24%42%55%2A +PASS U+59E5 姥 %1B%24%42%31%38 +PASS U+59E6 姦 %1B%24%42%34%2F +PASS U+59E8 姨 %1B%24%42%55%29 +PASS U+59EA 姪 %1B%24%42%4C%45 +PASS U+59EB 姫 %1B%24%42%49%31 +PASS U+59F6 姶 %1B%24%42%30%28 +PASS U+59FB 姻 %1B%24%42%30%79 +PASS U+59FF 姿 %1B%24%42%3B%51 +PASS U+5A01 威 %1B%24%42%30%52 +PASS U+5A03 娃 %1B%24%42%30%23 +PASS U+5A09 娉 %1B%24%42%55%32 +PASS U+5A11 娑 %1B%24%42%55%30 +PASS U+5A18 娘 %1B%24%42%4C%3C +PASS U+5A1A 娚 %1B%24%42%55%33 +PASS U+5A1C 娜 %1B%24%42%55%31 +PASS U+5A1F 娟 %1B%24%42%55%2F +PASS U+5A20 娠 %1B%24%42%3F%31 +PASS U+5A25 娥 %1B%24%42%55%2E +PASS U+5A29 娩 %1B%24%42%4A%5A +PASS U+5A2F 娯 %1B%24%42%38%64 +PASS U+5A35 娵 %1B%24%42%55%37 +PASS U+5A36 娶 %1B%24%42%55%38 +PASS U+5A3C 娼 %1B%24%42%3E%2B +PASS U+5A40 婀 %1B%24%42%55%34 +PASS U+5A41 婁 %1B%24%42%4F%2C +PASS U+5A46 婆 %1B%24%42%47%4C +PASS U+5A49 婉 %1B%24%42%55%36 +PASS U+5A5A 婚 %1B%24%42%3A%27 +PASS U+5A62 婢 %1B%24%42%55%39 +PASS U+5A66 婦 %1B%24%42%49%58 +PASS U+5A6A 婪 %1B%24%42%55%3A +PASS U+5A6C 婬 %1B%24%42%55%35 +PASS U+5A7F 婿 %1B%24%42%4C%3B +PASS U+5A92 媒 %1B%24%42%47%5E +PASS U+5A9A 媚 %1B%24%42%55%3B +PASS U+5A9B 媛 %1B%24%42%49%32 +PASS U+5ABC 媼 %1B%24%42%55%3C +PASS U+5ABD 媽 %1B%24%42%55%40 +PASS U+5ABE 媾 %1B%24%42%55%3D +PASS U+5AC1 嫁 %1B%24%42%32%47 +PASS U+5AC2 嫂 %1B%24%42%55%3F +PASS U+5AC9 嫉 %1B%24%42%3C%3B +PASS U+5ACB 嫋 %1B%24%42%55%3E +PASS U+5ACC 嫌 %1B%24%42%37%79 +PASS U+5AD0 嫐 %1B%24%42%55%4C +PASS U+5AD6 嫖 %1B%24%42%55%45 +PASS U+5AD7 嫗 %1B%24%42%55%42 +PASS U+5AE1 嫡 %1B%24%42%43%64 +PASS U+5AE3 嫣 %1B%24%42%55%41 +PASS U+5AE6 嫦 %1B%24%42%55%43 +PASS U+5AE9 嫩 %1B%24%42%55%44 +PASS U+5AFA 嫺 %1B%24%42%55%46 +PASS U+5AFB 嫻 %1B%24%42%55%47 +PASS U+5B09 嬉 %1B%24%42%34%72 +PASS U+5B0B 嬋 %1B%24%42%55%49 +PASS U+5B0C 嬌 %1B%24%42%55%48 +PASS U+5B16 嬖 %1B%24%42%55%4A +PASS U+5B22 嬢 %1B%24%42%3E%6E +PASS U+5B2A 嬪 %1B%24%42%55%4D +PASS U+5B2C 嬬 %1B%24%42%44%5C +PASS U+5B30 嬰 %1B%24%42%31%45 +PASS U+5B32 嬲 %1B%24%42%55%4B +PASS U+5B36 嬶 %1B%24%42%55%4E +PASS U+5B3E 嬾 %1B%24%42%55%4F +PASS U+5B40 孀 %1B%24%42%55%52 +PASS U+5B43 孃 %1B%24%42%55%50 +PASS U+5B45 孅 %1B%24%42%55%51 +PASS U+5B50 子 %1B%24%42%3B%52 +PASS U+5B51 孑 %1B%24%42%55%53 +PASS U+5B54 孔 %1B%24%42%39%26 +PASS U+5B55 孕 %1B%24%42%55%54 +FAIL U+5B56 孖 %1B%24%42%79%6A assert_equals: expected "%1B%24%42%79%6A" but got "%26%23%32%33%33%38%32%3B" +PASS U+5B57 字 %1B%24%42%3B%7A +PASS U+5B58 存 %1B%24%42%42%38 +PASS U+5B5A 孚 %1B%24%42%55%55 +PASS U+5B5B 孛 %1B%24%42%55%56 +PASS U+5B5C 孜 %1B%24%42%3B%5A +PASS U+5B5D 孝 %1B%24%42%39%27 +PASS U+5B5F 孟 %1B%24%42%4C%52 +PASS U+5B63 季 %1B%24%42%35%28 +PASS U+5B64 孤 %1B%24%42%38%49 +PASS U+5B65 孥 %1B%24%42%55%57 +PASS U+5B66 学 %1B%24%42%33%58 +PASS U+5B69 孩 %1B%24%42%55%58 +PASS U+5B6B 孫 %1B%24%42%42%39 +PASS U+5B70 孰 %1B%24%42%55%59 +PASS U+5B71 孱 %1B%24%42%56%23 +PASS U+5B73 孳 %1B%24%42%55%5A +PASS U+5B75 孵 %1B%24%42%55%5B +PASS U+5B78 學 %1B%24%42%55%5C +PASS U+5B7A 孺 %1B%24%42%55%5E +PASS U+5B80 宀 %1B%24%42%55%5F +PASS U+5B83 它 %1B%24%42%55%60 +PASS U+5B85 宅 %1B%24%42%42%70 +PASS U+5B87 宇 %1B%24%42%31%27 +PASS U+5B88 守 %1B%24%42%3C%69 +PASS U+5B89 安 %1B%24%42%30%42 +PASS U+5B8B 宋 %1B%24%42%41%57 +PASS U+5B8C 完 %1B%24%42%34%30 +PASS U+5B8D 宍 %1B%24%42%3C%35 +PASS U+5B8F 宏 %1B%24%42%39%28 +PASS U+5B95 宕 %1B%24%42%45%66 +PASS U+5B97 宗 %1B%24%42%3D%21 +PASS U+5B98 官 %1B%24%42%34%31 +PASS U+5B99 宙 %1B%24%42%43%68 +PASS U+5B9A 定 %1B%24%42%44%6A +PASS U+5B9B 宛 %1B%24%42%30%38 +PASS U+5B9C 宜 %1B%24%42%35%39 +PASS U+5B9D 宝 %1B%24%42%4A%75 +PASS U+5B9F 実 %1B%24%42%3C%42 +PASS U+5BA2 客 %1B%24%42%35%52 +PASS U+5BA3 宣 %1B%24%42%40%6B +PASS U+5BA4 室 %1B%24%42%3C%3C +PASS U+5BA5 宥 %1B%24%42%4D%28 +PASS U+5BA6 宦 %1B%24%42%55%61 +PASS U+5BAE 宮 %1B%24%42%35%5C +PASS U+5BB0 宰 %1B%24%42%3A%4B +PASS U+5BB3 害 %1B%24%42%33%32 +PASS U+5BB4 宴 %1B%24%42%31%63 +PASS U+5BB5 宵 %1B%24%42%3E%2C +PASS U+5BB6 家 %1B%24%42%32%48 +PASS U+5BB8 宸 %1B%24%42%55%62 +PASS U+5BB9 容 %1B%24%42%4D%46 +PASS U+5BBF 宿 %1B%24%42%3D%49 +FAIL U+5BC0 寀 %1B%24%42%79%6B assert_equals: expected "%1B%24%42%79%6B" but got "%26%23%32%33%34%38%38%3B" +PASS U+5BC2 寂 %1B%24%42%3C%64 +PASS U+5BC3 寃 %1B%24%42%55%63 +PASS U+5BC4 寄 %1B%24%42%34%73 +PASS U+5BC5 寅 %1B%24%42%46%52 +PASS U+5BC6 密 %1B%24%42%4C%29 +PASS U+5BC7 寇 %1B%24%42%55%64 +PASS U+5BC9 寉 %1B%24%42%55%65 +PASS U+5BCC 富 %1B%24%42%49%59 +PASS U+5BD0 寐 %1B%24%42%55%67 +PASS U+5BD2 寒 %1B%24%42%34%28 +PASS U+5BD3 寓 %1B%24%42%36%77 +PASS U+5BD4 寔 %1B%24%42%55%66 +FAIL U+5BD8 寘 %1B%24%42%79%6D assert_equals: expected "%1B%24%42%79%6D" but got "%26%23%32%33%35%31%32%3B" +PASS U+5BDB 寛 %1B%24%42%34%32 +PASS U+5BDD 寝 %1B%24%42%3F%32 +PASS U+5BDE 寞 %1B%24%42%55%6B +PASS U+5BDF 察 %1B%24%42%3B%21 +PASS U+5BE1 寡 %1B%24%42%32%49 +PASS U+5BE2 寢 %1B%24%42%55%6A +PASS U+5BE4 寤 %1B%24%42%55%68 +PASS U+5BE5 寥 %1B%24%42%55%6C +PASS U+5BE6 實 %1B%24%42%55%69 +PASS U+5BE7 寧 %1B%24%42%47%2B +PASS U+5BE8 寨 %1B%24%42%5C%4D +PASS U+5BE9 審 %1B%24%42%3F%33 +PASS U+5BEB 寫 %1B%24%42%55%6D +FAIL U+5BEC 寬 %1B%24%42%79%6E assert_equals: expected "%1B%24%42%79%6E" but got "%26%23%32%33%35%33%32%3B" +PASS U+5BEE 寮 %1B%24%42%4E%40 +PASS U+5BF0 寰 %1B%24%42%55%6E +PASS U+5BF3 寳 %1B%24%42%55%70 +PASS U+5BF5 寵 %1B%24%42%43%7E +PASS U+5BF6 寶 %1B%24%42%55%6F +PASS U+5BF8 寸 %1B%24%42%40%23 +PASS U+5BFA 寺 %1B%24%42%3B%7B +PASS U+5BFE 対 %1B%24%42%42%50 +PASS U+5BFF 寿 %1B%24%42%3C%77 +PASS U+5C01 封 %1B%24%42%49%75 +PASS U+5C02 専 %1B%24%42%40%6C +PASS U+5C04 射 %1B%24%42%3C%4D +PASS U+5C05 尅 %1B%24%42%55%71 +PASS U+5C06 将 %1B%24%42%3E%2D +PASS U+5C07 將 %1B%24%42%55%72 +PASS U+5C08 專 %1B%24%42%55%73 +PASS U+5C09 尉 %1B%24%42%30%53 +PASS U+5C0A 尊 %1B%24%42%42%3A +PASS U+5C0B 尋 %1B%24%42%3F%52 +PASS U+5C0D 對 %1B%24%42%55%74 +PASS U+5C0E 導 %1B%24%42%46%33 +PASS U+5C0F 小 %1B%24%42%3E%2E +PASS U+5C11 少 %1B%24%42%3E%2F +PASS U+5C13 尓 %1B%24%42%55%75 +PASS U+5C16 尖 %1B%24%42%40%6D +PASS U+5C1A 尚 %1B%24%42%3E%30 +FAIL U+5C1E 尞 %1B%24%42%79%6F assert_equals: expected "%1B%24%42%79%6F" but got "%26%23%32%33%35%38%32%3B" +PASS U+5C20 尠 %1B%24%42%55%76 +PASS U+5C22 尢 %1B%24%42%55%77 +PASS U+5C24 尤 %1B%24%42%4C%60 +PASS U+5C28 尨 %1B%24%42%55%78 +PASS U+5C2D 尭 %1B%24%42%36%46 +PASS U+5C31 就 %1B%24%42%3D%22 +PASS U+5C38 尸 %1B%24%42%55%79 +PASS U+5C39 尹 %1B%24%42%55%7A +PASS U+5C3A 尺 %1B%24%42%3C%5C +PASS U+5C3B 尻 %1B%24%42%3F%2C +PASS U+5C3C 尼 %1B%24%42%46%74 +PASS U+5C3D 尽 %1B%24%42%3F%54 +PASS U+5C3E 尾 %1B%24%42%48%78 +PASS U+5C3F 尿 %1B%24%42%47%22 +PASS U+5C40 局 %1B%24%42%36%49 +PASS U+5C41 屁 %1B%24%42%55%7B +PASS U+5C45 居 %1B%24%42%35%6F +PASS U+5C46 屆 %1B%24%42%55%7C +PASS U+5C48 屈 %1B%24%42%36%7E +PASS U+5C4A 届 %1B%24%42%46%4F +PASS U+5C4B 屋 %1B%24%42%32%30 +PASS U+5C4D 屍 %1B%24%42%3B%53 +PASS U+5C4E 屎 %1B%24%42%55%7D +PASS U+5C4F 屏 %1B%24%42%56%22 +PASS U+5C50 屐 %1B%24%42%56%21 +PASS U+5C51 屑 %1B%24%42%36%7D +PASS U+5C53 屓 %1B%24%42%55%7E +PASS U+5C55 展 %1B%24%42%45%38 +PASS U+5C5E 属 %1B%24%42%42%30 +PASS U+5C60 屠 %1B%24%42%45%4B +PASS U+5C61 屡 %1B%24%42%3C%48 +PASS U+5C64 層 %1B%24%42%41%58 +PASS U+5C65 履 %1B%24%42%4D%7A +PASS U+5C6C 屬 %1B%24%42%56%24 +PASS U+5C6E 屮 %1B%24%42%56%25 +PASS U+5C6F 屯 %1B%24%42%46%56 +PASS U+5C71 山 %1B%24%42%3B%33 +PASS U+5C76 屶 %1B%24%42%56%27 +PASS U+5C79 屹 %1B%24%42%56%28 +PASS U+5C8C 岌 %1B%24%42%56%29 +PASS U+5C90 岐 %1B%24%42%34%74 +PASS U+5C91 岑 %1B%24%42%56%2A +PASS U+5C94 岔 %1B%24%42%56%2B +PASS U+5CA1 岡 %1B%24%42%32%2C +FAIL U+5CA6 岦 %1B%24%42%79%70 assert_equals: expected "%1B%24%42%79%70" but got "%26%23%32%33%37%31%38%3B" +PASS U+5CA8 岨 %1B%24%42%41%3B +PASS U+5CA9 岩 %1B%24%42%34%64 +PASS U+5CAB 岫 %1B%24%42%56%2D +PASS U+5CAC 岬 %1B%24%42%4C%28 +PASS U+5CB1 岱 %1B%24%42%42%52 +PASS U+5CB3 岳 %1B%24%42%33%59 +PASS U+5CB6 岶 %1B%24%42%56%2F +PASS U+5CB7 岷 %1B%24%42%56%31 +PASS U+5CB8 岸 %1B%24%42%34%5F +FAIL U+5CBA 岺 %1B%24%42%79%71 assert_equals: expected "%1B%24%42%79%71" but got "%26%23%32%33%37%33%38%3B" +PASS U+5CBB 岻 %1B%24%42%56%2E +PASS U+5CBC 岼 %1B%24%42%56%30 +PASS U+5CBE 岾 %1B%24%42%56%33 +PASS U+5CC5 峅 %1B%24%42%56%32 +PASS U+5CC7 峇 %1B%24%42%56%34 +PASS U+5CD9 峙 %1B%24%42%56%35 +PASS U+5CE0 峠 %1B%24%42%46%3D +PASS U+5CE1 峡 %1B%24%42%36%2E +PASS U+5CE8 峨 %1B%24%42%32%65 +PASS U+5CE9 峩 %1B%24%42%56%36 +PASS U+5CEA 峪 %1B%24%42%56%3B +PASS U+5CED 峭 %1B%24%42%56%39 +PASS U+5CEF 峯 %1B%24%42%4A%77 +PASS U+5CF0 峰 %1B%24%42%4A%76 +FAIL U+5CF5 峵 %1B%24%42%79%72 assert_equals: expected "%1B%24%42%79%72" but got "%26%23%32%33%37%39%37%3B" +PASS U+5CF6 島 %1B%24%42%45%67 +PASS U+5CFA 峺 %1B%24%42%56%38 +PASS U+5CFB 峻 %1B%24%42%3D%54 +PASS U+5CFD 峽 %1B%24%42%56%37 +PASS U+5D07 崇 %1B%24%42%3F%72 +PASS U+5D0B 崋 %1B%24%42%56%3C +PASS U+5D0E 崎 %1B%24%42%3A%6A +PASS U+5D11 崑 %1B%24%42%56%42 +PASS U+5D14 崔 %1B%24%42%56%43 +PASS U+5D15 崕 %1B%24%42%56%3D +PASS U+5D16 崖 %1B%24%42%33%33 +PASS U+5D17 崗 %1B%24%42%56%3E +PASS U+5D18 崘 %1B%24%42%56%47 +PASS U+5D19 崙 %1B%24%42%56%46 +PASS U+5D1A 崚 %1B%24%42%56%45 +PASS U+5D1B 崛 %1B%24%42%56%41 +PASS U+5D1F 崟 %1B%24%42%56%40 +PASS U+5D22 崢 %1B%24%42%56%44 +FAIL U+5D27 崧 %1B%24%42%79%73 assert_equals: expected "%1B%24%42%79%73" but got "%26%23%32%33%38%34%37%3B" +PASS U+5D29 崩 %1B%24%42%4A%78 +FAIL U+5D42 嵂 %1B%24%42%79%76 assert_equals: expected "%1B%24%42%79%76" but got "%26%23%32%33%38%37%34%3B" +PASS U+5D4B 嵋 %1B%24%42%56%4B +PASS U+5D4C 嵌 %1B%24%42%56%48 +PASS U+5D4E 嵎 %1B%24%42%56%4A +PASS U+5D50 嵐 %1B%24%42%4D%72 +PASS U+5D52 嵒 %1B%24%42%56%49 +FAIL U+5D53 嵓 %1B%24%42%79%74 assert_equals: expected "%1B%24%42%79%74" but got "%26%23%32%33%38%39%31%3B" +PASS U+5D5C 嵜 %1B%24%42%56%3F +PASS U+5D69 嵩 %1B%24%42%3F%73 +PASS U+5D6C 嵬 %1B%24%42%56%4C +FAIL U+5D6D 嵭 %1B%24%42%79%77 assert_equals: expected "%1B%24%42%79%77" but got "%26%23%32%33%39%31%37%3B" +PASS U+5D6F 嵯 %1B%24%42%3A%37 +PASS U+5D73 嵳 %1B%24%42%56%4D +PASS U+5D76 嵶 %1B%24%42%56%4E +PASS U+5D82 嶂 %1B%24%42%56%51 +PASS U+5D84 嶄 %1B%24%42%56%50 +PASS U+5D87 嶇 %1B%24%42%56%4F +PASS U+5D8B 嶋 %1B%24%42%45%68 +PASS U+5D8C 嶌 %1B%24%42%56%3A +PASS U+5D90 嶐 %1B%24%42%56%57 +PASS U+5D9D 嶝 %1B%24%42%56%53 +PASS U+5DA2 嶢 %1B%24%42%56%52 +PASS U+5DAC 嶬 %1B%24%42%56%54 +PASS U+5DAE 嶮 %1B%24%42%56%55 +PASS U+5DB7 嶷 %1B%24%42%56%58 +FAIL U+5DB8 嶸 %1B%24%42%79%78 assert_equals: expected "%1B%24%42%79%78" but got "%26%23%32%33%39%39%32%3B" +FAIL U+5DB9 嶹 %1B%24%42%79%79 assert_equals: expected "%1B%24%42%79%79" but got "%26%23%32%33%39%39%33%3B" +PASS U+5DBA 嶺 %1B%24%42%4E%66 +PASS U+5DBC 嶼 %1B%24%42%56%59 +PASS U+5DBD 嶽 %1B%24%42%56%56 +PASS U+5DC9 巉 %1B%24%42%56%5A +PASS U+5DCC 巌 %1B%24%42%34%60 +PASS U+5DCD 巍 %1B%24%42%56%5B +FAIL U+5DD0 巐 %1B%24%42%79%7A assert_equals: expected "%1B%24%42%79%7A" but got "%26%23%32%34%30%31%36%3B" +PASS U+5DD2 巒 %1B%24%42%56%5D +PASS U+5DD3 巓 %1B%24%42%56%5C +PASS U+5DD6 巖 %1B%24%42%56%5E +PASS U+5DDB 巛 %1B%24%42%56%5F +PASS U+5DDD 川 %1B%24%42%40%6E +PASS U+5DDE 州 %1B%24%42%3D%23 +PASS U+5DE1 巡 %1B%24%42%3D%64 +PASS U+5DE3 巣 %1B%24%42%41%63 +PASS U+5DE5 工 %1B%24%42%39%29 +PASS U+5DE6 左 %1B%24%42%3A%38 +PASS U+5DE7 巧 %1B%24%42%39%2A +PASS U+5DE8 巨 %1B%24%42%35%70 +PASS U+5DEB 巫 %1B%24%42%56%60 +PASS U+5DEE 差 %1B%24%42%3A%39 +PASS U+5DF1 己 %1B%24%42%38%4A +PASS U+5DF2 已 %1B%24%42%56%61 +PASS U+5DF3 巳 %1B%24%42%4C%26 +PASS U+5DF4 巴 %1B%24%42%47%43 +PASS U+5DF5 巵 %1B%24%42%56%62 +PASS U+5DF7 巷 %1B%24%42%39%2B +PASS U+5DFB 巻 %1B%24%42%34%2C +PASS U+5DFD 巽 %1B%24%42%43%27 +PASS U+5DFE 巾 %1B%24%42%36%52 +PASS U+5E02 市 %1B%24%42%3B%54 +PASS U+5E03 布 %1B%24%42%49%5B +PASS U+5E06 帆 %1B%24%42%48%41 +PASS U+5E0B 帋 %1B%24%42%56%63 +PASS U+5E0C 希 %1B%24%42%34%75 +PASS U+5E11 帑 %1B%24%42%56%66 +PASS U+5E16 帖 %1B%24%42%44%21 +PASS U+5E19 帙 %1B%24%42%56%65 +PASS U+5E1A 帚 %1B%24%42%56%64 +PASS U+5E1B 帛 %1B%24%42%56%67 +PASS U+5E1D 帝 %1B%24%42%44%6B +PASS U+5E25 帥 %1B%24%42%3F%63 +PASS U+5E2B 師 %1B%24%42%3B%55 +PASS U+5E2D 席 %1B%24%42%40%4A +PASS U+5E2F 帯 %1B%24%42%42%53 +PASS U+5E30 帰 %1B%24%42%35%22 +PASS U+5E33 帳 %1B%24%42%44%22 +PASS U+5E36 帶 %1B%24%42%56%68 +PASS U+5E37 帷 %1B%24%42%56%69 +PASS U+5E38 常 %1B%24%42%3E%6F +PASS U+5E3D 帽 %1B%24%42%4B%39 +PASS U+5E40 幀 %1B%24%42%56%6C +PASS U+5E43 幃 %1B%24%42%56%6B +PASS U+5E44 幄 %1B%24%42%56%6A +PASS U+5E45 幅 %1B%24%42%49%7D +PASS U+5E47 幇 %1B%24%42%56%73 +PASS U+5E4C 幌 %1B%24%42%4B%5A +PASS U+5E4E 幎 %1B%24%42%56%6D +PASS U+5E54 幔 %1B%24%42%56%6F +PASS U+5E55 幕 %1B%24%42%4B%6B +PASS U+5E57 幗 %1B%24%42%56%6E +PASS U+5E5F 幟 %1B%24%42%56%70 +PASS U+5E61 幡 %1B%24%42%48%28 +PASS U+5E62 幢 %1B%24%42%56%71 +PASS U+5E63 幣 %1B%24%42%4A%3E +PASS U+5E64 幤 %1B%24%42%56%72 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_2001-3000-expected.txt new file mode 100644 index 0000000..9b228ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_2001-3000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 952 PASS, 48 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+5E72 干 %1B%24%42%34%33 +PASS U+5E73 平 %1B%24%42%4A%3F +PASS U+5E74 年 %1B%24%42%47%2F +PASS U+5E75 幵 %1B%24%42%56%74 +PASS U+5E76 并 %1B%24%42%56%75 +PASS U+5E78 幸 %1B%24%42%39%2C +PASS U+5E79 幹 %1B%24%42%34%34 +PASS U+5E7A 幺 %1B%24%42%56%76 +PASS U+5E7B 幻 %1B%24%42%38%38 +PASS U+5E7C 幼 %1B%24%42%4D%44 +PASS U+5E7D 幽 %1B%24%42%4D%29 +PASS U+5E7E 幾 %1B%24%42%34%76 +PASS U+5E7F 广 %1B%24%42%56%78 +PASS U+5E81 庁 %1B%24%42%44%23 +PASS U+5E83 広 %1B%24%42%39%2D +PASS U+5E84 庄 %1B%24%42%3E%31 +PASS U+5E87 庇 %1B%24%42%48%5F +PASS U+5E8A 床 %1B%24%42%3E%32 +PASS U+5E8F 序 %1B%24%42%3D%78 +PASS U+5E95 底 %1B%24%42%44%6C +PASS U+5E96 庖 %1B%24%42%4A%79 +PASS U+5E97 店 %1B%24%42%45%39 +PASS U+5E9A 庚 %1B%24%42%39%2E +PASS U+5E9C 府 %1B%24%42%49%5C +PASS U+5EA0 庠 %1B%24%42%56%79 +PASS U+5EA6 度 %1B%24%42%45%59 +PASS U+5EA7 座 %1B%24%42%3A%42 +PASS U+5EAB 庫 %1B%24%42%38%4B +PASS U+5EAD 庭 %1B%24%42%44%6D +PASS U+5EB5 庵 %1B%24%42%30%43 +PASS U+5EB6 庶 %1B%24%42%3D%6E +PASS U+5EB7 康 %1B%24%42%39%2F +PASS U+5EB8 庸 %1B%24%42%4D%47 +PASS U+5EC1 廁 %1B%24%42%56%7A +PASS U+5EC2 廂 %1B%24%42%56%7B +PASS U+5EC3 廃 %1B%24%42%47%51 +PASS U+5EC8 廈 %1B%24%42%56%7C +PASS U+5EC9 廉 %1B%24%42%4E%77 +PASS U+5ECA 廊 %1B%24%42%4F%2D +PASS U+5ECF 廏 %1B%24%42%56%7E +PASS U+5ED0 廐 %1B%24%42%56%7D +PASS U+5ED3 廓 %1B%24%42%33%47 +PASS U+5ED6 廖 %1B%24%42%57%21 +PASS U+5EDA 廚 %1B%24%42%57%24 +PASS U+5EDB 廛 %1B%24%42%57%25 +PASS U+5EDD 廝 %1B%24%42%57%23 +PASS U+5EDF 廟 %1B%24%42%49%40 +PASS U+5EE0 廠 %1B%24%42%3E%33 +PASS U+5EE1 廡 %1B%24%42%57%27 +PASS U+5EE2 廢 %1B%24%42%57%26 +PASS U+5EE3 廣 %1B%24%42%57%22 +PASS U+5EE8 廨 %1B%24%42%57%28 +PASS U+5EE9 廩 %1B%24%42%57%29 +PASS U+5EEC 廬 %1B%24%42%57%2A +PASS U+5EF0 廰 %1B%24%42%57%2D +PASS U+5EF1 廱 %1B%24%42%57%2B +PASS U+5EF3 廳 %1B%24%42%57%2C +PASS U+5EF4 廴 %1B%24%42%57%2E +PASS U+5EF6 延 %1B%24%42%31%64 +PASS U+5EF7 廷 %1B%24%42%44%6E +PASS U+5EF8 廸 %1B%24%42%57%2F +PASS U+5EFA 建 %1B%24%42%37%7A +PASS U+5EFB 廻 %1B%24%42%32%76 +PASS U+5EFC 廼 %1B%24%42%47%36 +PASS U+5EFE 廾 %1B%24%42%57%30 +PASS U+5EFF 廿 %1B%24%42%46%7B +PASS U+5F01 弁 %1B%24%42%4A%5B +PASS U+5F03 弃 %1B%24%42%57%31 +PASS U+5F04 弄 %1B%24%42%4F%2E +PASS U+5F09 弉 %1B%24%42%57%32 +PASS U+5F0A 弊 %1B%24%42%4A%40 +PASS U+5F0B 弋 %1B%24%42%57%35 +PASS U+5F0C 弌 %1B%24%42%50%21 +PASS U+5F0D 弍 %1B%24%42%50%31 +PASS U+5F0F 式 %1B%24%42%3C%30 +PASS U+5F10 弐 %1B%24%42%46%75 +PASS U+5F11 弑 %1B%24%42%57%36 +PASS U+5F13 弓 %1B%24%42%35%5D +PASS U+5F14 弔 %1B%24%42%44%24 +PASS U+5F15 引 %1B%24%42%30%7A +PASS U+5F16 弖 %1B%24%42%57%37 +PASS U+5F17 弗 %1B%24%42%4A%26 +PASS U+5F18 弘 %1B%24%42%39%30 +PASS U+5F1B 弛 %1B%24%42%43%50 +PASS U+5F1F 弟 %1B%24%42%44%6F +FAIL U+5F21 弡 %1B%24%42%79%7B assert_equals: expected "%1B%24%42%79%7B" but got "%26%23%32%34%33%35%33%3B" +PASS U+5F25 弥 %1B%24%42%4C%6F +PASS U+5F26 弦 %1B%24%42%38%39 +PASS U+5F27 弧 %1B%24%42%38%4C +PASS U+5F29 弩 %1B%24%42%57%38 +PASS U+5F2D 弭 %1B%24%42%57%39 +PASS U+5F2F 弯 %1B%24%42%57%3F +PASS U+5F31 弱 %1B%24%42%3C%65 +FAIL U+5F34 弴 %1B%24%42%79%7C assert_equals: expected "%1B%24%42%79%7C" but got "%26%23%32%34%33%37%32%3B" +PASS U+5F35 張 %1B%24%42%44%25 +PASS U+5F37 強 %1B%24%42%36%2F +PASS U+5F38 弸 %1B%24%42%57%3A +PASS U+5F3C 弼 %1B%24%42%49%2B +PASS U+5F3E 弾 %1B%24%42%43%46 +PASS U+5F41 彁 %1B%24%42%57%3B +FAIL U+5F45 彅 %1B%24%42%79%2C assert_equals: expected "%1B%24%42%79%2C" but got "%26%23%32%34%33%38%39%3B" +PASS U+5F48 彈 %1B%24%42%57%3C +PASS U+5F4A 彊 %1B%24%42%36%30 +PASS U+5F4C 彌 %1B%24%42%57%3D +PASS U+5F4E 彎 %1B%24%42%57%3E +PASS U+5F51 彑 %1B%24%42%57%40 +PASS U+5F53 当 %1B%24%42%45%76 +PASS U+5F56 彖 %1B%24%42%57%41 +PASS U+5F57 彗 %1B%24%42%57%42 +PASS U+5F59 彙 %1B%24%42%57%43 +PASS U+5F5C 彜 %1B%24%42%57%34 +PASS U+5F5D 彝 %1B%24%42%57%33 +PASS U+5F61 彡 %1B%24%42%57%44 +PASS U+5F62 形 %1B%24%42%37%41 +PASS U+5F66 彦 %1B%24%42%49%27 +FAIL U+5F67 彧 %1B%24%42%79%7D assert_equals: expected "%1B%24%42%79%7D" but got "%26%23%32%34%34%32%33%3B" +PASS U+5F69 彩 %1B%24%42%3A%4C +PASS U+5F6A 彪 %1B%24%42%49%37 +PASS U+5F6B 彫 %1B%24%42%44%26 +PASS U+5F6C 彬 %1B%24%42%49%4B +PASS U+5F6D 彭 %1B%24%42%57%45 +PASS U+5F70 彰 %1B%24%42%3E%34 +PASS U+5F71 影 %1B%24%42%31%46 +PASS U+5F73 彳 %1B%24%42%57%46 +PASS U+5F77 彷 %1B%24%42%57%47 +PASS U+5F79 役 %1B%24%42%4C%72 +PASS U+5F7C 彼 %1B%24%42%48%60 +PASS U+5F7F 彿 %1B%24%42%57%4A +PASS U+5F80 往 %1B%24%42%31%7D +PASS U+5F81 征 %1B%24%42%40%2C +PASS U+5F82 徂 %1B%24%42%57%49 +PASS U+5F83 徃 %1B%24%42%57%48 +PASS U+5F84 径 %1B%24%42%37%42 +PASS U+5F85 待 %1B%24%42%42%54 +PASS U+5F87 徇 %1B%24%42%57%4E +PASS U+5F88 很 %1B%24%42%57%4C +PASS U+5F8A 徊 %1B%24%42%57%4B +PASS U+5F8B 律 %1B%24%42%4E%27 +PASS U+5F8C 後 %1B%24%42%38%65 +PASS U+5F90 徐 %1B%24%42%3D%79 +PASS U+5F91 徑 %1B%24%42%57%4D +PASS U+5F92 徒 %1B%24%42%45%4C +PASS U+5F93 従 %1B%24%42%3D%3E +PASS U+5F97 得 %1B%24%42%46%40 +PASS U+5F98 徘 %1B%24%42%57%51 +PASS U+5F99 徙 %1B%24%42%57%50 +PASS U+5F9E 從 %1B%24%42%57%4F +PASS U+5FA0 徠 %1B%24%42%57%52 +PASS U+5FA1 御 %1B%24%42%38%66 +PASS U+5FA8 徨 %1B%24%42%57%53 +PASS U+5FA9 復 %1B%24%42%49%7C +PASS U+5FAA 循 %1B%24%42%3D%5B +PASS U+5FAD 徭 %1B%24%42%57%54 +PASS U+5FAE 微 %1B%24%42%48%79 +PASS U+5FB3 徳 %1B%24%42%46%41 +PASS U+5FB4 徴 %1B%24%42%44%27 +FAIL U+5FB7 德 %1B%24%42%79%7E assert_equals: expected "%1B%24%42%79%7E" but got "%26%23%32%34%35%30%33%3B" +PASS U+5FB9 徹 %1B%24%42%45%30 +PASS U+5FBC 徼 %1B%24%42%57%55 +PASS U+5FBD 徽 %1B%24%42%35%2B +PASS U+5FC3 心 %1B%24%42%3F%34 +PASS U+5FC5 必 %1B%24%42%49%2C +PASS U+5FCC 忌 %1B%24%42%34%77 +PASS U+5FCD 忍 %1B%24%42%47%26 +PASS U+5FD6 忖 %1B%24%42%57%56 +PASS U+5FD7 志 %1B%24%42%3B%56 +PASS U+5FD8 忘 %1B%24%42%4B%3A +PASS U+5FD9 忙 %1B%24%42%4B%3B +PASS U+5FDC 応 %1B%24%42%31%7E +PASS U+5FDD 忝 %1B%24%42%57%5B +FAIL U+5FDE 忞 %1B%24%42%7A%21 assert_equals: expected "%1B%24%42%7A%21" but got "%26%23%32%34%35%34%32%3B" +PASS U+5FE0 忠 %1B%24%42%43%69 +PASS U+5FE4 忤 %1B%24%42%57%58 +PASS U+5FEB 快 %1B%24%42%32%77 +PASS U+5FF0 忰 %1B%24%42%58%2D +PASS U+5FF1 忱 %1B%24%42%57%5A +PASS U+5FF5 念 %1B%24%42%47%30 +PASS U+5FF8 忸 %1B%24%42%57%59 +PASS U+5FFB 忻 %1B%24%42%57%57 +PASS U+5FFD 忽 %1B%24%42%39%7A +PASS U+5FFF 忿 %1B%24%42%57%5D +PASS U+600E 怎 %1B%24%42%57%63 +PASS U+600F 怏 %1B%24%42%57%69 +PASS U+6010 怐 %1B%24%42%57%61 +PASS U+6012 怒 %1B%24%42%45%5C +PASS U+6015 怕 %1B%24%42%57%66 +PASS U+6016 怖 %1B%24%42%49%5D +PASS U+6019 怙 %1B%24%42%57%60 +PASS U+601B 怛 %1B%24%42%57%65 +PASS U+601C 怜 %1B%24%42%4E%67 +PASS U+601D 思 %1B%24%42%3B%57 +PASS U+6020 怠 %1B%24%42%42%55 +PASS U+6021 怡 %1B%24%42%57%5E +PASS U+6025 急 %1B%24%42%35%5E +PASS U+6026 怦 %1B%24%42%57%68 +PASS U+6027 性 %1B%24%42%40%2D +PASS U+6028 怨 %1B%24%42%31%65 +PASS U+6029 怩 %1B%24%42%57%62 +PASS U+602A 怪 %1B%24%42%32%78 +PASS U+602B 怫 %1B%24%42%57%67 +PASS U+602F 怯 %1B%24%42%36%31 +PASS U+6031 怱 %1B%24%42%57%64 +PASS U+603A 怺 %1B%24%42%57%6A +PASS U+6041 恁 %1B%24%42%57%6C +PASS U+6042 恂 %1B%24%42%57%76 +PASS U+6043 恃 %1B%24%42%57%74 +PASS U+6046 恆 %1B%24%42%57%71 +PASS U+604A 恊 %1B%24%42%57%70 +PASS U+604B 恋 %1B%24%42%4E%78 +PASS U+604D 恍 %1B%24%42%57%72 +PASS U+6050 恐 %1B%24%42%36%32 +PASS U+6052 恒 %1B%24%42%39%31 +PASS U+6055 恕 %1B%24%42%3D%7A +PASS U+6059 恙 %1B%24%42%57%79 +PASS U+605A 恚 %1B%24%42%57%6B +FAIL U+605D 恝 %1B%24%42%7A%22 assert_equals: expected "%1B%24%42%7A%22" but got "%26%23%32%34%36%36%39%3B" +PASS U+605F 恟 %1B%24%42%57%6F +PASS U+6060 恠 %1B%24%42%57%5F +PASS U+6062 恢 %1B%24%42%32%7A +PASS U+6063 恣 %1B%24%42%57%73 +PASS U+6064 恤 %1B%24%42%57%75 +PASS U+6065 恥 %1B%24%42%43%51 +PASS U+6068 恨 %1B%24%42%3A%28 +PASS U+6069 恩 %1B%24%42%32%38 +PASS U+606A 恪 %1B%24%42%57%6D +PASS U+606B 恫 %1B%24%42%57%78 +PASS U+606C 恬 %1B%24%42%57%77 +PASS U+606D 恭 %1B%24%42%36%33 +PASS U+606F 息 %1B%24%42%42%29 +PASS U+6070 恰 %1B%24%42%33%66 +PASS U+6075 恵 %1B%24%42%37%43 +PASS U+6077 恷 %1B%24%42%57%6E +PASS U+6081 悁 %1B%24%42%57%7A +PASS U+6083 悃 %1B%24%42%57%7D +PASS U+6084 悄 %1B%24%42%58%21 +FAIL U+6085 悅 %1B%24%42%7A%23 assert_equals: expected "%1B%24%42%7A%23" but got "%26%23%32%34%37%30%39%3B" +PASS U+6089 悉 %1B%24%42%3C%3D +FAIL U+608A 悊 %1B%24%42%7A%24 assert_equals: expected "%1B%24%42%7A%24" but got "%26%23%32%34%37%31%34%3B" +PASS U+608B 悋 %1B%24%42%58%27 +PASS U+608C 悌 %1B%24%42%44%70 +PASS U+608D 悍 %1B%24%42%57%7B +PASS U+6092 悒 %1B%24%42%58%25 +PASS U+6094 悔 %1B%24%42%32%79 +PASS U+6096 悖 %1B%24%42%58%23 +PASS U+6097 悗 %1B%24%42%58%24 +PASS U+609A 悚 %1B%24%42%57%7E +PASS U+609B 悛 %1B%24%42%58%22 +PASS U+609F 悟 %1B%24%42%38%67 +PASS U+60A0 悠 %1B%24%42%4D%2A +PASS U+60A3 患 %1B%24%42%34%35 +PASS U+60A6 悦 %1B%24%42%31%59 +PASS U+60A7 悧 %1B%24%42%58%26 +PASS U+60A9 悩 %1B%24%42%47%3A +PASS U+60AA 悪 %1B%24%42%30%2D +PASS U+60B2 悲 %1B%24%42%48%61 +PASS U+60B3 悳 %1B%24%42%57%5C +PASS U+60B4 悴 %1B%24%42%58%2C +PASS U+60B5 悵 %1B%24%42%58%30 +PASS U+60B6 悶 %1B%24%42%4C%65 +PASS U+60B8 悸 %1B%24%42%58%29 +PASS U+60BC 悼 %1B%24%42%45%69 +PASS U+60BD 悽 %1B%24%42%58%2E +PASS U+60C5 情 %1B%24%42%3E%70 +PASS U+60C6 惆 %1B%24%42%58%2F +PASS U+60C7 惇 %1B%24%42%46%57 +PASS U+60D1 惑 %1B%24%42%4F%47 +PASS U+60D3 惓 %1B%24%42%58%2B +FAIL U+60D5 惕 %1B%24%42%7A%26 assert_equals: expected "%1B%24%42%7A%26" but got "%26%23%32%34%37%38%39%3B" +PASS U+60D8 惘 %1B%24%42%58%31 +PASS U+60DA 惚 %1B%24%42%39%7B +PASS U+60DC 惜 %1B%24%42%40%4B +FAIL U+60DE 惞 %1B%24%42%7A%25 assert_equals: expected "%1B%24%42%7A%25" but got "%26%23%32%34%37%39%38%3B" +PASS U+60DF 惟 %1B%24%42%30%54 +PASS U+60E0 惠 %1B%24%42%58%2A +PASS U+60E1 惡 %1B%24%42%58%28 +PASS U+60E3 惣 %1B%24%42%41%5A +PASS U+60E7 惧 %1B%24%42%57%7C +PASS U+60E8 惨 %1B%24%42%3B%34 +PASS U+60F0 惰 %1B%24%42%42%46 +PASS U+60F1 惱 %1B%24%42%58%3D +FAIL U+60F2 惲 %1B%24%42%7A%28 assert_equals: expected "%1B%24%42%7A%28" but got "%26%23%32%34%38%31%38%3B" +PASS U+60F3 想 %1B%24%42%41%5B +PASS U+60F4 惴 %1B%24%42%58%38 +PASS U+60F6 惶 %1B%24%42%58%35 +PASS U+60F7 惷 %1B%24%42%58%36 +PASS U+60F9 惹 %1B%24%42%3C%66 +PASS U+60FA 惺 %1B%24%42%58%39 +PASS U+60FB 惻 %1B%24%42%58%3C +PASS U+6100 愀 %1B%24%42%58%37 +PASS U+6101 愁 %1B%24%42%3D%25 +PASS U+6103 愃 %1B%24%42%58%3A +PASS U+6106 愆 %1B%24%42%58%34 +PASS U+6108 愈 %1B%24%42%4C%7C +PASS U+6109 愉 %1B%24%42%4C%7B +PASS U+610D 愍 %1B%24%42%58%3E +PASS U+610E 愎 %1B%24%42%58%3F +PASS U+610F 意 %1B%24%42%30%55 +FAIL U+6111 愑 %1B%24%42%7A%29 assert_equals: expected "%1B%24%42%7A%29" but got "%26%23%32%34%38%34%39%3B" +PASS U+6115 愕 %1B%24%42%58%33 +PASS U+611A 愚 %1B%24%42%36%72 +PASS U+611B 愛 %1B%24%42%30%26 +PASS U+611F 感 %1B%24%42%34%36 +FAIL U+6120 愠 %1B%24%42%7A%27 assert_equals: expected "%1B%24%42%7A%27" but got "%26%23%32%34%38%36%34%3B" +PASS U+6121 愡 %1B%24%42%58%3B +PASS U+6127 愧 %1B%24%42%58%43 +PASS U+6128 愨 %1B%24%42%58%42 +PASS U+612C 愬 %1B%24%42%58%47 +FAIL U+6130 愰 %1B%24%42%7A%2B assert_equals: expected "%1B%24%42%7A%2B" but got "%26%23%32%34%38%38%30%3B" +PASS U+6134 愴 %1B%24%42%58%48 +FAIL U+6137 愷 %1B%24%42%7A%2A assert_equals: expected "%1B%24%42%7A%2A" but got "%26%23%32%34%38%38%37%3B" +PASS U+613C 愼 %1B%24%42%58%46 +PASS U+613D 愽 %1B%24%42%58%49 +PASS U+613E 愾 %1B%24%42%58%41 +PASS U+613F 愿 %1B%24%42%58%45 +PASS U+6142 慂 %1B%24%42%58%4A +PASS U+6144 慄 %1B%24%42%58%4B +PASS U+6147 慇 %1B%24%42%58%40 +PASS U+6148 慈 %1B%24%42%3B%7C +PASS U+614A 慊 %1B%24%42%58%44 +PASS U+614B 態 %1B%24%42%42%56 +PASS U+614C 慌 %1B%24%42%39%32 +PASS U+614D 慍 %1B%24%42%58%32 +PASS U+614E 慎 %1B%24%42%3F%35 +PASS U+6153 慓 %1B%24%42%58%58 +PASS U+6155 慕 %1B%24%42%4A%69 +PASS U+6158 慘 %1B%24%42%58%4E +PASS U+6159 慙 %1B%24%42%58%4F +PASS U+615A 慚 %1B%24%42%58%50 +PASS U+615D 慝 %1B%24%42%58%57 +PASS U+615F 慟 %1B%24%42%58%56 +PASS U+6162 慢 %1B%24%42%4B%7D +PASS U+6163 慣 %1B%24%42%34%37 +PASS U+6165 慥 %1B%24%42%58%54 +PASS U+6167 慧 %1B%24%42%37%45 +PASS U+6168 慨 %1B%24%42%33%34 +PASS U+616B 慫 %1B%24%42%58%51 +PASS U+616E 慮 %1B%24%42%4E%38 +PASS U+616F 慯 %1B%24%42%58%53 +PASS U+6170 慰 %1B%24%42%30%56 +PASS U+6171 慱 %1B%24%42%58%55 +PASS U+6173 慳 %1B%24%42%58%4C +PASS U+6174 慴 %1B%24%42%58%52 +PASS U+6175 慵 %1B%24%42%58%59 +PASS U+6176 慶 %1B%24%42%37%44 +PASS U+6177 慷 %1B%24%42%58%4D +PASS U+617E 慾 %1B%24%42%4D%5D +PASS U+6182 憂 %1B%24%42%4D%2B +PASS U+6187 憇 %1B%24%42%58%5C +PASS U+618A 憊 %1B%24%42%58%60 +PASS U+618E 憎 %1B%24%42%41%7E +PASS U+6190 憐 %1B%24%42%4E%79 +PASS U+6191 憑 %1B%24%42%58%61 +PASS U+6194 憔 %1B%24%42%58%5E +PASS U+6196 憖 %1B%24%42%58%5B +FAIL U+6198 憘 %1B%24%42%7A%2C assert_equals: expected "%1B%24%42%7A%2C" but got "%26%23%32%34%39%38%34%3B" +PASS U+6199 憙 %1B%24%42%58%5A +PASS U+619A 憚 %1B%24%42%58%5F +PASS U+61A4 憤 %1B%24%42%4A%30 +PASS U+61A7 憧 %1B%24%42%46%34 +PASS U+61A9 憩 %1B%24%42%37%46 +PASS U+61AB 憫 %1B%24%42%58%62 +PASS U+61AC 憬 %1B%24%42%58%5D +PASS U+61AE 憮 %1B%24%42%58%63 +PASS U+61B2 憲 %1B%24%42%37%7B +PASS U+61B6 憶 %1B%24%42%32%31 +PASS U+61BA 憺 %1B%24%42%58%6B +PASS U+61BE 憾 %1B%24%42%34%38 +PASS U+61C3 懃 %1B%24%42%58%69 +PASS U+61C6 懆 %1B%24%42%58%6A +PASS U+61C7 懇 %1B%24%42%3A%29 +PASS U+61C8 懈 %1B%24%42%58%68 +PASS U+61C9 應 %1B%24%42%58%66 +PASS U+61CA 懊 %1B%24%42%58%65 +PASS U+61CB 懋 %1B%24%42%58%6C +PASS U+61CC 懌 %1B%24%42%58%64 +PASS U+61CD 懍 %1B%24%42%58%6E +PASS U+61D0 懐 %1B%24%42%32%7B +PASS U+61E3 懣 %1B%24%42%58%70 +PASS U+61E6 懦 %1B%24%42%58%6F +PASS U+61F2 懲 %1B%24%42%44%28 +PASS U+61F4 懴 %1B%24%42%58%73 +PASS U+61F6 懶 %1B%24%42%58%71 +PASS U+61F7 懷 %1B%24%42%58%67 +PASS U+61F8 懸 %1B%24%42%37%7C +PASS U+61FA 懺 %1B%24%42%58%72 +PASS U+61FC 懼 %1B%24%42%58%76 +PASS U+61FD 懽 %1B%24%42%58%75 +PASS U+61FE 懾 %1B%24%42%58%77 +PASS U+61FF 懿 %1B%24%42%58%74 +PASS U+6200 戀 %1B%24%42%58%78 +PASS U+6208 戈 %1B%24%42%58%79 +PASS U+6209 戉 %1B%24%42%58%7A +PASS U+620A 戊 %1B%24%42%4A%6A +PASS U+620C 戌 %1B%24%42%58%7C +PASS U+620D 戍 %1B%24%42%58%7B +PASS U+620E 戎 %1B%24%42%3D%3F +PASS U+6210 成 %1B%24%42%40%2E +PASS U+6211 我 %1B%24%42%32%66 +PASS U+6212 戒 %1B%24%42%32%7C +FAIL U+6213 戓 %1B%24%42%7A%2D assert_equals: expected "%1B%24%42%7A%2D" but got "%26%23%32%35%31%30%37%3B" +PASS U+6214 戔 %1B%24%42%58%7D +PASS U+6216 或 %1B%24%42%30%3F +PASS U+621A 戚 %1B%24%42%40%4C +PASS U+621B 戛 %1B%24%42%58%7E +PASS U+621D 戝 %1B%24%42%6C%43 +PASS U+621E 戞 %1B%24%42%59%21 +PASS U+621F 戟 %1B%24%42%37%61 +PASS U+6221 戡 %1B%24%42%59%22 +PASS U+6226 戦 %1B%24%42%40%6F +PASS U+622A 截 %1B%24%42%59%23 +PASS U+622E 戮 %1B%24%42%59%24 +PASS U+622F 戯 %1B%24%42%35%3A +PASS U+6230 戰 %1B%24%42%59%25 +PASS U+6232 戲 %1B%24%42%59%26 +PASS U+6233 戳 %1B%24%42%59%27 +PASS U+6234 戴 %1B%24%42%42%57 +PASS U+6238 戸 %1B%24%42%38%4D +PASS U+623B 戻 %1B%24%42%4C%61 +PASS U+623F 房 %1B%24%42%4B%3C +PASS U+6240 所 %1B%24%42%3D%6A +PASS U+6241 扁 %1B%24%42%59%28 +PASS U+6247 扇 %1B%24%42%40%70 +PASS U+6248 扈 %1B%24%42%6E%3D +PASS U+6249 扉 %1B%24%42%48%62 +PASS U+624B 手 %1B%24%42%3C%6A +PASS U+624D 才 %1B%24%42%3A%4D +PASS U+624E 扎 %1B%24%42%59%29 +PASS U+6253 打 %1B%24%42%42%47 +PASS U+6255 払 %1B%24%42%4A%27 +PASS U+6258 托 %1B%24%42%42%71 +PASS U+625B 扛 %1B%24%42%59%2C +PASS U+625E 扞 %1B%24%42%59%2A +PASS U+6260 扠 %1B%24%42%59%2D +PASS U+6263 扣 %1B%24%42%59%2B +PASS U+6268 扨 %1B%24%42%59%2E +PASS U+626E 扮 %1B%24%42%4A%31 +PASS U+6271 扱 %1B%24%42%30%37 +PASS U+6276 扶 %1B%24%42%49%5E +PASS U+6279 批 %1B%24%42%48%63 +PASS U+627C 扼 %1B%24%42%59%2F +PASS U+627E 找 %1B%24%42%59%32 +PASS U+627F 承 %1B%24%42%3E%35 +PASS U+6280 技 %1B%24%42%35%3B +PASS U+6282 抂 %1B%24%42%59%30 +PASS U+6283 抃 %1B%24%42%59%37 +PASS U+6284 抄 %1B%24%42%3E%36 +PASS U+6289 抉 %1B%24%42%59%31 +PASS U+628A 把 %1B%24%42%47%44 +PASS U+6291 抑 %1B%24%42%4D%5E +PASS U+6292 抒 %1B%24%42%59%33 +PASS U+6293 抓 %1B%24%42%59%34 +PASS U+6294 抔 %1B%24%42%59%38 +PASS U+6295 投 %1B%24%42%45%6A +PASS U+6296 抖 %1B%24%42%59%35 +PASS U+6297 抗 %1B%24%42%39%33 +PASS U+6298 折 %1B%24%42%40%5E +PASS U+629B 抛 %1B%24%42%59%46 +PASS U+629C 抜 %1B%24%42%48%34 +PASS U+629E 択 %1B%24%42%42%72 +FAIL U+62A6 抦 %1B%24%42%7A%2E assert_equals: expected "%1B%24%42%7A%2E" but got "%26%23%32%35%32%35%34%3B" +PASS U+62AB 披 %1B%24%42%48%64 +PASS U+62AC 抬 %1B%24%42%5A%2D +PASS U+62B1 抱 %1B%24%42%4A%7A +PASS U+62B5 抵 %1B%24%42%44%71 +PASS U+62B9 抹 %1B%24%42%4B%75 +PASS U+62BB 抻 %1B%24%42%59%3B +PASS U+62BC 押 %1B%24%42%32%21 +PASS U+62BD 抽 %1B%24%42%43%6A +PASS U+62C2 拂 %1B%24%42%59%44 +PASS U+62C5 担 %1B%24%42%43%34 +PASS U+62C6 拆 %1B%24%42%59%3E +PASS U+62C7 拇 %1B%24%42%59%45 +PASS U+62C8 拈 %1B%24%42%59%40 +PASS U+62C9 拉 %1B%24%42%59%47 +PASS U+62CA 拊 %1B%24%42%59%43 +PASS U+62CC 拌 %1B%24%42%59%42 +PASS U+62CD 拍 %1B%24%42%47%6F +PASS U+62CF 拏 %1B%24%42%59%3C +PASS U+62D0 拐 %1B%24%42%32%7D +PASS U+62D1 拑 %1B%24%42%59%3A +PASS U+62D2 拒 %1B%24%42%35%71 +PASS U+62D3 拓 %1B%24%42%42%73 +PASS U+62D4 拔 %1B%24%42%59%36 +PASS U+62D7 拗 %1B%24%42%59%39 +PASS U+62D8 拘 %1B%24%42%39%34 +PASS U+62D9 拙 %1B%24%42%40%5B +PASS U+62DB 招 %1B%24%42%3E%37 +PASS U+62DC 拜 %1B%24%42%59%41 +PASS U+62DD 拝 %1B%24%42%47%52 +PASS U+62E0 拠 %1B%24%42%35%72 +PASS U+62E1 拡 %1B%24%42%33%48 +PASS U+62EC 括 %1B%24%42%33%67 +PASS U+62ED 拭 %1B%24%42%3F%21 +PASS U+62EE 拮 %1B%24%42%59%49 +PASS U+62EF 拯 %1B%24%42%59%4E +PASS U+62F1 拱 %1B%24%42%59%4A +PASS U+62F3 拳 %1B%24%42%37%7D +PASS U+62F5 拵 %1B%24%42%59%4F +PASS U+62F6 拶 %1B%24%42%3B%22 +PASS U+62F7 拷 %1B%24%42%39%69 +PASS U+62FE 拾 %1B%24%42%3D%26 +PASS U+62FF 拿 %1B%24%42%59%3D +PASS U+6301 持 %1B%24%42%3B%7D +PASS U+6302 挂 %1B%24%42%59%4C +PASS U+6307 指 %1B%24%42%3B%58 +PASS U+6308 挈 %1B%24%42%59%4D +PASS U+6309 按 %1B%24%42%30%44 +PASS U+630C 挌 %1B%24%42%59%48 +PASS U+6311 挑 %1B%24%42%44%29 +PASS U+6319 挙 %1B%24%42%35%73 +PASS U+631F 挟 %1B%24%42%36%34 +PASS U+6327 挧 %1B%24%42%59%4B +PASS U+6328 挨 %1B%24%42%30%27 +PASS U+632B 挫 %1B%24%42%3A%43 +PASS U+632F 振 %1B%24%42%3F%36 +PASS U+633A 挺 %1B%24%42%44%72 +PASS U+633D 挽 %1B%24%42%48%54 +PASS U+633E 挾 %1B%24%42%59%51 +PASS U+633F 挿 %1B%24%42%41%5E +PASS U+6349 捉 %1B%24%42%42%2A +PASS U+634C 捌 %1B%24%42%3B%2B +PASS U+634D 捍 %1B%24%42%59%52 +PASS U+634F 捏 %1B%24%42%59%54 +PASS U+6350 捐 %1B%24%42%59%50 +PASS U+6355 捕 %1B%24%42%4A%61 +PASS U+6357 捗 %1B%24%42%44%3D +PASS U+635C 捜 %1B%24%42%41%5C +PASS U+6367 捧 %1B%24%42%4A%7B +PASS U+6368 捨 %1B%24%42%3C%4E +PASS U+6369 捩 %1B%24%42%59%60 +PASS U+636B 捫 %1B%24%42%59%5F +PASS U+636E 据 %1B%24%42%3F%78 +PASS U+6372 捲 %1B%24%42%37%7E +PASS U+6376 捶 %1B%24%42%59%59 +PASS U+6377 捷 %1B%24%42%3E%39 +PASS U+637A 捺 %1B%24%42%46%68 +PASS U+637B 捻 %1B%24%42%47%31 +PASS U+6380 掀 %1B%24%42%59%57 +PASS U+6383 掃 %1B%24%42%41%5D +PASS U+6388 授 %1B%24%42%3C%78 +PASS U+6389 掉 %1B%24%42%59%5C +PASS U+638C 掌 %1B%24%42%3E%38 +PASS U+638E 掎 %1B%24%42%59%56 +PASS U+638F 掏 %1B%24%42%59%5B +PASS U+6392 排 %1B%24%42%47%53 +PASS U+6396 掖 %1B%24%42%59%55 +PASS U+6398 掘 %1B%24%42%37%21 +PASS U+639B 掛 %1B%24%42%33%5D +PASS U+639F 掟 %1B%24%42%59%5D +PASS U+63A0 掠 %1B%24%42%4E%2B +PASS U+63A1 採 %1B%24%42%3A%4E +PASS U+63A2 探 %1B%24%42%43%35 +PASS U+63A3 掣 %1B%24%42%59%5A +PASS U+63A5 接 %1B%24%42%40%5C +PASS U+63A7 控 %1B%24%42%39%35 +PASS U+63A8 推 %1B%24%42%3F%64 +PASS U+63A9 掩 %1B%24%42%31%66 +PASS U+63AA 措 %1B%24%42%41%3C +PASS U+63AB 掫 %1B%24%42%59%58 +PASS U+63AC 掬 %1B%24%42%35%45 +PASS U+63B2 掲 %1B%24%42%37%47 +PASS U+63B4 掴 %1B%24%42%44%4F +PASS U+63B5 掵 %1B%24%42%59%5E +PASS U+63BB 掻 %1B%24%42%41%5F +PASS U+63BE 掾 %1B%24%42%59%61 +PASS U+63C0 揀 %1B%24%42%59%63 +PASS U+63C3 揃 %1B%24%42%42%37 +PASS U+63C4 揄 %1B%24%42%59%69 +PASS U+63C6 揆 %1B%24%42%59%64 +PASS U+63C9 揉 %1B%24%42%59%66 +PASS U+63CF 描 %1B%24%42%49%41 +PASS U+63D0 提 %1B%24%42%44%73 +PASS U+63D2 插 %1B%24%42%59%67 +PASS U+63D6 揖 %1B%24%42%4D%2C +PASS U+63DA 揚 %1B%24%42%4D%48 +PASS U+63DB 換 %1B%24%42%34%39 +PASS U+63E1 握 %1B%24%42%30%2E +PASS U+63E3 揣 %1B%24%42%59%65 +PASS U+63E9 揩 %1B%24%42%59%62 +PASS U+63EE 揮 %1B%24%42%34%78 +PASS U+63F4 援 %1B%24%42%31%67 +FAIL U+63F5 揵 %1B%24%42%7A%2F assert_equals: expected "%1B%24%42%7A%2F" but got "%26%23%32%35%35%38%39%3B" +PASS U+63F6 揶 %1B%24%42%59%68 +PASS U+63FA 揺 %1B%24%42%4D%49 +PASS U+6406 搆 %1B%24%42%59%6C +PASS U+640D 損 %1B%24%42%42%3B +PASS U+640F 搏 %1B%24%42%59%73 +PASS U+6413 搓 %1B%24%42%59%6D +PASS U+6416 搖 %1B%24%42%59%6A +PASS U+6417 搗 %1B%24%42%59%71 +PASS U+641C 搜 %1B%24%42%59%53 +PASS U+6426 搦 %1B%24%42%59%6E +PASS U+6428 搨 %1B%24%42%59%72 +PASS U+642C 搬 %1B%24%42%48%42 +PASS U+642D 搭 %1B%24%42%45%6B +PASS U+6434 搴 %1B%24%42%59%6B +PASS U+6436 搶 %1B%24%42%59%6F +PASS U+643A 携 %1B%24%42%37%48 +PASS U+643E 搾 %1B%24%42%3A%71 +PASS U+6442 摂 %1B%24%42%40%5D +PASS U+644E 摎 %1B%24%42%59%77 +PASS U+6458 摘 %1B%24%42%45%26 +FAIL U+6460 摠 %1B%24%42%7A%30 assert_equals: expected "%1B%24%42%7A%30" but got "%26%23%32%35%36%39%36%3B" +PASS U+6467 摧 %1B%24%42%59%74 +PASS U+6469 摩 %1B%24%42%4B%60 +PASS U+646F 摯 %1B%24%42%59%75 +PASS U+6476 摶 %1B%24%42%59%76 +PASS U+6478 摸 %1B%24%42%4C%4E +PASS U+647A 摺 %1B%24%42%40%22 +PASS U+6483 撃 %1B%24%42%37%62 +PASS U+6488 撈 %1B%24%42%59%7D +PASS U+6492 撒 %1B%24%42%3B%35 +PASS U+6493 撓 %1B%24%42%59%7A +PASS U+6495 撕 %1B%24%42%59%79 +PASS U+649A 撚 %1B%24%42%47%32 +FAIL U+649D 撝 %1B%24%42%7A%31 assert_equals: expected "%1B%24%42%7A%31" but got "%26%23%32%35%37%35%37%3B" +PASS U+649E 撞 %1B%24%42%46%35 +PASS U+64A4 撤 %1B%24%42%45%31 +PASS U+64A5 撥 %1B%24%42%59%7B +PASS U+64A9 撩 %1B%24%42%59%7C +PASS U+64AB 撫 %1B%24%42%49%6F +PASS U+64AD 播 %1B%24%42%47%45 +PASS U+64AE 撮 %1B%24%42%3B%23 +PASS U+64B0 撰 %1B%24%42%40%71 +PASS U+64B2 撲 %1B%24%42%4B%50 +PASS U+64B9 撹 %1B%24%42%33%49 +PASS U+64BB 撻 %1B%24%42%5A%25 +PASS U+64BC 撼 %1B%24%42%59%7E +PASS U+64C1 擁 %1B%24%42%4D%4A +PASS U+64C2 擂 %1B%24%42%5A%27 +PASS U+64C5 擅 %1B%24%42%5A%23 +PASS U+64C7 擇 %1B%24%42%5A%24 +PASS U+64CD 操 %1B%24%42%41%60 +FAIL U+64CE 擎 %1B%24%42%7A%32 assert_equals: expected "%1B%24%42%7A%32" but got "%26%23%32%35%38%30%36%3B" +PASS U+64D2 擒 %1B%24%42%5A%22 +PASS U+64D4 擔 %1B%24%42%59%3F +PASS U+64D8 擘 %1B%24%42%5A%26 +PASS U+64DA 據 %1B%24%42%5A%21 +PASS U+64E0 擠 %1B%24%42%5A%2B +PASS U+64E1 擡 %1B%24%42%5A%2C +PASS U+64E2 擢 %1B%24%42%45%27 +PASS U+64E3 擣 %1B%24%42%5A%2E +PASS U+64E6 擦 %1B%24%42%3B%24 +PASS U+64E7 擧 %1B%24%42%5A%29 +PASS U+64EC 擬 %1B%24%42%35%3C +PASS U+64EF 擯 %1B%24%42%5A%2F +PASS U+64F1 擱 %1B%24%42%5A%28 +PASS U+64F2 擲 %1B%24%42%5A%33 +PASS U+64F4 擴 %1B%24%42%5A%32 +PASS U+64F6 擶 %1B%24%42%5A%31 +PASS U+64FA 擺 %1B%24%42%5A%34 +PASS U+64FD 擽 %1B%24%42%5A%36 +PASS U+64FE 擾 %1B%24%42%3E%71 +PASS U+6500 攀 %1B%24%42%5A%35 +PASS U+6505 攅 %1B%24%42%5A%39 +PASS U+6518 攘 %1B%24%42%5A%37 +PASS U+651C 攜 %1B%24%42%5A%38 +PASS U+651D 攝 %1B%24%42%59%70 +PASS U+6523 攣 %1B%24%42%5A%3B +PASS U+6524 攤 %1B%24%42%5A%3A +PASS U+652A 攪 %1B%24%42%59%78 +PASS U+652B 攫 %1B%24%42%5A%3C +PASS U+652C 攬 %1B%24%42%5A%30 +PASS U+652F 支 %1B%24%42%3B%59 +PASS U+6534 攴 %1B%24%42%5A%3D +PASS U+6535 攵 %1B%24%42%5A%3E +PASS U+6536 收 %1B%24%42%5A%40 +PASS U+6537 攷 %1B%24%42%5A%3F +PASS U+6538 攸 %1B%24%42%5A%41 +PASS U+6539 改 %1B%24%42%32%7E +PASS U+653B 攻 %1B%24%42%39%36 +PASS U+653E 放 %1B%24%42%4A%7C +PASS U+653F 政 %1B%24%42%40%2F +PASS U+6545 故 %1B%24%42%38%4E +PASS U+6548 效 %1B%24%42%5A%43 +PASS U+654D 敍 %1B%24%42%5A%46 +FAIL U+654E 敎 %1B%24%42%7A%33 assert_equals: expected "%1B%24%42%7A%33" but got "%26%23%32%35%39%33%34%3B" +PASS U+654F 敏 %1B%24%42%49%52 +PASS U+6551 救 %1B%24%42%35%5F +PASS U+6555 敕 %1B%24%42%5A%45 +PASS U+6556 敖 %1B%24%42%5A%44 +PASS U+6557 敗 %1B%24%42%47%54 +PASS U+6558 敘 %1B%24%42%5A%47 +PASS U+6559 教 %1B%24%42%36%35 +PASS U+655D 敝 %1B%24%42%5A%49 +PASS U+655E 敞 %1B%24%42%5A%48 +PASS U+6562 敢 %1B%24%42%34%3A +PASS U+6563 散 %1B%24%42%3B%36 +PASS U+6566 敦 %1B%24%42%46%58 +PASS U+656C 敬 %1B%24%42%37%49 +PASS U+6570 数 %1B%24%42%3F%74 +PASS U+6572 敲 %1B%24%42%5A%4A +PASS U+6574 整 %1B%24%42%40%30 +PASS U+6575 敵 %1B%24%42%45%28 +PASS U+6577 敷 %1B%24%42%49%5F +PASS U+6578 數 %1B%24%42%5A%4B +PASS U+6582 斂 %1B%24%42%5A%4C +PASS U+6583 斃 %1B%24%42%5A%4D +PASS U+6587 文 %1B%24%42%4A%38 +PASS U+6588 斈 %1B%24%42%55%5D +PASS U+6589 斉 %1B%24%42%40%46 +PASS U+658C 斌 %1B%24%42%49%4C +PASS U+658E 斎 %1B%24%42%3A%58 +PASS U+6590 斐 %1B%24%42%48%65 +PASS U+6591 斑 %1B%24%42%48%43 +PASS U+6597 斗 %1B%24%42%45%4D +PASS U+6599 料 %1B%24%42%4E%41 +PASS U+659B 斛 %1B%24%42%5A%4F +PASS U+659C 斜 %1B%24%42%3C%50 +PASS U+659F 斟 %1B%24%42%5A%50 +PASS U+65A1 斡 %1B%24%42%30%36 +PASS U+65A4 斤 %1B%24%42%36%54 +PASS U+65A5 斥 %1B%24%42%40%4D +PASS U+65A7 斧 %1B%24%42%49%60 +PASS U+65AB 斫 %1B%24%42%5A%51 +PASS U+65AC 斬 %1B%24%42%3B%42 +PASS U+65AD 断 %1B%24%42%43%47 +PASS U+65AF 斯 %1B%24%42%3B%5B +PASS U+65B0 新 %1B%24%42%3F%37 +PASS U+65B7 斷 %1B%24%42%5A%52 +PASS U+65B9 方 %1B%24%42%4A%7D +PASS U+65BC 於 %1B%24%42%31%77 +PASS U+65BD 施 %1B%24%42%3B%5C +PASS U+65C1 旁 %1B%24%42%5A%55 +PASS U+65C3 旃 %1B%24%42%5A%53 +PASS U+65C4 旄 %1B%24%42%5A%56 +PASS U+65C5 旅 %1B%24%42%4E%39 +PASS U+65C6 旆 %1B%24%42%5A%54 +PASS U+65CB 旋 %1B%24%42%40%7B +PASS U+65CC 旌 %1B%24%42%5A%57 +PASS U+65CF 族 %1B%24%42%42%32 +PASS U+65D2 旒 %1B%24%42%5A%58 +PASS U+65D7 旗 %1B%24%42%34%7A +PASS U+65D9 旙 %1B%24%42%5A%5A +PASS U+65DB 旛 %1B%24%42%5A%59 +PASS U+65E0 无 %1B%24%42%5A%5B +PASS U+65E1 旡 %1B%24%42%5A%5C +PASS U+65E2 既 %1B%24%42%34%7B +PASS U+65E5 日 %1B%24%42%46%7C +PASS U+65E6 旦 %1B%24%42%43%36 +PASS U+65E7 旧 %1B%24%42%35%6C +PASS U+65E8 旨 %1B%24%42%3B%5D +PASS U+65E9 早 %1B%24%42%41%61 +PASS U+65EC 旬 %1B%24%42%3D%5C +PASS U+65ED 旭 %1B%24%42%30%30 +PASS U+65F1 旱 %1B%24%42%5A%5D +PASS U+65FA 旺 %1B%24%42%32%22 +PASS U+65FB 旻 %1B%24%42%5A%61 +FAIL U+6600 昀 %1B%24%42%7A%34 assert_equals: expected "%1B%24%42%7A%34" but got "%26%23%32%36%31%31%32%3B" +PASS U+6602 昂 %1B%24%42%39%37 +PASS U+6603 昃 %1B%24%42%5A%60 +PASS U+6606 昆 %1B%24%42%3A%2B +PASS U+6607 昇 %1B%24%42%3E%3A +FAIL U+6609 昉 %1B%24%42%7A%37 assert_equals: expected "%1B%24%42%7A%37" but got "%26%23%32%36%31%32%31%3B" +PASS U+660A 昊 %1B%24%42%5A%5F +PASS U+660C 昌 %1B%24%42%3E%3B +PASS U+660E 明 %1B%24%42%4C%40 +PASS U+660F 昏 %1B%24%42%3A%2A +PASS U+6613 易 %1B%24%42%30%57 +PASS U+6614 昔 %1B%24%42%40%4E +FAIL U+6615 昕 %1B%24%42%7A%35 assert_equals: expected "%1B%24%42%7A%35" but got "%26%23%32%36%31%33%33%3B" +PASS U+661C 昜 %1B%24%42%5A%66 +FAIL U+661E 昞 %1B%24%42%7A%39 assert_equals: expected "%1B%24%42%7A%39" but got "%26%23%32%36%31%34%32%3B" +PASS U+661F 星 %1B%24%42%40%31 +PASS U+6620 映 %1B%24%42%31%47 +FAIL U+6624 昤 %1B%24%42%7A%3A assert_equals: expected "%1B%24%42%7A%3A" but got "%26%23%32%36%31%34%38%3B" +PASS U+6625 春 %1B%24%42%3D%55 +PASS U+6627 昧 %1B%24%42%4B%66 +PASS U+6628 昨 %1B%24%42%3A%72 +PASS U+662D 昭 %1B%24%42%3E%3C +FAIL U+662E 昮 %1B%24%42%7A%38 assert_equals: expected "%1B%24%42%7A%38" but got "%26%23%32%36%31%35%38%3B" +PASS U+662F 是 %1B%24%42%40%27 +FAIL U+6631 昱 %1B%24%42%79%28 assert_equals: expected "%1B%24%42%79%28" but got "%26%23%32%36%31%36%31%3B" +PASS U+6634 昴 %1B%24%42%5A%65 +PASS U+6635 昵 %1B%24%42%5A%63 +PASS U+6636 昶 %1B%24%42%5A%64 +FAIL U+663B 昻 %1B%24%42%7A%36 assert_equals: expected "%1B%24%42%7A%36" but got "%26%23%32%36%31%37%31%3B" +PASS U+663C 昼 %1B%24%42%43%6B +PASS U+663F 昿 %1B%24%42%5B%26 +PASS U+6641 晁 %1B%24%42%5A%6A +PASS U+6642 時 %1B%24%42%3B%7E +PASS U+6643 晃 %1B%24%42%39%38 +PASS U+6644 晄 %1B%24%42%5A%68 +PASS U+6649 晉 %1B%24%42%5A%69 +PASS U+664B 晋 %1B%24%42%3F%38 +PASS U+664F 晏 %1B%24%42%5A%67 +PASS U+6652 晒 %1B%24%42%3B%2F +FAIL U+6657 晗 %1B%24%42%7A%3C assert_equals: expected "%1B%24%42%7A%3C" but got "%26%23%32%36%31%39%39%3B" +FAIL U+6659 晙 %1B%24%42%7A%3D assert_equals: expected "%1B%24%42%7A%3D" but got "%26%23%32%36%32%30%31%3B" +PASS U+665D 晝 %1B%24%42%5A%6C +PASS U+665E 晞 %1B%24%42%5A%6B +PASS U+665F 晟 %1B%24%42%5A%70 +PASS U+6662 晢 %1B%24%42%5A%71 +PASS U+6664 晤 %1B%24%42%5A%6D +FAIL U+6665 晥 %1B%24%42%7A%3B assert_equals: expected "%1B%24%42%7A%3B" but got "%26%23%32%36%32%31%33%3B" +PASS U+6666 晦 %1B%24%42%33%22 +PASS U+6667 晧 %1B%24%42%5A%6E +PASS U+6668 晨 %1B%24%42%5A%6F +PASS U+6669 晩 %1B%24%42%48%55 +PASS U+666E 普 %1B%24%42%49%61 +PASS U+666F 景 %1B%24%42%37%4A +PASS U+6670 晰 %1B%24%42%5A%72 +FAIL U+6673 晳 %1B%24%42%7A%3F assert_equals: expected "%1B%24%42%7A%3F" but got "%26%23%32%36%32%32%37%3B" +PASS U+6674 晴 %1B%24%42%40%32 +PASS U+6676 晶 %1B%24%42%3E%3D +PASS U+667A 智 %1B%24%42%43%52 +PASS U+6681 暁 %1B%24%42%36%47 +PASS U+6683 暃 %1B%24%42%5A%73 +PASS U+6684 暄 %1B%24%42%5A%77 +PASS U+6687 暇 %1B%24%42%32%4B +PASS U+6688 暈 %1B%24%42%5A%74 +PASS U+6689 暉 %1B%24%42%5A%76 +PASS U+668E 暎 %1B%24%42%5A%75 +PASS U+6691 暑 %1B%24%42%3D%6B +PASS U+6696 暖 %1B%24%42%43%48 +PASS U+6697 暗 %1B%24%42%30%45 +PASS U+6698 暘 %1B%24%42%5A%78 +FAIL U+6699 暙 %1B%24%42%7A%40 assert_equals: expected "%1B%24%42%7A%40" but got "%26%23%32%36%32%36%35%3B" +PASS U+669D 暝 %1B%24%42%5A%79 +FAIL U+66A0 暠 %1B%24%42%7A%41 assert_equals: expected "%1B%24%42%7A%41" but got "%26%23%32%36%32%37%32%3B" +PASS U+66A2 暢 %1B%24%42%44%2A +PASS U+66A6 暦 %1B%24%42%4E%71 +PASS U+66AB 暫 %1B%24%42%3B%43 +PASS U+66AE 暮 %1B%24%42%4A%6B +FAIL U+66B2 暲 %1B%24%42%7A%42 assert_equals: expected "%1B%24%42%7A%42" but got "%26%23%32%36%32%39%30%3B" +PASS U+66B4 暴 %1B%24%42%4B%3D +PASS U+66B8 暸 %1B%24%42%5B%22 +PASS U+66B9 暹 %1B%24%42%5A%7B +PASS U+66BC 暼 %1B%24%42%5A%7E +PASS U+66BE 暾 %1B%24%42%5A%7D +FAIL U+66BF 暿 %1B%24%42%7A%43 assert_equals: expected "%1B%24%42%7A%43" but got "%26%23%32%36%33%30%33%3B" +PASS U+66C1 曁 %1B%24%42%5A%7A +PASS U+66C4 曄 %1B%24%42%5B%21 +PASS U+66C7 曇 %1B%24%42%46%5E +PASS U+66C9 曉 %1B%24%42%5A%7C +PASS U+66D6 曖 %1B%24%42%5B%23 +PASS U+66D9 曙 %1B%24%42%3D%6C +PASS U+66DA 曚 %1B%24%42%5B%24 +PASS U+66DC 曜 %1B%24%42%4D%4B +PASS U+66DD 曝 %1B%24%42%47%78 +PASS U+66E0 曠 %1B%24%42%5B%25 +PASS U+66E6 曦 %1B%24%42%5B%27 +PASS U+66E9 曩 %1B%24%42%5B%28 +PASS U+66F0 曰 %1B%24%42%5B%29 +PASS U+66F2 曲 %1B%24%42%36%4A +PASS U+66F3 曳 %1B%24%42%31%48 +PASS U+66F4 更 %1B%24%42%39%39 +PASS U+66F5 曵 %1B%24%42%5B%2A +PASS U+66F7 曷 %1B%24%42%5B%2B +PASS U+66F8 書 %1B%24%42%3D%71 +PASS U+66F9 曹 %1B%24%42%41%62 +FAIL U+66FA 曺 %1B%24%42%7A%44 assert_equals: expected "%1B%24%42%7A%44" but got "%26%23%32%36%33%36%32%3B" +FAIL U+66FB 曻 %1B%24%42%79%2B assert_equals: expected "%1B%24%42%79%2B" but got "%26%23%32%36%33%36%33%3B" +PASS U+66FC 曼 %1B%24%42%52%58 +PASS U+66FD 曽 %1B%24%42%41%3E +PASS U+66FE 曾 %1B%24%42%41%3D +PASS U+66FF 替 %1B%24%42%42%58 +PASS U+6700 最 %1B%24%42%3A%47 +PASS U+6703 會 %1B%24%42%50%72 +PASS U+6708 月 %1B%24%42%37%6E +PASS U+6709 有 %1B%24%42%4D%2D +PASS U+670B 朋 %1B%24%42%4A%7E +PASS U+670D 服 %1B%24%42%49%7E +FAIL U+670E 朎 %1B%24%42%7A%45 assert_equals: expected "%1B%24%42%7A%45" but got "%26%23%32%36%33%38%32%3B" +PASS U+670F 朏 %1B%24%42%5B%2C +PASS U+6714 朔 %1B%24%42%3A%73 +PASS U+6715 朕 %1B%24%42%44%3F +PASS U+6716 朖 %1B%24%42%5B%2D +PASS U+6717 朗 %1B%24%42%4F%2F +PASS U+671B 望 %1B%24%42%4B%3E +PASS U+671D 朝 %1B%24%42%44%2B +PASS U+671E 朞 %1B%24%42%5B%2E +PASS U+671F 期 %1B%24%42%34%7C +PASS U+6726 朦 %1B%24%42%5B%2F +PASS U+6727 朧 %1B%24%42%5B%30 +PASS U+6728 木 %1B%24%42%4C%5A +PASS U+672A 未 %1B%24%42%4C%24 +PASS U+672B 末 %1B%24%42%4B%76 +PASS U+672C 本 %1B%24%42%4B%5C +PASS U+672D 札 %1B%24%42%3B%25 +PASS U+672E 朮 %1B%24%42%5B%32 +PASS U+6731 朱 %1B%24%42%3C%6B +PASS U+6734 朴 %1B%24%42%4B%51 +PASS U+6736 朶 %1B%24%42%5B%34 +PASS U+6737 朷 %1B%24%42%5B%37 +PASS U+6738 朸 %1B%24%42%5B%36 +PASS U+673A 机 %1B%24%42%34%79 +PASS U+673D 朽 %1B%24%42%35%60 +PASS U+673F 朿 %1B%24%42%5B%33 +PASS U+6741 杁 %1B%24%42%5B%35 +PASS U+6746 杆 %1B%24%42%5B%38 +PASS U+6749 杉 %1B%24%42%3F%79 +PASS U+674E 李 %1B%24%42%4D%7B +PASS U+674F 杏 %1B%24%42%30%49 +PASS U+6750 材 %1B%24%42%3A%60 +PASS U+6751 村 %1B%24%42%42%3C +PASS U+6753 杓 %1B%24%42%3C%5D +PASS U+6756 杖 %1B%24%42%3E%73 +PASS U+6759 杙 %1B%24%42%5B%3B +PASS U+675C 杜 %1B%24%42%45%4E +PASS U+675E 杞 %1B%24%42%5B%39 +PASS U+675F 束 %1B%24%42%42%2B +PASS U+6760 杠 %1B%24%42%5B%3A +PASS U+6761 条 %1B%24%42%3E%72 +PASS U+6762 杢 %1B%24%42%4C%5D +PASS U+6763 杣 %1B%24%42%5B%3C +PASS U+6764 杤 %1B%24%42%5B%3D +PASS U+6765 来 %1B%24%42%4D%68 +FAIL U+6766 杦 %1B%24%42%7A%47 assert_equals: expected "%1B%24%42%7A%47" but got "%26%23%32%36%34%37%30%3B" +PASS U+676A 杪 %1B%24%42%5B%42 +PASS U+676D 杭 %1B%24%42%39%3A +PASS U+676F 杯 %1B%24%42%47%55 +PASS U+6770 杰 %1B%24%42%5B%3F +PASS U+6771 東 %1B%24%42%45%6C +PASS U+6772 杲 %1B%24%42%5A%5E +PASS U+6773 杳 %1B%24%42%5A%62 +PASS U+6775 杵 %1B%24%42%35%4F +PASS U+6777 杷 %1B%24%42%47%47 +PASS U+677C 杼 %1B%24%42%5B%41 +PASS U+677E 松 %1B%24%42%3E%3E +PASS U+677F 板 %1B%24%42%48%44 +PASS U+6785 枅 %1B%24%42%5B%47 +PASS U+6787 枇 %1B%24%42%48%7A +PASS U+6789 枉 %1B%24%42%5B%3E +PASS U+678B 枋 %1B%24%42%5B%44 +PASS U+678C 枌 %1B%24%42%5B%43 +PASS U+6790 析 %1B%24%42%40%4F +PASS U+6795 枕 %1B%24%42%4B%6D +PASS U+6797 林 %1B%24%42%4E%53 +PASS U+679A 枚 %1B%24%42%4B%67 +PASS U+679C 果 %1B%24%42%32%4C +PASS U+679D 枝 %1B%24%42%3B%5E +PASS U+67A0 枠 %1B%24%42%4F%48 +PASS U+67A1 枡 %1B%24%42%5B%46 +PASS U+67A2 枢 %1B%24%42%3F%75 +PASS U+67A6 枦 %1B%24%42%5B%45 +PASS U+67A9 枩 %1B%24%42%5B%40 +PASS U+67AF 枯 %1B%24%42%38%4F +PASS U+67B3 枳 %1B%24%42%5B%4C +PASS U+67B4 枴 %1B%24%42%5B%4A +PASS U+67B6 架 %1B%24%42%32%4D +PASS U+67B7 枷 %1B%24%42%5B%48 +PASS U+67B8 枸 %1B%24%42%5B%4E +PASS U+67B9 枹 %1B%24%42%5B%54 +FAIL U+67BB 枻 %1B%24%42%7A%48 assert_equals: expected "%1B%24%42%7A%48" but got "%26%23%32%36%35%35%35%3B" +FAIL U+67C0 柀 %1B%24%42%7A%4A assert_equals: expected "%1B%24%42%7A%4A" but got "%26%23%32%36%35%36%30%3B" +PASS U+67C1 柁 %1B%24%42%42%48 +PASS U+67C4 柄 %1B%24%42%4A%41 +PASS U+67C6 柆 %1B%24%42%5B%56 +PASS U+67CA 柊 %1B%24%42%49%22 +PASS U+67CE 柎 %1B%24%42%5B%55 +PASS U+67CF 柏 %1B%24%42%47%70 +PASS U+67D0 某 %1B%24%42%4B%3F +PASS U+67D1 柑 %1B%24%42%34%3B +PASS U+67D3 染 %1B%24%42%40%77 +PASS U+67D4 柔 %1B%24%42%3D%40 +PASS U+67D8 柘 %1B%24%42%44%53 +PASS U+67DA 柚 %1B%24%42%4D%2E +PASS U+67DD 柝 %1B%24%42%5B%51 +PASS U+67DE 柞 %1B%24%42%5B%50 +PASS U+67E2 柢 %1B%24%42%5B%52 +PASS U+67E4 柤 %1B%24%42%5B%4F +PASS U+67E7 柧 %1B%24%42%5B%57 +PASS U+67E9 柩 %1B%24%42%5B%4D +PASS U+67EC 柬 %1B%24%42%5B%4B +PASS U+67EE 柮 %1B%24%42%5B%53 +PASS U+67EF 柯 %1B%24%42%5B%49 +PASS U+67F1 柱 %1B%24%42%43%6C +PASS U+67F3 柳 %1B%24%42%4C%78 +PASS U+67F4 柴 %1B%24%42%3C%46 +PASS U+67F5 柵 %1B%24%42%3A%74 +PASS U+67FB 査 %1B%24%42%3A%3A +PASS U+67FE 柾 %1B%24%42%4B%6F +PASS U+67FF 柿 %1B%24%42%33%41 +FAIL U+6801 栁 %1B%24%42%7A%4B assert_equals: expected "%1B%24%42%7A%4B" but got "%26%23%32%36%36%32%35%3B" +PASS U+6802 栂 %1B%24%42%44%4E +PASS U+6803 栃 %1B%24%42%46%4A +PASS U+6804 栄 %1B%24%42%31%49 +PASS U+6813 栓 %1B%24%42%40%72 +PASS U+6816 栖 %1B%24%42%40%34 +PASS U+6817 栗 %1B%24%42%37%2A +PASS U+681E 栞 %1B%24%42%5B%59 +PASS U+6821 校 %1B%24%42%39%3B +PASS U+6822 栢 %1B%24%42%33%7C +PASS U+6829 栩 %1B%24%42%5B%5B +PASS U+682A 株 %1B%24%42%33%74 +PASS U+682B 栫 %1B%24%42%5B%61 +PASS U+6832 栲 %1B%24%42%5B%5E +PASS U+6834 栴 %1B%24%42%40%73 +PASS U+6838 核 %1B%24%42%33%4B +PASS U+6839 根 %1B%24%42%3A%2C +PASS U+683C 格 %1B%24%42%33%4A +PASS U+683D 栽 %1B%24%42%3A%4F +PASS U+6840 桀 %1B%24%42%5B%5C +PASS U+6841 桁 %1B%24%42%37%65 +PASS U+6842 桂 %1B%24%42%37%4B +PASS U+6843 桃 %1B%24%42%45%6D +FAIL U+6844 桄 %1B%24%42%7A%4C assert_equals: expected "%1B%24%42%7A%4C" but got "%26%23%32%36%36%39%32%3B" +PASS U+6846 框 %1B%24%42%5B%5A +PASS U+6848 案 %1B%24%42%30%46 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_3001-4000-expected.txt new file mode 100644 index 0000000..1b2a9a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_3001-4000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 932 PASS, 68 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+684D 桍 %1B%24%42%5B%5D +PASS U+684E 桎 %1B%24%42%5B%5F +PASS U+6850 桐 %1B%24%42%36%4D +PASS U+6851 桑 %1B%24%42%37%2C +FAIL U+6852 桒 %1B%24%42%7A%49 assert_equals: expected "%1B%24%42%7A%49" but got "%26%23%32%36%37%30%36%3B" +PASS U+6853 桓 %1B%24%42%34%3C +PASS U+6854 桔 %1B%24%42%35%4B +PASS U+6859 桙 %1B%24%42%5B%62 +PASS U+685C 桜 %1B%24%42%3A%79 +PASS U+685D 桝 %1B%24%42%4B%71 +PASS U+685F 桟 %1B%24%42%3B%37 +PASS U+6863 档 %1B%24%42%5B%63 +PASS U+6867 桧 %1B%24%42%49%30 +PASS U+6874 桴 %1B%24%42%5B%6F +PASS U+6876 桶 %1B%24%42%32%33 +PASS U+6877 桷 %1B%24%42%5B%64 +PASS U+687E 桾 %1B%24%42%5B%75 +PASS U+687F 桿 %1B%24%42%5B%65 +PASS U+6881 梁 %1B%24%42%4E%42 +PASS U+6883 梃 %1B%24%42%5B%6C +PASS U+6885 梅 %1B%24%42%47%5F +PASS U+688D 梍 %1B%24%42%5B%74 +PASS U+688F 梏 %1B%24%42%5B%67 +PASS U+6893 梓 %1B%24%42%30%34 +PASS U+6894 梔 %1B%24%42%5B%69 +PASS U+6897 梗 %1B%24%42%39%3C +PASS U+689B 梛 %1B%24%42%5B%6B +PASS U+689D 條 %1B%24%42%5B%6A +PASS U+689F 梟 %1B%24%42%5B%66 +PASS U+68A0 梠 %1B%24%42%5B%71 +PASS U+68A2 梢 %1B%24%42%3E%3F +PASS U+68A6 梦 %1B%24%42%54%6D +PASS U+68A7 梧 %1B%24%42%38%68 +PASS U+68A8 梨 %1B%24%42%4D%7C +PASS U+68AD 梭 %1B%24%42%5B%68 +PASS U+68AF 梯 %1B%24%42%44%74 +PASS U+68B0 械 %1B%24%42%33%23 +PASS U+68B1 梱 %1B%24%42%3A%2D +PASS U+68B3 梳 %1B%24%42%5B%60 +PASS U+68B5 梵 %1B%24%42%5B%70 +PASS U+68B6 梶 %1B%24%42%33%61 +PASS U+68B9 梹 %1B%24%42%5B%6E +PASS U+68BA 梺 %1B%24%42%5B%72 +PASS U+68BC 梼 %1B%24%42%45%6E +PASS U+68C4 棄 %1B%24%42%34%7E +PASS U+68C6 棆 %1B%24%42%5C%32 +FAIL U+68C8 棈 %1B%24%42%79%29 assert_equals: expected "%1B%24%42%79%29" but got "%26%23%32%36%38%32%34%3B" +PASS U+68C9 棉 %1B%24%42%4C%49 +PASS U+68CA 棊 %1B%24%42%5B%77 +PASS U+68CB 棋 %1B%24%42%34%7D +PASS U+68CD 棍 %1B%24%42%5B%7E +FAIL U+68CF 棏 %1B%24%42%7A%4D assert_equals: expected "%1B%24%42%7A%4D" but got "%26%23%32%36%38%33%31%3B" +PASS U+68D2 棒 %1B%24%42%4B%40 +PASS U+68D4 棔 %1B%24%42%5C%21 +PASS U+68D5 棕 %1B%24%42%5C%23 +PASS U+68D7 棗 %1B%24%42%5C%27 +PASS U+68D8 棘 %1B%24%42%5B%79 +PASS U+68DA 棚 %1B%24%42%43%2A +PASS U+68DF 棟 %1B%24%42%45%6F +PASS U+68E0 棠 %1B%24%42%5C%2B +PASS U+68E1 棡 %1B%24%42%5B%7C +PASS U+68E3 棣 %1B%24%42%5C%28 +PASS U+68E7 棧 %1B%24%42%5C%22 +PASS U+68EE 森 %1B%24%42%3F%39 +PASS U+68EF 棯 %1B%24%42%5C%2C +PASS U+68F2 棲 %1B%24%42%40%33 +PASS U+68F9 棹 %1B%24%42%5C%2A +PASS U+68FA 棺 %1B%24%42%34%3D +PASS U+6900 椀 %1B%24%42%4F%50 +PASS U+6901 椁 %1B%24%42%5B%76 +PASS U+6904 椄 %1B%24%42%5C%26 +PASS U+6905 椅 %1B%24%42%30%58 +PASS U+6908 椈 %1B%24%42%5B%78 +PASS U+690B 椋 %1B%24%42%4C%3A +PASS U+690C 椌 %1B%24%42%5B%7D +PASS U+690D 植 %1B%24%42%3F%22 +PASS U+690E 椎 %1B%24%42%44%47 +PASS U+690F 椏 %1B%24%42%5B%73 +PASS U+6912 椒 %1B%24%42%5C%25 +PASS U+6919 椙 %1B%24%42%3F%7A +PASS U+691A 椚 %1B%24%42%5C%2F +PASS U+691B 椛 %1B%24%42%33%71 +PASS U+691C 検 %1B%24%42%38%21 +PASS U+6921 椡 %1B%24%42%5C%31 +PASS U+6922 椢 %1B%24%42%5B%7A +PASS U+6923 椣 %1B%24%42%5C%30 +PASS U+6925 椥 %1B%24%42%5C%29 +PASS U+6926 椦 %1B%24%42%5B%7B +PASS U+6928 椨 %1B%24%42%5C%2D +PASS U+692A 椪 %1B%24%42%5C%2E +PASS U+6930 椰 %1B%24%42%5C%3F +PASS U+6934 椴 %1B%24%42%46%4E +PASS U+6936 椶 %1B%24%42%5C%24 +PASS U+6939 椹 %1B%24%42%5C%3B +PASS U+693D 椽 %1B%24%42%5C%3D +PASS U+693F 椿 %1B%24%42%44%58 +PASS U+694A 楊 %1B%24%42%4D%4C +PASS U+6953 楓 %1B%24%42%49%76 +PASS U+6954 楔 %1B%24%42%5C%38 +PASS U+6955 楕 %1B%24%42%42%4A +PASS U+6959 楙 %1B%24%42%5C%3E +PASS U+695A 楚 %1B%24%42%41%3F +PASS U+695C 楜 %1B%24%42%5C%35 +PASS U+695D 楝 %1B%24%42%5C%42 +PASS U+695E 楞 %1B%24%42%5C%41 +PASS U+6960 楠 %1B%24%42%46%6F +PASS U+6961 楡 %1B%24%42%5C%40 +PASS U+6962 楢 %1B%24%42%46%6A +FAIL U+6968 楨 %1B%24%42%7A%4F assert_equals: expected "%1B%24%42%7A%4F" but got "%26%23%32%36%39%38%34%3B" +PASS U+696A 楪 %1B%24%42%5C%44 +PASS U+696B 楫 %1B%24%42%5C%37 +PASS U+696D 業 %1B%24%42%36%48 +PASS U+696E 楮 %1B%24%42%5C%3A +PASS U+696F 楯 %1B%24%42%3D%5D +PASS U+6973 楳 %1B%24%42%47%60 +PASS U+6974 楴 %1B%24%42%5C%3C +PASS U+6975 極 %1B%24%42%36%4B +PASS U+6977 楷 %1B%24%42%5C%34 +PASS U+6978 楸 %1B%24%42%5C%36 +PASS U+6979 楹 %1B%24%42%5C%33 +PASS U+697C 楼 %1B%24%42%4F%30 +PASS U+697D 楽 %1B%24%42%33%5A +PASS U+697E 楾 %1B%24%42%5C%39 +PASS U+6981 榁 %1B%24%42%5C%43 +PASS U+6982 概 %1B%24%42%33%35 +PASS U+698A 榊 %1B%24%42%3A%67 +PASS U+698E 榎 %1B%24%42%31%5D +PASS U+6991 榑 %1B%24%42%5C%54 +PASS U+6994 榔 %1B%24%42%4F%31 +PASS U+6995 榕 %1B%24%42%5C%57 +FAIL U+6998 榘 %1B%24%42%7A%51 assert_equals: expected "%1B%24%42%7A%51" but got "%26%23%32%37%30%33%32%3B" +PASS U+699B 榛 %1B%24%42%3F%3A +PASS U+699C 榜 %1B%24%42%5C%56 +PASS U+69A0 榠 %1B%24%42%5C%55 +PASS U+69A7 榧 %1B%24%42%5C%52 +PASS U+69AE 榮 %1B%24%42%5C%46 +PASS U+69B1 榱 %1B%24%42%5C%63 +PASS U+69B2 榲 %1B%24%42%5C%45 +PASS U+69B4 榴 %1B%24%42%5C%58 +PASS U+69BB 榻 %1B%24%42%5C%50 +PASS U+69BE 榾 %1B%24%42%5C%4B +PASS U+69BF 榿 %1B%24%42%5C%48 +PASS U+69C1 槁 %1B%24%42%5C%49 +PASS U+69C3 槃 %1B%24%42%5C%51 +PASS U+69C7 槇 %1B%24%42%74%22 +PASS U+69CA 槊 %1B%24%42%5C%4E +PASS U+69CB 構 %1B%24%42%39%3D +PASS U+69CC 槌 %1B%24%42%44%48 +PASS U+69CD 槍 %1B%24%42%41%64 +PASS U+69CE 槎 %1B%24%42%5C%4C +PASS U+69D0 槐 %1B%24%42%5C%47 +PASS U+69D3 槓 %1B%24%42%5C%4A +PASS U+69D8 様 %1B%24%42%4D%4D +PASS U+69D9 槙 %1B%24%42%4B%6A +PASS U+69DD 槝 %1B%24%42%5C%4F +PASS U+69DE 槞 %1B%24%42%5C%59 +FAIL U+69E2 槢 %1B%24%42%7A%52 assert_equals: expected "%1B%24%42%7A%52" but got "%26%23%32%37%31%30%36%3B" +PASS U+69E7 槧 %1B%24%42%5C%61 +PASS U+69E8 槨 %1B%24%42%5C%5A +PASS U+69EB 槫 %1B%24%42%5C%67 +PASS U+69ED 槭 %1B%24%42%5C%65 +PASS U+69F2 槲 %1B%24%42%5C%60 +PASS U+69F9 槹 %1B%24%42%5C%5F +PASS U+69FB 槻 %1B%24%42%44%50 +PASS U+69FD 槽 %1B%24%42%41%65 +PASS U+69FF 槿 %1B%24%42%5C%5D +PASS U+6A02 樂 %1B%24%42%5C%5B +PASS U+6A05 樅 %1B%24%42%5C%62 +PASS U+6A0A 樊 %1B%24%42%5C%68 +PASS U+6A0B 樋 %1B%24%42%48%75 +PASS U+6A0C 樌 %1B%24%42%5C%6E +PASS U+6A12 樒 %1B%24%42%5C%69 +PASS U+6A13 樓 %1B%24%42%5C%6C +PASS U+6A14 樔 %1B%24%42%5C%66 +PASS U+6A17 樗 %1B%24%42%43%74 +PASS U+6A19 標 %1B%24%42%49%38 +PASS U+6A1B 樛 %1B%24%42%5C%5C +PASS U+6A1E 樞 %1B%24%42%5C%64 +PASS U+6A1F 樟 %1B%24%42%3E%40 +PASS U+6A21 模 %1B%24%42%4C%4F +PASS U+6A22 樢 %1B%24%42%5C%78 +PASS U+6A23 樣 %1B%24%42%5C%6B +PASS U+6A29 権 %1B%24%42%38%22 +PASS U+6A2A 横 %1B%24%42%32%23 +PASS U+6A2B 樫 %1B%24%42%33%5F +PASS U+6A2E 樮 %1B%24%42%5C%53 +FAIL U+6A30 樰 %1B%24%42%7A%53 assert_equals: expected "%1B%24%42%7A%53" but got "%26%23%32%37%31%38%34%3B" +PASS U+6A35 樵 %1B%24%42%3E%41 +PASS U+6A36 樶 %1B%24%42%5C%70 +PASS U+6A38 樸 %1B%24%42%5C%77 +PASS U+6A39 樹 %1B%24%42%3C%79 +PASS U+6A3A 樺 %1B%24%42%33%72 +PASS U+6A3D 樽 %1B%24%42%43%2E +PASS U+6A44 橄 %1B%24%42%5C%6D +FAIL U+6A46 橆 %1B%24%42%7A%55 assert_equals: expected "%1B%24%42%7A%55" but got "%26%23%32%37%32%30%36%3B" +PASS U+6A47 橇 %1B%24%42%5C%72 +PASS U+6A48 橈 %1B%24%42%5C%76 +PASS U+6A4B 橋 %1B%24%42%36%36 +PASS U+6A58 橘 %1B%24%42%35%4C +PASS U+6A59 橙 %1B%24%42%5C%74 +PASS U+6A5F 機 %1B%24%42%35%21 +PASS U+6A61 橡 %1B%24%42%46%4B +PASS U+6A62 橢 %1B%24%42%5C%73 +PASS U+6A66 橦 %1B%24%42%5C%75 +FAIL U+6A6B 橫 %1B%24%42%7A%54 assert_equals: expected "%1B%24%42%7A%54" but got "%26%23%32%37%32%34%33%3B" +PASS U+6A72 橲 %1B%24%42%5C%6F +FAIL U+6A73 橳 %1B%24%42%7A%56 assert_equals: expected "%1B%24%42%7A%56" but got "%26%23%32%37%32%35%31%3B" +PASS U+6A78 橸 %1B%24%42%5C%71 +FAIL U+6A7E 橾 %1B%24%42%7A%57 assert_equals: expected "%1B%24%42%7A%57" but got "%26%23%32%37%32%36%32%3B" +PASS U+6A7F 橿 %1B%24%42%33%60 +PASS U+6A80 檀 %1B%24%42%43%49 +PASS U+6A84 檄 %1B%24%42%5C%7C +PASS U+6A8D 檍 %1B%24%42%5C%7A +PASS U+6A8E 檎 %1B%24%42%38%69 +PASS U+6A90 檐 %1B%24%42%5C%79 +PASS U+6A97 檗 %1B%24%42%5D%21 +PASS U+6A9C 檜 %1B%24%42%5B%58 +PASS U+6AA0 檠 %1B%24%42%5C%7B +PASS U+6AA2 檢 %1B%24%42%5C%7D +PASS U+6AA3 檣 %1B%24%42%5C%7E +PASS U+6AAA 檪 %1B%24%42%5D%2C +PASS U+6AAC 檬 %1B%24%42%5D%28 +PASS U+6AAE 檮 %1B%24%42%5B%6D +PASS U+6AB3 檳 %1B%24%42%5D%27 +PASS U+6AB8 檸 %1B%24%42%5D%26 +PASS U+6ABB 檻 %1B%24%42%5D%23 +PASS U+6AC1 櫁 %1B%24%42%5C%6A +PASS U+6AC2 櫂 %1B%24%42%5D%25 +PASS U+6AC3 櫃 %1B%24%42%5D%24 +PASS U+6AD1 櫑 %1B%24%42%5D%2A +PASS U+6AD3 櫓 %1B%24%42%4F%26 +PASS U+6ADA 櫚 %1B%24%42%5D%2D +PASS U+6ADB 櫛 %1B%24%42%36%7B +PASS U+6ADE 櫞 %1B%24%42%5D%29 +PASS U+6ADF 櫟 %1B%24%42%5D%2B +FAIL U+6AE2 櫢 %1B%24%42%7A%58 assert_equals: expected "%1B%24%42%7A%58" but got "%26%23%32%37%33%36%32%3B" +FAIL U+6AE4 櫤 %1B%24%42%7A%59 assert_equals: expected "%1B%24%42%7A%59" but got "%26%23%32%37%33%36%34%3B" +PASS U+6AE8 櫨 %1B%24%42%48%27 +PASS U+6AEA 櫪 %1B%24%42%5D%2E +PASS U+6AFA 櫺 %1B%24%42%5D%32 +PASS U+6AFB 櫻 %1B%24%42%5D%2F +PASS U+6B04 欄 %1B%24%42%4D%73 +PASS U+6B05 欅 %1B%24%42%5D%30 +PASS U+6B0A 權 %1B%24%42%5C%5E +PASS U+6B12 欒 %1B%24%42%5D%33 +PASS U+6B16 欖 %1B%24%42%5D%34 +PASS U+6B1D 欝 %1B%24%42%31%35 +PASS U+6B1F 欟 %1B%24%42%5D%36 +PASS U+6B20 欠 %1B%24%42%37%67 +PASS U+6B21 次 %1B%24%42%3C%21 +PASS U+6B23 欣 %1B%24%42%36%55 +PASS U+6B27 欧 %1B%24%42%32%24 +PASS U+6B32 欲 %1B%24%42%4D%5F +PASS U+6B37 欷 %1B%24%42%5D%38 +PASS U+6B38 欸 %1B%24%42%5D%37 +PASS U+6B39 欹 %1B%24%42%5D%3A +PASS U+6B3A 欺 %1B%24%42%35%3D +PASS U+6B3D 欽 %1B%24%42%36%56 +PASS U+6B3E 款 %1B%24%42%34%3E +PASS U+6B43 歃 %1B%24%42%5D%3D +PASS U+6B47 歇 %1B%24%42%5D%3C +PASS U+6B49 歉 %1B%24%42%5D%3E +PASS U+6B4C 歌 %1B%24%42%32%4E +PASS U+6B4E 歎 %1B%24%42%43%37 +PASS U+6B50 歐 %1B%24%42%5D%3F +PASS U+6B53 歓 %1B%24%42%34%3F +PASS U+6B54 歔 %1B%24%42%5D%41 +PASS U+6B59 歙 %1B%24%42%5D%40 +PASS U+6B5B 歛 %1B%24%42%5D%42 +PASS U+6B5F 歟 %1B%24%42%5D%43 +PASS U+6B61 歡 %1B%24%42%5D%44 +PASS U+6B62 止 %1B%24%42%3B%5F +PASS U+6B63 正 %1B%24%42%40%35 +PASS U+6B64 此 %1B%24%42%3A%21 +PASS U+6B66 武 %1B%24%42%49%70 +PASS U+6B69 歩 %1B%24%42%4A%62 +PASS U+6B6A 歪 %1B%24%42%4F%44 +PASS U+6B6F 歯 %1B%24%42%3B%75 +PASS U+6B73 歳 %1B%24%42%3A%50 +PASS U+6B74 歴 %1B%24%42%4E%72 +PASS U+6B78 歸 %1B%24%42%5D%45 +PASS U+6B79 歹 %1B%24%42%5D%46 +PASS U+6B7B 死 %1B%24%42%3B%60 +PASS U+6B7F 歿 %1B%24%42%5D%47 +PASS U+6B80 殀 %1B%24%42%5D%48 +PASS U+6B83 殃 %1B%24%42%5D%4A +PASS U+6B84 殄 %1B%24%42%5D%49 +PASS U+6B86 殆 %1B%24%42%4B%58 +PASS U+6B89 殉 %1B%24%42%3D%5E +PASS U+6B8A 殊 %1B%24%42%3C%6C +PASS U+6B8B 残 %1B%24%42%3B%44 +PASS U+6B8D 殍 %1B%24%42%5D%4B +PASS U+6B95 殕 %1B%24%42%5D%4D +PASS U+6B96 殖 %1B%24%42%3F%23 +PASS U+6B98 殘 %1B%24%42%5D%4C +PASS U+6B9E 殞 %1B%24%42%5D%4E +PASS U+6BA4 殤 %1B%24%42%5D%4F +PASS U+6BAA 殪 %1B%24%42%5D%50 +PASS U+6BAB 殫 %1B%24%42%5D%51 +PASS U+6BAF 殯 %1B%24%42%5D%52 +PASS U+6BB1 殱 %1B%24%42%5D%54 +PASS U+6BB2 殲 %1B%24%42%5D%53 +PASS U+6BB3 殳 %1B%24%42%5D%55 +PASS U+6BB4 殴 %1B%24%42%32%25 +PASS U+6BB5 段 %1B%24%42%43%4A +PASS U+6BB7 殷 %1B%24%42%5D%56 +PASS U+6BBA 殺 %1B%24%42%3B%26 +PASS U+6BBB 殻 %1B%24%42%33%4C +PASS U+6BBC 殼 %1B%24%42%5D%57 +PASS U+6BBF 殿 %1B%24%42%45%42 +PASS U+6BC0 毀 %1B%24%42%54%4C +PASS U+6BC5 毅 %1B%24%42%35%23 +PASS U+6BC6 毆 %1B%24%42%5D%58 +PASS U+6BCB 毋 %1B%24%42%5D%59 +PASS U+6BCD 母 %1B%24%42%4A%6C +PASS U+6BCE 毎 %1B%24%42%4B%68 +PASS U+6BD2 毒 %1B%24%42%46%47 +PASS U+6BD3 毓 %1B%24%42%5D%5A +PASS U+6BD4 比 %1B%24%42%48%66 +FAIL U+6BD6 毖 %1B%24%42%7A%5A assert_equals: expected "%1B%24%42%7A%5A" but got "%26%23%32%37%36%30%36%3B" +PASS U+6BD8 毘 %1B%24%42%48%7B +PASS U+6BDB 毛 %1B%24%42%4C%53 +PASS U+6BDF 毟 %1B%24%42%5D%5B +PASS U+6BEB 毫 %1B%24%42%5D%5D +PASS U+6BEC 毬 %1B%24%42%5D%5C +PASS U+6BEF 毯 %1B%24%42%5D%5F +PASS U+6BF3 毳 %1B%24%42%5D%5E +PASS U+6C08 氈 %1B%24%42%5D%61 +PASS U+6C0F 氏 %1B%24%42%3B%61 +PASS U+6C11 民 %1B%24%42%4C%31 +PASS U+6C13 氓 %1B%24%42%5D%62 +PASS U+6C14 气 %1B%24%42%5D%63 +PASS U+6C17 気 %1B%24%42%35%24 +PASS U+6C1B 氛 %1B%24%42%5D%64 +PASS U+6C23 氣 %1B%24%42%5D%66 +PASS U+6C24 氤 %1B%24%42%5D%65 +PASS U+6C34 水 %1B%24%42%3F%65 +PASS U+6C37 氷 %1B%24%42%49%39 +PASS U+6C38 永 %1B%24%42%31%4A +PASS U+6C3E 氾 %1B%24%42%48%45 +FAIL U+6C3F 氿 %1B%24%42%7A%5B assert_equals: expected "%1B%24%42%7A%5B" but got "%26%23%32%37%37%31%31%3B" +PASS U+6C40 汀 %1B%24%42%44%75 +PASS U+6C41 汁 %1B%24%42%3D%41 +PASS U+6C42 求 %1B%24%42%35%61 +PASS U+6C4E 汎 %1B%24%42%48%46 +PASS U+6C50 汐 %1B%24%42%3C%2E +PASS U+6C55 汕 %1B%24%42%5D%68 +PASS U+6C57 汗 %1B%24%42%34%40 +PASS U+6C5A 汚 %1B%24%42%31%78 +FAIL U+6C5C 汜 %1B%24%42%7A%5C assert_equals: expected "%1B%24%42%7A%5C" but got "%26%23%32%37%37%34%30%3B" +PASS U+6C5D 汝 %1B%24%42%46%72 +PASS U+6C5E 汞 %1B%24%42%5D%67 +PASS U+6C5F 江 %1B%24%42%39%3E +PASS U+6C60 池 %1B%24%42%43%53 +PASS U+6C62 汢 %1B%24%42%5D%69 +PASS U+6C68 汨 %1B%24%42%5D%71 +PASS U+6C6A 汪 %1B%24%42%5D%6A +FAIL U+6C6F 汯 %1B%24%42%7A%5E assert_equals: expected "%1B%24%42%7A%5E" but got "%26%23%32%37%37%35%39%3B" +PASS U+6C70 汰 %1B%24%42%42%41 +PASS U+6C72 汲 %1B%24%42%35%62 +PASS U+6C73 汳 %1B%24%42%5D%72 +PASS U+6C7A 決 %1B%24%42%37%68 +PASS U+6C7D 汽 %1B%24%42%35%25 +PASS U+6C7E 汾 %1B%24%42%5D%70 +PASS U+6C81 沁 %1B%24%42%5D%6E +PASS U+6C82 沂 %1B%24%42%5D%6B +PASS U+6C83 沃 %1B%24%42%4D%60 +FAIL U+6C86 沆 %1B%24%42%7A%5D assert_equals: expected "%1B%24%42%7A%5D" but got "%26%23%32%37%37%38%32%3B" +PASS U+6C88 沈 %1B%24%42%44%40 +PASS U+6C8C 沌 %1B%24%42%46%59 +PASS U+6C8D 沍 %1B%24%42%5D%6C +PASS U+6C90 沐 %1B%24%42%5D%74 +PASS U+6C92 沒 %1B%24%42%5D%73 +PASS U+6C93 沓 %1B%24%42%37%23 +PASS U+6C96 沖 %1B%24%42%32%2D +PASS U+6C99 沙 %1B%24%42%3A%3B +PASS U+6C9A 沚 %1B%24%42%5D%6D +PASS U+6C9B 沛 %1B%24%42%5D%6F +PASS U+6CA1 没 %1B%24%42%4B%57 +PASS U+6CA2 沢 %1B%24%42%42%74 +PASS U+6CAB 沫 %1B%24%42%4B%77 +PASS U+6CAE 沮 %1B%24%42%5D%7C +PASS U+6CB1 沱 %1B%24%42%5D%7D +PASS U+6CB3 河 %1B%24%42%32%4F +PASS U+6CB8 沸 %1B%24%42%4A%28 +PASS U+6CB9 油 %1B%24%42%4C%7D +PASS U+6CBA 沺 %1B%24%42%5E%21 +PASS U+6CBB 治 %1B%24%42%3C%23 +PASS U+6CBC 沼 %1B%24%42%3E%42 +PASS U+6CBD 沽 %1B%24%42%5D%78 +PASS U+6CBE 沾 %1B%24%42%5D%7E +PASS U+6CBF 沿 %1B%24%42%31%68 +PASS U+6CC1 況 %1B%24%42%36%37 +PASS U+6CC4 泄 %1B%24%42%5D%75 +PASS U+6CC5 泅 %1B%24%42%5D%7A +PASS U+6CC9 泉 %1B%24%42%40%74 +PASS U+6CCA 泊 %1B%24%42%47%71 +PASS U+6CCC 泌 %1B%24%42%48%67 +PASS U+6CD3 泓 %1B%24%42%5D%77 +PASS U+6CD5 法 %1B%24%42%4B%21 +PASS U+6CD7 泗 %1B%24%42%5D%79 +PASS U+6CD9 泙 %1B%24%42%5E%24 +FAIL U+6CDA 泚 %1B%24%42%7A%5F assert_equals: expected "%1B%24%42%7A%5F" but got "%26%23%32%37%38%36%36%3B" +PASS U+6CDB 泛 %1B%24%42%5E%22 +PASS U+6CDD 泝 %1B%24%42%5D%7B +PASS U+6CE1 泡 %1B%24%42%4B%22 +PASS U+6CE2 波 %1B%24%42%47%48 +PASS U+6CE3 泣 %1B%24%42%35%63 +PASS U+6CE5 泥 %1B%24%42%45%25 +PASS U+6CE8 注 %1B%24%42%43%6D +PASS U+6CEA 泪 %1B%24%42%5E%25 +PASS U+6CEF 泯 %1B%24%42%5E%23 +PASS U+6CF0 泰 %1B%24%42%42%59 +PASS U+6CF1 泱 %1B%24%42%5D%76 +PASS U+6CF3 泳 %1B%24%42%31%4B +FAIL U+6D04 洄 %1B%24%42%7A%60 assert_equals: expected "%1B%24%42%7A%60" but got "%26%23%32%37%39%30%38%3B" +PASS U+6D0B 洋 %1B%24%42%4D%4E +PASS U+6D0C 洌 %1B%24%42%5E%30 +PASS U+6D12 洒 %1B%24%42%5E%2F +PASS U+6D17 洗 %1B%24%42%40%76 +PASS U+6D19 洙 %1B%24%42%5E%2C +PASS U+6D1B 洛 %1B%24%42%4D%6C +PASS U+6D1E 洞 %1B%24%42%46%36 +PASS U+6D1F 洟 %1B%24%42%5E%26 +PASS U+6D25 津 %1B%24%42%44%45 +PASS U+6D29 洩 %1B%24%42%31%4C +PASS U+6D2A 洪 %1B%24%42%39%3F +PASS U+6D2B 洫 %1B%24%42%5E%29 +PASS U+6D32 洲 %1B%24%42%3D%27 +PASS U+6D33 洳 %1B%24%42%5E%2E +PASS U+6D35 洵 %1B%24%42%5E%2D +PASS U+6D36 洶 %1B%24%42%5E%28 +PASS U+6D38 洸 %1B%24%42%5E%2B +PASS U+6D3B 活 %1B%24%42%33%68 +PASS U+6D3D 洽 %1B%24%42%5E%2A +PASS U+6D3E 派 %1B%24%42%47%49 +PASS U+6D41 流 %1B%24%42%4E%2E +PASS U+6D44 浄 %1B%24%42%3E%74 +PASS U+6D45 浅 %1B%24%42%40%75 +PASS U+6D59 浙 %1B%24%42%5E%36 +PASS U+6D5A 浚 %1B%24%42%5E%34 +PASS U+6D5C 浜 %1B%24%42%49%4D +PASS U+6D63 浣 %1B%24%42%5E%31 +PASS U+6D64 浤 %1B%24%42%5E%33 +PASS U+6D66 浦 %1B%24%42%31%3A +PASS U+6D69 浩 %1B%24%42%39%40 +PASS U+6D6A 浪 %1B%24%42%4F%32 +PASS U+6D6C 浬 %1B%24%42%33%3D +PASS U+6D6E 浮 %1B%24%42%49%62 +FAIL U+6D6F 浯 %1B%24%42%7A%62 assert_equals: expected "%1B%24%42%7A%62" but got "%26%23%32%38%30%31%35%3B" +PASS U+6D74 浴 %1B%24%42%4D%61 +PASS U+6D77 海 %1B%24%42%33%24 +PASS U+6D78 浸 %1B%24%42%3F%3B +PASS U+6D79 浹 %1B%24%42%5E%35 +PASS U+6D85 涅 %1B%24%42%5E%3A +FAIL U+6D87 涇 %1B%24%42%7A%61 assert_equals: expected "%1B%24%42%7A%61" but got "%26%23%32%38%30%33%39%3B" +PASS U+6D88 消 %1B%24%42%3E%43 +PASS U+6D8C 涌 %1B%24%42%4D%30 +PASS U+6D8E 涎 %1B%24%42%5E%37 +PASS U+6D93 涓 %1B%24%42%5E%32 +PASS U+6D95 涕 %1B%24%42%5E%38 +FAIL U+6D96 涖 %1B%24%42%7A%63 assert_equals: expected "%1B%24%42%7A%63" but got "%26%23%32%38%30%35%34%3B" +PASS U+6D99 涙 %1B%24%42%4E%5E +PASS U+6D9B 涛 %1B%24%42%45%73 +PASS U+6D9C 涜 %1B%24%42%46%42 +FAIL U+6DAC 涬 %1B%24%42%7A%64 assert_equals: expected "%1B%24%42%7A%64" but got "%26%23%32%38%30%37%36%3B" +PASS U+6DAF 涯 %1B%24%42%33%36 +PASS U+6DB2 液 %1B%24%42%31%55 +PASS U+6DB5 涵 %1B%24%42%5E%3E +PASS U+6DB8 涸 %1B%24%42%5E%41 +PASS U+6DBC 涼 %1B%24%42%4E%43 +PASS U+6DC0 淀 %1B%24%42%4D%64 +PASS U+6DC5 淅 %1B%24%42%5E%48 +PASS U+6DC6 淆 %1B%24%42%5E%42 +PASS U+6DC7 淇 %1B%24%42%5E%3F +PASS U+6DCB 淋 %1B%24%42%4E%54 +PASS U+6DCC 淌 %1B%24%42%5E%45 +FAIL U+6DCF 淏 %1B%24%42%7A%65 assert_equals: expected "%1B%24%42%7A%65" but got "%26%23%32%38%31%31%31%3B" +PASS U+6DD1 淑 %1B%24%42%3D%4A +PASS U+6DD2 淒 %1B%24%42%5E%47 +PASS U+6DD5 淕 %1B%24%42%5E%4C +PASS U+6DD8 淘 %1B%24%42%45%71 +PASS U+6DD9 淙 %1B%24%42%5E%4A +PASS U+6DDE 淞 %1B%24%42%5E%44 +PASS U+6DE1 淡 %1B%24%42%43%38 +PASS U+6DE4 淤 %1B%24%42%5E%4B +PASS U+6DE6 淦 %1B%24%42%5E%40 +PASS U+6DE8 淨 %1B%24%42%5E%46 +PASS U+6DEA 淪 %1B%24%42%5E%4D +PASS U+6DEB 淫 %1B%24%42%30%7C +PASS U+6DEC 淬 %1B%24%42%5E%43 +PASS U+6DEE 淮 %1B%24%42%5E%4E +PASS U+6DF1 深 %1B%24%42%3F%3C +FAIL U+6DF2 淲 %1B%24%42%7A%67 assert_equals: expected "%1B%24%42%7A%67" but got "%26%23%32%38%31%34%36%3B" +PASS U+6DF3 淳 %1B%24%42%3D%5F +PASS U+6DF5 淵 %1B%24%42%4A%25 +PASS U+6DF7 混 %1B%24%42%3A%2E +FAIL U+6DF8 淸 %1B%24%42%7A%66 assert_equals: expected "%1B%24%42%7A%66" but got "%26%23%32%38%31%35%32%3B" +PASS U+6DF9 淹 %1B%24%42%5E%3B +PASS U+6DFA 淺 %1B%24%42%5E%49 +PASS U+6DFB 添 %1B%24%42%45%3A +FAIL U+6DFC 淼 %1B%24%42%7A%68 assert_equals: expected "%1B%24%42%7A%68" but got "%26%23%32%38%31%35%36%3B" +PASS U+6E05 清 %1B%24%42%40%36 +PASS U+6E07 渇 %1B%24%42%33%69 +PASS U+6E08 済 %1B%24%42%3A%51 +PASS U+6E09 渉 %1B%24%42%3E%44 +PASS U+6E0A 渊 %1B%24%42%5E%3D +PASS U+6E0B 渋 %1B%24%42%3D%42 +PASS U+6E13 渓 %1B%24%42%37%4C +PASS U+6E15 渕 %1B%24%42%5E%3C +PASS U+6E19 渙 %1B%24%42%5E%52 +PASS U+6E1A 渚 %1B%24%42%3D%6D +PASS U+6E1B 減 %1B%24%42%38%3A +PASS U+6E1D 渝 %1B%24%42%5E%61 +PASS U+6E1F 渟 %1B%24%42%5E%5B +PASS U+6E20 渠 %1B%24%42%35%74 +PASS U+6E21 渡 %1B%24%42%45%4F +PASS U+6E23 渣 %1B%24%42%5E%56 +PASS U+6E24 渤 %1B%24%42%5E%5F +PASS U+6E25 渥 %1B%24%42%30%2F +PASS U+6E26 渦 %1B%24%42%31%32 +FAIL U+6E27 渧 %1B%24%42%7A%6B assert_equals: expected "%1B%24%42%7A%6B" but got "%26%23%32%38%31%39%39%3B" +PASS U+6E29 温 %1B%24%42%32%39 +PASS U+6E2B 渫 %1B%24%42%5E%58 +PASS U+6E2C 測 %1B%24%42%42%2C +PASS U+6E2D 渭 %1B%24%42%5E%4F +PASS U+6E2E 渮 %1B%24%42%5E%51 +PASS U+6E2F 港 %1B%24%42%39%41 +PASS U+6E38 游 %1B%24%42%5E%62 +FAIL U+6E39 渹 %1B%24%42%7A%69 assert_equals: expected "%1B%24%42%7A%69" but got "%26%23%32%38%32%31%37%3B" +PASS U+6E3A 渺 %1B%24%42%5E%5D +FAIL U+6E3C 渼 %1B%24%42%7A%6C assert_equals: expected "%1B%24%42%7A%6C" but got "%26%23%32%38%32%32%30%3B" +PASS U+6E3E 渾 %1B%24%42%5E%55 +PASS U+6E43 湃 %1B%24%42%5E%5C +PASS U+6E4A 湊 %1B%24%42%4C%2B +PASS U+6E4D 湍 %1B%24%42%5E%5A +PASS U+6E4E 湎 %1B%24%42%5E%5E +PASS U+6E56 湖 %1B%24%42%38%50 +PASS U+6E58 湘 %1B%24%42%3E%45 +PASS U+6E5B 湛 %1B%24%42%43%39 +FAIL U+6E5C 湜 %1B%24%42%7A%6A assert_equals: expected "%1B%24%42%7A%6A" but got "%26%23%32%38%32%35%32%3B" +PASS U+6E5F 湟 %1B%24%42%5E%54 +PASS U+6E67 湧 %1B%24%42%4D%2F +PASS U+6E6B 湫 %1B%24%42%5E%57 +PASS U+6E6E 湮 %1B%24%42%5E%50 +PASS U+6E6F 湯 %1B%24%42%45%72 +PASS U+6E72 湲 %1B%24%42%5E%53 +PASS U+6E76 湶 %1B%24%42%5E%59 +PASS U+6E7E 湾 %1B%24%42%4F%51 +PASS U+6E7F 湿 %1B%24%42%3C%3E +PASS U+6E80 満 %1B%24%42%4B%7E +PASS U+6E82 溂 %1B%24%42%5E%63 +PASS U+6E8C 溌 %1B%24%42%48%2E +PASS U+6E8F 溏 %1B%24%42%5E%6F +PASS U+6E90 源 %1B%24%42%38%3B +PASS U+6E96 準 %1B%24%42%3D%60 +PASS U+6E98 溘 %1B%24%42%5E%65 +PASS U+6E9C 溜 %1B%24%42%4E%2F +PASS U+6E9D 溝 %1B%24%42%39%42 +PASS U+6E9F 溟 %1B%24%42%5E%72 +PASS U+6EA2 溢 %1B%24%42%30%6E +PASS U+6EA5 溥 %1B%24%42%5E%70 +PASS U+6EAA 溪 %1B%24%42%5E%64 +PASS U+6EAF 溯 %1B%24%42%5E%6A +PASS U+6EB2 溲 %1B%24%42%5E%6C +PASS U+6EB6 溶 %1B%24%42%4D%4F +PASS U+6EB7 溷 %1B%24%42%5E%67 +PASS U+6EBA 溺 %1B%24%42%45%2E +PASS U+6EBD 溽 %1B%24%42%5E%69 +FAIL U+6EBF 溿 %1B%24%42%7A%6D assert_equals: expected "%1B%24%42%7A%6D" but got "%26%23%32%38%33%35%31%3B" +PASS U+6EC2 滂 %1B%24%42%5E%71 +PASS U+6EC4 滄 %1B%24%42%5E%6B +PASS U+6EC5 滅 %1B%24%42%4C%47 +PASS U+6EC9 滉 %1B%24%42%5E%66 +PASS U+6ECB 滋 %1B%24%42%3C%22 +PASS U+6ECC 滌 %1B%24%42%5E%7E +PASS U+6ED1 滑 %1B%24%42%33%6A +PASS U+6ED3 滓 %1B%24%42%5E%68 +PASS U+6ED4 滔 %1B%24%42%5E%6D +PASS U+6ED5 滕 %1B%24%42%5E%6E +PASS U+6EDD 滝 %1B%24%42%42%6C +PASS U+6EDE 滞 %1B%24%42%42%5A +PASS U+6EEC 滬 %1B%24%42%5E%76 +PASS U+6EEF 滯 %1B%24%42%5E%7C +PASS U+6EF2 滲 %1B%24%42%5E%7A +PASS U+6EF4 滴 %1B%24%42%45%29 +PASS U+6EF7 滷 %1B%24%42%5F%23 +PASS U+6EF8 滸 %1B%24%42%5E%77 +PASS U+6EFE 滾 %1B%24%42%5E%78 +PASS U+6EFF 滿 %1B%24%42%5E%60 +PASS U+6F01 漁 %1B%24%42%35%79 +PASS U+6F02 漂 %1B%24%42%49%3A +PASS U+6F06 漆 %1B%24%42%3C%3F +PASS U+6F09 漉 %1B%24%42%39%77 +PASS U+6F0F 漏 %1B%24%42%4F%33 +PASS U+6F11 漑 %1B%24%42%5E%74 +PASS U+6F13 漓 %1B%24%42%5F%22 +PASS U+6F14 演 %1B%24%42%31%69 +PASS U+6F15 漕 %1B%24%42%41%66 +PASS U+6F20 漠 %1B%24%42%47%79 +PASS U+6F22 漢 %1B%24%42%34%41 +PASS U+6F23 漣 %1B%24%42%4E%7A +PASS U+6F2B 漫 %1B%24%42%4C%21 +PASS U+6F2C 漬 %1B%24%42%44%52 +PASS U+6F31 漱 %1B%24%42%5E%7B +PASS U+6F32 漲 %1B%24%42%5E%7D +PASS U+6F38 漸 %1B%24%42%41%32 +PASS U+6F3E 漾 %1B%24%42%5F%21 +PASS U+6F3F 漿 %1B%24%42%5E%79 +PASS U+6F41 潁 %1B%24%42%5E%73 +PASS U+6F45 潅 %1B%24%42%34%43 +PASS U+6F54 潔 %1B%24%42%37%69 +PASS U+6F58 潘 %1B%24%42%5F%2F +PASS U+6F5B 潛 %1B%24%42%5F%2A +PASS U+6F5C 潜 %1B%24%42%40%78 +PASS U+6F5F 潟 %1B%24%42%33%63 +PASS U+6F64 潤 %1B%24%42%3D%61 +PASS U+6F66 潦 %1B%24%42%5F%33 +PASS U+6F6D 潭 %1B%24%42%5F%2C +PASS U+6F6E 潮 %1B%24%42%44%2C +PASS U+6F6F 潯 %1B%24%42%5F%29 +PASS U+6F70 潰 %1B%24%42%44%59 +PASS U+6F74 潴 %1B%24%42%5F%4C +PASS U+6F78 潸 %1B%24%42%5F%26 +PASS U+6F7A 潺 %1B%24%42%5F%25 +PASS U+6F7C 潼 %1B%24%42%5F%2E +PASS U+6F80 澀 %1B%24%42%5F%28 +PASS U+6F81 澁 %1B%24%42%5F%27 +PASS U+6F82 澂 %1B%24%42%5F%2D +PASS U+6F84 澄 %1B%24%42%40%21 +PASS U+6F86 澆 %1B%24%42%5F%24 +FAIL U+6F88 澈 %1B%24%42%7A%6E assert_equals: expected "%1B%24%42%7A%6E" but got "%26%23%32%38%35%35%32%3B" +PASS U+6F8E 澎 %1B%24%42%5F%30 +PASS U+6F91 澑 %1B%24%42%5F%31 +PASS U+6F97 澗 %1B%24%42%34%42 +PASS U+6FA1 澡 %1B%24%42%5F%36 +PASS U+6FA3 澣 %1B%24%42%5F%35 +PASS U+6FA4 澤 %1B%24%42%5F%37 +PASS U+6FAA 澪 %1B%24%42%5F%3A +PASS U+6FB1 澱 %1B%24%42%45%43 +PASS U+6FB3 澳 %1B%24%42%5F%34 +FAIL U+6FB5 澵 %1B%24%42%7A%6F assert_equals: expected "%1B%24%42%7A%6F" but got "%26%23%32%38%35%39%37%3B" +PASS U+6FB9 澹 %1B%24%42%5F%38 +PASS U+6FC0 激 %1B%24%42%37%63 +PASS U+6FC1 濁 %1B%24%42%42%79 +PASS U+6FC2 濂 %1B%24%42%5F%32 +PASS U+6FC3 濃 %1B%24%42%47%3B +PASS U+6FC6 濆 %1B%24%42%5F%39 +PASS U+6FD4 濔 %1B%24%42%5F%3E +PASS U+6FD5 濕 %1B%24%42%5F%3C +PASS U+6FD8 濘 %1B%24%42%5F%3F +PASS U+6FDB 濛 %1B%24%42%5F%42 +PASS U+6FDF 濟 %1B%24%42%5F%3B +PASS U+6FE0 濠 %1B%24%42%39%6A +PASS U+6FE1 濡 %1B%24%42%47%28 +PASS U+6FE4 濤 %1B%24%42%5E%39 +PASS U+6FEB 濫 %1B%24%42%4D%74 +PASS U+6FEC 濬 %1B%24%42%5F%3D +PASS U+6FEE 濮 %1B%24%42%5F%41 +PASS U+6FEF 濯 %1B%24%42%42%75 +PASS U+6FF1 濱 %1B%24%42%5F%40 +PASS U+6FF3 濳 %1B%24%42%5F%2B +FAIL U+6FF5 濵 %1B%24%42%7A%70 assert_equals: expected "%1B%24%42%7A%70" but got "%26%23%32%38%36%36%31%3B" +PASS U+6FF6 濶 %1B%24%42%6F%69 +PASS U+6FFA 濺 %1B%24%42%5F%45 +PASS U+6FFE 濾 %1B%24%42%5F%49 +PASS U+7001 瀁 %1B%24%42%5F%47 +FAIL U+7005 瀅 %1B%24%42%7A%71 assert_equals: expected "%1B%24%42%7A%71" but got "%26%23%32%38%36%37%37%3B" +FAIL U+7007 瀇 %1B%24%42%7A%72 assert_equals: expected "%1B%24%42%7A%72" but got "%26%23%32%38%36%37%39%3B" +PASS U+7009 瀉 %1B%24%42%5F%43 +PASS U+700B 瀋 %1B%24%42%5F%44 +PASS U+700F 瀏 %1B%24%42%5F%48 +PASS U+7011 瀑 %1B%24%42%5F%46 +PASS U+7015 瀕 %1B%24%42%49%4E +PASS U+7018 瀘 %1B%24%42%5F%4E +PASS U+701A 瀚 %1B%24%42%5F%4B +PASS U+701B 瀛 %1B%24%42%5F%4A +PASS U+701D 瀝 %1B%24%42%5F%4D +PASS U+701E 瀞 %1B%24%42%46%54 +PASS U+701F 瀟 %1B%24%42%5F%4F +PASS U+7026 瀦 %1B%24%42%43%75 +PASS U+7027 瀧 %1B%24%42%42%6D +FAIL U+7028 瀨 %1B%24%42%7A%73 assert_equals: expected "%1B%24%42%7A%73" but got "%26%23%32%38%37%31%32%3B" +PASS U+702C 瀬 %1B%24%42%40%25 +PASS U+7030 瀰 %1B%24%42%5F%50 +PASS U+7032 瀲 %1B%24%42%5F%52 +PASS U+703E 瀾 %1B%24%42%5F%51 +PASS U+704C 灌 %1B%24%42%5E%75 +PASS U+7051 灑 %1B%24%42%5F%53 +PASS U+7058 灘 %1B%24%42%46%67 +PASS U+7063 灣 %1B%24%42%5F%54 +PASS U+706B 火 %1B%24%42%32%50 +PASS U+706F 灯 %1B%24%42%45%74 +PASS U+7070 灰 %1B%24%42%33%25 +PASS U+7078 灸 %1B%24%42%35%64 +PASS U+707C 灼 %1B%24%42%3C%5E +PASS U+707D 災 %1B%24%42%3A%52 +FAIL U+7085 炅 %1B%24%42%7A%74 assert_equals: expected "%1B%24%42%7A%74" but got "%26%23%32%38%38%30%35%3B" +PASS U+7089 炉 %1B%24%42%4F%27 +PASS U+708A 炊 %1B%24%42%3F%66 +PASS U+708E 炎 %1B%24%42%31%6A +PASS U+7092 炒 %1B%24%42%5F%56 +PASS U+7099 炙 %1B%24%42%5F%55 +FAIL U+70AB 炫 %1B%24%42%7A%75 assert_equals: expected "%1B%24%42%7A%75" but got "%26%23%32%38%38%34%33%3B" +PASS U+70AC 炬 %1B%24%42%5F%59 +PASS U+70AD 炭 %1B%24%42%43%3A +PASS U+70AE 炮 %1B%24%42%5F%5C +PASS U+70AF 炯 %1B%24%42%5F%57 +PASS U+70B3 炳 %1B%24%42%5F%5B +PASS U+70B8 炸 %1B%24%42%5F%5A +PASS U+70B9 点 %1B%24%42%45%40 +PASS U+70BA 為 %1B%24%42%30%59 +FAIL U+70BB 炻 %1B%24%42%79%27 assert_equals: expected "%1B%24%42%79%27" but got "%26%23%32%38%38%35%39%3B" +PASS U+70C8 烈 %1B%24%42%4E%75 +PASS U+70CB 烋 %1B%24%42%5F%5E +PASS U+70CF 烏 %1B%24%42%31%28 +PASS U+70D9 烙 %1B%24%42%5F%60 +PASS U+70DD 烝 %1B%24%42%5F%5F +PASS U+70DF 烟 %1B%24%42%5F%5D +PASS U+70F1 烱 %1B%24%42%5F%58 +PASS U+70F9 烹 %1B%24%42%4B%23 +PASS U+70FD 烽 %1B%24%42%5F%62 +FAIL U+7104 焄 %1B%24%42%7A%77 assert_equals: expected "%1B%24%42%7A%77" but got "%26%23%32%38%39%33%32%3B" +PASS U+7109 焉 %1B%24%42%5F%61 +FAIL U+710F 焏 %1B%24%42%7A%76 assert_equals: expected "%1B%24%42%7A%76" but got "%26%23%32%38%39%34%33%3B" +PASS U+7114 焔 %1B%24%42%31%6B +PASS U+7119 焙 %1B%24%42%5F%64 +PASS U+711A 焚 %1B%24%42%4A%32 +PASS U+711C 焜 %1B%24%42%5F%63 +PASS U+7121 無 %1B%24%42%4C%35 +PASS U+7126 焦 %1B%24%42%3E%47 +PASS U+7136 然 %1B%24%42%41%33 +PASS U+713C 焼 %1B%24%42%3E%46 +FAIL U+7146 煆 %1B%24%42%7A%79 assert_equals: expected "%1B%24%42%7A%79" but got "%26%23%32%38%39%39%38%3B" +FAIL U+7147 煇 %1B%24%42%7A%7A assert_equals: expected "%1B%24%42%7A%7A" but got "%26%23%32%38%39%39%39%3B" +PASS U+7149 煉 %1B%24%42%4E%7B +PASS U+714C 煌 %1B%24%42%5F%6A +PASS U+714E 煎 %1B%24%42%40%79 +PASS U+7155 煕 %1B%24%42%5F%66 +PASS U+7156 煖 %1B%24%42%5F%6B +PASS U+7159 煙 %1B%24%42%31%6C +FAIL U+715C 煜 %1B%24%42%7A%78 assert_equals: expected "%1B%24%42%7A%78" but got "%26%23%32%39%30%32%30%3B" +PASS U+7162 煢 %1B%24%42%5F%69 +PASS U+7164 煤 %1B%24%42%47%61 +PASS U+7165 煥 %1B%24%42%5F%65 +PASS U+7166 煦 %1B%24%42%5F%68 +PASS U+7167 照 %1B%24%42%3E%48 +PASS U+7169 煩 %1B%24%42%48%51 +PASS U+716C 煬 %1B%24%42%5F%6C +PASS U+716E 煮 %1B%24%42%3C%51 +PASS U+717D 煽 %1B%24%42%40%7A +PASS U+7184 熄 %1B%24%42%5F%6F +PASS U+7188 熈 %1B%24%42%5F%67 +PASS U+718A 熊 %1B%24%42%37%27 +PASS U+718F 熏 %1B%24%42%5F%6D +PASS U+7194 熔 %1B%24%42%4D%50 +PASS U+7195 熕 %1B%24%42%5F%70 +PASS U+7199 熙 %1B%24%42%74%26 +PASS U+719F 熟 %1B%24%42%3D%4F +PASS U+71A8 熨 %1B%24%42%5F%71 +PASS U+71AC 熬 %1B%24%42%5F%72 +PASS U+71B1 熱 %1B%24%42%47%2E +PASS U+71B9 熹 %1B%24%42%5F%74 +PASS U+71BE 熾 %1B%24%42%5F%75 +FAIL U+71C1 燁 %1B%24%42%7A%7C assert_equals: expected "%1B%24%42%7A%7C" but got "%26%23%32%39%31%32%31%3B" +PASS U+71C3 燃 %1B%24%42%47%33 +PASS U+71C8 燈 %1B%24%42%45%75 +PASS U+71C9 燉 %1B%24%42%5F%77 +PASS U+71CE 燎 %1B%24%42%5F%79 +PASS U+71D0 燐 %1B%24%42%4E%55 +PASS U+71D2 燒 %1B%24%42%5F%76 +PASS U+71D4 燔 %1B%24%42%5F%78 +PASS U+71D5 燕 %1B%24%42%31%6D +PASS U+71D7 燗 %1B%24%42%5F%73 +PASS U+71DF 營 %1B%24%42%53%5B +PASS U+71E0 燠 %1B%24%42%5F%7A +PASS U+71E5 燥 %1B%24%42%41%67 +PASS U+71E6 燦 %1B%24%42%3B%38 +PASS U+71E7 燧 %1B%24%42%5F%7C +PASS U+71EC 燬 %1B%24%42%5F%7B +PASS U+71ED 燭 %1B%24%42%3F%24 +PASS U+71EE 燮 %1B%24%42%52%59 +PASS U+71F5 燵 %1B%24%42%5F%7D +PASS U+71F9 燹 %1B%24%42%60%21 +PASS U+71FB 燻 %1B%24%42%5F%6E +PASS U+71FC 燼 %1B%24%42%5F%7E +FAIL U+71FE 燾 %1B%24%42%7A%7D assert_equals: expected "%1B%24%42%7A%7D" but got "%26%23%32%39%31%38%32%3B" +PASS U+71FF 燿 %1B%24%42%60%22 +PASS U+7206 爆 %1B%24%42%47%7A +PASS U+720D 爍 %1B%24%42%60%23 +PASS U+7210 爐 %1B%24%42%60%24 +PASS U+721B 爛 %1B%24%42%60%25 +PASS U+7228 爨 %1B%24%42%60%26 +PASS U+722A 爪 %1B%24%42%44%5E +PASS U+722C 爬 %1B%24%42%60%28 +PASS U+722D 爭 %1B%24%42%60%27 +PASS U+7230 爰 %1B%24%42%60%29 +PASS U+7232 爲 %1B%24%42%60%2A +PASS U+7235 爵 %1B%24%42%3C%5F +PASS U+7236 父 %1B%24%42%49%63 +PASS U+723A 爺 %1B%24%42%4C%6C +PASS U+723B 爻 %1B%24%42%60%2B +PASS U+723C 爼 %1B%24%42%60%2C +PASS U+723D 爽 %1B%24%42%41%56 +PASS U+723E 爾 %1B%24%42%3C%24 +PASS U+723F 爿 %1B%24%42%60%2D +PASS U+7240 牀 %1B%24%42%60%2E +PASS U+7246 牆 %1B%24%42%60%2F +PASS U+7247 片 %1B%24%42%4A%52 +PASS U+7248 版 %1B%24%42%48%47 +PASS U+724B 牋 %1B%24%42%60%30 +PASS U+724C 牌 %1B%24%42%47%57 +PASS U+7252 牒 %1B%24%42%44%2D +PASS U+7258 牘 %1B%24%42%60%31 +PASS U+7259 牙 %1B%24%42%32%67 +PASS U+725B 牛 %1B%24%42%35%6D +PASS U+725D 牝 %1B%24%42%4C%46 +PASS U+725F 牟 %1B%24%42%4C%36 +PASS U+7261 牡 %1B%24%42%32%34 +PASS U+7262 牢 %1B%24%42%4F%34 +PASS U+7267 牧 %1B%24%42%4B%52 +PASS U+7269 物 %1B%24%42%4A%2A +PASS U+7272 牲 %1B%24%42%40%37 +PASS U+7274 牴 %1B%24%42%60%32 +PASS U+7279 特 %1B%24%42%46%43 +PASS U+727D 牽 %1B%24%42%38%23 +PASS U+727E 牾 %1B%24%42%60%33 +PASS U+7280 犀 %1B%24%42%3A%54 +PASS U+7281 犁 %1B%24%42%60%35 +PASS U+7282 犂 %1B%24%42%60%34 +PASS U+7287 犇 %1B%24%42%60%36 +PASS U+7292 犒 %1B%24%42%60%37 +PASS U+7296 犖 %1B%24%42%60%38 +PASS U+72A0 犠 %1B%24%42%35%3E +PASS U+72A2 犢 %1B%24%42%60%39 +PASS U+72A7 犧 %1B%24%42%60%3A +PASS U+72AC 犬 %1B%24%42%38%24 +PASS U+72AF 犯 %1B%24%42%48%48 +FAIL U+72B1 犱 %1B%24%42%7A%7E assert_equals: expected "%1B%24%42%7A%7E" but got "%26%23%32%39%33%36%31%3B" +PASS U+72B2 犲 %1B%24%42%60%3C +PASS U+72B6 状 %1B%24%42%3E%75 +PASS U+72B9 犹 %1B%24%42%60%3B +FAIL U+72BE 犾 %1B%24%42%7B%21 assert_equals: expected "%1B%24%42%7B%21" but got "%26%23%32%39%33%37%34%3B" +PASS U+72C2 狂 %1B%24%42%36%38 +PASS U+72C3 狃 %1B%24%42%60%3D +PASS U+72C4 狄 %1B%24%42%60%3F +PASS U+72C6 狆 %1B%24%42%60%3E +PASS U+72CE 狎 %1B%24%42%60%40 +PASS U+72D0 狐 %1B%24%42%38%51 +PASS U+72D2 狒 %1B%24%42%60%41 +PASS U+72D7 狗 %1B%24%42%36%69 +PASS U+72D9 狙 %1B%24%42%41%40 +PASS U+72DB 狛 %1B%24%42%39%7D +PASS U+72E0 狠 %1B%24%42%60%43 +PASS U+72E1 狡 %1B%24%42%60%44 +PASS U+72E2 狢 %1B%24%42%60%42 +PASS U+72E9 狩 %1B%24%42%3C%6D +PASS U+72EC 独 %1B%24%42%46%48 +PASS U+72ED 狭 %1B%24%42%36%39 +PASS U+72F7 狷 %1B%24%42%60%46 +PASS U+72F8 狸 %1B%24%42%43%2C +PASS U+72F9 狹 %1B%24%42%60%45 +PASS U+72FC 狼 %1B%24%42%4F%35 +PASS U+72FD 狽 %1B%24%42%47%62 +PASS U+730A 猊 %1B%24%42%60%49 +PASS U+7316 猖 %1B%24%42%60%4B +PASS U+7317 猗 %1B%24%42%60%48 +PASS U+731B 猛 %1B%24%42%4C%54 +PASS U+731C 猜 %1B%24%42%60%4A +PASS U+731D 猝 %1B%24%42%60%4C +PASS U+731F 猟 %1B%24%42%4E%44 +FAIL U+7324 猤 %1B%24%42%7B%22 assert_equals: expected "%1B%24%42%7B%22" but got "%26%23%32%39%34%37%36%3B" +PASS U+7325 猥 %1B%24%42%60%50 +PASS U+7329 猩 %1B%24%42%60%4F +PASS U+732A 猪 %1B%24%42%43%76 +PASS U+732B 猫 %1B%24%42%47%2D +PASS U+732E 献 %1B%24%42%38%25 +PASS U+732F 猯 %1B%24%42%60%4E +PASS U+7334 猴 %1B%24%42%60%4D +PASS U+7336 猶 %1B%24%42%4D%31 +PASS U+7337 猷 %1B%24%42%4D%32 +PASS U+733E 猾 %1B%24%42%60%51 +PASS U+733F 猿 %1B%24%42%31%6E +PASS U+7344 獄 %1B%24%42%39%76 +PASS U+7345 獅 %1B%24%42%3B%62 +PASS U+734E 獎 %1B%24%42%60%52 +PASS U+734F 獏 %1B%24%42%60%53 +PASS U+7357 獗 %1B%24%42%60%55 +PASS U+7363 獣 %1B%24%42%3D%43 +PASS U+7368 獨 %1B%24%42%60%57 +PASS U+736A 獪 %1B%24%42%60%56 +PASS U+7370 獰 %1B%24%42%60%58 +PASS U+7372 獲 %1B%24%42%33%4D +PASS U+7375 獵 %1B%24%42%60%5A +FAIL U+7377 獷 %1B%24%42%7B%24 assert_equals: expected "%1B%24%42%7B%24" but got "%26%23%32%39%35%35%39%3B" +PASS U+7378 獸 %1B%24%42%60%59 +PASS U+737A 獺 %1B%24%42%60%5C +PASS U+737B 獻 %1B%24%42%60%5B +PASS U+7384 玄 %1B%24%42%38%3C +PASS U+7387 率 %1B%24%42%4E%28 +PASS U+7389 玉 %1B%24%42%36%4C +PASS U+738B 王 %1B%24%42%32%26 +PASS U+7396 玖 %1B%24%42%36%6A +PASS U+73A9 玩 %1B%24%42%34%61 +PASS U+73B2 玲 %1B%24%42%4E%68 +PASS U+73B3 玳 %1B%24%42%60%5E +PASS U+73BB 玻 %1B%24%42%60%60 +FAIL U+73BD 玽 %1B%24%42%7B%25 assert_equals: expected "%1B%24%42%7B%25" but got "%26%23%32%39%36%32%39%3B" +PASS U+73C0 珀 %1B%24%42%60%61 +PASS U+73C2 珂 %1B%24%42%32%51 +PASS U+73C8 珈 %1B%24%42%60%5D +FAIL U+73C9 珉 %1B%24%42%7B%26 assert_equals: expected "%1B%24%42%7B%26" but got "%26%23%32%39%36%34%31%3B" +PASS U+73CA 珊 %1B%24%42%3B%39 +PASS U+73CD 珍 %1B%24%42%44%41 +PASS U+73CE 珎 %1B%24%42%60%5F +FAIL U+73D2 珒 %1B%24%42%7B%29 assert_equals: expected "%1B%24%42%7B%29" but got "%26%23%32%39%36%35%30%3B" +FAIL U+73D6 珖 %1B%24%42%7B%27 assert_equals: expected "%1B%24%42%7B%27" but got "%26%23%32%39%36%35%34%3B" +PASS U+73DE 珞 %1B%24%42%60%64 +PASS U+73E0 珠 %1B%24%42%3C%6E +FAIL U+73E3 珣 %1B%24%42%7B%28 assert_equals: expected "%1B%24%42%7B%28" but got "%26%23%32%39%36%36%37%3B" +PASS U+73E5 珥 %1B%24%42%60%62 +PASS U+73EA 珪 %1B%24%42%37%3E +PASS U+73ED 班 %1B%24%42%48%49 +PASS U+73EE 珮 %1B%24%42%60%63 +PASS U+73F1 珱 %1B%24%42%60%7E +FAIL U+73F5 珵 %1B%24%42%7B%2B assert_equals: expected "%1B%24%42%7B%2B" but got "%26%23%32%39%36%38%35%3B" +PASS U+73F8 珸 %1B%24%42%60%69 +PASS U+73FE 現 %1B%24%42%38%3D +PASS U+7403 球 %1B%24%42%35%65 +PASS U+7405 琅 %1B%24%42%60%66 +PASS U+7406 理 %1B%24%42%4D%7D +FAIL U+7407 琇 %1B%24%42%7B%2A assert_equals: expected "%1B%24%42%7B%2A" but got "%26%23%32%39%37%30%33%3B" +PASS U+7409 琉 %1B%24%42%4E%30 +PASS U+7422 琢 %1B%24%42%42%76 +PASS U+7425 琥 %1B%24%42%60%68 +FAIL U+7426 琦 %1B%24%42%7B%2C assert_equals: expected "%1B%24%42%7B%2C" but got "%26%23%32%39%37%33%34%3B" +FAIL U+7429 琩 %1B%24%42%7B%2E assert_equals: expected "%1B%24%42%7B%2E" but got "%26%23%32%39%37%33%37%3B" +FAIL U+742A 琪 %1B%24%42%7B%2D assert_equals: expected "%1B%24%42%7B%2D" but got "%26%23%32%39%37%33%38%3B" +FAIL U+742E 琮 %1B%24%42%7B%2F assert_equals: expected "%1B%24%42%7B%2F" but got "%26%23%32%39%37%34%32%3B" +PASS U+7432 琲 %1B%24%42%60%6A +PASS U+7433 琳 %1B%24%42%4E%56 +PASS U+7434 琴 %1B%24%42%36%57 +PASS U+7435 琵 %1B%24%42%48%7C +PASS U+7436 琶 %1B%24%42%47%4A +PASS U+743A 琺 %1B%24%42%60%6B +PASS U+743F 琿 %1B%24%42%60%6D +PASS U+7441 瑁 %1B%24%42%60%70 +PASS U+7455 瑕 %1B%24%42%60%6C +PASS U+7459 瑙 %1B%24%42%60%6F +PASS U+745A 瑚 %1B%24%42%38%6A +PASS U+745B 瑛 %1B%24%42%31%4D +PASS U+745C 瑜 %1B%24%42%60%71 +PASS U+745E 瑞 %1B%24%42%3F%70 +PASS U+745F 瑟 %1B%24%42%60%6E +PASS U+7460 瑠 %1B%24%42%4E%5C +FAIL U+7462 瑢 %1B%24%42%7B%30 assert_equals: expected "%1B%24%42%7B%30" but got "%26%23%32%39%37%39%34%3B" +PASS U+7463 瑣 %1B%24%42%60%74 +PASS U+7464 瑤 %1B%24%42%74%24 +PASS U+7469 瑩 %1B%24%42%60%72 +PASS U+746A 瑪 %1B%24%42%60%75 +PASS U+746F 瑯 %1B%24%42%60%67 +PASS U+7470 瑰 %1B%24%42%60%73 +PASS U+7473 瑳 %1B%24%42%3A%3C +PASS U+7476 瑶 %1B%24%42%60%76 +PASS U+747E 瑾 %1B%24%42%60%77 +PASS U+7483 璃 %1B%24%42%4D%7E +FAIL U+7489 璉 %1B%24%42%7B%31 assert_equals: expected "%1B%24%42%7B%31" but got "%26%23%32%39%38%33%33%3B" +PASS U+748B 璋 %1B%24%42%60%78 +PASS U+749E 璞 %1B%24%42%60%79 +FAIL U+749F 璟 %1B%24%42%7B%32 assert_equals: expected "%1B%24%42%7B%32" but got "%26%23%32%39%38%35%35%3B" +PASS U+74A2 璢 %1B%24%42%60%65 +PASS U+74A7 璧 %1B%24%42%60%7A +PASS U+74B0 環 %1B%24%42%34%44 +PASS U+74BD 璽 %1B%24%42%3C%25 +PASS U+74CA 瓊 %1B%24%42%60%7B +PASS U+74CF 瓏 %1B%24%42%60%7C +PASS U+74D4 瓔 %1B%24%42%60%7D +PASS U+74DC 瓜 %1B%24%42%31%3B +PASS U+74E0 瓠 %1B%24%42%61%21 +PASS U+74E2 瓢 %1B%24%42%49%3B +PASS U+74E3 瓣 %1B%24%42%61%22 +PASS U+74E6 瓦 %1B%24%42%34%24 +PASS U+74E7 瓧 %1B%24%42%61%23 +PASS U+74E9 瓩 %1B%24%42%61%24 +PASS U+74EE 瓮 %1B%24%42%61%25 +PASS U+74F0 瓰 %1B%24%42%61%27 +PASS U+74F1 瓱 %1B%24%42%61%28 +PASS U+74F2 瓲 %1B%24%42%61%26 +PASS U+74F6 瓶 %1B%24%42%49%53 +PASS U+74F7 瓷 %1B%24%42%61%2A +PASS U+74F8 瓸 %1B%24%42%61%29 +FAIL U+7501 甁 %1B%24%42%7B%33 assert_equals: expected "%1B%24%42%7B%33" but got "%26%23%32%39%39%35%33%3B" +PASS U+7503 甃 %1B%24%42%61%2C +PASS U+7504 甄 %1B%24%42%61%2B +PASS U+7505 甅 %1B%24%42%61%2D +PASS U+750C 甌 %1B%24%42%61%2E +PASS U+750D 甍 %1B%24%42%61%30 +PASS U+750E 甎 %1B%24%42%61%2F +PASS U+7511 甑 %1B%24%42%39%79 +PASS U+7513 甓 %1B%24%42%61%32 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_4001-5000-expected.txt new file mode 100644 index 0000000..d85cfec1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_4001-5000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+7515 甕 %1B%24%42%61%31 +PASS U+7518 甘 %1B%24%42%34%45 +PASS U+751A 甚 %1B%24%42%3F%53 +PASS U+751C 甜 %1B%24%42%45%3C +PASS U+751E 甞 %1B%24%42%61%33 +PASS U+751F 生 %1B%24%42%40%38 +PASS U+7523 産 %1B%24%42%3B%3A +PASS U+7525 甥 %1B%24%42%31%79 +PASS U+7526 甦 %1B%24%42%61%34 +PASS U+7528 用 %1B%24%42%4D%51 +PASS U+752B 甫 %1B%24%42%4A%63 +PASS U+752C 甬 %1B%24%42%61%35 +FAIL U+752F 甯 %1B%24%42%79%6C assert_equals: expected "%1B%24%42%79%6C" but got "%26%23%32%39%39%39%39%3B" +PASS U+7530 田 %1B%24%42%45%44 +PASS U+7531 由 %1B%24%42%4D%33 +PASS U+7532 甲 %1B%24%42%39%43 +PASS U+7533 申 %1B%24%42%3F%3D +PASS U+7537 男 %1B%24%42%43%4B +PASS U+7538 甸 %1B%24%42%52%34 +PASS U+753A 町 %1B%24%42%44%2E +PASS U+753B 画 %1B%24%42%32%68 +PASS U+753C 甼 %1B%24%42%61%36 +PASS U+7544 畄 %1B%24%42%61%37 +PASS U+7546 畆 %1B%24%42%61%3C +PASS U+7549 畉 %1B%24%42%61%3A +PASS U+754A 畊 %1B%24%42%61%39 +PASS U+754B 畋 %1B%24%42%5A%42 +PASS U+754C 界 %1B%24%42%33%26 +PASS U+754D 畍 %1B%24%42%61%38 +PASS U+754F 畏 %1B%24%42%30%5A +PASS U+7551 畑 %1B%24%42%48%2A +PASS U+7554 畔 %1B%24%42%48%4A +PASS U+7559 留 %1B%24%42%4E%31 +PASS U+755A 畚 %1B%24%42%61%3D +PASS U+755B 畛 %1B%24%42%61%3B +PASS U+755C 畜 %1B%24%42%43%5C +PASS U+755D 畝 %1B%24%42%40%26 +PASS U+7560 畠 %1B%24%42%48%2B +PASS U+7562 畢 %1B%24%42%49%2D +PASS U+7564 畤 %1B%24%42%61%3F +PASS U+7565 略 %1B%24%42%4E%2C +PASS U+7566 畦 %1B%24%42%37%4D +PASS U+7567 畧 %1B%24%42%61%40 +PASS U+7569 畩 %1B%24%42%61%3E +PASS U+756A 番 %1B%24%42%48%56 +PASS U+756B 畫 %1B%24%42%61%41 +PASS U+756D 畭 %1B%24%42%61%42 +FAIL U+756F 畯 %1B%24%42%7B%34 assert_equals: expected "%1B%24%42%7B%34" but got "%26%23%33%30%30%36%33%3B" +PASS U+7570 異 %1B%24%42%30%5B +PASS U+7573 畳 %1B%24%42%3E%76 +PASS U+7574 畴 %1B%24%42%61%47 +PASS U+7576 當 %1B%24%42%61%44 +PASS U+7577 畷 %1B%24%42%46%6D +PASS U+7578 畸 %1B%24%42%61%43 +PASS U+757F 畿 %1B%24%42%35%26 +PASS U+7582 疂 %1B%24%42%61%4A +PASS U+7586 疆 %1B%24%42%61%45 +PASS U+7587 疇 %1B%24%42%61%46 +PASS U+7589 疉 %1B%24%42%61%49 +PASS U+758A 疊 %1B%24%42%61%48 +PASS U+758B 疋 %1B%24%42%49%25 +PASS U+758E 疎 %1B%24%42%41%42 +PASS U+758F 疏 %1B%24%42%41%41 +PASS U+7591 疑 %1B%24%42%35%3F +PASS U+7594 疔 %1B%24%42%61%4B +PASS U+759A 疚 %1B%24%42%61%4C +PASS U+759D 疝 %1B%24%42%61%4D +PASS U+75A3 疣 %1B%24%42%61%4F +PASS U+75A5 疥 %1B%24%42%61%4E +PASS U+75AB 疫 %1B%24%42%31%56 +PASS U+75B1 疱 %1B%24%42%61%57 +PASS U+75B2 疲 %1B%24%42%48%68 +PASS U+75B3 疳 %1B%24%42%61%51 +PASS U+75B5 疵 %1B%24%42%61%53 +PASS U+75B8 疸 %1B%24%42%61%55 +PASS U+75B9 疹 %1B%24%42%3F%3E +PASS U+75BC 疼 %1B%24%42%61%56 +PASS U+75BD 疽 %1B%24%42%61%54 +PASS U+75BE 疾 %1B%24%42%3C%40 +PASS U+75C2 痂 %1B%24%42%61%50 +PASS U+75C3 痃 %1B%24%42%61%52 +PASS U+75C5 病 %1B%24%42%49%42 +PASS U+75C7 症 %1B%24%42%3E%49 +PASS U+75CA 痊 %1B%24%42%61%59 +PASS U+75CD 痍 %1B%24%42%61%58 +PASS U+75D2 痒 %1B%24%42%61%5A +PASS U+75D4 痔 %1B%24%42%3C%26 +PASS U+75D5 痕 %1B%24%42%3A%2F +PASS U+75D8 痘 %1B%24%42%45%77 +PASS U+75D9 痙 %1B%24%42%61%5B +PASS U+75DB 痛 %1B%24%42%44%4B +PASS U+75DE 痞 %1B%24%42%61%5D +PASS U+75E2 痢 %1B%24%42%4E%21 +PASS U+75E3 痣 %1B%24%42%61%5C +PASS U+75E9 痩 %1B%24%42%41%69 +PASS U+75F0 痰 %1B%24%42%61%62 +PASS U+75F2 痲 %1B%24%42%61%64 +PASS U+75F3 痳 %1B%24%42%61%65 +PASS U+75F4 痴 %1B%24%42%43%54 +PASS U+75FA 痺 %1B%24%42%61%63 +PASS U+75FC 痼 %1B%24%42%61%60 +PASS U+75FE 痾 %1B%24%42%61%5E +PASS U+75FF 痿 %1B%24%42%61%5F +PASS U+7601 瘁 %1B%24%42%61%61 +PASS U+7609 瘉 %1B%24%42%61%68 +PASS U+760B 瘋 %1B%24%42%61%66 +PASS U+760D 瘍 %1B%24%42%61%67 +PASS U+761F 瘟 %1B%24%42%61%69 +PASS U+7620 瘠 %1B%24%42%61%6B +PASS U+7621 瘡 %1B%24%42%61%6C +PASS U+7622 瘢 %1B%24%42%61%6D +PASS U+7624 瘤 %1B%24%42%61%6E +PASS U+7627 瘧 %1B%24%42%61%6A +PASS U+7630 瘰 %1B%24%42%61%70 +PASS U+7634 瘴 %1B%24%42%61%6F +PASS U+763B 瘻 %1B%24%42%61%71 +PASS U+7642 療 %1B%24%42%4E%45 +PASS U+7646 癆 %1B%24%42%61%74 +PASS U+7647 癇 %1B%24%42%61%72 +PASS U+7648 癈 %1B%24%42%61%73 +PASS U+764C 癌 %1B%24%42%34%62 +PASS U+7652 癒 %1B%24%42%4C%7E +PASS U+7656 癖 %1B%24%42%4A%4A +PASS U+7658 癘 %1B%24%42%61%76 +PASS U+765C 癜 %1B%24%42%61%75 +PASS U+7661 癡 %1B%24%42%61%77 +PASS U+7662 癢 %1B%24%42%61%78 +PASS U+7667 癧 %1B%24%42%61%7C +PASS U+7668 癨 %1B%24%42%61%79 +PASS U+7669 癩 %1B%24%42%61%7A +PASS U+766A 癪 %1B%24%42%61%7B +PASS U+766C 癬 %1B%24%42%61%7D +PASS U+7670 癰 %1B%24%42%61%7E +PASS U+7672 癲 %1B%24%42%62%21 +PASS U+7676 癶 %1B%24%42%62%22 +PASS U+7678 癸 %1B%24%42%62%23 +PASS U+767A 発 %1B%24%42%48%2F +PASS U+767B 登 %1B%24%42%45%50 +PASS U+767C 發 %1B%24%42%62%24 +PASS U+767D 白 %1B%24%42%47%72 +PASS U+767E 百 %1B%24%42%49%34 +PASS U+7680 皀 %1B%24%42%62%25 +FAIL U+7682 皂 %1B%24%42%7B%35 assert_equals: expected "%1B%24%42%7B%35" but got "%26%23%33%30%33%33%38%3B" +PASS U+7683 皃 %1B%24%42%62%26 +PASS U+7684 的 %1B%24%42%45%2A +PASS U+7686 皆 %1B%24%42%33%27 +PASS U+7687 皇 %1B%24%42%39%44 +PASS U+7688 皈 %1B%24%42%62%27 +PASS U+768B 皋 %1B%24%42%62%28 +PASS U+768E 皎 %1B%24%42%62%29 +PASS U+7690 皐 %1B%24%42%3B%29 +PASS U+7693 皓 %1B%24%42%62%2B +PASS U+7696 皖 %1B%24%42%62%2A +PASS U+7699 皙 %1B%24%42%62%2C +PASS U+769A 皚 %1B%24%42%62%2D +FAIL U+769B 皛 %1B%24%42%7B%38 assert_equals: expected "%1B%24%42%7B%38" but got "%26%23%33%30%33%36%33%3B" +FAIL U+769C 皜 %1B%24%42%7B%36 assert_equals: expected "%1B%24%42%7B%36" but got "%26%23%33%30%33%36%34%3B" +FAIL U+769E 皞 %1B%24%42%7B%37 assert_equals: expected "%1B%24%42%7B%37" but got "%26%23%33%30%33%36%36%3B" +FAIL U+76A6 皦 %1B%24%42%7B%39 assert_equals: expected "%1B%24%42%7B%39" but got "%26%23%33%30%33%37%34%3B" +PASS U+76AE 皮 %1B%24%42%48%69 +PASS U+76B0 皰 %1B%24%42%62%2E +PASS U+76B4 皴 %1B%24%42%62%2F +PASS U+76B7 皷 %1B%24%42%73%69 +PASS U+76B8 皸 %1B%24%42%62%30 +PASS U+76B9 皹 %1B%24%42%62%31 +PASS U+76BA 皺 %1B%24%42%62%32 +PASS U+76BF 皿 %1B%24%42%3B%2E +PASS U+76C2 盂 %1B%24%42%62%33 +PASS U+76C3 盃 %1B%24%42%47%56 +PASS U+76C6 盆 %1B%24%42%4B%5F +PASS U+76C8 盈 %1B%24%42%31%4E +PASS U+76CA 益 %1B%24%42%31%57 +PASS U+76CD 盍 %1B%24%42%62%34 +PASS U+76D2 盒 %1B%24%42%62%36 +PASS U+76D6 盖 %1B%24%42%62%35 +PASS U+76D7 盗 %1B%24%42%45%70 +PASS U+76DB 盛 %1B%24%42%40%39 +PASS U+76DC 盜 %1B%24%42%5D%39 +PASS U+76DE 盞 %1B%24%42%62%37 +PASS U+76DF 盟 %1B%24%42%4C%41 +PASS U+76E1 盡 %1B%24%42%62%38 +PASS U+76E3 監 %1B%24%42%34%46 +PASS U+76E4 盤 %1B%24%42%48%57 +PASS U+76E5 盥 %1B%24%42%62%39 +PASS U+76E7 盧 %1B%24%42%62%3A +PASS U+76EA 盪 %1B%24%42%62%3B +PASS U+76EE 目 %1B%24%42%4C%5C +PASS U+76F2 盲 %1B%24%42%4C%55 +PASS U+76F4 直 %1B%24%42%44%3E +PASS U+76F8 相 %1B%24%42%41%6A +PASS U+76FB 盻 %1B%24%42%62%3D +PASS U+76FE 盾 %1B%24%42%3D%62 +PASS U+7701 省 %1B%24%42%3E%4A +PASS U+7704 眄 %1B%24%42%62%40 +PASS U+7707 眇 %1B%24%42%62%3F +PASS U+7708 眈 %1B%24%42%62%3E +PASS U+7709 眉 %1B%24%42%48%7D +PASS U+770B 看 %1B%24%42%34%47 +PASS U+770C 県 %1B%24%42%38%29 +PASS U+771B 眛 %1B%24%42%62%46 +PASS U+771E 眞 %1B%24%42%62%43 +PASS U+771F 真 %1B%24%42%3F%3F +PASS U+7720 眠 %1B%24%42%4C%32 +PASS U+7724 眤 %1B%24%42%62%42 +PASS U+7725 眥 %1B%24%42%62%44 +PASS U+7726 眦 %1B%24%42%62%45 +PASS U+7729 眩 %1B%24%42%62%41 +PASS U+7737 眷 %1B%24%42%62%47 +PASS U+7738 眸 %1B%24%42%62%48 +PASS U+773A 眺 %1B%24%42%44%2F +PASS U+773C 眼 %1B%24%42%34%63 +PASS U+7740 着 %1B%24%42%43%65 +FAIL U+7746 睆 %1B%24%42%7B%3B assert_equals: expected "%1B%24%42%7B%3B" but got "%26%23%33%30%35%33%34%3B" +PASS U+7747 睇 %1B%24%42%62%49 +PASS U+775A 睚 %1B%24%42%62%4A +PASS U+775B 睛 %1B%24%42%62%4D +PASS U+7761 睡 %1B%24%42%3F%67 +PASS U+7763 督 %1B%24%42%46%44 +PASS U+7765 睥 %1B%24%42%62%4E +PASS U+7766 睦 %1B%24%42%4B%53 +PASS U+7768 睨 %1B%24%42%62%4B +PASS U+776B 睫 %1B%24%42%62%4C +PASS U+7779 睹 %1B%24%42%62%51 +PASS U+777E 睾 %1B%24%42%62%50 +PASS U+777F 睿 %1B%24%42%62%4F +PASS U+778B 瞋 %1B%24%42%62%53 +PASS U+778E 瞎 %1B%24%42%62%52 +PASS U+7791 瞑 %1B%24%42%62%54 +PASS U+779E 瞞 %1B%24%42%62%56 +PASS U+77A0 瞠 %1B%24%42%62%55 +PASS U+77A5 瞥 %1B%24%42%4A%4D +PASS U+77AC 瞬 %1B%24%42%3D%56 +PASS U+77AD 瞭 %1B%24%42%4E%46 +PASS U+77B0 瞰 %1B%24%42%62%57 +PASS U+77B3 瞳 %1B%24%42%46%37 +PASS U+77B6 瞶 %1B%24%42%62%58 +PASS U+77B9 瞹 %1B%24%42%62%59 +PASS U+77BB 瞻 %1B%24%42%62%5D +PASS U+77BC 瞼 %1B%24%42%62%5B +PASS U+77BD 瞽 %1B%24%42%62%5C +PASS U+77BF 瞿 %1B%24%42%62%5A +PASS U+77C7 矇 %1B%24%42%62%5E +PASS U+77CD 矍 %1B%24%42%62%5F +PASS U+77D7 矗 %1B%24%42%62%60 +PASS U+77DA 矚 %1B%24%42%62%61 +PASS U+77DB 矛 %1B%24%42%4C%37 +PASS U+77DC 矜 %1B%24%42%62%62 +PASS U+77E2 矢 %1B%24%42%4C%70 +PASS U+77E3 矣 %1B%24%42%62%63 +PASS U+77E5 知 %1B%24%42%43%4E +PASS U+77E7 矧 %1B%24%42%47%6A +PASS U+77E9 矩 %1B%24%42%36%6B +PASS U+77ED 短 %1B%24%42%43%3B +PASS U+77EE 矮 %1B%24%42%62%64 +PASS U+77EF 矯 %1B%24%42%36%3A +PASS U+77F3 石 %1B%24%42%40%50 +PASS U+77FC 矼 %1B%24%42%62%65 +PASS U+7802 砂 %1B%24%42%3A%3D +PASS U+780C 砌 %1B%24%42%62%66 +PASS U+7812 砒 %1B%24%42%62%67 +PASS U+7814 研 %1B%24%42%38%26 +PASS U+7815 砕 %1B%24%42%3A%55 +PASS U+7820 砠 %1B%24%42%62%69 +FAIL U+7821 砡 %1B%24%42%7B%3D assert_equals: expected "%1B%24%42%7B%3D" but got "%26%23%33%30%37%35%33%3B" +PASS U+7825 砥 %1B%24%42%45%56 +PASS U+7826 砦 %1B%24%42%3A%56 +PASS U+7827 砧 %1B%24%42%35%4E +PASS U+7832 砲 %1B%24%42%4B%24 +PASS U+7834 破 %1B%24%42%47%4B +PASS U+783A 砺 %1B%24%42%45%57 +PASS U+783F 砿 %1B%24%42%39%5C +PASS U+7845 硅 %1B%24%42%62%6B +FAIL U+784E 硎 %1B%24%42%7B%3E assert_equals: expected "%1B%24%42%7B%3E" but got "%26%23%33%30%37%39%38%3B" +PASS U+785D 硝 %1B%24%42%3E%4B +FAIL U+7864 硤 %1B%24%42%7B%3F assert_equals: expected "%1B%24%42%7B%3F" but got "%26%23%33%30%38%32%30%3B" +PASS U+786B 硫 %1B%24%42%4E%32 +PASS U+786C 硬 %1B%24%42%39%45 +PASS U+786F 硯 %1B%24%42%38%27 +PASS U+7872 硲 %1B%24%42%48%23 +PASS U+7874 硴 %1B%24%42%62%6D +FAIL U+787A 硺 %1B%24%42%7B%40 assert_equals: expected "%1B%24%42%7B%40" but got "%26%23%33%30%38%34%32%3B" +PASS U+787C 硼 %1B%24%42%62%6F +PASS U+7881 碁 %1B%24%42%38%6B +PASS U+7886 碆 %1B%24%42%62%6E +PASS U+7887 碇 %1B%24%42%44%76 +PASS U+788C 碌 %1B%24%42%62%71 +PASS U+788D 碍 %1B%24%42%33%37 +PASS U+788E 碎 %1B%24%42%62%6C +PASS U+7891 碑 %1B%24%42%48%6A +PASS U+7893 碓 %1B%24%42%31%30 +PASS U+7895 碕 %1B%24%42%3A%6C +PASS U+7897 碗 %1B%24%42%4F%52 +PASS U+789A 碚 %1B%24%42%62%70 +PASS U+78A3 碣 %1B%24%42%62%72 +PASS U+78A7 碧 %1B%24%42%4A%4B +PASS U+78A9 碩 %1B%24%42%40%59 +PASS U+78AA 碪 %1B%24%42%62%74 +PASS U+78AF 碯 %1B%24%42%62%75 +PASS U+78B5 碵 %1B%24%42%62%73 +PASS U+78BA 確 %1B%24%42%33%4E +PASS U+78BC 碼 %1B%24%42%62%7B +PASS U+78BE 碾 %1B%24%42%62%7A +PASS U+78C1 磁 %1B%24%42%3C%27 +PASS U+78C5 磅 %1B%24%42%62%7C +PASS U+78C6 磆 %1B%24%42%62%77 +PASS U+78CA 磊 %1B%24%42%62%7D +PASS U+78CB 磋 %1B%24%42%62%78 +PASS U+78D0 磐 %1B%24%42%48%58 +PASS U+78D1 磑 %1B%24%42%62%76 +PASS U+78D4 磔 %1B%24%42%62%79 +PASS U+78DA 磚 %1B%24%42%63%22 +PASS U+78E7 磧 %1B%24%42%63%21 +PASS U+78E8 磨 %1B%24%42%4B%61 +PASS U+78EC 磬 %1B%24%42%62%7E +PASS U+78EF 磯 %1B%24%42%30%6B +PASS U+78F4 磴 %1B%24%42%63%24 +PASS U+78FD 磽 %1B%24%42%63%23 +PASS U+7901 礁 %1B%24%42%3E%4C +PASS U+7907 礇 %1B%24%42%63%25 +PASS U+790E 礎 %1B%24%42%41%43 +PASS U+7911 礑 %1B%24%42%63%27 +PASS U+7912 礒 %1B%24%42%63%26 +PASS U+7919 礙 %1B%24%42%63%28 +PASS U+7926 礦 %1B%24%42%62%68 +PASS U+792A 礪 %1B%24%42%62%6A +PASS U+792B 礫 %1B%24%42%63%2A +PASS U+792C 礬 %1B%24%42%63%29 +FAIL U+7930 礰 %1B%24%42%7B%41 assert_equals: expected "%1B%24%42%7B%41" but got "%26%23%33%31%30%32%34%3B" +PASS U+793A 示 %1B%24%42%3C%28 +PASS U+793C 礼 %1B%24%42%4E%69 +PASS U+793E 社 %1B%24%42%3C%52 +PASS U+7940 祀 %1B%24%42%63%2B +PASS U+7941 祁 %1B%24%42%37%37 +PASS U+7947 祇 %1B%24%42%35%40 +PASS U+7948 祈 %1B%24%42%35%27 +PASS U+7949 祉 %1B%24%42%3B%63 +PASS U+7950 祐 %1B%24%42%4D%34 +PASS U+7953 祓 %1B%24%42%63%31 +PASS U+7955 祕 %1B%24%42%63%30 +PASS U+7956 祖 %1B%24%42%41%44 +PASS U+7957 祗 %1B%24%42%63%2D +PASS U+795A 祚 %1B%24%42%63%2F +PASS U+795D 祝 %1B%24%42%3D%4B +PASS U+795E 神 %1B%24%42%3F%40 +PASS U+795F 祟 %1B%24%42%63%2E +PASS U+7960 祠 %1B%24%42%63%2C +PASS U+7962 祢 %1B%24%42%47%2A +PASS U+7965 祥 %1B%24%42%3E%4D +PASS U+7968 票 %1B%24%42%49%3C +PASS U+796D 祭 %1B%24%42%3A%57 +PASS U+7977 祷 %1B%24%42%45%78 +PASS U+797A 祺 %1B%24%42%63%32 +PASS U+797F 祿 %1B%24%42%63%33 +PASS U+7980 禀 %1B%24%42%63%49 +PASS U+7981 禁 %1B%24%42%36%58 +PASS U+7984 禄 %1B%24%42%4F%3D +PASS U+7985 禅 %1B%24%42%41%35 +PASS U+798A 禊 %1B%24%42%63%34 +PASS U+798D 禍 %1B%24%42%32%52 +PASS U+798E 禎 %1B%24%42%44%77 +PASS U+798F 福 %1B%24%42%4A%21 +FAIL U+7994 禔 %1B%24%42%7B%45 assert_equals: expected "%1B%24%42%7B%45" but got "%26%23%33%31%31%32%34%3B" +FAIL U+799B 禛 %1B%24%42%7B%47 assert_equals: expected "%1B%24%42%7B%47" but got "%26%23%33%31%31%33%31%3B" +PASS U+799D 禝 %1B%24%42%63%35 +PASS U+79A6 禦 %1B%24%42%35%7A +PASS U+79A7 禧 %1B%24%42%63%36 +PASS U+79AA 禪 %1B%24%42%63%38 +PASS U+79AE 禮 %1B%24%42%63%39 +PASS U+79B0 禰 %1B%24%42%47%29 +PASS U+79B3 禳 %1B%24%42%63%3A +PASS U+79B9 禹 %1B%24%42%63%3B +PASS U+79BA 禺 %1B%24%42%63%3C +PASS U+79BD 禽 %1B%24%42%36%59 +PASS U+79BE 禾 %1B%24%42%32%53 +PASS U+79BF 禿 %1B%24%42%46%45 +PASS U+79C0 秀 %1B%24%42%3D%28 +PASS U+79C1 私 %1B%24%42%3B%64 +PASS U+79C9 秉 %1B%24%42%63%3D +PASS U+79CB 秋 %1B%24%42%3D%29 +PASS U+79D1 科 %1B%24%42%32%4A +PASS U+79D2 秒 %1B%24%42%49%43 +PASS U+79D5 秕 %1B%24%42%63%3E +PASS U+79D8 秘 %1B%24%42%48%6B +PASS U+79DF 租 %1B%24%42%41%45 +PASS U+79E1 秡 %1B%24%42%63%41 +PASS U+79E3 秣 %1B%24%42%63%42 +PASS U+79E4 秤 %1B%24%42%47%69 +PASS U+79E6 秦 %1B%24%42%3F%41 +PASS U+79E7 秧 %1B%24%42%63%3F +PASS U+79E9 秩 %1B%24%42%43%61 +PASS U+79EC 秬 %1B%24%42%63%40 +PASS U+79F0 称 %1B%24%42%3E%4E +PASS U+79FB 移 %1B%24%42%30%5C +PASS U+7A00 稀 %1B%24%42%35%29 +PASS U+7A08 稈 %1B%24%42%63%43 +PASS U+7A0B 程 %1B%24%42%44%78 +PASS U+7A0D 稍 %1B%24%42%63%44 +PASS U+7A0E 税 %1B%24%42%40%47 +PASS U+7A14 稔 %1B%24%42%4C%2D +PASS U+7A17 稗 %1B%24%42%49%23 +PASS U+7A18 稘 %1B%24%42%63%45 +PASS U+7A19 稙 %1B%24%42%63%46 +PASS U+7A1A 稚 %1B%24%42%43%55 +PASS U+7A1C 稜 %1B%24%42%4E%47 +PASS U+7A1F 稟 %1B%24%42%63%48 +PASS U+7A20 稠 %1B%24%42%63%47 +PASS U+7A2E 種 %1B%24%42%3C%6F +PASS U+7A31 稱 %1B%24%42%63%4A +PASS U+7A32 稲 %1B%24%42%30%70 +PASS U+7A37 稷 %1B%24%42%63%4D +PASS U+7A3B 稻 %1B%24%42%63%4B +PASS U+7A3C 稼 %1B%24%42%32%54 +PASS U+7A3D 稽 %1B%24%42%37%4E +PASS U+7A3E 稾 %1B%24%42%63%4C +PASS U+7A3F 稿 %1B%24%42%39%46 +PASS U+7A40 穀 %1B%24%42%39%72 +PASS U+7A42 穂 %1B%24%42%4A%66 +PASS U+7A43 穃 %1B%24%42%63%4E +PASS U+7A46 穆 %1B%24%42%4B%54 +PASS U+7A49 穉 %1B%24%42%63%50 +PASS U+7A4D 積 %1B%24%42%40%51 +PASS U+7A4E 穎 %1B%24%42%31%4F +PASS U+7A4F 穏 %1B%24%42%32%3A +PASS U+7A50 穐 %1B%24%42%30%2C +PASS U+7A57 穗 %1B%24%42%63%4F +PASS U+7A61 穡 %1B%24%42%63%51 +PASS U+7A62 穢 %1B%24%42%63%52 +PASS U+7A63 穣 %1B%24%42%3E%77 +PASS U+7A69 穩 %1B%24%42%63%53 +PASS U+7A6B 穫 %1B%24%42%33%4F +PASS U+7A70 穰 %1B%24%42%63%55 +PASS U+7A74 穴 %1B%24%42%37%6A +PASS U+7A76 究 %1B%24%42%35%66 +PASS U+7A79 穹 %1B%24%42%63%56 +PASS U+7A7A 空 %1B%24%42%36%75 +PASS U+7A7D 穽 %1B%24%42%63%57 +PASS U+7A7F 穿 %1B%24%42%40%7C +PASS U+7A81 突 %1B%24%42%46%4D +PASS U+7A83 窃 %1B%24%42%40%60 +PASS U+7A84 窄 %1B%24%42%3A%75 +PASS U+7A88 窈 %1B%24%42%63%58 +PASS U+7A92 窒 %1B%24%42%43%62 +PASS U+7A93 窓 %1B%24%42%41%6B +PASS U+7A95 窕 %1B%24%42%63%5A +PASS U+7A96 窖 %1B%24%42%63%5C +PASS U+7A97 窗 %1B%24%42%63%59 +PASS U+7A98 窘 %1B%24%42%63%5B +PASS U+7A9F 窟 %1B%24%42%37%22 +PASS U+7AA9 窩 %1B%24%42%63%5D +PASS U+7AAA 窪 %1B%24%42%37%26 +PASS U+7AAE 窮 %1B%24%42%35%67 +PASS U+7AAF 窯 %1B%24%42%4D%52 +PASS U+7AB0 窰 %1B%24%42%63%5F +PASS U+7AB6 窶 %1B%24%42%63%60 +PASS U+7ABA 窺 %1B%24%42%31%2E +PASS U+7ABF 窿 %1B%24%42%63%63 +PASS U+7AC3 竃 %1B%24%42%33%76 +PASS U+7AC4 竄 %1B%24%42%63%62 +PASS U+7AC5 竅 %1B%24%42%63%61 +PASS U+7AC7 竇 %1B%24%42%63%65 +PASS U+7AC8 竈 %1B%24%42%63%5E +PASS U+7ACA 竊 %1B%24%42%63%66 +PASS U+7ACB 立 %1B%24%42%4E%29 +PASS U+7ACD 竍 %1B%24%42%63%67 +PASS U+7ACF 竏 %1B%24%42%63%68 +FAIL U+7AD1 竑 %1B%24%42%7B%48 assert_equals: expected "%1B%24%42%7B%48" but got "%26%23%33%31%34%34%31%3B" +PASS U+7AD2 竒 %1B%24%42%54%74 +PASS U+7AD3 竓 %1B%24%42%63%6A +PASS U+7AD5 竕 %1B%24%42%63%69 +PASS U+7AD9 站 %1B%24%42%63%6B +PASS U+7ADA 竚 %1B%24%42%63%6C +PASS U+7ADC 竜 %1B%24%42%4E%35 +PASS U+7ADD 竝 %1B%24%42%63%6D +PASS U+7ADF 竟 %1B%24%42%70%6F +PASS U+7AE0 章 %1B%24%42%3E%4F +PASS U+7AE1 竡 %1B%24%42%63%6E +PASS U+7AE2 竢 %1B%24%42%63%6F +PASS U+7AE3 竣 %1B%24%42%3D%57 +PASS U+7AE5 童 %1B%24%42%46%38 +PASS U+7AE6 竦 %1B%24%42%63%70 +FAIL U+7AE7 竧 %1B%24%42%7B%49 assert_equals: expected "%1B%24%42%7B%49" but got "%26%23%33%31%34%36%33%3B" +PASS U+7AEA 竪 %1B%24%42%43%28 +FAIL U+7AEB 竫 %1B%24%42%7B%4B assert_equals: expected "%1B%24%42%7B%4B" but got "%26%23%33%31%34%36%37%3B" +PASS U+7AED 竭 %1B%24%42%63%71 +PASS U+7AEF 端 %1B%24%42%43%3C +PASS U+7AF0 竰 %1B%24%42%63%72 +PASS U+7AF6 競 %1B%24%42%36%25 +PASS U+7AF8 竸 %1B%24%42%51%3F +PASS U+7AF9 竹 %1B%24%42%43%5D +PASS U+7AFA 竺 %1B%24%42%3C%33 +PASS U+7AFF 竿 %1B%24%42%34%48 +PASS U+7B02 笂 %1B%24%42%63%73 +PASS U+7B04 笄 %1B%24%42%64%22 +PASS U+7B06 笆 %1B%24%42%63%76 +PASS U+7B08 笈 %1B%24%42%35%68 +PASS U+7B0A 笊 %1B%24%42%63%75 +PASS U+7B0B 笋 %1B%24%42%64%24 +PASS U+7B0F 笏 %1B%24%42%63%74 +PASS U+7B11 笑 %1B%24%42%3E%50 +PASS U+7B18 笘 %1B%24%42%63%78 +PASS U+7B19 笙 %1B%24%42%63%79 +PASS U+7B1B 笛 %1B%24%42%45%2B +PASS U+7B1E 笞 %1B%24%42%63%7A +PASS U+7B20 笠 %1B%24%42%33%5E +PASS U+7B25 笥 %1B%24%42%3F%5A +PASS U+7B26 符 %1B%24%42%49%64 +PASS U+7B28 笨 %1B%24%42%63%7C +PASS U+7B2C 第 %1B%24%42%42%68 +PASS U+7B33 笳 %1B%24%42%63%77 +PASS U+7B35 笵 %1B%24%42%63%7B +PASS U+7B36 笶 %1B%24%42%63%7D +PASS U+7B39 笹 %1B%24%42%3A%7B +PASS U+7B45 筅 %1B%24%42%64%26 +PASS U+7B46 筆 %1B%24%42%49%2E +PASS U+7B48 筈 %1B%24%42%48%26 +PASS U+7B49 等 %1B%24%42%45%79 +PASS U+7B4B 筋 %1B%24%42%36%5A +PASS U+7B4C 筌 %1B%24%42%64%25 +PASS U+7B4D 筍 %1B%24%42%64%23 +PASS U+7B4F 筏 %1B%24%42%48%35 +PASS U+7B50 筐 %1B%24%42%63%7E +PASS U+7B51 筑 %1B%24%42%43%5E +PASS U+7B52 筒 %1B%24%42%45%7B +PASS U+7B54 答 %1B%24%42%45%7A +PASS U+7B56 策 %1B%24%42%3A%76 +PASS U+7B5D 筝 %1B%24%42%64%38 +PASS U+7B65 筥 %1B%24%42%64%28 +PASS U+7B67 筧 %1B%24%42%64%2A +PASS U+7B6C 筬 %1B%24%42%64%2D +PASS U+7B6E 筮 %1B%24%42%64%2E +PASS U+7B70 筰 %1B%24%42%64%2B +PASS U+7B71 筱 %1B%24%42%64%2C +PASS U+7B74 筴 %1B%24%42%64%29 +PASS U+7B75 筵 %1B%24%42%64%27 +PASS U+7B7A 筺 %1B%24%42%64%21 +PASS U+7B86 箆 %1B%24%42%4A%4F +PASS U+7B87 箇 %1B%24%42%32%55 +PASS U+7B8B 箋 %1B%24%42%64%35 +PASS U+7B8D 箍 %1B%24%42%64%32 +PASS U+7B8F 箏 %1B%24%42%64%37 +PASS U+7B92 箒 %1B%24%42%64%36 +PASS U+7B94 箔 %1B%24%42%47%73 +PASS U+7B95 箕 %1B%24%42%4C%27 +PASS U+7B97 算 %1B%24%42%3B%3B +PASS U+7B98 箘 %1B%24%42%64%30 +PASS U+7B99 箙 %1B%24%42%64%39 +PASS U+7B9A 箚 %1B%24%42%64%34 +PASS U+7B9C 箜 %1B%24%42%64%33 +PASS U+7B9D 箝 %1B%24%42%64%2F +FAIL U+7B9E 箞 %1B%24%42%7B%4C assert_equals: expected "%1B%24%42%7B%4C" but got "%26%23%33%31%36%34%36%3B" +PASS U+7B9F 箟 %1B%24%42%64%31 +PASS U+7BA1 管 %1B%24%42%34%49 +PASS U+7BAA 箪 %1B%24%42%43%3D +PASS U+7BAD 箭 %1B%24%42%40%7D +PASS U+7BB1 箱 %1B%24%42%48%22 +PASS U+7BB4 箴 %1B%24%42%64%3E +PASS U+7BB8 箸 %1B%24%42%48%24 +PASS U+7BC0 節 %1B%24%42%40%61 +PASS U+7BC1 篁 %1B%24%42%64%3B +PASS U+7BC4 範 %1B%24%42%48%4F +PASS U+7BC6 篆 %1B%24%42%64%3F +PASS U+7BC7 篇 %1B%24%42%4A%53 +PASS U+7BC9 築 %1B%24%42%43%5B +PASS U+7BCB 篋 %1B%24%42%64%3A +PASS U+7BCC 篌 %1B%24%42%64%3C +PASS U+7BCF 篏 %1B%24%42%64%3D +PASS U+7BDD 篝 %1B%24%42%64%40 +PASS U+7BE0 篠 %1B%24%42%3C%44 +PASS U+7BE4 篤 %1B%24%42%46%46 +PASS U+7BE5 篥 %1B%24%42%64%45 +PASS U+7BE6 篦 %1B%24%42%64%44 +PASS U+7BE9 篩 %1B%24%42%64%41 +PASS U+7BED 篭 %1B%24%42%4F%36 +PASS U+7BF3 篳 %1B%24%42%64%4A +PASS U+7BF6 篶 %1B%24%42%64%4E +PASS U+7BF7 篷 %1B%24%42%64%4B +PASS U+7C00 簀 %1B%24%42%64%47 +PASS U+7C07 簇 %1B%24%42%64%48 +PASS U+7C0D 簍 %1B%24%42%64%4D +PASS U+7C11 簑 %1B%24%42%64%42 +PASS U+7C12 簒 %1B%24%42%52%55 +PASS U+7C13 簓 %1B%24%42%64%49 +PASS U+7C14 簔 %1B%24%42%64%43 +PASS U+7C17 簗 %1B%24%42%64%4C +PASS U+7C1F 簟 %1B%24%42%64%52 +PASS U+7C21 簡 %1B%24%42%34%4A +PASS U+7C23 簣 %1B%24%42%64%4F +PASS U+7C27 簧 %1B%24%42%64%50 +PASS U+7C2A 簪 %1B%24%42%64%51 +PASS U+7C2B 簫 %1B%24%42%64%54 +PASS U+7C37 簷 %1B%24%42%64%53 +PASS U+7C38 簸 %1B%24%42%48%76 +PASS U+7C3D 簽 %1B%24%42%64%55 +PASS U+7C3E 簾 %1B%24%42%4E%7C +PASS U+7C3F 簿 %1B%24%42%4A%6D +PASS U+7C40 籀 %1B%24%42%64%5A +PASS U+7C43 籃 %1B%24%42%64%57 +PASS U+7C4C 籌 %1B%24%42%64%56 +PASS U+7C4D 籍 %1B%24%42%40%52 +PASS U+7C4F 籏 %1B%24%42%64%59 +PASS U+7C50 籐 %1B%24%42%64%5B +PASS U+7C54 籔 %1B%24%42%64%58 +PASS U+7C56 籖 %1B%24%42%64%5F +PASS U+7C58 籘 %1B%24%42%64%5C +PASS U+7C5F 籟 %1B%24%42%64%5D +PASS U+7C60 籠 %1B%24%42%64%46 +PASS U+7C64 籤 %1B%24%42%64%5E +PASS U+7C65 籥 %1B%24%42%64%60 +PASS U+7C6C 籬 %1B%24%42%64%61 +PASS U+7C73 米 %1B%24%42%4A%46 +PASS U+7C75 籵 %1B%24%42%64%62 +PASS U+7C7E 籾 %1B%24%42%4C%62 +PASS U+7C81 粁 %1B%24%42%36%4E +PASS U+7C82 粂 %1B%24%42%37%29 +PASS U+7C83 粃 %1B%24%42%64%63 +PASS U+7C89 粉 %1B%24%42%4A%34 +PASS U+7C8B 粋 %1B%24%42%3F%68 +PASS U+7C8D 粍 %1B%24%42%4C%30 +PASS U+7C90 粐 %1B%24%42%64%64 +PASS U+7C92 粒 %1B%24%42%4E%33 +PASS U+7C95 粕 %1B%24%42%47%74 +PASS U+7C97 粗 %1B%24%42%41%46 +PASS U+7C98 粘 %1B%24%42%47%34 +PASS U+7C9B 粛 %1B%24%42%3D%4D +PASS U+7C9F 粟 %1B%24%42%30%40 +PASS U+7CA1 粡 %1B%24%42%64%69 +PASS U+7CA2 粢 %1B%24%42%64%67 +PASS U+7CA4 粤 %1B%24%42%64%65 +PASS U+7CA5 粥 %1B%24%42%34%21 +PASS U+7CA7 粧 %1B%24%42%3E%51 +PASS U+7CA8 粨 %1B%24%42%64%6A +PASS U+7CAB 粫 %1B%24%42%64%68 +PASS U+7CAD 粭 %1B%24%42%64%66 +PASS U+7CAE 粮 %1B%24%42%64%6E +PASS U+7CB1 粱 %1B%24%42%64%6D +PASS U+7CB2 粲 %1B%24%42%64%6C +PASS U+7CB3 粳 %1B%24%42%64%6B +PASS U+7CB9 粹 %1B%24%42%64%6F +PASS U+7CBD 粽 %1B%24%42%64%70 +PASS U+7CBE 精 %1B%24%42%40%3A +PASS U+7CC0 糀 %1B%24%42%64%71 +PASS U+7CC2 糂 %1B%24%42%64%73 +PASS U+7CC5 糅 %1B%24%42%64%72 +PASS U+7CCA 糊 %1B%24%42%38%52 +PASS U+7CCE 糎 %1B%24%42%41%38 +PASS U+7CD2 糒 %1B%24%42%64%75 +PASS U+7CD6 糖 %1B%24%42%45%7C +PASS U+7CD8 糘 %1B%24%42%64%74 +PASS U+7CDC 糜 %1B%24%42%64%76 +PASS U+7CDE 糞 %1B%24%42%4A%35 +PASS U+7CDF 糟 %1B%24%42%41%6C +PASS U+7CE0 糠 %1B%24%42%39%47 +PASS U+7CE2 糢 %1B%24%42%64%77 +PASS U+7CE7 糧 %1B%24%42%4E%48 +PASS U+7CEF 糯 %1B%24%42%64%79 +PASS U+7CF2 糲 %1B%24%42%64%7A +PASS U+7CF4 糴 %1B%24%42%64%7B +PASS U+7CF6 糶 %1B%24%42%64%7C +PASS U+7CF8 糸 %1B%24%42%3B%65 +PASS U+7CFA 糺 %1B%24%42%64%7D +PASS U+7CFB 系 %1B%24%42%37%4F +PASS U+7CFE 糾 %1B%24%42%35%6A +PASS U+7D00 紀 %1B%24%42%35%2A +PASS U+7D02 紂 %1B%24%42%65%21 +PASS U+7D04 約 %1B%24%42%4C%73 +PASS U+7D05 紅 %1B%24%42%39%48 +PASS U+7D06 紆 %1B%24%42%64%7E +PASS U+7D0A 紊 %1B%24%42%65%24 +PASS U+7D0B 紋 %1B%24%42%4C%66 +PASS U+7D0D 納 %1B%24%42%47%3C +PASS U+7D10 紐 %1B%24%42%49%33 +PASS U+7D14 純 %1B%24%42%3D%63 +PASS U+7D15 紕 %1B%24%42%65%23 +PASS U+7D17 紗 %1B%24%42%3C%53 +PASS U+7D18 紘 %1B%24%42%39%49 +PASS U+7D19 紙 %1B%24%42%3B%66 +PASS U+7D1A 級 %1B%24%42%35%69 +PASS U+7D1B 紛 %1B%24%42%4A%36 +PASS U+7D1C 紜 %1B%24%42%65%22 +PASS U+7D20 素 %1B%24%42%41%47 +PASS U+7D21 紡 %1B%24%42%4B%42 +PASS U+7D22 索 %1B%24%42%3A%77 +PASS U+7D2B 紫 %1B%24%42%3B%67 +PASS U+7D2C 紬 %1B%24%42%44%5D +PASS U+7D2E 紮 %1B%24%42%65%27 +PASS U+7D2F 累 %1B%24%42%4E%5F +PASS U+7D30 細 %1B%24%42%3A%59 +PASS U+7D32 紲 %1B%24%42%65%28 +PASS U+7D33 紳 %1B%24%42%3F%42 +PASS U+7D35 紵 %1B%24%42%65%2A +PASS U+7D39 紹 %1B%24%42%3E%52 +PASS U+7D3A 紺 %1B%24%42%3A%30 +PASS U+7D3F 紿 %1B%24%42%65%29 +PASS U+7D42 終 %1B%24%42%3D%2A +PASS U+7D43 絃 %1B%24%42%38%3E +PASS U+7D44 組 %1B%24%42%41%48 +PASS U+7D45 絅 %1B%24%42%65%25 +PASS U+7D46 絆 %1B%24%42%65%2B +FAIL U+7D48 絈 %1B%24%42%7B%4E assert_equals: expected "%1B%24%42%7B%4E" but got "%26%23%33%32%30%37%32%3B" +PASS U+7D4B 絋 %1B%24%42%65%26 +PASS U+7D4C 経 %1B%24%42%37%50 +PASS U+7D4E 絎 %1B%24%42%65%2E +PASS U+7D4F 絏 %1B%24%42%65%32 +PASS U+7D50 結 %1B%24%42%37%6B +PASS U+7D56 絖 %1B%24%42%65%2D +PASS U+7D5B 絛 %1B%24%42%65%36 +FAIL U+7D5C 絜 %1B%24%42%7B%4F assert_equals: expected "%1B%24%42%7B%4F" but got "%26%23%33%32%30%39%32%3B" +PASS U+7D5E 絞 %1B%24%42%39%4A +PASS U+7D61 絡 %1B%24%42%4D%6D +PASS U+7D62 絢 %1B%24%42%30%3C +PASS U+7D63 絣 %1B%24%42%65%33 +PASS U+7D66 給 %1B%24%42%35%6B +PASS U+7D68 絨 %1B%24%42%65%30 +PASS U+7D6E 絮 %1B%24%42%65%31 +PASS U+7D71 統 %1B%24%42%45%7D +PASS U+7D72 絲 %1B%24%42%65%2F +PASS U+7D73 絳 %1B%24%42%65%2C +PASS U+7D75 絵 %1B%24%42%33%28 +PASS U+7D76 絶 %1B%24%42%40%64 +PASS U+7D79 絹 %1B%24%42%38%28 +PASS U+7D7D 絽 %1B%24%42%65%38 +PASS U+7D89 綉 %1B%24%42%65%35 +PASS U+7D8F 綏 %1B%24%42%65%37 +PASS U+7D93 經 %1B%24%42%65%34 +PASS U+7D99 継 %1B%24%42%37%51 +PASS U+7D9A 続 %1B%24%42%42%33 +PASS U+7D9B 綛 %1B%24%42%65%39 +PASS U+7D9C 綜 %1B%24%42%41%6E +PASS U+7D9F 綟 %1B%24%42%65%46 +FAIL U+7DA0 綠 %1B%24%42%7B%51 assert_equals: expected "%1B%24%42%7B%51" but got "%26%23%33%32%31%36%30%3B" +PASS U+7DA2 綢 %1B%24%42%65%42 +PASS U+7DA3 綣 %1B%24%42%65%3C +PASS U+7DAB 綫 %1B%24%42%65%40 +PASS U+7DAC 綬 %1B%24%42%3C%7A +PASS U+7DAD 維 %1B%24%42%30%5D +PASS U+7DAE 綮 %1B%24%42%65%3B +PASS U+7DAF 綯 %1B%24%42%65%43 +PASS U+7DB0 綰 %1B%24%42%65%47 +PASS U+7DB1 綱 %1B%24%42%39%4B +PASS U+7DB2 網 %1B%24%42%4C%56 +PASS U+7DB4 綴 %1B%24%42%44%56 +PASS U+7DB5 綵 %1B%24%42%65%3D +FAIL U+7DB7 綷 %1B%24%42%7B%50 assert_equals: expected "%1B%24%42%7B%50" but got "%26%23%33%32%31%38%33%3B" +PASS U+7DB8 綸 %1B%24%42%65%45 +PASS U+7DBA 綺 %1B%24%42%65%3A +PASS U+7DBB 綻 %1B%24%42%43%3E +PASS U+7DBD 綽 %1B%24%42%65%3F +PASS U+7DBE 綾 %1B%24%42%30%3D +PASS U+7DBF 綿 %1B%24%42%4C%4A +PASS U+7DC7 緇 %1B%24%42%65%3E +PASS U+7DCA 緊 %1B%24%42%36%5B +PASS U+7DCB 緋 %1B%24%42%48%6C +PASS U+7DCF 総 %1B%24%42%41%6D +PASS U+7DD1 緑 %1B%24%42%4E%50 +PASS U+7DD2 緒 %1B%24%42%3D%6F +PASS U+7DD5 緕 %1B%24%42%65%6E +FAIL U+7DD6 緖 %1B%24%42%7B%52 assert_equals: expected "%1B%24%42%7B%52" but got "%26%23%33%32%32%31%34%3B" +PASS U+7DD8 緘 %1B%24%42%65%48 +PASS U+7DDA 線 %1B%24%42%40%7E +PASS U+7DDC 緜 %1B%24%42%65%44 +PASS U+7DDD 緝 %1B%24%42%65%49 +PASS U+7DDE 緞 %1B%24%42%65%4B +PASS U+7DE0 締 %1B%24%42%44%79 +PASS U+7DE1 緡 %1B%24%42%65%4E +PASS U+7DE4 緤 %1B%24%42%65%4A +PASS U+7DE8 編 %1B%24%42%4A%54 +PASS U+7DE9 緩 %1B%24%42%34%4B +PASS U+7DEC 緬 %1B%24%42%4C%4B +PASS U+7DEF 緯 %1B%24%42%30%5E +PASS U+7DF2 緲 %1B%24%42%65%4D +PASS U+7DF4 練 %1B%24%42%4E%7D +PASS U+7DFB 緻 %1B%24%42%65%4C +PASS U+7E01 縁 %1B%24%42%31%6F +PASS U+7E04 縄 %1B%24%42%46%6C +PASS U+7E05 縅 %1B%24%42%65%4F +PASS U+7E09 縉 %1B%24%42%65%56 +PASS U+7E0A 縊 %1B%24%42%65%50 +PASS U+7E0B 縋 %1B%24%42%65%57 +PASS U+7E12 縒 %1B%24%42%65%53 +PASS U+7E1B 縛 %1B%24%42%47%7B +PASS U+7E1E 縞 %1B%24%42%3C%4A +PASS U+7E1F 縟 %1B%24%42%65%55 +PASS U+7E21 縡 %1B%24%42%65%52 +PASS U+7E22 縢 %1B%24%42%65%58 +PASS U+7E23 縣 %1B%24%42%65%51 +PASS U+7E26 縦 %1B%24%42%3D%44 +PASS U+7E2B 縫 %1B%24%42%4B%25 +PASS U+7E2E 縮 %1B%24%42%3D%4C +PASS U+7E31 縱 %1B%24%42%65%54 +PASS U+7E32 縲 %1B%24%42%65%60 +PASS U+7E35 縵 %1B%24%42%65%5C +PASS U+7E37 縷 %1B%24%42%65%5F +PASS U+7E39 縹 %1B%24%42%65%5D +PASS U+7E3A 縺 %1B%24%42%65%61 +PASS U+7E3B 縻 %1B%24%42%65%5B +PASS U+7E3D 總 %1B%24%42%65%41 +PASS U+7E3E 績 %1B%24%42%40%53 +PASS U+7E41 繁 %1B%24%42%48%4B +PASS U+7E43 繃 %1B%24%42%65%5E +PASS U+7E46 繆 %1B%24%42%65%59 +PASS U+7E4A 繊 %1B%24%42%41%21 +PASS U+7E4B 繋 %1B%24%42%37%52 +PASS U+7E4D 繍 %1B%24%42%3D%2B +FAIL U+7E52 繒 %1B%24%42%7B%53 assert_equals: expected "%1B%24%42%7B%53" but got "%26%23%33%32%33%33%38%3B" +PASS U+7E54 織 %1B%24%42%3F%25 +PASS U+7E55 繕 %1B%24%42%41%36 +PASS U+7E56 繖 %1B%24%42%65%64 +PASS U+7E59 繙 %1B%24%42%65%66 +PASS U+7E5A 繚 %1B%24%42%65%67 +PASS U+7E5D 繝 %1B%24%42%65%63 +PASS U+7E5E 繞 %1B%24%42%65%65 +PASS U+7E66 繦 %1B%24%42%65%5A +PASS U+7E67 繧 %1B%24%42%65%62 +PASS U+7E69 繩 %1B%24%42%65%6A +PASS U+7E6A 繪 %1B%24%42%65%69 +PASS U+7E6D 繭 %1B%24%42%4B%7A +PASS U+7E70 繰 %1B%24%42%37%2B +PASS U+7E79 繹 %1B%24%42%65%68 +PASS U+7E7B 繻 %1B%24%42%65%6C +PASS U+7E7C 繼 %1B%24%42%65%6B +PASS U+7E7D 繽 %1B%24%42%65%6F +PASS U+7E7F 繿 %1B%24%42%65%71 +PASS U+7E82 纂 %1B%24%42%3B%3C +PASS U+7E83 纃 %1B%24%42%65%6D +PASS U+7E88 纈 %1B%24%42%65%72 +PASS U+7E89 纉 %1B%24%42%65%73 +FAIL U+7E8A 纊 %1B%24%42%79%21 assert_equals: expected "%1B%24%42%79%21" but got "%26%23%33%32%33%39%34%3B" +PASS U+7E8C 續 %1B%24%42%65%74 +PASS U+7E8E 纎 %1B%24%42%65%7A +PASS U+7E8F 纏 %1B%24%42%45%3B +PASS U+7E90 纐 %1B%24%42%65%76 +PASS U+7E92 纒 %1B%24%42%65%75 +PASS U+7E93 纓 %1B%24%42%65%77 +PASS U+7E94 纔 %1B%24%42%65%78 +PASS U+7E96 纖 %1B%24%42%65%79 +PASS U+7E9B 纛 %1B%24%42%65%7B +PASS U+7E9C 纜 %1B%24%42%65%7C +PASS U+7F36 缶 %1B%24%42%34%4C +PASS U+7F38 缸 %1B%24%42%65%7D +PASS U+7F3A 缺 %1B%24%42%65%7E +PASS U+7F45 罅 %1B%24%42%66%21 +FAIL U+7F47 罇 %1B%24%42%7B%54 assert_equals: expected "%1B%24%42%7B%54" but got "%26%23%33%32%35%38%33%3B" +PASS U+7F4C 罌 %1B%24%42%66%22 +PASS U+7F4D 罍 %1B%24%42%66%23 +PASS U+7F4E 罎 %1B%24%42%66%24 +PASS U+7F50 罐 %1B%24%42%66%25 +PASS U+7F51 网 %1B%24%42%66%26 +PASS U+7F54 罔 %1B%24%42%66%28 +PASS U+7F55 罕 %1B%24%42%66%27 +PASS U+7F58 罘 %1B%24%42%66%29 +PASS U+7F5F 罟 %1B%24%42%66%2A +PASS U+7F60 罠 %1B%24%42%66%2B +PASS U+7F67 罧 %1B%24%42%66%2E +PASS U+7F68 罨 %1B%24%42%66%2C +PASS U+7F69 罩 %1B%24%42%66%2D +PASS U+7F6A 罪 %1B%24%42%3A%61 +PASS U+7F6B 罫 %1B%24%42%37%53 +PASS U+7F6E 置 %1B%24%42%43%56 +PASS U+7F70 罰 %1B%24%42%48%33 +PASS U+7F72 署 %1B%24%42%3D%70 +PASS U+7F75 罵 %1B%24%42%47%4D +PASS U+7F77 罷 %1B%24%42%48%6D +PASS U+7F78 罸 %1B%24%42%66%2F +PASS U+7F79 罹 %1B%24%42%58%6D +PASS U+7F82 羂 %1B%24%42%66%30 +PASS U+7F83 羃 %1B%24%42%66%32 +PASS U+7F85 羅 %1B%24%42%4D%65 +PASS U+7F86 羆 %1B%24%42%66%31 +PASS U+7F87 羇 %1B%24%42%66%34 +PASS U+7F88 羈 %1B%24%42%66%33 +PASS U+7F8A 羊 %1B%24%42%4D%53 +PASS U+7F8C 羌 %1B%24%42%66%35 +PASS U+7F8E 美 %1B%24%42%48%7E +PASS U+7F94 羔 %1B%24%42%66%36 +PASS U+7F9A 羚 %1B%24%42%66%39 +PASS U+7F9D 羝 %1B%24%42%66%38 +PASS U+7F9E 羞 %1B%24%42%66%37 +FAIL U+7FA1 羡 %1B%24%42%7B%55 assert_equals: expected "%1B%24%42%7B%55" but got "%26%23%33%32%36%37%33%3B" +PASS U+7FA3 羣 %1B%24%42%66%3A +PASS U+7FA4 群 %1B%24%42%37%32 +PASS U+7FA8 羨 %1B%24%42%41%22 +PASS U+7FA9 義 %1B%24%42%35%41 +PASS U+7FAE 羮 %1B%24%42%66%3E +PASS U+7FAF 羯 %1B%24%42%66%3B +PASS U+7FB2 羲 %1B%24%42%66%3C +PASS U+7FB6 羶 %1B%24%42%66%3F +PASS U+7FB8 羸 %1B%24%42%66%40 +PASS U+7FB9 羹 %1B%24%42%66%3D +PASS U+7FBD 羽 %1B%24%42%31%29 +PASS U+7FC1 翁 %1B%24%42%32%27 +PASS U+7FC5 翅 %1B%24%42%66%42 +PASS U+7FC6 翆 %1B%24%42%66%43 +PASS U+7FCA 翊 %1B%24%42%66%44 +PASS U+7FCC 翌 %1B%24%42%4D%62 +PASS U+7FD2 習 %1B%24%42%3D%2C +PASS U+7FD4 翔 %1B%24%42%66%46 +PASS U+7FD5 翕 %1B%24%42%66%45 +PASS U+7FE0 翠 %1B%24%42%3F%69 +PASS U+7FE1 翡 %1B%24%42%66%47 +PASS U+7FE6 翦 %1B%24%42%66%48 +PASS U+7FE9 翩 %1B%24%42%66%49 +PASS U+7FEB 翫 %1B%24%42%34%65 +PASS U+7FF0 翰 %1B%24%42%34%4D +PASS U+7FF3 翳 %1B%24%42%66%4A +PASS U+7FF9 翹 %1B%24%42%66%4B +PASS U+7FFB 翻 %1B%24%42%4B%5D +PASS U+7FFC 翼 %1B%24%42%4D%63 +PASS U+8000 耀 %1B%24%42%4D%54 +PASS U+8001 老 %1B%24%42%4F%37 +PASS U+8003 考 %1B%24%42%39%4D +PASS U+8004 耄 %1B%24%42%66%4E +PASS U+8005 者 %1B%24%42%3C%54 +PASS U+8006 耆 %1B%24%42%66%4D +PASS U+800B 耋 %1B%24%42%66%4F +PASS U+800C 而 %1B%24%42%3C%29 +PASS U+8010 耐 %1B%24%42%42%51 +PASS U+8012 耒 %1B%24%42%66%50 +PASS U+8015 耕 %1B%24%42%39%4C +PASS U+8017 耗 %1B%24%42%4C%57 +PASS U+8018 耘 %1B%24%42%66%51 +PASS U+8019 耙 %1B%24%42%66%52 +PASS U+801C 耜 %1B%24%42%66%53 +PASS U+8021 耡 %1B%24%42%66%54 +PASS U+8028 耨 %1B%24%42%66%55 +PASS U+8033 耳 %1B%24%42%3C%2A +PASS U+8036 耶 %1B%24%42%4C%6D +PASS U+803B 耻 %1B%24%42%66%57 +PASS U+803D 耽 %1B%24%42%43%3F +PASS U+803F 耿 %1B%24%42%66%56 +PASS U+8046 聆 %1B%24%42%66%59 +PASS U+804A 聊 %1B%24%42%66%58 +PASS U+8052 聒 %1B%24%42%66%5A +PASS U+8056 聖 %1B%24%42%40%3B +PASS U+8058 聘 %1B%24%42%66%5B +PASS U+805A 聚 %1B%24%42%66%5C +PASS U+805E 聞 %1B%24%42%4A%39 +PASS U+805F 聟 %1B%24%42%66%5D +PASS U+8061 聡 %1B%24%42%41%6F +PASS U+8062 聢 %1B%24%42%66%5E +PASS U+8068 聨 %1B%24%42%66%5F +PASS U+806F 聯 %1B%24%42%4E%7E +PASS U+8070 聰 %1B%24%42%66%62 +PASS U+8072 聲 %1B%24%42%66%61 +PASS U+8073 聳 %1B%24%42%66%60 +PASS U+8074 聴 %1B%24%42%44%30 +PASS U+8076 聶 %1B%24%42%66%63 +PASS U+8077 職 %1B%24%42%3F%26 +PASS U+8079 聹 %1B%24%42%66%64 +PASS U+807D 聽 %1B%24%42%66%65 +PASS U+807E 聾 %1B%24%42%4F%38 +PASS U+807F 聿 %1B%24%42%66%66 +PASS U+8084 肄 %1B%24%42%66%67 +PASS U+8085 肅 %1B%24%42%66%69 +PASS U+8086 肆 %1B%24%42%66%68 +PASS U+8087 肇 %1B%24%42%48%25 +PASS U+8089 肉 %1B%24%42%46%79 +PASS U+808B 肋 %1B%24%42%4F%3E +PASS U+808C 肌 %1B%24%42%48%29 +PASS U+8093 肓 %1B%24%42%66%6B +PASS U+8096 肖 %1B%24%42%3E%53 +PASS U+8098 肘 %1B%24%42%49%2A +PASS U+809A 肚 %1B%24%42%66%6C +PASS U+809B 肛 %1B%24%42%66%6A +PASS U+809D 肝 %1B%24%42%34%4E +PASS U+80A1 股 %1B%24%42%38%54 +PASS U+80A2 肢 %1B%24%42%3B%68 +PASS U+80A5 肥 %1B%24%42%48%6E +PASS U+80A9 肩 %1B%24%42%38%2A +PASS U+80AA 肪 %1B%24%42%4B%43 +PASS U+80AC 肬 %1B%24%42%66%6F +PASS U+80AD 肭 %1B%24%42%66%6D +PASS U+80AF 肯 %1B%24%42%39%4E +PASS U+80B1 肱 %1B%24%42%39%4F +PASS U+80B2 育 %1B%24%42%30%69 +PASS U+80B4 肴 %1B%24%42%3A%68 +PASS U+80BA 肺 %1B%24%42%47%59 +PASS U+80C3 胃 %1B%24%42%30%5F +PASS U+80C4 胄 %1B%24%42%66%74 +PASS U+80C6 胆 %1B%24%42%43%40 +PASS U+80CC 背 %1B%24%42%47%58 +PASS U+80CE 胎 %1B%24%42%42%5B +PASS U+80D6 胖 %1B%24%42%66%76 +PASS U+80D9 胙 %1B%24%42%66%72 +PASS U+80DA 胚 %1B%24%42%66%75 +PASS U+80DB 胛 %1B%24%42%66%70 +PASS U+80DD 胝 %1B%24%42%66%73 +PASS U+80DE 胞 %1B%24%42%4B%26 +PASS U+80E1 胡 %1B%24%42%38%55 +PASS U+80E4 胤 %1B%24%42%30%7D +PASS U+80E5 胥 %1B%24%42%66%71 +PASS U+80EF 胯 %1B%24%42%66%78 +PASS U+80F1 胱 %1B%24%42%66%79 +PASS U+80F4 胴 %1B%24%42%46%39 +PASS U+80F8 胸 %1B%24%42%36%3B +PASS U+80FC 胼 %1B%24%42%67%26 +PASS U+80FD 能 %1B%24%42%47%3D +PASS U+8102 脂 %1B%24%42%3B%69 +PASS U+8105 脅 %1B%24%42%36%3C +PASS U+8106 脆 %1B%24%42%40%48 +PASS U+8107 脇 %1B%24%42%4F%46 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_5001-6000-expected.txt new file mode 100644 index 0000000..99fed3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_5001-6000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 972 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8108 脈 %1B%24%42%4C%2E +PASS U+8109 脉 %1B%24%42%66%77 +PASS U+810A 脊 %1B%24%42%40%54 +PASS U+811A 脚 %1B%24%42%35%53 +PASS U+811B 脛 %1B%24%42%66%7A +PASS U+8123 脣 %1B%24%42%66%7C +PASS U+8129 脩 %1B%24%42%66%7B +PASS U+812F 脯 %1B%24%42%66%7D +PASS U+8131 脱 %1B%24%42%43%26 +PASS U+8133 脳 %1B%24%42%47%3E +PASS U+8139 脹 %1B%24%42%44%31 +PASS U+813E 脾 %1B%24%42%67%23 +PASS U+8146 腆 %1B%24%42%67%22 +PASS U+814B 腋 %1B%24%42%66%7E +PASS U+814E 腎 %1B%24%42%3F%55 +PASS U+8150 腐 %1B%24%42%49%65 +PASS U+8151 腑 %1B%24%42%67%25 +PASS U+8153 腓 %1B%24%42%67%24 +PASS U+8154 腔 %1B%24%42%39%50 +PASS U+8155 腕 %1B%24%42%4F%53 +PASS U+815F 腟 %1B%24%42%67%35 +PASS U+8165 腥 %1B%24%42%67%29 +PASS U+8166 腦 %1B%24%42%67%2A +PASS U+816B 腫 %1B%24%42%3C%70 +PASS U+816E 腮 %1B%24%42%67%28 +PASS U+8170 腰 %1B%24%42%39%78 +PASS U+8171 腱 %1B%24%42%67%27 +PASS U+8174 腴 %1B%24%42%67%2B +PASS U+8178 腸 %1B%24%42%44%32 +PASS U+8179 腹 %1B%24%42%4A%22 +PASS U+817A 腺 %1B%24%42%41%23 +PASS U+817F 腿 %1B%24%42%42%5C +PASS U+8180 膀 %1B%24%42%67%2F +PASS U+8182 膂 %1B%24%42%67%30 +PASS U+8183 膃 %1B%24%42%67%2C +PASS U+8188 膈 %1B%24%42%67%2D +PASS U+818A 膊 %1B%24%42%67%2E +PASS U+818F 膏 %1B%24%42%39%51 +PASS U+8193 膓 %1B%24%42%67%36 +PASS U+8195 膕 %1B%24%42%67%32 +PASS U+819A 膚 %1B%24%42%49%66 +PASS U+819C 膜 %1B%24%42%4B%6C +PASS U+819D 膝 %1B%24%42%49%28 +PASS U+81A0 膠 %1B%24%42%67%31 +PASS U+81A3 膣 %1B%24%42%67%34 +PASS U+81A4 膤 %1B%24%42%67%33 +PASS U+81A8 膨 %1B%24%42%4B%44 +PASS U+81A9 膩 %1B%24%42%67%37 +PASS U+81B0 膰 %1B%24%42%67%38 +PASS U+81B3 膳 %1B%24%42%41%37 +PASS U+81B5 膵 %1B%24%42%67%39 +PASS U+81B8 膸 %1B%24%42%67%3B +PASS U+81BA 膺 %1B%24%42%67%3F +PASS U+81BD 膽 %1B%24%42%67%3C +PASS U+81BE 膾 %1B%24%42%67%3A +PASS U+81BF 膿 %1B%24%42%47%3F +PASS U+81C0 臀 %1B%24%42%67%3D +PASS U+81C2 臂 %1B%24%42%67%3E +PASS U+81C6 臆 %1B%24%42%32%32 +PASS U+81C8 臈 %1B%24%42%67%45 +PASS U+81C9 臉 %1B%24%42%67%40 +PASS U+81CD 臍 %1B%24%42%67%41 +PASS U+81D1 臑 %1B%24%42%67%42 +PASS U+81D3 臓 %1B%24%42%42%21 +PASS U+81D8 臘 %1B%24%42%67%44 +PASS U+81D9 臙 %1B%24%42%67%43 +PASS U+81DA 臚 %1B%24%42%67%46 +PASS U+81DF 臟 %1B%24%42%67%47 +PASS U+81E0 臠 %1B%24%42%67%48 +PASS U+81E3 臣 %1B%24%42%3F%43 +PASS U+81E5 臥 %1B%24%42%32%69 +PASS U+81E7 臧 %1B%24%42%67%49 +PASS U+81E8 臨 %1B%24%42%4E%57 +PASS U+81EA 自 %1B%24%42%3C%2B +PASS U+81ED 臭 %1B%24%42%3D%2D +PASS U+81F3 至 %1B%24%42%3B%6A +PASS U+81F4 致 %1B%24%42%43%57 +PASS U+81FA 臺 %1B%24%42%67%4A +PASS U+81FB 臻 %1B%24%42%67%4B +PASS U+81FC 臼 %1B%24%42%31%31 +PASS U+81FE 臾 %1B%24%42%67%4C +PASS U+8201 舁 %1B%24%42%67%4D +PASS U+8202 舂 %1B%24%42%67%4E +PASS U+8205 舅 %1B%24%42%67%4F +PASS U+8207 與 %1B%24%42%67%50 +PASS U+8208 興 %1B%24%42%36%3D +PASS U+8209 舉 %1B%24%42%5A%2A +PASS U+820A 舊 %1B%24%42%67%51 +PASS U+820C 舌 %1B%24%42%40%65 +PASS U+820D 舍 %1B%24%42%67%52 +PASS U+820E 舎 %1B%24%42%3C%4B +PASS U+8210 舐 %1B%24%42%67%53 +PASS U+8212 舒 %1B%24%42%50%30 +PASS U+8216 舖 %1B%24%42%67%54 +PASS U+8217 舗 %1B%24%42%4A%5E +PASS U+8218 舘 %1B%24%42%34%5C +PASS U+821B 舛 %1B%24%42%41%24 +PASS U+821C 舜 %1B%24%42%3D%58 +PASS U+821E 舞 %1B%24%42%49%71 +PASS U+821F 舟 %1B%24%42%3D%2E +PASS U+8229 舩 %1B%24%42%67%55 +PASS U+822A 航 %1B%24%42%39%52 +PASS U+822B 舫 %1B%24%42%67%56 +PASS U+822C 般 %1B%24%42%48%4C +PASS U+822E 舮 %1B%24%42%67%64 +PASS U+8233 舳 %1B%24%42%67%58 +PASS U+8235 舵 %1B%24%42%42%49 +PASS U+8236 舶 %1B%24%42%47%75 +PASS U+8237 舷 %1B%24%42%38%3F +PASS U+8238 舸 %1B%24%42%67%57 +PASS U+8239 船 %1B%24%42%41%25 +PASS U+8240 艀 %1B%24%42%67%59 +PASS U+8247 艇 %1B%24%42%44%7A +PASS U+8258 艘 %1B%24%42%67%5B +PASS U+8259 艙 %1B%24%42%67%5A +PASS U+825A 艚 %1B%24%42%67%5D +PASS U+825D 艝 %1B%24%42%67%5C +PASS U+825F 艟 %1B%24%42%67%5E +PASS U+8262 艢 %1B%24%42%67%60 +PASS U+8264 艤 %1B%24%42%67%5F +PASS U+8266 艦 %1B%24%42%34%4F +PASS U+8268 艨 %1B%24%42%67%61 +PASS U+826A 艪 %1B%24%42%67%62 +PASS U+826B 艫 %1B%24%42%67%63 +PASS U+826E 艮 %1B%24%42%3A%31 +PASS U+826F 良 %1B%24%42%4E%49 +PASS U+8271 艱 %1B%24%42%67%65 +PASS U+8272 色 %1B%24%42%3F%27 +PASS U+8276 艶 %1B%24%42%31%70 +PASS U+8277 艷 %1B%24%42%67%66 +PASS U+8278 艸 %1B%24%42%67%67 +PASS U+827E 艾 %1B%24%42%67%68 +PASS U+828B 芋 %1B%24%42%30%72 +PASS U+828D 芍 %1B%24%42%67%69 +PASS U+8292 芒 %1B%24%42%67%6A +PASS U+8299 芙 %1B%24%42%49%67 +PASS U+829D 芝 %1B%24%42%3C%47 +PASS U+829F 芟 %1B%24%42%67%6C +PASS U+82A5 芥 %1B%24%42%33%29 +PASS U+82A6 芦 %1B%24%42%30%32 +PASS U+82AB 芫 %1B%24%42%67%6B +PASS U+82AC 芬 %1B%24%42%67%6E +PASS U+82AD 芭 %1B%24%42%47%4E +PASS U+82AF 芯 %1B%24%42%3F%44 +PASS U+82B1 花 %1B%24%42%32%56 +PASS U+82B3 芳 %1B%24%42%4B%27 +PASS U+82B8 芸 %1B%24%42%37%5D +PASS U+82B9 芹 %1B%24%42%36%5C +PASS U+82BB 芻 %1B%24%42%67%6D +PASS U+82BD 芽 %1B%24%42%32%6A +PASS U+82C5 苅 %1B%24%42%34%23 +PASS U+82D1 苑 %1B%24%42%31%71 +PASS U+82D2 苒 %1B%24%42%67%72 +PASS U+82D3 苓 %1B%24%42%4E%6A +PASS U+82D4 苔 %1B%24%42%42%5D +PASS U+82D7 苗 %1B%24%42%49%44 +PASS U+82D9 苙 %1B%24%42%67%7E +PASS U+82DB 苛 %1B%24%42%32%57 +PASS U+82DC 苜 %1B%24%42%67%7C +PASS U+82DE 苞 %1B%24%42%67%7A +PASS U+82DF 苟 %1B%24%42%67%71 +PASS U+82E1 苡 %1B%24%42%67%6F +PASS U+82E3 苣 %1B%24%42%67%70 +PASS U+82E5 若 %1B%24%42%3C%63 +PASS U+82E6 苦 %1B%24%42%36%6C +PASS U+82E7 苧 %1B%24%42%43%77 +PASS U+82EB 苫 %1B%24%42%46%51 +PASS U+82F1 英 %1B%24%42%31%51 +PASS U+82F3 苳 %1B%24%42%67%74 +PASS U+82F4 苴 %1B%24%42%67%73 +PASS U+82F9 苹 %1B%24%42%67%79 +PASS U+82FA 苺 %1B%24%42%67%75 +PASS U+82FB 苻 %1B%24%42%67%78 +FAIL U+8301 茁 %1B%24%42%7B%57 assert_equals: expected "%1B%24%42%7B%57" but got "%26%23%33%33%35%33%37%3B" +PASS U+8302 茂 %1B%24%42%4C%50 +PASS U+8303 范 %1B%24%42%67%77 +PASS U+8304 茄 %1B%24%42%32%58 +PASS U+8305 茅 %1B%24%42%33%7D +PASS U+8306 茆 %1B%24%42%67%7B +PASS U+8309 茉 %1B%24%42%67%7D +PASS U+830E 茎 %1B%24%42%37%54 +PASS U+8316 茖 %1B%24%42%68%23 +PASS U+8317 茗 %1B%24%42%68%2C +PASS U+8318 茘 %1B%24%42%68%2D +PASS U+831C 茜 %1B%24%42%30%2B +PASS U+8323 茣 %1B%24%42%68%34 +PASS U+8328 茨 %1B%24%42%30%71 +PASS U+832B 茫 %1B%24%42%68%2B +PASS U+832F 茯 %1B%24%42%68%2A +PASS U+8331 茱 %1B%24%42%68%25 +PASS U+8332 茲 %1B%24%42%68%24 +PASS U+8334 茴 %1B%24%42%68%22 +PASS U+8335 茵 %1B%24%42%68%21 +PASS U+8336 茶 %1B%24%42%43%63 +PASS U+8338 茸 %1B%24%42%42%7B +PASS U+8339 茹 %1B%24%42%68%27 +PASS U+8340 荀 %1B%24%42%68%26 +PASS U+8345 荅 %1B%24%42%68%29 +PASS U+8349 草 %1B%24%42%41%70 +PASS U+834A 荊 %1B%24%42%37%55 +PASS U+834F 荏 %1B%24%42%31%41 +PASS U+8350 荐 %1B%24%42%68%28 +PASS U+8352 荒 %1B%24%42%39%53 +PASS U+8358 荘 %1B%24%42%41%71 +FAIL U+8362 荢 %1B%24%42%7B%58 assert_equals: expected "%1B%24%42%7B%58" but got "%26%23%33%33%36%33%34%3B" +PASS U+8373 荳 %1B%24%42%68%3A +PASS U+8375 荵 %1B%24%42%68%3B +PASS U+8377 荷 %1B%24%42%32%59 +PASS U+837B 荻 %1B%24%42%32%2E +PASS U+837C 荼 %1B%24%42%68%38 +FAIL U+837F 荿 %1B%24%42%7B%59 assert_equals: expected "%1B%24%42%7B%59" but got "%26%23%33%33%36%36%33%3B" +PASS U+8385 莅 %1B%24%42%68%2E +PASS U+8387 莇 %1B%24%42%68%36 +PASS U+8389 莉 %1B%24%42%68%3D +PASS U+838A 莊 %1B%24%42%68%37 +PASS U+838E 莎 %1B%24%42%68%35 +PASS U+8393 莓 %1B%24%42%67%76 +PASS U+8396 莖 %1B%24%42%68%33 +PASS U+839A 莚 %1B%24%42%68%2F +PASS U+839E 莞 %1B%24%42%34%50 +PASS U+839F 莟 %1B%24%42%68%31 +PASS U+83A0 莠 %1B%24%42%68%3C +PASS U+83A2 莢 %1B%24%42%68%32 +PASS U+83A8 莨 %1B%24%42%68%3E +PASS U+83AA 莪 %1B%24%42%68%30 +PASS U+83AB 莫 %1B%24%42%47%7C +PASS U+83B1 莱 %1B%24%42%4D%69 +PASS U+83B5 莵 %1B%24%42%68%39 +PASS U+83BD 莽 %1B%24%42%68%4F +PASS U+83C1 菁 %1B%24%42%68%47 +PASS U+83C5 菅 %1B%24%42%3F%7B +FAIL U+83C7 菇 %1B%24%42%7B%5A assert_equals: expected "%1B%24%42%7B%5A" but got "%26%23%33%33%37%33%35%3B" +PASS U+83CA 菊 %1B%24%42%35%46 +PASS U+83CC 菌 %1B%24%42%36%5D +PASS U+83CE 菎 %1B%24%42%68%42 +PASS U+83D3 菓 %1B%24%42%32%5B +PASS U+83D6 菖 %1B%24%42%3E%54 +PASS U+83D8 菘 %1B%24%42%68%45 +PASS U+83DC 菜 %1B%24%42%3A%5A +PASS U+83DF 菟 %1B%24%42%45%51 +PASS U+83E0 菠 %1B%24%42%68%4A +PASS U+83E9 菩 %1B%24%42%4A%6E +PASS U+83EB 菫 %1B%24%42%68%41 +PASS U+83EF 華 %1B%24%42%32%5A +PASS U+83F0 菰 %1B%24%42%38%56 +PASS U+83F1 菱 %1B%24%42%49%29 +PASS U+83F2 菲 %1B%24%42%68%4B +PASS U+83F4 菴 %1B%24%42%68%3F +FAIL U+83F6 菶 %1B%24%42%7B%5B assert_equals: expected "%1B%24%42%7B%5B" but got "%26%23%33%33%37%38%32%3B" +PASS U+83F7 菷 %1B%24%42%68%48 +PASS U+83FB 菻 %1B%24%42%68%52 +PASS U+83FD 菽 %1B%24%42%68%43 +PASS U+8403 萃 %1B%24%42%68%44 +PASS U+8404 萄 %1B%24%42%46%3A +PASS U+8407 萇 %1B%24%42%68%49 +PASS U+840B 萋 %1B%24%42%68%46 +PASS U+840C 萌 %1B%24%42%4B%28 +PASS U+840D 萍 %1B%24%42%68%4C +PASS U+840E 萎 %1B%24%42%30%60 +PASS U+8413 萓 %1B%24%42%68%40 +PASS U+8420 萠 %1B%24%42%68%4E +PASS U+8422 萢 %1B%24%42%68%4D +PASS U+8429 萩 %1B%24%42%47%6B +PASS U+842A 萪 %1B%24%42%68%54 +PASS U+842C 萬 %1B%24%42%68%5F +PASS U+8431 萱 %1B%24%42%33%7E +PASS U+8435 萵 %1B%24%42%68%62 +PASS U+8438 萸 %1B%24%42%68%50 +PASS U+843C 萼 %1B%24%42%68%55 +PASS U+843D 落 %1B%24%42%4D%6E +PASS U+8446 葆 %1B%24%42%68%5E +FAIL U+8448 葈 %1B%24%42%7B%5C assert_equals: expected "%1B%24%42%7B%5C" but got "%26%23%33%33%38%36%34%3B" +PASS U+8449 葉 %1B%24%42%4D%55 +PASS U+844E 葎 %1B%24%42%4E%2A +PASS U+8457 著 %1B%24%42%43%78 +PASS U+845B 葛 %1B%24%42%33%6B +PASS U+8461 葡 %1B%24%42%49%72 +PASS U+8462 葢 %1B%24%42%68%64 +PASS U+8463 董 %1B%24%42%46%21 +PASS U+8466 葦 %1B%24%42%30%31 +PASS U+8469 葩 %1B%24%42%68%5D +PASS U+846B 葫 %1B%24%42%68%59 +PASS U+846C 葬 %1B%24%42%41%72 +PASS U+846D 葭 %1B%24%42%68%53 +PASS U+846E 葮 %1B%24%42%68%5B +PASS U+846F 葯 %1B%24%42%68%60 +PASS U+8471 葱 %1B%24%42%47%2C +PASS U+8475 葵 %1B%24%42%30%2A +PASS U+8477 葷 %1B%24%42%68%58 +PASS U+8479 葹 %1B%24%42%68%61 +PASS U+847A 葺 %1B%24%42%49%78 +PASS U+8482 蒂 %1B%24%42%68%5C +PASS U+8484 蒄 %1B%24%42%68%57 +PASS U+848B 蒋 %1B%24%42%3E%55 +PASS U+8490 蒐 %1B%24%42%3D%2F +PASS U+8494 蒔 %1B%24%42%3C%2C +PASS U+8499 蒙 %1B%24%42%4C%58 +PASS U+849C 蒜 %1B%24%42%49%47 +PASS U+849F 蒟 %1B%24%42%68%67 +PASS U+84A1 蒡 %1B%24%42%68%70 +PASS U+84AD 蒭 %1B%24%42%68%5A +PASS U+84B2 蒲 %1B%24%42%33%77 +FAIL U+84B4 蒴 %1B%24%42%7B%5D assert_equals: expected "%1B%24%42%7B%5D" but got "%26%23%33%33%39%37%32%3B" +PASS U+84B8 蒸 %1B%24%42%3E%78 +PASS U+84B9 蒹 %1B%24%42%68%65 +PASS U+84BB 蒻 %1B%24%42%68%6A +PASS U+84BC 蒼 %1B%24%42%41%73 +PASS U+84BF 蒿 %1B%24%42%68%66 +PASS U+84C1 蓁 %1B%24%42%68%6D +PASS U+84C4 蓄 %1B%24%42%43%5F +PASS U+84C6 蓆 %1B%24%42%68%6E +PASS U+84C9 蓉 %1B%24%42%4D%56 +PASS U+84CA 蓊 %1B%24%42%68%63 +PASS U+84CB 蓋 %1B%24%42%33%38 +PASS U+84CD 蓍 %1B%24%42%68%69 +PASS U+84D0 蓐 %1B%24%42%68%6C +PASS U+84D1 蓑 %1B%24%42%4C%2C +PASS U+84D6 蓖 %1B%24%42%68%6F +PASS U+84D9 蓙 %1B%24%42%68%68 +PASS U+84DA 蓚 %1B%24%42%68%6B +FAIL U+84DC 蓜 %1B%24%42%79%25 assert_equals: expected "%1B%24%42%79%25" but got "%26%23%33%34%30%31%32%3B" +PASS U+84EC 蓬 %1B%24%42%4B%29 +PASS U+84EE 蓮 %1B%24%42%4F%21 +PASS U+84F4 蓴 %1B%24%42%68%73 +PASS U+84FC 蓼 %1B%24%42%68%7A +PASS U+84FF 蓿 %1B%24%42%68%72 +PASS U+8500 蔀 %1B%24%42%3C%43 +PASS U+8506 蔆 %1B%24%42%68%51 +PASS U+8511 蔑 %1B%24%42%4A%4E +PASS U+8513 蔓 %1B%24%42%4C%22 +PASS U+8514 蔔 %1B%24%42%68%79 +PASS U+8515 蔕 %1B%24%42%68%78 +PASS U+8517 蔗 %1B%24%42%68%74 +PASS U+8518 蔘 %1B%24%42%68%75 +PASS U+851A 蔚 %1B%24%42%31%36 +PASS U+851F 蔟 %1B%24%42%68%77 +PASS U+8521 蔡 %1B%24%42%68%71 +PASS U+8526 蔦 %1B%24%42%44%55 +PASS U+852C 蔬 %1B%24%42%68%76 +PASS U+852D 蔭 %1B%24%42%30%7E +PASS U+8535 蔵 %1B%24%42%42%22 +PASS U+853D 蔽 %1B%24%42%4A%43 +PASS U+8540 蕀 %1B%24%42%68%7B +PASS U+8541 蕁 %1B%24%42%69%21 +PASS U+8543 蕃 %1B%24%42%48%59 +PASS U+8548 蕈 %1B%24%42%68%7E +PASS U+8549 蕉 %1B%24%42%3E%56 +PASS U+854A 蕊 %1B%24%42%3C%49 +PASS U+854B 蕋 %1B%24%42%69%23 +PASS U+854E 蕎 %1B%24%42%36%3E +FAIL U+8553 蕓 %1B%24%42%7B%5E assert_equals: expected "%1B%24%42%7B%5E" but got "%26%23%33%34%31%33%31%3B" +PASS U+8555 蕕 %1B%24%42%69%24 +PASS U+8557 蕗 %1B%24%42%49%79 +PASS U+8558 蕘 %1B%24%42%68%7D +FAIL U+8559 蕙 %1B%24%42%7B%5F assert_equals: expected "%1B%24%42%7B%5F" but got "%26%23%33%34%31%33%37%3B" +PASS U+855A 蕚 %1B%24%42%68%56 +PASS U+8563 蕣 %1B%24%42%68%7C +PASS U+8568 蕨 %1B%24%42%4F%4F +PASS U+8569 蕩 %1B%24%42%46%22 +PASS U+856A 蕪 %1B%24%42%49%73 +FAIL U+856B 蕫 %1B%24%42%7B%60 assert_equals: expected "%1B%24%42%7B%60" but got "%26%23%33%34%31%35%35%3B" +PASS U+856D 蕭 %1B%24%42%69%2B +PASS U+8577 蕷 %1B%24%42%69%31 +PASS U+857E 蕾 %1B%24%42%69%32 +PASS U+8580 薀 %1B%24%42%69%25 +PASS U+8584 薄 %1B%24%42%47%76 +PASS U+8587 薇 %1B%24%42%69%2F +PASS U+8588 薈 %1B%24%42%69%27 +PASS U+858A 薊 %1B%24%42%69%29 +PASS U+8590 薐 %1B%24%42%69%33 +PASS U+8591 薑 %1B%24%42%69%28 +PASS U+8594 薔 %1B%24%42%69%2C +PASS U+8597 薗 %1B%24%42%31%72 +PASS U+8599 薙 %1B%24%42%46%65 +PASS U+859B 薛 %1B%24%42%69%2D +PASS U+859C 薜 %1B%24%42%69%30 +PASS U+85A4 薤 %1B%24%42%69%26 +PASS U+85A6 薦 %1B%24%42%41%26 +PASS U+85A8 薨 %1B%24%42%69%2A +PASS U+85A9 薩 %1B%24%42%3B%27 +PASS U+85AA 薪 %1B%24%42%3F%45 +PASS U+85AB 薫 %1B%24%42%37%30 +PASS U+85AC 薬 %1B%24%42%4C%74 +PASS U+85AE 薮 %1B%24%42%4C%79 +PASS U+85AF 薯 %1B%24%42%3D%72 +FAIL U+85B0 薰 %1B%24%42%7B%62 assert_equals: expected "%1B%24%42%7B%62" but got "%26%23%33%34%32%32%34%3B" +PASS U+85B9 薹 %1B%24%42%69%37 +PASS U+85BA 薺 %1B%24%42%69%35 +PASS U+85C1 藁 %1B%24%42%4F%4E +PASS U+85C9 藉 %1B%24%42%69%34 +PASS U+85CD 藍 %1B%24%42%4D%75 +PASS U+85CF 藏 %1B%24%42%69%36 +PASS U+85D0 藐 %1B%24%42%69%38 +PASS U+85D5 藕 %1B%24%42%69%39 +PASS U+85DC 藜 %1B%24%42%69%3C +PASS U+85DD 藝 %1B%24%42%69%3A +PASS U+85E4 藤 %1B%24%42%46%23 +PASS U+85E5 藥 %1B%24%42%69%3B +PASS U+85E9 藩 %1B%24%42%48%4D +PASS U+85EA 藪 %1B%24%42%69%2E +PASS U+85F7 藷 %1B%24%42%3D%73 +PASS U+85F9 藹 %1B%24%42%69%3D +PASS U+85FA 藺 %1B%24%42%69%42 +PASS U+85FB 藻 %1B%24%42%41%74 +PASS U+85FE 藾 %1B%24%42%69%41 +PASS U+8602 蘂 %1B%24%42%69%22 +PASS U+8606 蘆 %1B%24%42%69%43 +PASS U+8607 蘇 %1B%24%42%41%49 +PASS U+860A 蘊 %1B%24%42%69%3E +PASS U+860B 蘋 %1B%24%42%69%40 +PASS U+8613 蘓 %1B%24%42%69%3F +PASS U+8616 蘖 %1B%24%42%5D%31 +PASS U+8617 蘗 %1B%24%42%5D%22 +PASS U+861A 蘚 %1B%24%42%69%45 +PASS U+8622 蘢 %1B%24%42%69%44 +PASS U+862D 蘭 %1B%24%42%4D%76 +PASS U+862F 蘯 %1B%24%42%62%3C +PASS U+8630 蘰 %1B%24%42%69%46 +PASS U+863F 蘿 %1B%24%42%69%47 +PASS U+864D 虍 %1B%24%42%69%48 +PASS U+864E 虎 %1B%24%42%38%57 +PASS U+8650 虐 %1B%24%42%35%54 +PASS U+8654 虔 %1B%24%42%69%4A +PASS U+8655 處 %1B%24%42%51%5D +PASS U+865A 虚 %1B%24%42%35%75 +PASS U+865C 虜 %1B%24%42%4E%3A +PASS U+865E 虞 %1B%24%42%36%73 +PASS U+865F 號 %1B%24%42%69%4B +PASS U+8667 虧 %1B%24%42%69%4C +PASS U+866B 虫 %1B%24%42%43%6E +PASS U+8671 虱 %1B%24%42%69%4D +PASS U+8679 虹 %1B%24%42%46%7A +PASS U+867B 虻 %1B%24%42%30%3A +PASS U+868A 蚊 %1B%24%42%32%63 +PASS U+868B 蚋 %1B%24%42%69%52 +PASS U+868C 蚌 %1B%24%42%69%53 +PASS U+8693 蚓 %1B%24%42%69%4E +PASS U+8695 蚕 %1B%24%42%3B%3D +PASS U+86A3 蚣 %1B%24%42%69%4F +PASS U+86A4 蚤 %1B%24%42%47%42 +PASS U+86A9 蚩 %1B%24%42%69%50 +PASS U+86AA 蚪 %1B%24%42%69%51 +PASS U+86AB 蚫 %1B%24%42%69%5B +PASS U+86AF 蚯 %1B%24%42%69%55 +PASS U+86B0 蚰 %1B%24%42%69%58 +PASS U+86B6 蚶 %1B%24%42%69%54 +PASS U+86C4 蛄 %1B%24%42%69%56 +PASS U+86C6 蛆 %1B%24%42%69%57 +PASS U+86C7 蛇 %1B%24%42%3C%58 +PASS U+86C9 蛉 %1B%24%42%69%59 +PASS U+86CB 蛋 %1B%24%42%43%41 +PASS U+86CD 蛍 %1B%24%42%37%56 +PASS U+86CE 蛎 %1B%24%42%33%42 +PASS U+86D4 蛔 %1B%24%42%69%5C +PASS U+86D9 蛙 %1B%24%42%33%3F +PASS U+86DB 蛛 %1B%24%42%69%61 +PASS U+86DE 蛞 %1B%24%42%69%5D +PASS U+86DF 蛟 %1B%24%42%69%60 +PASS U+86E4 蛤 %1B%24%42%48%3A +PASS U+86E9 蛩 %1B%24%42%69%5E +PASS U+86EC 蛬 %1B%24%42%69%5F +PASS U+86ED 蛭 %1B%24%42%49%48 +PASS U+86EE 蛮 %1B%24%42%48%5A +PASS U+86EF 蛯 %1B%24%42%69%62 +PASS U+86F8 蛸 %1B%24%42%42%7D +PASS U+86F9 蛹 %1B%24%42%69%6C +PASS U+86FB 蛻 %1B%24%42%69%68 +PASS U+86FE 蛾 %1B%24%42%32%6B +PASS U+8700 蜀 %1B%24%42%69%66 +PASS U+8702 蜂 %1B%24%42%4B%2A +PASS U+8703 蜃 %1B%24%42%69%67 +PASS U+8706 蜆 %1B%24%42%69%64 +PASS U+8708 蜈 %1B%24%42%69%65 +PASS U+8709 蜉 %1B%24%42%69%6A +PASS U+870A 蜊 %1B%24%42%69%6D +PASS U+870D 蜍 %1B%24%42%69%6B +PASS U+8711 蜑 %1B%24%42%69%69 +PASS U+8712 蜒 %1B%24%42%69%63 +PASS U+8718 蜘 %1B%24%42%43%58 +PASS U+871A 蜚 %1B%24%42%69%74 +PASS U+871C 蜜 %1B%24%42%4C%2A +PASS U+8725 蜥 %1B%24%42%69%72 +PASS U+8729 蜩 %1B%24%42%69%73 +PASS U+8734 蜴 %1B%24%42%69%6E +PASS U+8737 蜷 %1B%24%42%69%70 +PASS U+873B 蜻 %1B%24%42%69%71 +PASS U+873F 蜿 %1B%24%42%69%6F +PASS U+8749 蝉 %1B%24%42%40%66 +PASS U+874B 蝋 %1B%24%42%4F%39 +PASS U+874C 蝌 %1B%24%42%69%78 +PASS U+874E 蝎 %1B%24%42%69%79 +PASS U+8753 蝓 %1B%24%42%6A%21 +PASS U+8755 蝕 %1B%24%42%3F%2A +PASS U+8757 蝗 %1B%24%42%69%7B +PASS U+8759 蝙 %1B%24%42%69%7E +PASS U+875F 蝟 %1B%24%42%69%76 +PASS U+8760 蝠 %1B%24%42%69%75 +PASS U+8763 蝣 %1B%24%42%6A%22 +PASS U+8766 蝦 %1B%24%42%32%5C +PASS U+8768 蝨 %1B%24%42%69%7C +PASS U+876A 蝪 %1B%24%42%6A%23 +PASS U+876E 蝮 %1B%24%42%69%7D +PASS U+8774 蝴 %1B%24%42%69%7A +PASS U+8776 蝶 %1B%24%42%44%33 +PASS U+8778 蝸 %1B%24%42%69%77 +PASS U+877F 蝿 %1B%24%42%47%68 +PASS U+8782 螂 %1B%24%42%6A%27 +PASS U+878D 融 %1B%24%42%4D%3B +PASS U+879F 螟 %1B%24%42%6A%26 +PASS U+87A2 螢 %1B%24%42%6A%25 +PASS U+87AB 螫 %1B%24%42%6A%2E +PASS U+87AF 螯 %1B%24%42%6A%28 +PASS U+87B3 螳 %1B%24%42%6A%30 +PASS U+87BA 螺 %1B%24%42%4D%66 +PASS U+87BB 螻 %1B%24%42%6A%33 +PASS U+87BD 螽 %1B%24%42%6A%2A +PASS U+87C0 蟀 %1B%24%42%6A%2B +PASS U+87C4 蟄 %1B%24%42%6A%2F +PASS U+87C6 蟆 %1B%24%42%6A%32 +PASS U+87C7 蟇 %1B%24%42%6A%31 +PASS U+87CB 蟋 %1B%24%42%6A%29 +PASS U+87D0 蟐 %1B%24%42%6A%2C +PASS U+87D2 蟒 %1B%24%42%6A%3D +PASS U+87E0 蟠 %1B%24%42%6A%36 +PASS U+87EF 蟯 %1B%24%42%6A%34 +PASS U+87F2 蟲 %1B%24%42%6A%35 +PASS U+87F6 蟶 %1B%24%42%6A%3A +PASS U+87F7 蟷 %1B%24%42%6A%3B +PASS U+87F9 蟹 %1B%24%42%33%2A +PASS U+87FB 蟻 %1B%24%42%35%42 +PASS U+87FE 蟾 %1B%24%42%6A%39 +PASS U+8805 蠅 %1B%24%42%6A%24 +FAIL U+8807 蠇 %1B%24%42%7B%65 assert_equals: expected "%1B%24%42%7B%65" but got "%26%23%33%34%38%32%33%3B" +PASS U+880D 蠍 %1B%24%42%6A%38 +PASS U+880E 蠎 %1B%24%42%6A%3C +PASS U+880F 蠏 %1B%24%42%6A%37 +PASS U+8811 蠑 %1B%24%42%6A%3E +PASS U+8815 蠕 %1B%24%42%6A%40 +PASS U+8816 蠖 %1B%24%42%6A%3F +PASS U+8821 蠡 %1B%24%42%6A%42 +PASS U+8822 蠢 %1B%24%42%6A%41 +PASS U+8823 蠣 %1B%24%42%69%5A +PASS U+8827 蠧 %1B%24%42%6A%46 +PASS U+8831 蠱 %1B%24%42%6A%43 +PASS U+8836 蠶 %1B%24%42%6A%44 +PASS U+8839 蠹 %1B%24%42%6A%45 +PASS U+883B 蠻 %1B%24%42%6A%47 +PASS U+8840 血 %1B%24%42%37%6C +PASS U+8842 衂 %1B%24%42%6A%49 +PASS U+8844 衄 %1B%24%42%6A%48 +PASS U+8846 衆 %1B%24%42%3D%30 +PASS U+884C 行 %1B%24%42%39%54 +PASS U+884D 衍 %1B%24%42%5E%27 +PASS U+8852 衒 %1B%24%42%6A%4A +PASS U+8853 術 %1B%24%42%3D%51 +PASS U+8857 街 %1B%24%42%33%39 +PASS U+8859 衙 %1B%24%42%6A%4B +PASS U+885B 衛 %1B%24%42%31%52 +PASS U+885D 衝 %1B%24%42%3E%57 +PASS U+885E 衞 %1B%24%42%6A%4C +PASS U+8861 衡 %1B%24%42%39%55 +PASS U+8862 衢 %1B%24%42%6A%4D +PASS U+8863 衣 %1B%24%42%30%61 +PASS U+8868 表 %1B%24%42%49%3D +PASS U+886B 衫 %1B%24%42%6A%4E +PASS U+8870 衰 %1B%24%42%3F%6A +PASS U+8872 衲 %1B%24%42%6A%55 +PASS U+8875 衵 %1B%24%42%6A%52 +PASS U+8877 衷 %1B%24%42%43%6F +PASS U+887D 衽 %1B%24%42%6A%53 +PASS U+887E 衾 %1B%24%42%6A%50 +PASS U+887F 衿 %1B%24%42%36%5E +PASS U+8881 袁 %1B%24%42%6A%4F +PASS U+8882 袂 %1B%24%42%6A%56 +PASS U+8888 袈 %1B%24%42%37%36 +PASS U+888B 袋 %1B%24%42%42%5E +PASS U+888D 袍 %1B%24%42%6A%5C +PASS U+8892 袒 %1B%24%42%6A%58 +PASS U+8896 袖 %1B%24%42%42%35 +PASS U+8897 袗 %1B%24%42%6A%57 +PASS U+8899 袙 %1B%24%42%6A%5A +PASS U+889E 袞 %1B%24%42%6A%51 +PASS U+88A2 袢 %1B%24%42%6A%5B +PASS U+88A4 袤 %1B%24%42%6A%5D +PASS U+88AB 被 %1B%24%42%48%6F +PASS U+88AE 袮 %1B%24%42%6A%59 +PASS U+88B0 袰 %1B%24%42%6A%5E +PASS U+88B1 袱 %1B%24%42%6A%60 +PASS U+88B4 袴 %1B%24%42%38%53 +PASS U+88B5 袵 %1B%24%42%6A%54 +PASS U+88B7 袷 %1B%24%42%30%41 +PASS U+88BF 袿 %1B%24%42%6A%5F +PASS U+88C1 裁 %1B%24%42%3A%5B +PASS U+88C2 裂 %1B%24%42%4E%76 +PASS U+88C3 裃 %1B%24%42%6A%61 +PASS U+88C4 裄 %1B%24%42%6A%62 +PASS U+88C5 装 %1B%24%42%41%75 +PASS U+88CF 裏 %1B%24%42%4E%22 +PASS U+88D4 裔 %1B%24%42%6A%63 +PASS U+88D5 裕 %1B%24%42%4D%35 +PASS U+88D8 裘 %1B%24%42%6A%64 +PASS U+88D9 裙 %1B%24%42%6A%65 +PASS U+88DC 補 %1B%24%42%4A%64 +PASS U+88DD 裝 %1B%24%42%6A%66 +PASS U+88DF 裟 %1B%24%42%3A%40 +PASS U+88E1 裡 %1B%24%42%4E%23 +PASS U+88E8 裨 %1B%24%42%6A%6B +PASS U+88F2 裲 %1B%24%42%6A%6C +PASS U+88F3 裳 %1B%24%42%3E%58 +PASS U+88F4 裴 %1B%24%42%6A%6A +FAIL U+88F5 裵 %1B%24%42%7B%66 assert_equals: expected "%1B%24%42%7B%66" but got "%26%23%33%35%30%36%31%3B" +PASS U+88F8 裸 %1B%24%42%4D%67 +PASS U+88F9 裹 %1B%24%42%6A%67 +PASS U+88FC 裼 %1B%24%42%6A%69 +PASS U+88FD 製 %1B%24%42%40%3D +PASS U+88FE 裾 %1B%24%42%3F%7E +PASS U+8902 褂 %1B%24%42%6A%68 +PASS U+8904 褄 %1B%24%42%6A%6D +PASS U+8907 複 %1B%24%42%4A%23 +PASS U+890A 褊 %1B%24%42%6A%6F +PASS U+890C 褌 %1B%24%42%6A%6E +PASS U+8910 褐 %1B%24%42%33%6C +PASS U+8912 褒 %1B%24%42%4B%2B +PASS U+8913 褓 %1B%24%42%6A%70 +FAIL U+891C 褜 %1B%24%42%79%22 assert_equals: expected "%1B%24%42%79%22" but got "%26%23%33%35%31%30%30%3B" +PASS U+891D 褝 %1B%24%42%6A%7C +PASS U+891E 褞 %1B%24%42%6A%72 +PASS U+8925 褥 %1B%24%42%6A%73 +PASS U+892A 褪 %1B%24%42%6A%74 +PASS U+892B 褫 %1B%24%42%6A%75 +PASS U+8936 褶 %1B%24%42%6A%79 +PASS U+8938 褸 %1B%24%42%6A%7A +PASS U+893B 褻 %1B%24%42%6A%78 +PASS U+8941 襁 %1B%24%42%6A%76 +PASS U+8943 襃 %1B%24%42%6A%71 +PASS U+8944 襄 %1B%24%42%6A%77 +PASS U+894C 襌 %1B%24%42%6A%7B +PASS U+894D 襍 %1B%24%42%70%37 +PASS U+8956 襖 %1B%24%42%32%28 +PASS U+895E 襞 %1B%24%42%6A%7E +PASS U+895F 襟 %1B%24%42%36%5F +PASS U+8960 襠 %1B%24%42%6A%7D +PASS U+8964 襤 %1B%24%42%6B%22 +PASS U+8966 襦 %1B%24%42%6B%21 +PASS U+896A 襪 %1B%24%42%6B%24 +PASS U+896D 襭 %1B%24%42%6B%23 +PASS U+896F 襯 %1B%24%42%6B%25 +PASS U+8972 襲 %1B%24%42%3D%31 +PASS U+8974 襴 %1B%24%42%6B%26 +PASS U+8977 襷 %1B%24%42%6B%27 +PASS U+897E 襾 %1B%24%42%6B%28 +PASS U+897F 西 %1B%24%42%40%3E +PASS U+8981 要 %1B%24%42%4D%57 +PASS U+8983 覃 %1B%24%42%6B%29 +PASS U+8986 覆 %1B%24%42%4A%24 +PASS U+8987 覇 %1B%24%42%47%46 +PASS U+8988 覈 %1B%24%42%6B%2A +PASS U+898A 覊 %1B%24%42%6B%2B +PASS U+898B 見 %1B%24%42%38%2B +PASS U+898F 規 %1B%24%42%35%2C +PASS U+8993 覓 %1B%24%42%6B%2C +PASS U+8996 視 %1B%24%42%3B%6B +PASS U+8997 覗 %1B%24%42%47%41 +PASS U+8998 覘 %1B%24%42%6B%2D +PASS U+899A 覚 %1B%24%42%33%50 +PASS U+89A1 覡 %1B%24%42%6B%2E +PASS U+89A6 覦 %1B%24%42%6B%30 +PASS U+89A7 覧 %1B%24%42%4D%77 +PASS U+89A9 覩 %1B%24%42%6B%2F +PASS U+89AA 親 %1B%24%42%3F%46 +PASS U+89AC 覬 %1B%24%42%6B%31 +PASS U+89AF 覯 %1B%24%42%6B%32 +PASS U+89B2 覲 %1B%24%42%6B%33 +PASS U+89B3 観 %1B%24%42%34%51 +PASS U+89BA 覺 %1B%24%42%6B%34 +PASS U+89BD 覽 %1B%24%42%6B%35 +PASS U+89BF 覿 %1B%24%42%6B%36 +PASS U+89C0 觀 %1B%24%42%6B%37 +PASS U+89D2 角 %1B%24%42%33%51 +PASS U+89DA 觚 %1B%24%42%6B%38 +PASS U+89DC 觜 %1B%24%42%6B%39 +PASS U+89DD 觝 %1B%24%42%6B%3A +PASS U+89E3 解 %1B%24%42%32%72 +PASS U+89E6 触 %1B%24%42%3F%28 +PASS U+89E7 觧 %1B%24%42%6B%3B +PASS U+89F4 觴 %1B%24%42%6B%3C +PASS U+89F8 觸 %1B%24%42%6B%3D +PASS U+8A00 言 %1B%24%42%38%40 +PASS U+8A02 訂 %1B%24%42%44%7B +PASS U+8A03 訃 %1B%24%42%6B%3E +PASS U+8A08 計 %1B%24%42%37%57 +PASS U+8A0A 訊 %1B%24%42%3F%56 +PASS U+8A0C 訌 %1B%24%42%6B%41 +PASS U+8A0E 討 %1B%24%42%46%24 +PASS U+8A10 訐 %1B%24%42%6B%40 +FAIL U+8A12 訒 %1B%24%42%7B%67 assert_equals: expected "%1B%24%42%7B%67" but got "%26%23%33%35%33%34%36%3B" +PASS U+8A13 訓 %1B%24%42%37%31 +PASS U+8A16 訖 %1B%24%42%6B%3F +PASS U+8A17 託 %1B%24%42%42%77 +PASS U+8A18 記 %1B%24%42%35%2D +PASS U+8A1B 訛 %1B%24%42%6B%42 +PASS U+8A1D 訝 %1B%24%42%6B%43 +PASS U+8A1F 訟 %1B%24%42%3E%59 +PASS U+8A23 訣 %1B%24%42%37%6D +PASS U+8A25 訥 %1B%24%42%6B%44 +PASS U+8A2A 訪 %1B%24%42%4B%2C +PASS U+8A2D 設 %1B%24%42%40%5F +PASS U+8A31 許 %1B%24%42%35%76 +PASS U+8A33 訳 %1B%24%42%4C%75 +PASS U+8A34 訴 %1B%24%42%41%4A +PASS U+8A36 訶 %1B%24%42%6B%45 +FAIL U+8A37 訷 %1B%24%42%7B%68 assert_equals: expected "%1B%24%42%7B%68" but got "%26%23%33%35%33%38%33%3B" +PASS U+8A3A 診 %1B%24%42%3F%47 +PASS U+8A3B 註 %1B%24%42%43%70 +PASS U+8A3C 証 %1B%24%42%3E%5A +PASS U+8A41 詁 %1B%24%42%6B%46 +PASS U+8A46 詆 %1B%24%42%6B%49 +PASS U+8A48 詈 %1B%24%42%6B%4A +PASS U+8A50 詐 %1B%24%42%3A%3E +PASS U+8A51 詑 %1B%24%42%42%42 +PASS U+8A52 詒 %1B%24%42%6B%48 +PASS U+8A54 詔 %1B%24%42%3E%5B +PASS U+8A55 評 %1B%24%42%49%3E +PASS U+8A5B 詛 %1B%24%42%6B%47 +PASS U+8A5E 詞 %1B%24%42%3B%6C +PASS U+8A60 詠 %1B%24%42%31%53 +PASS U+8A62 詢 %1B%24%42%6B%4E +PASS U+8A63 詣 %1B%24%42%37%58 +PASS U+8A66 試 %1B%24%42%3B%6E +PASS U+8A69 詩 %1B%24%42%3B%6D +PASS U+8A6B 詫 %1B%24%42%4F%4D +PASS U+8A6C 詬 %1B%24%42%6B%4D +PASS U+8A6D 詭 %1B%24%42%6B%4C +PASS U+8A6E 詮 %1B%24%42%41%27 +PASS U+8A70 詰 %1B%24%42%35%4D +PASS U+8A71 話 %1B%24%42%4F%43 +PASS U+8A72 該 %1B%24%42%33%3A +PASS U+8A73 詳 %1B%24%42%3E%5C +FAIL U+8A79 詹 %1B%24%42%7B%69 assert_equals: expected "%1B%24%42%7B%69" but got "%26%23%33%35%34%34%39%3B" +PASS U+8A7C 詼 %1B%24%42%6B%4B +PASS U+8A82 誂 %1B%24%42%6B%50 +PASS U+8A84 誄 %1B%24%42%6B%51 +PASS U+8A85 誅 %1B%24%42%6B%4F +PASS U+8A87 誇 %1B%24%42%38%58 +PASS U+8A89 誉 %1B%24%42%4D%40 +PASS U+8A8C 誌 %1B%24%42%3B%6F +PASS U+8A8D 認 %1B%24%42%47%27 +PASS U+8A91 誑 %1B%24%42%6B%54 +PASS U+8A93 誓 %1B%24%42%40%40 +PASS U+8A95 誕 %1B%24%42%43%42 +PASS U+8A98 誘 %1B%24%42%4D%36 +PASS U+8A9A 誚 %1B%24%42%6B%57 +PASS U+8A9E 語 %1B%24%42%38%6C +PASS U+8AA0 誠 %1B%24%42%40%3F +PASS U+8AA1 誡 %1B%24%42%6B%53 +PASS U+8AA3 誣 %1B%24%42%6B%58 +PASS U+8AA4 誤 %1B%24%42%38%6D +PASS U+8AA5 誥 %1B%24%42%6B%55 +PASS U+8AA6 誦 %1B%24%42%6B%56 +FAIL U+8AA7 誧 %1B%24%42%7B%6A assert_equals: expected "%1B%24%42%7B%6A" but got "%26%23%33%35%34%39%35%3B" +PASS U+8AA8 誨 %1B%24%42%6B%52 +PASS U+8AAC 説 %1B%24%42%40%62 +PASS U+8AAD 読 %1B%24%42%46%49 +PASS U+8AB0 誰 %1B%24%42%43%2F +PASS U+8AB2 課 %1B%24%42%32%5D +PASS U+8AB9 誹 %1B%24%42%48%70 +PASS U+8ABC 誼 %1B%24%42%35%43 +FAIL U+8ABE 誾 %1B%24%42%7B%6B assert_equals: expected "%1B%24%42%7B%6B" but got "%26%23%33%35%35%31%38%3B" +PASS U+8ABF 調 %1B%24%42%44%34 +PASS U+8AC2 諂 %1B%24%42%6B%5B +PASS U+8AC4 諄 %1B%24%42%6B%59 +PASS U+8AC7 談 %1B%24%42%43%4C +PASS U+8ACB 請 %1B%24%42%40%41 +PASS U+8ACC 諌 %1B%24%42%34%52 +PASS U+8ACD 諍 %1B%24%42%6B%5A +PASS U+8ACF 諏 %1B%24%42%3F%5B +PASS U+8AD2 諒 %1B%24%42%4E%4A +PASS U+8AD6 論 %1B%24%42%4F%40 +PASS U+8ADA 諚 %1B%24%42%6B%5C +PASS U+8ADB 諛 %1B%24%42%6B%67 +PASS U+8ADC 諜 %1B%24%42%44%35 +PASS U+8ADE 諞 %1B%24%42%6B%66 +FAIL U+8ADF 諟 %1B%24%42%7B%6C assert_equals: expected "%1B%24%42%7B%6C" but got "%26%23%33%35%35%35%31%3B" +PASS U+8AE0 諠 %1B%24%42%6B%63 +PASS U+8AE1 諡 %1B%24%42%6B%6B +PASS U+8AE2 諢 %1B%24%42%6B%64 +PASS U+8AE4 諤 %1B%24%42%6B%60 +PASS U+8AE6 諦 %1B%24%42%44%7C +PASS U+8AE7 諧 %1B%24%42%6B%5F +PASS U+8AEB 諫 %1B%24%42%6B%5D +PASS U+8AED 諭 %1B%24%42%4D%21 +PASS U+8AEE 諮 %1B%24%42%3B%70 +PASS U+8AF1 諱 %1B%24%42%6B%61 +PASS U+8AF3 諳 %1B%24%42%6B%5E +FAIL U+8AF6 諶 %1B%24%42%7B%6E assert_equals: expected "%1B%24%42%7B%6E" but got "%26%23%33%35%35%37%34%3B" +PASS U+8AF7 諷 %1B%24%42%6B%65 +PASS U+8AF8 諸 %1B%24%42%3D%74 +PASS U+8AFA 諺 %1B%24%42%38%41 +PASS U+8AFE 諾 %1B%24%42%42%7A +PASS U+8B00 謀 %1B%24%42%4B%45 +PASS U+8B01 謁 %1B%24%42%31%5A +PASS U+8B02 謂 %1B%24%42%30%62 +PASS U+8B04 謄 %1B%24%42%46%25 +PASS U+8B07 謇 %1B%24%42%6B%69 +PASS U+8B0C 謌 %1B%24%42%6B%68 +PASS U+8B0E 謎 %1B%24%42%46%66 +PASS U+8B10 謐 %1B%24%42%6B%6D +PASS U+8B14 謔 %1B%24%42%6B%62 +PASS U+8B16 謖 %1B%24%42%6B%6C +PASS U+8B17 謗 %1B%24%42%6B%6E +PASS U+8B19 謙 %1B%24%42%38%2C +PASS U+8B1A 謚 %1B%24%42%6B%6A +PASS U+8B1B 講 %1B%24%42%39%56 +PASS U+8B1D 謝 %1B%24%42%3C%55 +PASS U+8B20 謠 %1B%24%42%6B%6F +PASS U+8B21 謡 %1B%24%42%4D%58 +PASS U+8B26 謦 %1B%24%42%6B%72 +PASS U+8B28 謨 %1B%24%42%6B%75 +PASS U+8B2B 謫 %1B%24%42%6B%73 +PASS U+8B2C 謬 %1B%24%42%49%35 +PASS U+8B33 謳 %1B%24%42%6B%70 +PASS U+8B39 謹 %1B%24%42%36%60 +PASS U+8B3E 謾 %1B%24%42%6B%74 +PASS U+8B41 譁 %1B%24%42%6B%76 +PASS U+8B49 證 %1B%24%42%6B%7A +PASS U+8B4C 譌 %1B%24%42%6B%77 +PASS U+8B4E 譎 %1B%24%42%6B%79 +PASS U+8B4F 譏 %1B%24%42%6B%78 +FAIL U+8B53 譓 %1B%24%42%7B%6F assert_equals: expected "%1B%24%42%7B%6F" but got "%26%23%33%35%36%36%37%3B" +PASS U+8B56 譖 %1B%24%42%6B%7B +PASS U+8B58 識 %1B%24%42%3C%31 +PASS U+8B5A 譚 %1B%24%42%6B%7D +PASS U+8B5B 譛 %1B%24%42%6B%7C +PASS U+8B5C 譜 %1B%24%42%49%68 +PASS U+8B5F 譟 %1B%24%42%6C%21 +PASS U+8B66 警 %1B%24%42%37%59 +PASS U+8B6B 譫 %1B%24%42%6B%7E +PASS U+8B6C 譬 %1B%24%42%6C%22 +PASS U+8B6F 譯 %1B%24%42%6C%23 +PASS U+8B70 議 %1B%24%42%35%44 +PASS U+8B71 譱 %1B%24%42%66%41 +PASS U+8B72 譲 %1B%24%42%3E%79 +PASS U+8B74 譴 %1B%24%42%6C%24 +PASS U+8B77 護 %1B%24%42%38%6E +PASS U+8B7D 譽 %1B%24%42%6C%25 +FAIL U+8B7F 譿 %1B%24%42%7B%70 assert_equals: expected "%1B%24%42%7B%70" but got "%26%23%33%35%37%31%31%3B" +PASS U+8B80 讀 %1B%24%42%6C%26 +PASS U+8B83 讃 %1B%24%42%3B%3E +PASS U+8B8A 變 %1B%24%42%5A%4E +PASS U+8B8C 讌 %1B%24%42%6C%27 +PASS U+8B8E 讎 %1B%24%42%6C%28 +PASS U+8B90 讐 %1B%24%42%3D%32 +PASS U+8B92 讒 %1B%24%42%6C%29 +PASS U+8B93 讓 %1B%24%42%6C%2A +PASS U+8B96 讖 %1B%24%42%6C%2B +PASS U+8B99 讙 %1B%24%42%6C%2C +PASS U+8B9A 讚 %1B%24%42%6C%2D +PASS U+8C37 谷 %1B%24%42%43%2B +PASS U+8C3A 谺 %1B%24%42%6C%2E +PASS U+8C3F 谿 %1B%24%42%6C%30 +PASS U+8C41 豁 %1B%24%42%6C%2F +PASS U+8C46 豆 %1B%24%42%46%26 +PASS U+8C48 豈 %1B%24%42%6C%31 +PASS U+8C4A 豊 %1B%24%42%4B%2D +PASS U+8C4C 豌 %1B%24%42%6C%32 +PASS U+8C4E 豎 %1B%24%42%6C%33 +PASS U+8C50 豐 %1B%24%42%6C%34 +PASS U+8C55 豕 %1B%24%42%6C%35 +PASS U+8C5A 豚 %1B%24%42%46%5A +PASS U+8C61 象 %1B%24%42%3E%5D +PASS U+8C62 豢 %1B%24%42%6C%36 +PASS U+8C6A 豪 %1B%24%42%39%6B +PASS U+8C6B 豫 %1B%24%42%50%2E +PASS U+8C6C 豬 %1B%24%42%6C%37 +PASS U+8C78 豸 %1B%24%42%6C%38 +PASS U+8C79 豹 %1B%24%42%49%3F +PASS U+8C7A 豺 %1B%24%42%6C%39 +PASS U+8C7C 豼 %1B%24%42%6C%41 +PASS U+8C82 貂 %1B%24%42%6C%3A +PASS U+8C85 貅 %1B%24%42%6C%3C +PASS U+8C89 貉 %1B%24%42%6C%3B +PASS U+8C8A 貊 %1B%24%42%6C%3D +PASS U+8C8C 貌 %1B%24%42%4B%46 +PASS U+8C8D 貍 %1B%24%42%6C%3E +PASS U+8C8E 貎 %1B%24%42%6C%3F +PASS U+8C94 貔 %1B%24%42%6C%40 +PASS U+8C98 貘 %1B%24%42%6C%42 +PASS U+8C9D 貝 %1B%24%42%33%2D +PASS U+8C9E 貞 %1B%24%42%44%67 +PASS U+8CA0 負 %1B%24%42%49%69 +PASS U+8CA1 財 %1B%24%42%3A%62 +PASS U+8CA2 貢 %1B%24%42%39%57 +PASS U+8CA7 貧 %1B%24%42%49%4F +PASS U+8CA8 貨 %1B%24%42%32%5F +PASS U+8CA9 販 %1B%24%42%48%4E +PASS U+8CAA 貪 %1B%24%42%6C%45 +PASS U+8CAB 貫 %1B%24%42%34%53 +PASS U+8CAC 責 %1B%24%42%40%55 +PASS U+8CAD 貭 %1B%24%42%6C%44 +PASS U+8CAE 貮 %1B%24%42%6C%49 +PASS U+8CAF 貯 %1B%24%42%43%79 +PASS U+8CB0 貰 %1B%24%42%4C%63 +PASS U+8CB2 貲 %1B%24%42%6C%47 +PASS U+8CB3 貳 %1B%24%42%6C%48 +PASS U+8CB4 貴 %1B%24%42%35%2E +PASS U+8CB6 貶 %1B%24%42%6C%4A +PASS U+8CB7 買 %1B%24%42%47%63 +PASS U+8CB8 貸 %1B%24%42%42%5F +PASS U+8CBB 費 %1B%24%42%48%71 +PASS U+8CBC 貼 %1B%24%42%45%3D +PASS U+8CBD 貽 %1B%24%42%6C%46 +PASS U+8CBF 貿 %1B%24%42%4B%47 +PASS U+8CC0 賀 %1B%24%42%32%6C +PASS U+8CC1 賁 %1B%24%42%6C%4C +PASS U+8CC2 賂 %1B%24%42%4F%28 +PASS U+8CC3 賃 %1B%24%42%44%42 +PASS U+8CC4 賄 %1B%24%42%4F%45 +PASS U+8CC7 資 %1B%24%42%3B%71 +PASS U+8CC8 賈 %1B%24%42%6C%4B +PASS U+8CCA 賊 %1B%24%42%42%31 +PASS U+8CCD 賍 %1B%24%42%6C%5C +PASS U+8CCE 賎 %1B%24%42%41%28 +PASS U+8CD1 賑 %1B%24%42%46%78 +PASS U+8CD3 賓 %1B%24%42%49%50 +PASS U+8CDA 賚 %1B%24%42%6C%4F +PASS U+8CDB 賛 %1B%24%42%3B%3F +PASS U+8CDC 賜 %1B%24%42%3B%72 +PASS U+8CDE 賞 %1B%24%42%3E%5E +PASS U+8CE0 賠 %1B%24%42%47%65 +PASS U+8CE2 賢 %1B%24%42%38%2D +PASS U+8CE3 賣 %1B%24%42%6C%4E +PASS U+8CE4 賤 %1B%24%42%6C%4D +PASS U+8CE6 賦 %1B%24%42%49%6A +PASS U+8CEA 質 %1B%24%42%3C%41 +PASS U+8CED 賭 %1B%24%42%45%52 +FAIL U+8CF0 賰 %1B%24%42%7B%71 assert_equals: expected "%1B%24%42%7B%71" but got "%26%23%33%36%30%38%30%3B" +FAIL U+8CF4 賴 %1B%24%42%7B%72 assert_equals: expected "%1B%24%42%7B%72" but got "%26%23%33%36%30%38%34%3B" +PASS U+8CFA 賺 %1B%24%42%6C%51 +PASS U+8CFB 賻 %1B%24%42%6C%52 +PASS U+8CFC 購 %1B%24%42%39%58 +PASS U+8CFD 賽 %1B%24%42%6C%50 +PASS U+8D04 贄 %1B%24%42%6C%53 +PASS U+8D05 贅 %1B%24%42%6C%54 +PASS U+8D07 贇 %1B%24%42%6C%56 +PASS U+8D08 贈 %1B%24%42%42%23 +PASS U+8D0A 贊 %1B%24%42%6C%55 +PASS U+8D0B 贋 %1B%24%42%34%66 +PASS U+8D0D 贍 %1B%24%42%6C%58 +PASS U+8D0F 贏 %1B%24%42%6C%57 +PASS U+8D10 贐 %1B%24%42%6C%59 +FAIL U+8D12 贒 %1B%24%42%7B%73 assert_equals: expected "%1B%24%42%7B%73" but got "%26%23%33%36%31%31%34%3B" +PASS U+8D13 贓 %1B%24%42%6C%5B +PASS U+8D14 贔 %1B%24%42%6C%5D +PASS U+8D16 贖 %1B%24%42%6C%5E +PASS U+8D64 赤 %1B%24%42%40%56 +PASS U+8D66 赦 %1B%24%42%3C%4F +PASS U+8D67 赧 %1B%24%42%6C%5F +PASS U+8D6B 赫 %1B%24%42%33%52 +PASS U+8D6D 赭 %1B%24%42%6C%60 +PASS U+8D70 走 %1B%24%42%41%76 +PASS U+8D71 赱 %1B%24%42%6C%61 +PASS U+8D73 赳 %1B%24%42%6C%62 +PASS U+8D74 赴 %1B%24%42%49%6B +FAIL U+8D76 赶 %1B%24%42%7B%74 assert_equals: expected "%1B%24%42%7B%74" but got "%26%23%33%36%32%31%34%3B" +PASS U+8D77 起 %1B%24%42%35%2F +PASS U+8D81 趁 %1B%24%42%6C%63 +PASS U+8D85 超 %1B%24%42%44%36 +PASS U+8D8A 越 %1B%24%42%31%5B +PASS U+8D99 趙 %1B%24%42%6C%64 +PASS U+8DA3 趣 %1B%24%42%3C%71 +PASS U+8DA8 趨 %1B%24%42%3F%76 +PASS U+8DB3 足 %1B%24%42%42%2D +PASS U+8DBA 趺 %1B%24%42%6C%67 +PASS U+8DBE 趾 %1B%24%42%6C%66 +PASS U+8DC2 跂 %1B%24%42%6C%65 +PASS U+8DCB 跋 %1B%24%42%6C%6D +PASS U+8DCC 跌 %1B%24%42%6C%6B +PASS U+8DCF 跏 %1B%24%42%6C%68 +PASS U+8DD6 跖 %1B%24%42%6C%6A +PASS U+8DDA 跚 %1B%24%42%6C%69 +PASS U+8DDB 跛 %1B%24%42%6C%6C +PASS U+8DDD 距 %1B%24%42%35%77 +PASS U+8DDF 跟 %1B%24%42%6C%70 +PASS U+8DE1 跡 %1B%24%42%40%57 +PASS U+8DE3 跣 %1B%24%42%6C%71 +PASS U+8DE8 跨 %1B%24%42%38%59 +PASS U+8DEA 跪 %1B%24%42%6C%6E +PASS U+8DEB 跫 %1B%24%42%6C%6F +PASS U+8DEF 路 %1B%24%42%4F%29 +PASS U+8DF3 跳 %1B%24%42%44%37 +PASS U+8DF5 践 %1B%24%42%41%29 +PASS U+8DFC 跼 %1B%24%42%6C%72 +PASS U+8DFF 跿 %1B%24%42%6C%75 +PASS U+8E08 踈 %1B%24%42%6C%73 +PASS U+8E09 踉 %1B%24%42%6C%74 +PASS U+8E0A 踊 %1B%24%42%4D%59 +PASS U+8E0F 踏 %1B%24%42%46%27 +PASS U+8E10 踐 %1B%24%42%6C%78 +PASS U+8E1D 踝 %1B%24%42%6C%76 +PASS U+8E1E 踞 %1B%24%42%6C%77 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_6001-7000-expected.txt new file mode 100644 index 0000000..6a81ea10 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_6001-7000-expected.txt
@@ -0,0 +1,1004 @@ +This is a testharness.js-based test. +Found 1000 tests; 925 PASS, 75 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+8E1F 踟 %1B%24%42%6C%79 +PASS U+8E2A 踪 %1B%24%42%6D%29 +PASS U+8E30 踰 %1B%24%42%6C%7C +PASS U+8E34 踴 %1B%24%42%6C%7D +PASS U+8E35 踵 %1B%24%42%6C%7B +PASS U+8E42 蹂 %1B%24%42%6C%7A +PASS U+8E44 蹄 %1B%24%42%44%7D +PASS U+8E47 蹇 %1B%24%42%6D%21 +PASS U+8E48 蹈 %1B%24%42%6D%25 +PASS U+8E49 蹉 %1B%24%42%6D%22 +PASS U+8E4A 蹊 %1B%24%42%6C%7E +PASS U+8E4C 蹌 %1B%24%42%6D%23 +PASS U+8E50 蹐 %1B%24%42%6D%24 +PASS U+8E55 蹕 %1B%24%42%6D%2B +PASS U+8E59 蹙 %1B%24%42%6D%26 +PASS U+8E5F 蹟 %1B%24%42%40%58 +PASS U+8E60 蹠 %1B%24%42%6D%28 +PASS U+8E63 蹣 %1B%24%42%6D%2A +PASS U+8E64 蹤 %1B%24%42%6D%27 +PASS U+8E72 蹲 %1B%24%42%6D%2D +PASS U+8E74 蹴 %1B%24%42%3D%33 +PASS U+8E76 蹶 %1B%24%42%6D%2C +PASS U+8E7C 蹼 %1B%24%42%6D%2E +PASS U+8E81 躁 %1B%24%42%6D%2F +PASS U+8E84 躄 %1B%24%42%6D%32 +PASS U+8E85 躅 %1B%24%42%6D%31 +PASS U+8E87 躇 %1B%24%42%6D%30 +PASS U+8E8A 躊 %1B%24%42%6D%34 +PASS U+8E8B 躋 %1B%24%42%6D%33 +PASS U+8E8D 躍 %1B%24%42%4C%76 +PASS U+8E91 躑 %1B%24%42%6D%36 +PASS U+8E93 躓 %1B%24%42%6D%35 +PASS U+8E94 躔 %1B%24%42%6D%37 +PASS U+8E99 躙 %1B%24%42%6D%38 +PASS U+8EA1 躡 %1B%24%42%6D%3A +PASS U+8EAA 躪 %1B%24%42%6D%39 +PASS U+8EAB 身 %1B%24%42%3F%48 +PASS U+8EAC 躬 %1B%24%42%6D%3B +PASS U+8EAF 躯 %1B%24%42%36%6D +PASS U+8EB0 躰 %1B%24%42%6D%3C +PASS U+8EB1 躱 %1B%24%42%6D%3E +PASS U+8EBE 躾 %1B%24%42%6D%3F +PASS U+8EC5 軅 %1B%24%42%6D%40 +PASS U+8EC6 軆 %1B%24%42%6D%3D +PASS U+8EC8 軈 %1B%24%42%6D%41 +PASS U+8ECA 車 %1B%24%42%3C%56 +PASS U+8ECB 軋 %1B%24%42%6D%42 +PASS U+8ECC 軌 %1B%24%42%35%30 +PASS U+8ECD 軍 %1B%24%42%37%33 +FAIL U+8ECF 軏 %1B%24%42%7B%76 assert_equals: expected "%1B%24%42%7B%76" but got "%26%23%33%36%35%35%39%3B" +PASS U+8ED2 軒 %1B%24%42%38%2E +PASS U+8EDB 軛 %1B%24%42%6D%43 +PASS U+8EDF 軟 %1B%24%42%46%70 +PASS U+8EE2 転 %1B%24%42%45%3E +PASS U+8EE3 軣 %1B%24%42%6D%44 +PASS U+8EEB 軫 %1B%24%42%6D%47 +PASS U+8EF8 軸 %1B%24%42%3C%34 +PASS U+8EFB 軻 %1B%24%42%6D%46 +PASS U+8EFC 軼 %1B%24%42%6D%45 +PASS U+8EFD 軽 %1B%24%42%37%5A +PASS U+8EFE 軾 %1B%24%42%6D%48 +PASS U+8F03 較 %1B%24%42%33%53 +PASS U+8F05 輅 %1B%24%42%6D%4A +PASS U+8F09 載 %1B%24%42%3A%5C +PASS U+8F0A 輊 %1B%24%42%6D%49 +PASS U+8F0C 輌 %1B%24%42%6D%52 +PASS U+8F12 輒 %1B%24%42%6D%4C +PASS U+8F13 輓 %1B%24%42%6D%4E +PASS U+8F14 輔 %1B%24%42%4A%65 +PASS U+8F15 輕 %1B%24%42%6D%4B +PASS U+8F19 輙 %1B%24%42%6D%4D +PASS U+8F1B 輛 %1B%24%42%6D%51 +PASS U+8F1C 輜 %1B%24%42%6D%4F +PASS U+8F1D 輝 %1B%24%42%35%31 +PASS U+8F1F 輟 %1B%24%42%6D%50 +PASS U+8F26 輦 %1B%24%42%6D%53 +PASS U+8F29 輩 %1B%24%42%47%5A +PASS U+8F2A 輪 %1B%24%42%4E%58 +PASS U+8F2F 輯 %1B%24%42%3D%34 +PASS U+8F33 輳 %1B%24%42%6D%54 +PASS U+8F38 輸 %1B%24%42%4D%22 +PASS U+8F39 輹 %1B%24%42%6D%56 +PASS U+8F3B 輻 %1B%24%42%6D%55 +PASS U+8F3E 輾 %1B%24%42%6D%59 +PASS U+8F3F 輿 %1B%24%42%4D%41 +PASS U+8F42 轂 %1B%24%42%6D%58 +PASS U+8F44 轄 %1B%24%42%33%6D +PASS U+8F45 轅 %1B%24%42%6D%57 +PASS U+8F46 轆 %1B%24%42%6D%5C +PASS U+8F49 轉 %1B%24%42%6D%5B +PASS U+8F4C 轌 %1B%24%42%6D%5A +PASS U+8F4D 轍 %1B%24%42%45%32 +PASS U+8F4E 轎 %1B%24%42%6D%5D +PASS U+8F57 轗 %1B%24%42%6D%5E +PASS U+8F5C 轜 %1B%24%42%6D%5F +PASS U+8F5F 轟 %1B%24%42%39%6C +PASS U+8F61 轡 %1B%24%42%37%25 +PASS U+8F62 轢 %1B%24%42%6D%60 +PASS U+8F63 轣 %1B%24%42%6D%61 +PASS U+8F64 轤 %1B%24%42%6D%62 +PASS U+8F9B 辛 %1B%24%42%3F%49 +PASS U+8F9C 辜 %1B%24%42%6D%63 +PASS U+8F9E 辞 %1B%24%42%3C%2D +PASS U+8F9F 辟 %1B%24%42%6D%64 +PASS U+8FA3 辣 %1B%24%42%6D%65 +PASS U+8FA7 辧 %1B%24%42%52%21 +PASS U+8FA8 辨 %1B%24%42%51%7E +PASS U+8FAD 辭 %1B%24%42%6D%66 +PASS U+8FAE 辮 %1B%24%42%65%70 +PASS U+8FAF 辯 %1B%24%42%6D%67 +PASS U+8FB0 辰 %1B%24%42%43%24 +PASS U+8FB1 辱 %1B%24%42%3F%2B +PASS U+8FB2 農 %1B%24%42%47%40 +PASS U+8FB7 辷 %1B%24%42%6D%68 +PASS U+8FBA 辺 %1B%24%42%4A%55 +PASS U+8FBB 辻 %1B%24%42%44%54 +PASS U+8FBC 込 %1B%24%42%39%7E +PASS U+8FBF 辿 %1B%24%42%43%29 +PASS U+8FC2 迂 %1B%24%42%31%2A +PASS U+8FC4 迄 %1B%24%42%4B%78 +PASS U+8FC5 迅 %1B%24%42%3F%57 +PASS U+8FCE 迎 %1B%24%42%37%5E +PASS U+8FD1 近 %1B%24%42%36%61 +PASS U+8FD4 返 %1B%24%42%4A%56 +PASS U+8FDA 迚 %1B%24%42%6D%69 +PASS U+8FE2 迢 %1B%24%42%6D%6B +PASS U+8FE5 迥 %1B%24%42%6D%6A +PASS U+8FE6 迦 %1B%24%42%32%60 +PASS U+8FE9 迩 %1B%24%42%46%76 +PASS U+8FEA 迪 %1B%24%42%6D%6C +PASS U+8FEB 迫 %1B%24%42%47%77 +PASS U+8FED 迭 %1B%24%42%45%33 +PASS U+8FEF 迯 %1B%24%42%6D%6D +PASS U+8FF0 述 %1B%24%42%3D%52 +PASS U+8FF4 迴 %1B%24%42%6D%6F +PASS U+8FF7 迷 %1B%24%42%4C%42 +PASS U+8FF8 迸 %1B%24%42%6D%7E +PASS U+8FF9 迹 %1B%24%42%6D%71 +PASS U+8FFA 迺 %1B%24%42%6D%72 +PASS U+8FFD 追 %1B%24%42%44%49 +PASS U+9000 退 %1B%24%42%42%60 +PASS U+9001 送 %1B%24%42%41%77 +PASS U+9003 逃 %1B%24%42%46%28 +PASS U+9005 逅 %1B%24%42%6D%70 +PASS U+9006 逆 %1B%24%42%35%55 +PASS U+900B 逋 %1B%24%42%6D%79 +PASS U+900D 逍 %1B%24%42%6D%76 +PASS U+900E 逎 %1B%24%42%6E%25 +PASS U+900F 透 %1B%24%42%46%29 +PASS U+9010 逐 %1B%24%42%43%60 +PASS U+9011 逑 %1B%24%42%6D%73 +PASS U+9013 逓 %1B%24%42%44%7E +PASS U+9014 途 %1B%24%42%45%53 +PASS U+9015 逕 %1B%24%42%6D%74 +PASS U+9016 逖 %1B%24%42%6D%78 +PASS U+9017 逗 %1B%24%42%3F%60 +PASS U+9019 這 %1B%24%42%47%67 +PASS U+901A 通 %1B%24%42%44%4C +PASS U+901D 逝 %1B%24%42%40%42 +PASS U+901E 逞 %1B%24%42%6D%77 +PASS U+901F 速 %1B%24%42%42%2E +PASS U+9020 造 %1B%24%42%42%24 +PASS U+9021 逡 %1B%24%42%6D%75 +PASS U+9022 逢 %1B%24%42%30%29 +PASS U+9023 連 %1B%24%42%4F%22 +PASS U+9027 逧 %1B%24%42%6D%7A +PASS U+902E 逮 %1B%24%42%42%61 +PASS U+9031 週 %1B%24%42%3D%35 +PASS U+9032 進 %1B%24%42%3F%4A +PASS U+9035 逵 %1B%24%42%6D%7C +PASS U+9036 逶 %1B%24%42%6D%7B +PASS U+9038 逸 %1B%24%42%30%6F +PASS U+9039 逹 %1B%24%42%6D%7D +PASS U+903C 逼 %1B%24%42%49%2F +PASS U+903E 逾 %1B%24%42%6E%27 +PASS U+9041 遁 %1B%24%42%46%5B +PASS U+9042 遂 %1B%24%42%3F%6B +PASS U+9045 遅 %1B%24%42%43%59 +PASS U+9047 遇 %1B%24%42%36%78 +PASS U+9049 遉 %1B%24%42%6E%26 +PASS U+904A 遊 %1B%24%42%4D%37 +PASS U+904B 運 %1B%24%42%31%3F +PASS U+904D 遍 %1B%24%42%4A%57 +PASS U+904E 過 %1B%24%42%32%61 +PASS U+904F 遏 %1B%24%42%6E%21 +PASS U+9050 遐 %1B%24%42%6E%22 +PASS U+9051 遑 %1B%24%42%6E%23 +PASS U+9052 遒 %1B%24%42%6E%24 +PASS U+9053 道 %1B%24%42%46%3B +PASS U+9054 達 %1B%24%42%43%23 +PASS U+9055 違 %1B%24%42%30%63 +PASS U+9056 遖 %1B%24%42%6E%28 +PASS U+9058 遘 %1B%24%42%6E%29 +PASS U+9059 遙 %1B%24%42%74%23 +PASS U+905C 遜 %1B%24%42%42%3D +PASS U+905E 遞 %1B%24%42%6E%2A +PASS U+9060 遠 %1B%24%42%31%73 +PASS U+9061 遡 %1B%24%42%41%4C +PASS U+9063 遣 %1B%24%42%38%2F +PASS U+9065 遥 %1B%24%42%4D%5A +FAIL U+9067 遧 %1B%24%42%7B%79 assert_equals: expected "%1B%24%42%7B%79" but got "%26%23%33%36%39%36%37%3B" +PASS U+9068 遨 %1B%24%42%6E%2B +PASS U+9069 適 %1B%24%42%45%2C +PASS U+906D 遭 %1B%24%42%41%78 +PASS U+906E 遮 %1B%24%42%3C%57 +PASS U+906F 遯 %1B%24%42%6E%2C +PASS U+9072 遲 %1B%24%42%6E%2F +PASS U+9075 遵 %1B%24%42%3D%65 +PASS U+9076 遶 %1B%24%42%6E%2D +PASS U+9077 遷 %1B%24%42%41%2B +PASS U+9078 選 %1B%24%42%41%2A +PASS U+907A 遺 %1B%24%42%30%64 +PASS U+907C 遼 %1B%24%42%4E%4B +PASS U+907D 遽 %1B%24%42%6E%31 +PASS U+907F 避 %1B%24%42%48%72 +PASS U+9080 邀 %1B%24%42%6E%33 +PASS U+9081 邁 %1B%24%42%6E%32 +PASS U+9082 邂 %1B%24%42%6E%30 +PASS U+9083 邃 %1B%24%42%63%64 +PASS U+9084 還 %1B%24%42%34%54 +PASS U+9087 邇 %1B%24%42%6D%6E +PASS U+9089 邉 %1B%24%42%6E%35 +PASS U+908A 邊 %1B%24%42%6E%34 +PASS U+908F 邏 %1B%24%42%6E%36 +PASS U+9091 邑 %1B%24%42%4D%38 +PASS U+90A3 那 %1B%24%42%46%61 +PASS U+90A6 邦 %1B%24%42%4B%2E +PASS U+90A8 邨 %1B%24%42%6E%37 +PASS U+90AA 邪 %1B%24%42%3C%59 +PASS U+90AF 邯 %1B%24%42%6E%38 +PASS U+90B1 邱 %1B%24%42%6E%39 +PASS U+90B5 邵 %1B%24%42%6E%3A +PASS U+90B8 邸 %1B%24%42%45%21 +PASS U+90C1 郁 %1B%24%42%30%6A +PASS U+90CA 郊 %1B%24%42%39%59 +PASS U+90CE 郎 %1B%24%42%4F%3A +PASS U+90DB 郛 %1B%24%42%6E%3E +FAIL U+90DE 郞 %1B%24%42%7B%7A assert_equals: expected "%1B%24%42%7B%7A" but got "%26%23%33%37%30%38%36%3B" +PASS U+90E1 郡 %1B%24%42%37%34 +PASS U+90E2 郢 %1B%24%42%6E%3B +PASS U+90E4 郤 %1B%24%42%6E%3C +PASS U+90E8 部 %1B%24%42%49%74 +PASS U+90ED 郭 %1B%24%42%33%54 +PASS U+90F5 郵 %1B%24%42%4D%39 +PASS U+90F7 郷 %1B%24%42%36%3F +PASS U+90FD 都 %1B%24%42%45%54 +PASS U+9102 鄂 %1B%24%42%6E%3F +PASS U+9112 鄒 %1B%24%42%6E%40 +FAIL U+9115 鄕 %1B%24%42%7B%7C assert_equals: expected "%1B%24%42%7B%7C" but got "%26%23%33%37%31%34%31%3B" +PASS U+9119 鄙 %1B%24%42%6E%41 +FAIL U+9127 鄧 %1B%24%42%7B%7D assert_equals: expected "%1B%24%42%7B%7D" but got "%26%23%33%37%31%35%39%3B" +PASS U+912D 鄭 %1B%24%42%45%22 +PASS U+9130 鄰 %1B%24%42%6E%43 +PASS U+9132 鄲 %1B%24%42%6E%42 +PASS U+9149 酉 %1B%24%42%46%53 +PASS U+914A 酊 %1B%24%42%6E%44 +PASS U+914B 酋 %1B%24%42%3D%36 +PASS U+914C 酌 %1B%24%42%3C%60 +PASS U+914D 配 %1B%24%42%47%5B +PASS U+914E 酎 %1B%24%42%43%71 +PASS U+9152 酒 %1B%24%42%3C%72 +PASS U+9154 酔 %1B%24%42%3F%6C +PASS U+9156 酖 %1B%24%42%6E%45 +PASS U+9158 酘 %1B%24%42%6E%46 +PASS U+9162 酢 %1B%24%42%3F%5D +PASS U+9163 酣 %1B%24%42%6E%47 +PASS U+9165 酥 %1B%24%42%6E%48 +PASS U+9169 酩 %1B%24%42%6E%49 +PASS U+916A 酪 %1B%24%42%4D%6F +PASS U+916C 酬 %1B%24%42%3D%37 +PASS U+9172 酲 %1B%24%42%6E%4B +PASS U+9173 酳 %1B%24%42%6E%4A +PASS U+9175 酵 %1B%24%42%39%5A +PASS U+9177 酷 %1B%24%42%39%73 +PASS U+9178 酸 %1B%24%42%3B%40 +PASS U+9182 醂 %1B%24%42%6E%4E +PASS U+9187 醇 %1B%24%42%3D%66 +PASS U+9189 醉 %1B%24%42%6E%4D +PASS U+918B 醋 %1B%24%42%6E%4C +PASS U+918D 醍 %1B%24%42%42%69 +PASS U+9190 醐 %1B%24%42%38%6F +PASS U+9192 醒 %1B%24%42%40%43 +PASS U+9197 醗 %1B%24%42%48%30 +PASS U+919C 醜 %1B%24%42%3D%39 +PASS U+91A2 醢 %1B%24%42%6E%4F +PASS U+91A4 醤 %1B%24%42%3E%5F +PASS U+91AA 醪 %1B%24%42%6E%52 +PASS U+91AB 醫 %1B%24%42%6E%50 +PASS U+91AF 醯 %1B%24%42%6E%51 +PASS U+91B4 醴 %1B%24%42%6E%54 +PASS U+91B5 醵 %1B%24%42%6E%53 +PASS U+91B8 醸 %1B%24%42%3E%7A +PASS U+91BA 醺 %1B%24%42%6E%55 +PASS U+91C0 釀 %1B%24%42%6E%56 +PASS U+91C1 釁 %1B%24%42%6E%57 +PASS U+91C6 釆 %1B%24%42%48%50 +PASS U+91C7 采 %1B%24%42%3A%53 +PASS U+91C8 釈 %1B%24%42%3C%61 +PASS U+91C9 釉 %1B%24%42%6E%58 +PASS U+91CB 釋 %1B%24%42%6E%59 +PASS U+91CC 里 %1B%24%42%4E%24 +PASS U+91CD 重 %1B%24%42%3D%45 +PASS U+91CE 野 %1B%24%42%4C%6E +PASS U+91CF 量 %1B%24%42%4E%4C +PASS U+91D0 釐 %1B%24%42%6E%5A +PASS U+91D1 金 %1B%24%42%36%62 +PASS U+91D6 釖 %1B%24%42%6E%5B +FAIL U+91D7 釗 %1B%24%42%7C%21 assert_equals: expected "%1B%24%42%7C%21" but got "%26%23%33%37%33%33%35%3B" +PASS U+91D8 釘 %1B%24%42%45%23 +FAIL U+91DA 釚 %1B%24%42%7B%7E assert_equals: expected "%1B%24%42%7B%7E" but got "%26%23%33%37%33%33%38%3B" +PASS U+91DB 釛 %1B%24%42%6E%5E +PASS U+91DC 釜 %1B%24%42%33%78 +PASS U+91DD 針 %1B%24%42%3F%4B +FAIL U+91DE 釞 %1B%24%42%7C%22 assert_equals: expected "%1B%24%42%7C%22" but got "%26%23%33%37%33%34%32%3B" +PASS U+91DF 釟 %1B%24%42%6E%5C +PASS U+91E1 釡 %1B%24%42%6E%5D +PASS U+91E3 釣 %1B%24%42%44%60 +FAIL U+91E4 釤 %1B%24%42%7C%25 assert_equals: expected "%1B%24%42%7C%25" but got "%26%23%33%37%33%34%38%3B" +FAIL U+91E5 釥 %1B%24%42%7C%26 assert_equals: expected "%1B%24%42%7C%26" but got "%26%23%33%37%33%34%39%3B" +PASS U+91E6 釦 %1B%24%42%4B%55 +PASS U+91E7 釧 %1B%24%42%36%7C +FAIL U+91ED 釭 %1B%24%42%7C%23 assert_equals: expected "%1B%24%42%7C%23" but got "%26%23%33%37%33%35%37%3B" +FAIL U+91EE 釮 %1B%24%42%7C%24 assert_equals: expected "%1B%24%42%7C%24" but got "%26%23%33%37%33%35%38%3B" +PASS U+91F5 釵 %1B%24%42%6E%60 +PASS U+91F6 釶 %1B%24%42%6E%61 +PASS U+91FC 釼 %1B%24%42%6E%5F +PASS U+91FF 釿 %1B%24%42%6E%63 +FAIL U+9206 鈆 %1B%24%42%7C%27 assert_equals: expected "%1B%24%42%7C%27" but got "%26%23%33%37%33%38%32%3B" +FAIL U+920A 鈊 %1B%24%42%7C%29 assert_equals: expected "%1B%24%42%7C%29" but got "%26%23%33%37%33%38%36%3B" +PASS U+920D 鈍 %1B%24%42%46%5F +PASS U+920E 鈎 %1B%24%42%33%43 +FAIL U+9210 鈐 %1B%24%42%7C%28 assert_equals: expected "%1B%24%42%7C%28" but got "%26%23%33%37%33%39%32%3B" +PASS U+9211 鈑 %1B%24%42%6E%67 +PASS U+9214 鈔 %1B%24%42%6E%64 +PASS U+9215 鈕 %1B%24%42%6E%66 +PASS U+921E 鈞 %1B%24%42%6E%62 +PASS U+9229 鈩 %1B%24%42%6F%4F +PASS U+922C 鈬 %1B%24%42%6E%65 +PASS U+9234 鈴 %1B%24%42%4E%6B +PASS U+9237 鈷 %1B%24%42%38%5A +FAIL U+9239 鈹 %1B%24%42%7C%30 assert_equals: expected "%1B%24%42%7C%30" but got "%26%23%33%37%34%33%33%3B" +FAIL U+923A 鈺 %1B%24%42%7C%2A assert_equals: expected "%1B%24%42%7C%2A" but got "%26%23%33%37%34%33%34%3B" +FAIL U+923C 鈼 %1B%24%42%7C%2C assert_equals: expected "%1B%24%42%7C%2C" but got "%26%23%33%37%34%33%36%3B" +PASS U+923F 鈿 %1B%24%42%6E%6F +FAIL U+9240 鉀 %1B%24%42%7C%2B assert_equals: expected "%1B%24%42%7C%2B" but got "%26%23%33%37%34%34%30%3B" +PASS U+9244 鉄 %1B%24%42%45%34 +PASS U+9245 鉅 %1B%24%42%6E%6A +PASS U+9248 鉈 %1B%24%42%6E%6D +PASS U+9249 鉉 %1B%24%42%6E%6B +PASS U+924B 鉋 %1B%24%42%6E%70 +FAIL U+924E 鉎 %1B%24%42%7C%2D assert_equals: expected "%1B%24%42%7C%2D" but got "%26%23%33%37%34%35%34%3B" +PASS U+9250 鉐 %1B%24%42%6E%71 +FAIL U+9251 鉑 %1B%24%42%7C%2F assert_equals: expected "%1B%24%42%7C%2F" but got "%26%23%33%37%34%35%37%3B" +PASS U+9257 鉗 %1B%24%42%6E%69 +FAIL U+9259 鉙 %1B%24%42%7C%2E assert_equals: expected "%1B%24%42%7C%2E" but got "%26%23%33%37%34%36%35%3B" +PASS U+925A 鉚 %1B%24%42%6E%76 +PASS U+925B 鉛 %1B%24%42%31%74 +PASS U+925E 鉞 %1B%24%42%6E%68 +PASS U+9262 鉢 %1B%24%42%48%2D +PASS U+9264 鉤 %1B%24%42%6E%6C +PASS U+9266 鉦 %1B%24%42%3E%60 +FAIL U+9267 鉧 %1B%24%42%7C%31 assert_equals: expected "%1B%24%42%7C%31" but got "%26%23%33%37%34%37%39%3B" +PASS U+9271 鉱 %1B%24%42%39%5B +FAIL U+9277 鉷 %1B%24%42%7C%33 assert_equals: expected "%1B%24%42%7C%33" but got "%26%23%33%37%34%39%35%3B" +FAIL U+9278 鉸 %1B%24%42%7C%34 assert_equals: expected "%1B%24%42%7C%34" but got "%26%23%33%37%34%39%36%3B" +PASS U+927E 鉾 %1B%24%42%4B%48 +PASS U+9280 銀 %1B%24%42%36%64 +PASS U+9283 銃 %1B%24%42%3D%46 +PASS U+9285 銅 %1B%24%42%46%3C +FAIL U+9288 銈 %1B%24%42%79%24 assert_equals: expected "%1B%24%42%79%24" but got "%26%23%33%37%35%31%32%3B" +PASS U+9291 銑 %1B%24%42%41%2D +PASS U+9293 銓 %1B%24%42%6E%74 +PASS U+9295 銕 %1B%24%42%6E%6E +PASS U+9296 銖 %1B%24%42%6E%73 +PASS U+9298 銘 %1B%24%42%4C%43 +PASS U+929A 銚 %1B%24%42%44%38 +PASS U+929B 銛 %1B%24%42%6E%75 +PASS U+929C 銜 %1B%24%42%6E%72 +FAIL U+92A7 銧 %1B%24%42%7C%32 assert_equals: expected "%1B%24%42%7C%32" but got "%26%23%33%37%35%34%33%3B" +PASS U+92AD 銭 %1B%24%42%41%2C +PASS U+92B7 銷 %1B%24%42%6E%79 +PASS U+92B9 銹 %1B%24%42%6E%78 +PASS U+92CF 鋏 %1B%24%42%6E%77 +FAIL U+92D0 鋐 %1B%24%42%7C%38 assert_equals: expected "%1B%24%42%7C%38" but got "%26%23%33%37%35%38%34%3B" +PASS U+92D2 鋒 %1B%24%42%4B%2F +FAIL U+92D3 鋓 %1B%24%42%7C%3C assert_equals: expected "%1B%24%42%7C%3C" but got "%26%23%33%37%35%38%37%3B" +FAIL U+92D5 鋕 %1B%24%42%7C%3A assert_equals: expected "%1B%24%42%7C%3A" but got "%26%23%33%37%35%38%39%3B" +FAIL U+92D7 鋗 %1B%24%42%7C%36 assert_equals: expected "%1B%24%42%7C%36" but got "%26%23%33%37%35%39%31%3B" +FAIL U+92D9 鋙 %1B%24%42%7C%37 assert_equals: expected "%1B%24%42%7C%37" but got "%26%23%33%37%35%39%33%3B" +FAIL U+92E0 鋠 %1B%24%42%7C%3B assert_equals: expected "%1B%24%42%7C%3B" but got "%26%23%33%37%36%30%30%3B" +PASS U+92E4 鋤 %1B%24%42%3D%7B +FAIL U+92E7 鋧 %1B%24%42%7C%35 assert_equals: expected "%1B%24%42%7C%35" but got "%26%23%33%37%36%30%37%3B" +PASS U+92E9 鋩 %1B%24%42%6E%7A +PASS U+92EA 鋪 %1B%24%42%4A%5F +PASS U+92ED 鋭 %1B%24%42%31%54 +PASS U+92F2 鋲 %1B%24%42%49%46 +PASS U+92F3 鋳 %1B%24%42%43%72 +PASS U+92F8 鋸 %1B%24%42%35%78 +FAIL U+92F9 鋹 %1B%24%42%79%2A assert_equals: expected "%1B%24%42%79%2A" but got "%26%23%33%37%36%32%35%3B" +PASS U+92FA 鋺 %1B%24%42%6E%7C +FAIL U+92FB 鋻 %1B%24%42%7C%3F assert_equals: expected "%1B%24%42%7C%3F" but got "%26%23%33%37%36%32%37%3B" +PASS U+92FC 鋼 %1B%24%42%39%5D +FAIL U+92FF 鋿 %1B%24%42%7C%42 assert_equals: expected "%1B%24%42%7C%42" but got "%26%23%33%37%36%33%31%3B" +FAIL U+9302 錂 %1B%24%42%7C%44 assert_equals: expected "%1B%24%42%7C%44" but got "%26%23%33%37%36%33%34%3B" +PASS U+9306 錆 %1B%24%42%3B%2C +PASS U+930F 錏 %1B%24%42%6E%7B +PASS U+9310 錐 %1B%24%42%3F%6D +PASS U+9318 錘 %1B%24%42%3F%6E +PASS U+9319 錙 %1B%24%42%6F%21 +PASS U+931A 錚 %1B%24%42%6F%23 +FAIL U+931D 錝 %1B%24%42%7C%43 assert_equals: expected "%1B%24%42%7C%43" but got "%26%23%33%37%36%36%31%3B" +FAIL U+931E 錞 %1B%24%42%7C%41 assert_equals: expected "%1B%24%42%7C%41" but got "%26%23%33%37%36%36%32%3B" +PASS U+9320 錠 %1B%24%42%3E%7B +FAIL U+9321 錡 %1B%24%42%7C%3E assert_equals: expected "%1B%24%42%7C%3E" but got "%26%23%33%37%36%36%35%3B" +PASS U+9322 錢 %1B%24%42%6F%22 +PASS U+9323 錣 %1B%24%42%6F%24 +FAIL U+9325 錥 %1B%24%42%7C%3D assert_equals: expected "%1B%24%42%7C%3D" but got "%26%23%33%37%36%36%39%3B" +PASS U+9326 錦 %1B%24%42%36%53 +PASS U+9328 錨 %1B%24%42%49%45 +PASS U+932B 錫 %1B%24%42%3C%62 +PASS U+932C 錬 %1B%24%42%4F%23 +PASS U+932E 錮 %1B%24%42%6E%7E +PASS U+932F 錯 %1B%24%42%3A%78 +PASS U+9332 録 %1B%24%42%4F%3F +PASS U+9335 錵 %1B%24%42%6F%26 +PASS U+933A 錺 %1B%24%42%6F%25 +PASS U+933B 錻 %1B%24%42%6F%27 +PASS U+9344 鍄 %1B%24%42%6E%7D +FAIL U+9348 鍈 %1B%24%42%79%23 assert_equals: expected "%1B%24%42%79%23" but got "%26%23%33%37%37%30%34%3B" +PASS U+934B 鍋 %1B%24%42%46%69 +PASS U+934D 鍍 %1B%24%42%45%55 +PASS U+9354 鍔 %1B%24%42%44%57 +PASS U+9356 鍖 %1B%24%42%6F%2C +FAIL U+9357 鍗 %1B%24%42%7C%46 assert_equals: expected "%1B%24%42%7C%46" but got "%26%23%33%37%37%31%39%3B" +PASS U+935B 鍛 %1B%24%42%43%43 +PASS U+935C 鍜 %1B%24%42%6F%28 +PASS U+9360 鍠 %1B%24%42%6F%29 +PASS U+936C 鍬 %1B%24%42%37%2D +PASS U+936E 鍮 %1B%24%42%6F%2B +FAIL U+9370 鍰 %1B%24%42%7C%45 assert_equals: expected "%1B%24%42%7C%45" but got "%26%23%33%37%37%34%34%3B" +PASS U+9375 鍵 %1B%24%42%38%30 +PASS U+937C 鍼 %1B%24%42%6F%2A +PASS U+937E 鍾 %1B%24%42%3E%61 +PASS U+938C 鎌 %1B%24%42%33%79 +PASS U+9394 鎔 %1B%24%42%6F%30 +PASS U+9396 鎖 %1B%24%42%3A%3F +PASS U+9397 鎗 %1B%24%42%41%79 +PASS U+939A 鎚 %1B%24%42%44%4A +FAIL U+93A4 鎤 %1B%24%42%7C%47 assert_equals: expected "%1B%24%42%7C%47" but got "%26%23%33%37%37%39%36%3B" +PASS U+93A7 鎧 %1B%24%42%33%3B +PASS U+93AC 鎬 %1B%24%42%6F%2E +PASS U+93AD 鎭 %1B%24%42%6F%2F +PASS U+93AE 鎮 %1B%24%42%44%43 +PASS U+93B0 鎰 %1B%24%42%6F%2D +PASS U+93B9 鎹 %1B%24%42%6F%31 +PASS U+93C3 鏃 %1B%24%42%6F%37 +FAIL U+93C6 鏆 %1B%24%42%7C%48 assert_equals: expected "%1B%24%42%7C%48" but got "%26%23%33%37%38%33%30%3B" +PASS U+93C8 鏈 %1B%24%42%6F%3A +PASS U+93D0 鏐 %1B%24%42%6F%39 +PASS U+93D1 鏑 %1B%24%42%45%2D +PASS U+93D6 鏖 %1B%24%42%6F%32 +PASS U+93D7 鏗 %1B%24%42%6F%33 +PASS U+93D8 鏘 %1B%24%42%6F%36 +PASS U+93DD 鏝 %1B%24%42%6F%38 +FAIL U+93DE 鏞 %1B%24%42%7C%49 assert_equals: expected "%1B%24%42%7C%49" but got "%26%23%33%37%38%35%34%3B" +PASS U+93E1 鏡 %1B%24%42%36%40 +PASS U+93E4 鏤 %1B%24%42%6F%3B +PASS U+93E5 鏥 %1B%24%42%6F%35 +PASS U+93E8 鏨 %1B%24%42%6F%34 +FAIL U+93F8 鏸 %1B%24%42%7C%4A assert_equals: expected "%1B%24%42%7C%4A" but got "%26%23%33%37%38%38%30%3B" +PASS U+9403 鐃 %1B%24%42%6F%3F +PASS U+9407 鐇 %1B%24%42%6F%40 +PASS U+9410 鐐 %1B%24%42%6F%41 +PASS U+9413 鐓 %1B%24%42%6F%3E +PASS U+9414 鐔 %1B%24%42%6F%3D +PASS U+9418 鐘 %1B%24%42%3E%62 +PASS U+9419 鐙 %1B%24%42%46%2A +PASS U+941A 鐚 %1B%24%42%6F%3C +PASS U+9421 鐡 %1B%24%42%6F%45 +PASS U+942B 鐫 %1B%24%42%6F%43 +FAIL U+9431 鐱 %1B%24%42%7C%4B assert_equals: expected "%1B%24%42%7C%4B" but got "%26%23%33%37%39%33%37%3B" +PASS U+9435 鐵 %1B%24%42%6F%44 +PASS U+9436 鐶 %1B%24%42%6F%42 +PASS U+9438 鐸 %1B%24%42%42%78 +PASS U+943A 鐺 %1B%24%42%6F%46 +PASS U+9441 鑁 %1B%24%42%6F%47 +PASS U+9444 鑄 %1B%24%42%6F%49 +FAIL U+9445 鑅 %1B%24%42%7C%4C assert_equals: expected "%1B%24%42%7C%4C" but got "%26%23%33%37%39%35%37%3B" +FAIL U+9448 鑈 %1B%24%42%7C%4D assert_equals: expected "%1B%24%42%7C%4D" but got "%26%23%33%37%39%36%30%3B" +PASS U+9451 鑑 %1B%24%42%34%55 +PASS U+9452 鑒 %1B%24%42%6F%48 +PASS U+9453 鑓 %1B%24%42%4C%7A +PASS U+945A 鑚 %1B%24%42%6F%54 +PASS U+945B 鑛 %1B%24%42%6F%4A +PASS U+945E 鑞 %1B%24%42%6F%4D +PASS U+9460 鑠 %1B%24%42%6F%4B +PASS U+9462 鑢 %1B%24%42%6F%4C +PASS U+946A 鑪 %1B%24%42%6F%4E +PASS U+9470 鑰 %1B%24%42%6F%50 +PASS U+9475 鑵 %1B%24%42%6F%51 +PASS U+9477 鑷 %1B%24%42%6F%52 +PASS U+947C 鑼 %1B%24%42%6F%55 +PASS U+947D 鑽 %1B%24%42%6F%53 +PASS U+947E 鑾 %1B%24%42%6F%56 +PASS U+947F 鑿 %1B%24%42%6F%58 +PASS U+9481 钁 %1B%24%42%6F%57 +PASS U+9577 長 %1B%24%42%44%39 +PASS U+9580 門 %1B%24%42%4C%67 +PASS U+9582 閂 %1B%24%42%6F%59 +PASS U+9583 閃 %1B%24%42%41%2E +PASS U+9587 閇 %1B%24%42%6F%5A +PASS U+9589 閉 %1B%24%42%4A%44 +PASS U+958A 閊 %1B%24%42%6F%5B +PASS U+958B 開 %1B%24%42%33%2B +PASS U+958F 閏 %1B%24%42%31%3C +PASS U+9591 閑 %1B%24%42%34%57 +FAIL U+9592 閒 %1B%24%42%7C%4E assert_equals: expected "%1B%24%42%7C%4E" but got "%26%23%33%38%32%39%30%3B" +PASS U+9593 間 %1B%24%42%34%56 +PASS U+9594 閔 %1B%24%42%6F%5C +PASS U+9596 閖 %1B%24%42%6F%5D +PASS U+9598 閘 %1B%24%42%6F%5E +PASS U+9599 閙 %1B%24%42%6F%5F +PASS U+95A0 閠 %1B%24%42%6F%60 +PASS U+95A2 関 %1B%24%42%34%58 +PASS U+95A3 閣 %1B%24%42%33%55 +PASS U+95A4 閤 %1B%24%42%39%5E +PASS U+95A5 閥 %1B%24%42%48%36 +PASS U+95A7 閧 %1B%24%42%6F%62 +PASS U+95A8 閨 %1B%24%42%6F%61 +PASS U+95AD 閭 %1B%24%42%6F%63 +PASS U+95B2 閲 %1B%24%42%31%5C +PASS U+95B9 閹 %1B%24%42%6F%66 +PASS U+95BB 閻 %1B%24%42%6F%65 +PASS U+95BC 閼 %1B%24%42%6F%64 +PASS U+95BE 閾 %1B%24%42%6F%67 +PASS U+95C3 闃 %1B%24%42%6F%6A +PASS U+95C7 闇 %1B%24%42%30%47 +PASS U+95CA 闊 %1B%24%42%6F%68 +PASS U+95CC 闌 %1B%24%42%6F%6C +PASS U+95CD 闍 %1B%24%42%6F%6B +PASS U+95D4 闔 %1B%24%42%6F%6E +PASS U+95D5 闕 %1B%24%42%6F%6D +PASS U+95D6 闖 %1B%24%42%6F%6F +PASS U+95D8 闘 %1B%24%42%46%2E +PASS U+95DC 關 %1B%24%42%6F%70 +PASS U+95E1 闡 %1B%24%42%6F%71 +PASS U+95E2 闢 %1B%24%42%6F%73 +PASS U+95E5 闥 %1B%24%42%6F%72 +PASS U+961C 阜 %1B%24%42%49%6C +PASS U+9621 阡 %1B%24%42%6F%74 +PASS U+9628 阨 %1B%24%42%6F%75 +PASS U+962A 阪 %1B%24%42%3A%65 +PASS U+962E 阮 %1B%24%42%6F%76 +PASS U+962F 阯 %1B%24%42%6F%77 +PASS U+9632 防 %1B%24%42%4B%49 +PASS U+963B 阻 %1B%24%42%41%4B +PASS U+963F 阿 %1B%24%42%30%24 +PASS U+9640 陀 %1B%24%42%42%4B +PASS U+9642 陂 %1B%24%42%6F%78 +PASS U+9644 附 %1B%24%42%49%6D +PASS U+964B 陋 %1B%24%42%6F%7B +PASS U+964C 陌 %1B%24%42%6F%79 +PASS U+964D 降 %1B%24%42%39%5F +PASS U+964F 陏 %1B%24%42%6F%7A +PASS U+9650 限 %1B%24%42%38%42 +PASS U+965B 陛 %1B%24%42%4A%45 +PASS U+965C 陜 %1B%24%42%6F%7D +PASS U+965D 陝 %1B%24%42%70%21 +PASS U+965E 陞 %1B%24%42%6F%7E +PASS U+965F 陟 %1B%24%42%70%22 +PASS U+9662 院 %1B%24%42%31%21 +PASS U+9663 陣 %1B%24%42%3F%58 +PASS U+9664 除 %1B%24%42%3D%7C +PASS U+9665 陥 %1B%24%42%34%59 +PASS U+9666 陦 %1B%24%42%70%23 +PASS U+966A 陪 %1B%24%42%47%66 +PASS U+966C 陬 %1B%24%42%70%25 +PASS U+9670 陰 %1B%24%42%31%22 +PASS U+9672 陲 %1B%24%42%70%24 +PASS U+9673 陳 %1B%24%42%44%44 +PASS U+9675 陵 %1B%24%42%4E%4D +PASS U+9676 陶 %1B%24%42%46%2B +PASS U+9677 陷 %1B%24%42%6F%7C +PASS U+9678 陸 %1B%24%42%4E%26 +PASS U+967A 険 %1B%24%42%38%31 +PASS U+967D 陽 %1B%24%42%4D%5B +PASS U+9685 隅 %1B%24%42%36%79 +PASS U+9686 隆 %1B%24%42%4E%34 +PASS U+9688 隈 %1B%24%42%37%28 +PASS U+968A 隊 %1B%24%42%42%62 +PASS U+968B 隋 %1B%24%42%67%21 +PASS U+968D 隍 %1B%24%42%70%26 +PASS U+968E 階 %1B%24%42%33%2C +PASS U+968F 随 %1B%24%42%3F%6F +PASS U+9694 隔 %1B%24%42%33%56 +PASS U+9695 隕 %1B%24%42%70%28 +PASS U+9697 隗 %1B%24%42%70%29 +PASS U+9698 隘 %1B%24%42%70%27 +PASS U+9699 隙 %1B%24%42%37%64 +PASS U+969B 際 %1B%24%42%3A%5D +PASS U+969C 障 %1B%24%42%3E%63 +FAIL U+969D 隝 %1B%24%42%7C%51 assert_equals: expected "%1B%24%42%7C%51" but got "%26%23%33%38%35%35%37%3B" +PASS U+96A0 隠 %1B%24%42%31%23 +PASS U+96A3 隣 %1B%24%42%4E%59 +PASS U+96A7 隧 %1B%24%42%70%2B +PASS U+96A8 隨 %1B%24%42%6E%2E +PASS U+96AA 險 %1B%24%42%70%2A +FAIL U+96AF 隯 %1B%24%42%7C%52 assert_equals: expected "%1B%24%42%7C%52" but got "%26%23%33%38%35%37%35%3B" +PASS U+96B0 隰 %1B%24%42%70%2E +PASS U+96B1 隱 %1B%24%42%70%2C +PASS U+96B2 隲 %1B%24%42%70%2D +PASS U+96B4 隴 %1B%24%42%70%2F +PASS U+96B6 隶 %1B%24%42%70%30 +PASS U+96B7 隷 %1B%24%42%4E%6C +PASS U+96B8 隸 %1B%24%42%70%31 +PASS U+96B9 隹 %1B%24%42%70%32 +PASS U+96BB 隻 %1B%24%42%40%49 +PASS U+96BC 隼 %1B%24%42%48%3B +PASS U+96C0 雀 %1B%24%42%3F%7D +PASS U+96C1 雁 %1B%24%42%34%67 +PASS U+96C4 雄 %1B%24%42%4D%3A +PASS U+96C5 雅 %1B%24%42%32%6D +PASS U+96C6 集 %1B%24%42%3D%38 +PASS U+96C7 雇 %1B%24%42%38%5B +PASS U+96C9 雉 %1B%24%42%70%35 +PASS U+96CB 雋 %1B%24%42%70%34 +PASS U+96CC 雌 %1B%24%42%3B%73 +PASS U+96CD 雍 %1B%24%42%70%36 +PASS U+96CE 雎 %1B%24%42%70%33 +PASS U+96D1 雑 %1B%24%42%3B%28 +PASS U+96D5 雕 %1B%24%42%70%3A +PASS U+96D6 雖 %1B%24%42%6A%2D +PASS U+96D9 雙 %1B%24%42%52%56 +PASS U+96DB 雛 %1B%24%42%3F%77 +PASS U+96DC 雜 %1B%24%42%70%38 +PASS U+96E2 離 %1B%24%42%4E%25 +PASS U+96E3 難 %1B%24%42%46%71 +PASS U+96E8 雨 %1B%24%42%31%2B +PASS U+96EA 雪 %1B%24%42%40%63 +PASS U+96EB 雫 %1B%24%42%3C%36 +PASS U+96F0 雰 %1B%24%42%4A%37 +PASS U+96F2 雲 %1B%24%42%31%40 +PASS U+96F6 零 %1B%24%42%4E%6D +PASS U+96F7 雷 %1B%24%42%4D%6B +PASS U+96F9 雹 %1B%24%42%70%3B +PASS U+96FB 電 %1B%24%42%45%45 +PASS U+9700 需 %1B%24%42%3C%7B +PASS U+9704 霄 %1B%24%42%70%3C +PASS U+9706 霆 %1B%24%42%70%3D +PASS U+9707 震 %1B%24%42%3F%4C +PASS U+9708 霈 %1B%24%42%70%3E +PASS U+970A 霊 %1B%24%42%4E%6E +PASS U+970D 霍 %1B%24%42%70%39 +PASS U+970E 霎 %1B%24%42%70%40 +PASS U+970F 霏 %1B%24%42%70%42 +PASS U+9711 霑 %1B%24%42%70%41 +PASS U+9713 霓 %1B%24%42%70%3F +PASS U+9716 霖 %1B%24%42%70%43 +PASS U+9719 霙 %1B%24%42%70%44 +PASS U+971C 霜 %1B%24%42%41%7A +PASS U+971E 霞 %1B%24%42%32%62 +PASS U+9724 霤 %1B%24%42%70%45 +PASS U+9727 霧 %1B%24%42%4C%38 +PASS U+972A 霪 %1B%24%42%70%46 +PASS U+9730 霰 %1B%24%42%70%47 +PASS U+9732 露 %1B%24%42%4F%2A +FAIL U+9733 霳 %1B%24%42%7C%53 assert_equals: expected "%1B%24%42%7C%53" but got "%26%23%33%38%37%30%37%3B" +PASS U+9738 霸 %1B%24%42%5B%31 +PASS U+9739 霹 %1B%24%42%70%48 +FAIL U+973B 霻 %1B%24%42%7C%54 assert_equals: expected "%1B%24%42%7C%54" but got "%26%23%33%38%37%31%35%3B" +PASS U+973D 霽 %1B%24%42%70%49 +PASS U+973E 霾 %1B%24%42%70%4A +PASS U+9742 靂 %1B%24%42%70%4E +FAIL U+9743 靃 %1B%24%42%7C%55 assert_equals: expected "%1B%24%42%7C%55" but got "%26%23%33%38%37%32%33%3B" +PASS U+9744 靄 %1B%24%42%70%4B +PASS U+9746 靆 %1B%24%42%70%4C +PASS U+9748 靈 %1B%24%42%70%4D +PASS U+9749 靉 %1B%24%42%70%4F +FAIL U+974D 靍 %1B%24%42%7C%56 assert_equals: expected "%1B%24%42%7C%56" but got "%26%23%33%38%37%33%33%3B" +FAIL U+974F 靏 %1B%24%42%7C%57 assert_equals: expected "%1B%24%42%7C%57" but got "%26%23%33%38%37%33%35%3B" +FAIL U+9751 靑 %1B%24%42%7C%58 assert_equals: expected "%1B%24%42%7C%58" but got "%26%23%33%38%37%33%37%3B" +PASS U+9752 青 %1B%24%42%40%44 +FAIL U+9755 靕 %1B%24%42%7C%59 assert_equals: expected "%1B%24%42%7C%59" but got "%26%23%33%38%37%34%31%3B" +PASS U+9756 靖 %1B%24%42%4C%77 +PASS U+9759 静 %1B%24%42%40%45 +PASS U+975C 靜 %1B%24%42%70%50 +PASS U+975E 非 %1B%24%42%48%73 +PASS U+9760 靠 %1B%24%42%70%51 +PASS U+9761 靡 %1B%24%42%73%53 +PASS U+9762 面 %1B%24%42%4C%4C +PASS U+9764 靤 %1B%24%42%70%52 +PASS U+9766 靦 %1B%24%42%70%53 +PASS U+9768 靨 %1B%24%42%70%54 +PASS U+9769 革 %1B%24%42%33%57 +PASS U+976B 靫 %1B%24%42%70%56 +PASS U+976D 靭 %1B%24%42%3F%59 +PASS U+9771 靱 %1B%24%42%70%57 +PASS U+9774 靴 %1B%24%42%37%24 +PASS U+9779 靹 %1B%24%42%70%58 +PASS U+977A 靺 %1B%24%42%70%5C +PASS U+977C 靼 %1B%24%42%70%5A +PASS U+9781 鞁 %1B%24%42%70%5B +PASS U+9784 鞄 %1B%24%42%33%73 +PASS U+9785 鞅 %1B%24%42%70%59 +PASS U+9786 鞆 %1B%24%42%70%5D +PASS U+978B 鞋 %1B%24%42%70%5E +PASS U+978D 鞍 %1B%24%42%30%48 +PASS U+978F 鞏 %1B%24%42%70%5F +PASS U+9790 鞐 %1B%24%42%70%60 +PASS U+9798 鞘 %1B%24%42%3E%64 +PASS U+979C 鞜 %1B%24%42%70%61 +PASS U+97A0 鞠 %1B%24%42%35%47 +PASS U+97A3 鞣 %1B%24%42%70%64 +PASS U+97A6 鞦 %1B%24%42%70%63 +PASS U+97A8 鞨 %1B%24%42%70%62 +PASS U+97AB 鞫 %1B%24%42%6B%71 +PASS U+97AD 鞭 %1B%24%42%4A%5C +PASS U+97B3 鞳 %1B%24%42%70%65 +PASS U+97B4 鞴 %1B%24%42%70%66 +PASS U+97C3 韃 %1B%24%42%70%67 +PASS U+97C6 韆 %1B%24%42%70%68 +PASS U+97C8 韈 %1B%24%42%70%69 +PASS U+97CB 韋 %1B%24%42%70%6A +PASS U+97D3 韓 %1B%24%42%34%5A +PASS U+97DC 韜 %1B%24%42%70%6B +PASS U+97ED 韭 %1B%24%42%70%6C +PASS U+97EE 韮 %1B%24%42%47%23 +PASS U+97F2 韲 %1B%24%42%70%6E +PASS U+97F3 音 %1B%24%42%32%3B +PASS U+97F5 韵 %1B%24%42%70%71 +PASS U+97F6 韶 %1B%24%42%70%70 +PASS U+97FB 韻 %1B%24%42%31%24 +PASS U+97FF 響 %1B%24%42%36%41 +PASS U+9801 頁 %1B%24%42%4A%47 +PASS U+9802 頂 %1B%24%42%44%3A +PASS U+9803 頃 %1B%24%42%3A%22 +PASS U+9805 項 %1B%24%42%39%60 +PASS U+9806 順 %1B%24%42%3D%67 +PASS U+9808 須 %1B%24%42%3F%5C +PASS U+980C 頌 %1B%24%42%70%73 +PASS U+980F 頏 %1B%24%42%70%72 +PASS U+9810 預 %1B%24%42%4D%42 +PASS U+9811 頑 %1B%24%42%34%68 +PASS U+9812 頒 %1B%24%42%48%52 +PASS U+9813 頓 %1B%24%42%46%5C +PASS U+9817 頗 %1B%24%42%3F%7C +PASS U+9818 領 %1B%24%42%4E%4E +PASS U+981A 頚 %1B%24%42%37%5B +PASS U+9821 頡 %1B%24%42%70%76 +PASS U+9824 頤 %1B%24%42%70%75 +PASS U+982C 頬 %1B%24%42%4B%4B +PASS U+982D 頭 %1B%24%42%46%2C +PASS U+9834 頴 %1B%24%42%31%50 +PASS U+9837 頷 %1B%24%42%70%77 +PASS U+9838 頸 %1B%24%42%70%74 +PASS U+983B 頻 %1B%24%42%49%51 +PASS U+983C 頼 %1B%24%42%4D%6A +PASS U+983D 頽 %1B%24%42%70%78 +PASS U+9846 顆 %1B%24%42%70%79 +PASS U+984B 顋 %1B%24%42%70%7B +PASS U+984C 題 %1B%24%42%42%6A +PASS U+984D 額 %1B%24%42%33%5B +PASS U+984E 顎 %1B%24%42%33%5C +PASS U+984F 顏 %1B%24%42%70%7A +PASS U+9854 顔 %1B%24%42%34%69 +PASS U+9855 顕 %1B%24%42%38%32 +FAIL U+9857 顗 %1B%24%42%7C%5A assert_equals: expected "%1B%24%42%7C%5A" but got "%26%23%33%38%39%39%39%3B" +PASS U+9858 願 %1B%24%42%34%6A +PASS U+985B 顛 %1B%24%42%45%3F +PASS U+985E 類 %1B%24%42%4E%60 +FAIL U+9865 顥 %1B%24%42%7C%5B assert_equals: expected "%1B%24%42%7C%5B" but got "%26%23%33%39%30%31%33%3B" +PASS U+9867 顧 %1B%24%42%38%5C +PASS U+986B 顫 %1B%24%42%70%7C +PASS U+986F 顯 %1B%24%42%70%7D +PASS U+9870 顰 %1B%24%42%70%7E +PASS U+9871 顱 %1B%24%42%71%21 +PASS U+9873 顳 %1B%24%42%71%23 +PASS U+9874 顴 %1B%24%42%71%22 +PASS U+98A8 風 %1B%24%42%49%77 +PASS U+98AA 颪 %1B%24%42%71%24 +PASS U+98AF 颯 %1B%24%42%71%25 +PASS U+98B1 颱 %1B%24%42%71%26 +PASS U+98B6 颶 %1B%24%42%71%27 +PASS U+98C3 飃 %1B%24%42%71%29 +PASS U+98C4 飄 %1B%24%42%71%28 +PASS U+98C6 飆 %1B%24%42%71%2A +PASS U+98DB 飛 %1B%24%42%48%74 +PASS U+98DC 飜 %1B%24%42%66%4C +PASS U+98DF 食 %1B%24%42%3F%29 +PASS U+98E2 飢 %1B%24%42%35%32 +PASS U+98E9 飩 %1B%24%42%71%2B +PASS U+98EB 飫 %1B%24%42%71%2C +PASS U+98ED 飭 %1B%24%42%52%2C +PASS U+98EE 飮 %1B%24%42%5D%3B +PASS U+98EF 飯 %1B%24%42%48%53 +PASS U+98F2 飲 %1B%24%42%30%7B +PASS U+98F4 飴 %1B%24%42%30%3B +PASS U+98FC 飼 %1B%24%42%3B%74 +PASS U+98FD 飽 %1B%24%42%4B%30 +PASS U+98FE 飾 %1B%24%42%3E%7E +PASS U+9903 餃 %1B%24%42%71%2D +PASS U+9905 餅 %1B%24%42%4C%5F +PASS U+9909 餉 %1B%24%42%71%2E +PASS U+990A 養 %1B%24%42%4D%5C +PASS U+990C 餌 %1B%24%42%31%42 +PASS U+9910 餐 %1B%24%42%3B%41 +PASS U+9912 餒 %1B%24%42%71%2F +PASS U+9913 餓 %1B%24%42%32%6E +PASS U+9914 餔 %1B%24%42%71%30 +PASS U+9918 餘 %1B%24%42%71%31 +PASS U+991D 餝 %1B%24%42%71%33 +PASS U+991E 餞 %1B%24%42%71%34 +PASS U+9920 餠 %1B%24%42%71%36 +PASS U+9921 餡 %1B%24%42%71%32 +PASS U+9924 餤 %1B%24%42%71%35 +FAIL U+9927 餧 %1B%24%42%7C%5E assert_equals: expected "%1B%24%42%7C%5E" but got "%26%23%33%39%32%30%37%3B" +PASS U+9928 館 %1B%24%42%34%5B +PASS U+992C 餬 %1B%24%42%71%37 +PASS U+992E 餮 %1B%24%42%71%38 +PASS U+993D 餽 %1B%24%42%71%39 +PASS U+993E 餾 %1B%24%42%71%3A +PASS U+9942 饂 %1B%24%42%71%3B +PASS U+9945 饅 %1B%24%42%71%3D +PASS U+9949 饉 %1B%24%42%71%3C +PASS U+994B 饋 %1B%24%42%71%3F +PASS U+994C 饌 %1B%24%42%71%42 +PASS U+9950 饐 %1B%24%42%71%3E +PASS U+9951 饑 %1B%24%42%71%40 +PASS U+9952 饒 %1B%24%42%71%41 +PASS U+9955 饕 %1B%24%42%71%43 +PASS U+9957 饗 %1B%24%42%36%42 +PASS U+9996 首 %1B%24%42%3C%73 +PASS U+9997 馗 %1B%24%42%71%44 +PASS U+9998 馘 %1B%24%42%71%45 +PASS U+9999 香 %1B%24%42%39%61 +FAIL U+999E 馞 %1B%24%42%7C%60 assert_equals: expected "%1B%24%42%7C%60" but got "%26%23%33%39%33%32%36%3B" +PASS U+99A5 馥 %1B%24%42%71%46 +PASS U+99A8 馨 %1B%24%42%33%3E +PASS U+99AC 馬 %1B%24%42%47%4F +PASS U+99AD 馭 %1B%24%42%71%47 +PASS U+99AE 馮 %1B%24%42%71%48 +PASS U+99B3 馳 %1B%24%42%43%5A +PASS U+99B4 馴 %1B%24%42%46%6B +PASS U+99BC 馼 %1B%24%42%71%49 +PASS U+99C1 駁 %1B%24%42%47%7D +PASS U+99C4 駄 %1B%24%42%42%4C +PASS U+99C5 駅 %1B%24%42%31%58 +PASS U+99C6 駆 %1B%24%42%36%6E +PASS U+99C8 駈 %1B%24%42%36%6F +PASS U+99D0 駐 %1B%24%42%43%73 +PASS U+99D1 駑 %1B%24%42%71%4E +PASS U+99D2 駒 %1B%24%42%36%70 +PASS U+99D5 駕 %1B%24%42%32%6F +PASS U+99D8 駘 %1B%24%42%71%4D +PASS U+99DB 駛 %1B%24%42%71%4B +PASS U+99DD 駝 %1B%24%42%71%4C +PASS U+99DF 駟 %1B%24%42%71%4A +PASS U+99E2 駢 %1B%24%42%71%58 +PASS U+99ED 駭 %1B%24%42%71%4F +PASS U+99EE 駮 %1B%24%42%71%50 +PASS U+99F1 駱 %1B%24%42%71%51 +PASS U+99F2 駲 %1B%24%42%71%52 +PASS U+99F8 駸 %1B%24%42%71%54 +PASS U+99FB 駻 %1B%24%42%71%53 +PASS U+99FF 駿 %1B%24%42%3D%59 +PASS U+9A01 騁 %1B%24%42%71%55 +PASS U+9A05 騅 %1B%24%42%71%57 +PASS U+9A0E 騎 %1B%24%42%35%33 +PASS U+9A0F 騏 %1B%24%42%71%56 +PASS U+9A12 騒 %1B%24%42%41%7B +PASS U+9A13 験 %1B%24%42%38%33 +PASS U+9A19 騙 %1B%24%42%71%59 +PASS U+9A28 騨 %1B%24%42%42%4D +PASS U+9A2B 騫 %1B%24%42%71%5A +PASS U+9A30 騰 %1B%24%42%46%2D +PASS U+9A37 騷 %1B%24%42%71%5B +PASS U+9A3E 騾 %1B%24%42%71%60 +PASS U+9A40 驀 %1B%24%42%71%5E +PASS U+9A42 驂 %1B%24%42%71%5D +PASS U+9A43 驃 %1B%24%42%71%5F +PASS U+9A45 驅 %1B%24%42%71%5C +PASS U+9A4D 驍 %1B%24%42%71%62 +FAIL U+9A4E 驎 %1B%24%42%7C%61 assert_equals: expected "%1B%24%42%7C%61" but got "%26%23%33%39%35%30%32%3B" +PASS U+9A55 驕 %1B%24%42%71%61 +PASS U+9A57 驗 %1B%24%42%71%64 +PASS U+9A5A 驚 %1B%24%42%36%43 +PASS U+9A5B 驛 %1B%24%42%71%63 +PASS U+9A5F 驟 %1B%24%42%71%65 +PASS U+9A62 驢 %1B%24%42%71%66 +PASS U+9A64 驤 %1B%24%42%71%68 +PASS U+9A65 驥 %1B%24%42%71%67 +PASS U+9A69 驩 %1B%24%42%71%69 +PASS U+9A6A 驪 %1B%24%42%71%6B +PASS U+9A6B 驫 %1B%24%42%71%6A +PASS U+9AA8 骨 %1B%24%42%39%7C +PASS U+9AAD 骭 %1B%24%42%71%6C +PASS U+9AB0 骰 %1B%24%42%71%6D +PASS U+9AB8 骸 %1B%24%42%33%3C +PASS U+9ABC 骼 %1B%24%42%71%6E +PASS U+9AC0 髀 %1B%24%42%71%6F +PASS U+9AC4 髄 %1B%24%42%3F%71 +PASS U+9ACF 髏 %1B%24%42%71%70 +PASS U+9AD1 髑 %1B%24%42%71%71 +PASS U+9AD3 髓 %1B%24%42%71%72 +PASS U+9AD4 體 %1B%24%42%71%73 +PASS U+9AD8 高 %1B%24%42%39%62 +FAIL U+9AD9 髙 %1B%24%42%7C%62 assert_equals: expected "%1B%24%42%7C%62" but got "%26%23%33%39%36%34%31%3B" +FAIL U+9ADC 髜 %1B%24%42%7C%63 assert_equals: expected "%1B%24%42%7C%63" but got "%26%23%33%39%36%34%34%3B" +PASS U+9ADE 髞 %1B%24%42%71%74 +PASS U+9ADF 髟 %1B%24%42%71%75 +PASS U+9AE2 髢 %1B%24%42%71%76 +PASS U+9AE3 髣 %1B%24%42%71%77 +PASS U+9AE6 髦 %1B%24%42%71%78 +PASS U+9AEA 髪 %1B%24%42%48%31 +PASS U+9AEB 髫 %1B%24%42%71%7A +PASS U+9AED 髭 %1B%24%42%49%26 +PASS U+9AEE 髮 %1B%24%42%71%7B +PASS U+9AEF 髯 %1B%24%42%71%79 +PASS U+9AF1 髱 %1B%24%42%71%7D +PASS U+9AF4 髴 %1B%24%42%71%7C +PASS U+9AF7 髷 %1B%24%42%71%7E +PASS U+9AFB 髻 %1B%24%42%72%21 +PASS U+9B06 鬆 %1B%24%42%72%22 +PASS U+9B18 鬘 %1B%24%42%72%23 +PASS U+9B1A 鬚 %1B%24%42%72%24 +PASS U+9B1F 鬟 %1B%24%42%72%25 +PASS U+9B22 鬢 %1B%24%42%72%26 +PASS U+9B23 鬣 %1B%24%42%72%27 +PASS U+9B25 鬥 %1B%24%42%72%28 +PASS U+9B27 鬧 %1B%24%42%72%29 +PASS U+9B28 鬨 %1B%24%42%72%2A +PASS U+9B29 鬩 %1B%24%42%72%2B +PASS U+9B2A 鬪 %1B%24%42%72%2C +PASS U+9B2E 鬮 %1B%24%42%72%2D +PASS U+9B2F 鬯 %1B%24%42%72%2E +PASS U+9B31 鬱 %1B%24%42%5D%35 +PASS U+9B32 鬲 %1B%24%42%72%2F +PASS U+9B3B 鬻 %1B%24%42%64%78 +PASS U+9B3C 鬼 %1B%24%42%35%34 +PASS U+9B41 魁 %1B%24%42%33%21 +PASS U+9B42 魂 %1B%24%42%3A%32 +PASS U+9B43 魃 %1B%24%42%72%31 +PASS U+9B44 魄 %1B%24%42%72%30 +PASS U+9B45 魅 %1B%24%42%4C%25 +PASS U+9B4D 魍 %1B%24%42%72%33 +PASS U+9B4E 魎 %1B%24%42%72%34 +PASS U+9B4F 魏 %1B%24%42%72%32 +PASS U+9B51 魑 %1B%24%42%72%35 +PASS U+9B54 魔 %1B%24%42%4B%62 +PASS U+9B58 魘 %1B%24%42%72%36 +PASS U+9B5A 魚 %1B%24%42%35%7B +PASS U+9B6F 魯 %1B%24%42%4F%25 +FAIL U+9B72 魲 %1B%24%42%7C%65 assert_equals: expected "%1B%24%42%7C%65" but got "%26%23%33%39%37%39%34%3B" +PASS U+9B74 魴 %1B%24%42%72%37 +FAIL U+9B75 魵 %1B%24%42%7C%64 assert_equals: expected "%1B%24%42%7C%64" but got "%26%23%33%39%37%39%37%3B" +PASS U+9B83 鮃 %1B%24%42%72%39 +PASS U+9B8E 鮎 %1B%24%42%30%3E +FAIL U+9B8F 鮏 %1B%24%42%7C%66 assert_equals: expected "%1B%24%42%7C%66" but got "%26%23%33%39%38%32%33%3B" +PASS U+9B91 鮑 %1B%24%42%72%3A +PASS U+9B92 鮒 %1B%24%42%4A%2B +PASS U+9B93 鮓 %1B%24%42%72%38 +PASS U+9B96 鮖 %1B%24%42%72%3B +PASS U+9B97 鮗 %1B%24%42%72%3C +PASS U+9B9F 鮟 %1B%24%42%72%3D +PASS U+9BA0 鮠 %1B%24%42%72%3E +PASS U+9BA8 鮨 %1B%24%42%72%3F +PASS U+9BAA 鮪 %1B%24%42%4B%6E +PASS U+9BAB 鮫 %1B%24%42%3B%2D +PASS U+9BAD 鮭 %1B%24%42%3A%7A +PASS U+9BAE 鮮 %1B%24%42%41%2F +FAIL U+9BB1 鮱 %1B%24%42%7C%67 assert_equals: expected "%1B%24%42%7C%67" but got "%26%23%33%39%38%35%37%3B" +PASS U+9BB4 鮴 %1B%24%42%72%40 +PASS U+9BB9 鮹 %1B%24%42%72%43 +FAIL U+9BBB 鮻 %1B%24%42%7C%68 assert_equals: expected "%1B%24%42%7C%68" but got "%26%23%33%39%38%36%37%3B" +PASS U+9BC0 鯀 %1B%24%42%72%41 +PASS U+9BC6 鯆 %1B%24%42%72%44 +PASS U+9BC9 鯉 %1B%24%42%38%71 +PASS U+9BCA 鯊 %1B%24%42%72%42 +PASS U+9BCF 鯏 %1B%24%42%72%45 +PASS U+9BD1 鯑 %1B%24%42%72%46 +PASS U+9BD2 鯒 %1B%24%42%72%47 +PASS U+9BD4 鯔 %1B%24%42%72%4B +PASS U+9BD6 鯖 %1B%24%42%3B%2A +PASS U+9BDB 鯛 %1B%24%42%42%64 +PASS U+9BE1 鯡 %1B%24%42%72%4C +PASS U+9BE2 鯢 %1B%24%42%72%49 +PASS U+9BE3 鯣 %1B%24%42%72%48 +PASS U+9BE4 鯤 %1B%24%42%72%4A +PASS U+9BE8 鯨 %1B%24%42%37%5F +PASS U+9BF0 鯰 %1B%24%42%72%50 +PASS U+9BF1 鯱 %1B%24%42%72%4F +PASS U+9BF2 鯲 %1B%24%42%72%4E +PASS U+9BF5 鯵 %1B%24%42%30%33 +FAIL U+9C00 鰀 %1B%24%42%7C%69 assert_equals: expected "%1B%24%42%7C%69" but got "%26%23%33%39%39%33%36%3B" +PASS U+9C04 鰄 %1B%24%42%72%5A +PASS U+9C06 鰆 %1B%24%42%72%56 +PASS U+9C08 鰈 %1B%24%42%72%57 +PASS U+9C09 鰉 %1B%24%42%72%53 +PASS U+9C0A 鰊 %1B%24%42%72%59 +PASS U+9C0C 鰌 %1B%24%42%72%55 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_7001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_7001-last-expected.txt new file mode 100644 index 0000000..a0812cb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href_7001-last-expected.txt
@@ -0,0 +1,396 @@ +This is a testharness.js-based test. +Found 392 tests; 351 PASS, 41 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS U+9C0D 鰍 %1B%24%42%33%62 +PASS U+9C10 鰐 %1B%24%42%4F%4C +PASS U+9C12 鰒 %1B%24%42%72%58 +PASS U+9C13 鰓 %1B%24%42%72%54 +PASS U+9C14 鰔 %1B%24%42%72%52 +PASS U+9C15 鰕 %1B%24%42%72%51 +PASS U+9C1B 鰛 %1B%24%42%72%5C +PASS U+9C21 鰡 %1B%24%42%72%5F +PASS U+9C24 鰤 %1B%24%42%72%5E +PASS U+9C25 鰥 %1B%24%42%72%5D +PASS U+9C2D 鰭 %1B%24%42%49%49 +PASS U+9C2E 鰮 %1B%24%42%72%5B +PASS U+9C2F 鰯 %1B%24%42%30%73 +PASS U+9C30 鰰 %1B%24%42%72%60 +PASS U+9C32 鰲 %1B%24%42%72%62 +PASS U+9C39 鰹 %1B%24%42%33%6F +PASS U+9C3A 鰺 %1B%24%42%72%4D +PASS U+9C3B 鰻 %1B%24%42%31%37 +PASS U+9C3E 鰾 %1B%24%42%72%64 +PASS U+9C46 鱆 %1B%24%42%72%63 +PASS U+9C47 鱇 %1B%24%42%72%61 +PASS U+9C48 鱈 %1B%24%42%43%2D +PASS U+9C52 鱒 %1B%24%42%4B%70 +PASS U+9C57 鱗 %1B%24%42%4E%5A +PASS U+9C5A 鱚 %1B%24%42%72%65 +PASS U+9C60 鱠 %1B%24%42%72%66 +PASS U+9C67 鱧 %1B%24%42%72%67 +PASS U+9C76 鱶 %1B%24%42%72%68 +PASS U+9C78 鱸 %1B%24%42%72%69 +PASS U+9CE5 鳥 %1B%24%42%44%3B +PASS U+9CE7 鳧 %1B%24%42%72%6A +PASS U+9CE9 鳩 %1B%24%42%48%37 +PASS U+9CEB 鳫 %1B%24%42%72%6F +PASS U+9CEC 鳬 %1B%24%42%72%6B +PASS U+9CF0 鳰 %1B%24%42%72%6C +PASS U+9CF3 鳳 %1B%24%42%4B%31 +PASS U+9CF4 鳴 %1B%24%42%4C%44 +PASS U+9CF6 鳶 %1B%24%42%46%50 +PASS U+9D03 鴃 %1B%24%42%72%70 +PASS U+9D06 鴆 %1B%24%42%72%71 +PASS U+9D07 鴇 %1B%24%42%46%3E +PASS U+9D08 鴈 %1B%24%42%72%6E +PASS U+9D09 鴉 %1B%24%42%72%6D +PASS U+9D0E 鴎 %1B%24%42%32%2A +PASS U+9D12 鴒 %1B%24%42%72%79 +PASS U+9D15 鴕 %1B%24%42%72%78 +PASS U+9D1B 鴛 %1B%24%42%31%75 +PASS U+9D1F 鴟 %1B%24%42%72%76 +PASS U+9D23 鴣 %1B%24%42%72%75 +PASS U+9D26 鴦 %1B%24%42%72%73 +PASS U+9D28 鴨 %1B%24%42%33%7B +PASS U+9D2A 鴪 %1B%24%42%72%72 +PASS U+9D2B 鴫 %1B%24%42%3C%32 +PASS U+9D2C 鴬 %1B%24%42%32%29 +PASS U+9D3B 鴻 %1B%24%42%39%63 +PASS U+9D3E 鴾 %1B%24%42%72%7C +PASS U+9D3F 鴿 %1B%24%42%72%7B +PASS U+9D41 鵁 %1B%24%42%72%7A +PASS U+9D44 鵄 %1B%24%42%72%77 +PASS U+9D46 鵆 %1B%24%42%72%7D +PASS U+9D48 鵈 %1B%24%42%72%7E +PASS U+9D50 鵐 %1B%24%42%73%25 +PASS U+9D51 鵑 %1B%24%42%73%24 +PASS U+9D59 鵙 %1B%24%42%73%26 +PASS U+9D5C 鵜 %1B%24%42%31%2D +PASS U+9D5D 鵝 %1B%24%42%73%21 +PASS U+9D5E 鵞 %1B%24%42%73%22 +PASS U+9D60 鵠 %1B%24%42%39%74 +PASS U+9D61 鵡 %1B%24%42%4C%39 +PASS U+9D64 鵤 %1B%24%42%73%23 +FAIL U+9D6B 鵫 %1B%24%42%7C%6B assert_equals: expected "%1B%24%42%7C%6B" but got "%26%23%34%30%32%39%39%3B" +PASS U+9D6C 鵬 %1B%24%42%4B%32 +PASS U+9D6F 鵯 %1B%24%42%73%2B +FAIL U+9D70 鵰 %1B%24%42%7C%6A assert_equals: expected "%1B%24%42%7C%6A" but got "%26%23%34%30%33%30%34%3B" +PASS U+9D72 鵲 %1B%24%42%73%27 +PASS U+9D7A 鵺 %1B%24%42%73%2C +PASS U+9D87 鶇 %1B%24%42%73%29 +PASS U+9D89 鶉 %1B%24%42%73%28 +PASS U+9D8F 鶏 %1B%24%42%37%5C +PASS U+9D9A 鶚 %1B%24%42%73%2D +PASS U+9DA4 鶤 %1B%24%42%73%2E +PASS U+9DA9 鶩 %1B%24%42%73%2F +PASS U+9DAB 鶫 %1B%24%42%73%2A +PASS U+9DAF 鶯 %1B%24%42%72%74 +PASS U+9DB2 鶲 %1B%24%42%73%30 +PASS U+9DB4 鶴 %1B%24%42%44%61 +PASS U+9DB8 鶸 %1B%24%42%73%34 +PASS U+9DBA 鶺 %1B%24%42%73%35 +PASS U+9DBB 鶻 %1B%24%42%73%33 +PASS U+9DC1 鷁 %1B%24%42%73%32 +PASS U+9DC2 鷂 %1B%24%42%73%38 +PASS U+9DC4 鷄 %1B%24%42%73%31 +PASS U+9DC6 鷆 %1B%24%42%73%36 +PASS U+9DCF 鷏 %1B%24%42%73%37 +PASS U+9DD3 鷓 %1B%24%42%73%3A +PASS U+9DD9 鷙 %1B%24%42%73%39 +PASS U+9DE6 鷦 %1B%24%42%73%3C +PASS U+9DED 鷭 %1B%24%42%73%3D +PASS U+9DEF 鷯 %1B%24%42%73%3E +PASS U+9DF2 鷲 %1B%24%42%4F%49 +PASS U+9DF8 鷸 %1B%24%42%73%3B +PASS U+9DF9 鷹 %1B%24%42%42%6B +PASS U+9DFA 鷺 %1B%24%42%3A%6D +PASS U+9DFD 鷽 %1B%24%42%73%3F +FAIL U+9E19 鸙 %1B%24%42%7C%6D assert_equals: expected "%1B%24%42%7C%6D" but got "%26%23%34%30%34%37%33%3B" +PASS U+9E1A 鸚 %1B%24%42%73%40 +PASS U+9E1B 鸛 %1B%24%42%73%41 +PASS U+9E1E 鸞 %1B%24%42%73%42 +PASS U+9E75 鹵 %1B%24%42%73%43 +PASS U+9E78 鹸 %1B%24%42%38%34 +PASS U+9E79 鹹 %1B%24%42%73%44 +PASS U+9E7D 鹽 %1B%24%42%73%45 +PASS U+9E7F 鹿 %1B%24%42%3C%2F +PASS U+9E81 麁 %1B%24%42%73%46 +PASS U+9E88 麈 %1B%24%42%73%47 +PASS U+9E8B 麋 %1B%24%42%73%48 +PASS U+9E8C 麌 %1B%24%42%73%49 +PASS U+9E91 麑 %1B%24%42%73%4C +PASS U+9E92 麒 %1B%24%42%73%4A +PASS U+9E93 麓 %1B%24%42%4F%3C +PASS U+9E95 麕 %1B%24%42%73%4B +PASS U+9E97 麗 %1B%24%42%4E%6F +PASS U+9E9D 麝 %1B%24%42%73%4D +PASS U+9E9F 麟 %1B%24%42%4E%5B +PASS U+9EA5 麥 %1B%24%42%73%4E +PASS U+9EA6 麦 %1B%24%42%47%7E +PASS U+9EA9 麩 %1B%24%42%73%4F +PASS U+9EAA 麪 %1B%24%42%73%51 +PASS U+9EAD 麭 %1B%24%42%73%52 +PASS U+9EB8 麸 %1B%24%42%73%50 +PASS U+9EB9 麹 %1B%24%42%39%6D +PASS U+9EBA 麺 %1B%24%42%4C%4D +PASS U+9EBB 麻 %1B%24%42%4B%63 +PASS U+9EBC 麼 %1B%24%42%56%77 +PASS U+9EBE 麾 %1B%24%42%5D%60 +PASS U+9EBF 麿 %1B%24%42%4B%7B +PASS U+9EC4 黄 %1B%24%42%32%2B +PASS U+9ECC 黌 %1B%24%42%73%54 +PASS U+9ECD 黍 %1B%24%42%35%50 +PASS U+9ECE 黎 %1B%24%42%73%55 +PASS U+9ECF 黏 %1B%24%42%73%56 +PASS U+9ED0 黐 %1B%24%42%73%57 +FAIL U+9ED1 黑 %1B%24%42%7C%6E assert_equals: expected "%1B%24%42%7C%6E" but got "%26%23%34%30%36%35%37%3B" +PASS U+9ED2 黒 %1B%24%42%39%75 +PASS U+9ED4 黔 %1B%24%42%73%58 +PASS U+9ED8 默 %1B%24%42%60%54 +PASS U+9ED9 黙 %1B%24%42%4C%5B +PASS U+9EDB 黛 %1B%24%42%42%63 +PASS U+9EDC 黜 %1B%24%42%73%59 +PASS U+9EDD 黝 %1B%24%42%73%5B +PASS U+9EDE 點 %1B%24%42%73%5A +PASS U+9EE0 黠 %1B%24%42%73%5C +PASS U+9EE5 黥 %1B%24%42%73%5D +PASS U+9EE8 黨 %1B%24%42%73%5E +PASS U+9EEF 黯 %1B%24%42%73%5F +PASS U+9EF4 黴 %1B%24%42%73%60 +PASS U+9EF6 黶 %1B%24%42%73%61 +PASS U+9EF7 黷 %1B%24%42%73%62 +PASS U+9EF9 黹 %1B%24%42%73%63 +PASS U+9EFB 黻 %1B%24%42%73%64 +PASS U+9EFC 黼 %1B%24%42%73%65 +PASS U+9EFD 黽 %1B%24%42%73%66 +PASS U+9F07 鼇 %1B%24%42%73%67 +PASS U+9F08 鼈 %1B%24%42%73%68 +PASS U+9F0E 鼎 %1B%24%42%45%24 +PASS U+9F13 鼓 %1B%24%42%38%5D +PASS U+9F15 鼕 %1B%24%42%73%6A +PASS U+9F20 鼠 %1B%24%42%41%4D +PASS U+9F21 鼡 %1B%24%42%73%6B +PASS U+9F2C 鼬 %1B%24%42%73%6C +PASS U+9F3B 鼻 %1B%24%42%49%21 +PASS U+9F3E 鼾 %1B%24%42%73%6D +PASS U+9F4A 齊 %1B%24%42%73%6E +PASS U+9F4B 齋 %1B%24%42%63%37 +PASS U+9F4E 齎 %1B%24%42%6C%5A +PASS U+9F4F 齏 %1B%24%42%70%6D +PASS U+9F52 齒 %1B%24%42%73%6F +PASS U+9F54 齔 %1B%24%42%73%70 +PASS U+9F5F 齟 %1B%24%42%73%72 +PASS U+9F60 齠 %1B%24%42%73%73 +PASS U+9F61 齡 %1B%24%42%73%74 +PASS U+9F62 齢 %1B%24%42%4E%70 +PASS U+9F63 齣 %1B%24%42%73%71 +PASS U+9F66 齦 %1B%24%42%73%75 +PASS U+9F67 齧 %1B%24%42%73%76 +PASS U+9F6A 齪 %1B%24%42%73%78 +PASS U+9F6C 齬 %1B%24%42%73%77 +PASS U+9F72 齲 %1B%24%42%73%7A +PASS U+9F76 齶 %1B%24%42%73%7B +PASS U+9F77 齷 %1B%24%42%73%79 +PASS U+9F8D 龍 %1B%24%42%4E%36 +PASS U+9F95 龕 %1B%24%42%73%7C +PASS U+9F9C 龜 %1B%24%42%73%7D +PASS U+9F9D 龝 %1B%24%42%63%54 +PASS U+9FA0 龠 %1B%24%42%73%7E +FAIL U+F929 朗 %1B%24%42%7A%46 assert_equals: expected "%1B%24%42%7A%46" but got "%26%23%36%33%37%38%35%3B" +FAIL U+F9DC 隆 %1B%24%42%7C%4F assert_equals: expected "%1B%24%42%7C%4F" but got "%26%23%36%33%39%36%34%3B" +FAIL U+FA0E 﨎 %1B%24%42%79%54 assert_equals: expected "%1B%24%42%79%54" but got "%26%23%36%34%30%31%34%3B" +FAIL U+FA0F 﨏 %1B%24%42%79%5F assert_equals: expected "%1B%24%42%79%5F" but got "%26%23%36%34%30%31%35%3B" +FAIL U+FA10 塚 %1B%24%42%79%60 assert_equals: expected "%1B%24%42%79%60" but got "%26%23%36%34%30%31%36%3B" +FAIL U+FA11 﨑 %1B%24%42%79%75 assert_equals: expected "%1B%24%42%79%75" but got "%26%23%36%34%30%31%37%3B" +FAIL U+FA12 晴 %1B%24%42%7A%3E assert_equals: expected "%1B%24%42%7A%3E" but got "%26%23%36%34%30%31%38%3B" +FAIL U+FA13 﨓 %1B%24%42%7A%4E assert_equals: expected "%1B%24%42%7A%4E" but got "%26%23%36%34%30%31%39%3B" +FAIL U+FA14 﨔 %1B%24%42%7A%50 assert_equals: expected "%1B%24%42%7A%50" but got "%26%23%36%34%30%32%30%3B" +FAIL U+FA15 凞 %1B%24%42%7A%7B assert_equals: expected "%1B%24%42%7A%7B" but got "%26%23%36%34%30%32%31%3B" +FAIL U+FA16 猪 %1B%24%42%7B%23 assert_equals: expected "%1B%24%42%7B%23" but got "%26%23%36%34%30%32%32%3B" +FAIL U+FA17 益 %1B%24%42%7B%3A assert_equals: expected "%1B%24%42%7B%3A" but got "%26%23%36%34%30%32%33%3B" +FAIL U+FA18 礼 %1B%24%42%7B%42 assert_equals: expected "%1B%24%42%7B%42" but got "%26%23%36%34%30%32%34%3B" +FAIL U+FA19 神 %1B%24%42%7B%43 assert_equals: expected "%1B%24%42%7B%43" but got "%26%23%36%34%30%32%35%3B" +FAIL U+FA1A 祥 %1B%24%42%7B%44 assert_equals: expected "%1B%24%42%7B%44" but got "%26%23%36%34%30%32%36%3B" +FAIL U+FA1B 福 %1B%24%42%7B%46 assert_equals: expected "%1B%24%42%7B%46" but got "%26%23%36%34%30%32%37%3B" +FAIL U+FA1C 靖 %1B%24%42%7B%4A assert_equals: expected "%1B%24%42%7B%4A" but got "%26%23%36%34%30%32%38%3B" +FAIL U+FA1D 精 %1B%24%42%7B%4D assert_equals: expected "%1B%24%42%7B%4D" but got "%26%23%36%34%30%32%39%3B" +FAIL U+FA1E 羽 %1B%24%42%7B%56 assert_equals: expected "%1B%24%42%7B%56" but got "%26%23%36%34%30%33%30%3B" +FAIL U+FA1F 﨟 %1B%24%42%7B%61 assert_equals: expected "%1B%24%42%7B%61" but got "%26%23%36%34%30%33%31%3B" +FAIL U+FA20 蘒 %1B%24%42%7B%63 assert_equals: expected "%1B%24%42%7B%63" but got "%26%23%36%34%30%33%32%3B" +FAIL U+FA21 﨡 %1B%24%42%7B%64 assert_equals: expected "%1B%24%42%7B%64" but got "%26%23%36%34%30%33%33%3B" +FAIL U+FA22 諸 %1B%24%42%7B%6D assert_equals: expected "%1B%24%42%7B%6D" but got "%26%23%36%34%30%33%34%3B" +FAIL U+FA23 﨣 %1B%24%42%7B%75 assert_equals: expected "%1B%24%42%7B%75" but got "%26%23%36%34%30%33%35%3B" +FAIL U+FA24 﨤 %1B%24%42%7B%77 assert_equals: expected "%1B%24%42%7B%77" but got "%26%23%36%34%30%33%36%3B" +FAIL U+FA25 逸 %1B%24%42%7B%78 assert_equals: expected "%1B%24%42%7B%78" but got "%26%23%36%34%30%33%37%3B" +FAIL U+FA26 都 %1B%24%42%7B%7B assert_equals: expected "%1B%24%42%7B%7B" but got "%26%23%36%34%30%33%38%3B" +FAIL U+FA27 﨧 %1B%24%42%7C%39 assert_equals: expected "%1B%24%42%7C%39" but got "%26%23%36%34%30%33%39%3B" +FAIL U+FA28 﨨 %1B%24%42%7C%40 assert_equals: expected "%1B%24%42%7C%40" but got "%26%23%36%34%30%34%30%3B" +FAIL U+FA29 﨩 %1B%24%42%7C%50 assert_equals: expected "%1B%24%42%7C%50" but got "%26%23%36%34%30%34%31%3B" +FAIL U+FA2A 飯 %1B%24%42%7C%5C assert_equals: expected "%1B%24%42%7C%5C" but got "%26%23%36%34%30%34%32%3B" +FAIL U+FA2B 飼 %1B%24%42%7C%5D assert_equals: expected "%1B%24%42%7C%5D" but got "%26%23%36%34%30%34%33%3B" +FAIL U+FA2C 館 %1B%24%42%7C%5F assert_equals: expected "%1B%24%42%7C%5F" but got "%26%23%36%34%30%34%34%3B" +FAIL U+FA2D 鶴 %1B%24%42%7C%6C assert_equals: expected "%1B%24%42%7C%6C" but got "%26%23%36%34%30%34%35%3B" +PASS U+FF01 ! %1B%24%42%21%2A +FAIL U+FF02 " %1B%24%42%7C%7E assert_equals: expected "%1B%24%42%7C%7E" but got "%26%23%36%35%32%38%32%3B" +PASS U+FF03 # %1B%24%42%21%74 +PASS U+FF04 $ %1B%24%42%21%70 +PASS U+FF05 % %1B%24%42%21%73 +PASS U+FF06 & %1B%24%42%21%75 +FAIL U+FF07 ' %1B%24%42%7C%7D assert_equals: expected "%1B%24%42%7C%7D" but got "%26%23%36%35%32%38%37%3B" +PASS U+FF08 ( %1B%24%42%21%4A +PASS U+FF09 ) %1B%24%42%21%4B +PASS U+FF0A * %1B%24%42%21%76 +PASS U+FF0B + %1B%24%42%21%5C +PASS U+FF0C , %1B%24%42%21%24 +PASS U+FF0D - %1B%24%42%21%5D +PASS U+FF0E . %1B%24%42%21%25 +PASS U+FF0F / %1B%24%42%21%3F +PASS U+FF10 0 %1B%24%42%23%30 +PASS U+FF11 1 %1B%24%42%23%31 +PASS U+FF12 2 %1B%24%42%23%32 +PASS U+FF13 3 %1B%24%42%23%33 +PASS U+FF14 4 %1B%24%42%23%34 +PASS U+FF15 5 %1B%24%42%23%35 +PASS U+FF16 6 %1B%24%42%23%36 +PASS U+FF17 7 %1B%24%42%23%37 +PASS U+FF18 8 %1B%24%42%23%38 +PASS U+FF19 9 %1B%24%42%23%39 +PASS U+FF1A : %1B%24%42%21%27 +PASS U+FF1B ; %1B%24%42%21%28 +PASS U+FF1C < %1B%24%42%21%63 +PASS U+FF1D = %1B%24%42%21%61 +PASS U+FF1E > %1B%24%42%21%64 +PASS U+FF1F ? %1B%24%42%21%29 +PASS U+FF20 @ %1B%24%42%21%77 +PASS U+FF21 A %1B%24%42%23%41 +PASS U+FF22 B %1B%24%42%23%42 +PASS U+FF23 C %1B%24%42%23%43 +PASS U+FF24 D %1B%24%42%23%44 +PASS U+FF25 E %1B%24%42%23%45 +PASS U+FF26 F %1B%24%42%23%46 +PASS U+FF27 G %1B%24%42%23%47 +PASS U+FF28 H %1B%24%42%23%48 +PASS U+FF29 I %1B%24%42%23%49 +PASS U+FF2A J %1B%24%42%23%4A +PASS U+FF2B K %1B%24%42%23%4B +PASS U+FF2C L %1B%24%42%23%4C +PASS U+FF2D M %1B%24%42%23%4D +PASS U+FF2E N %1B%24%42%23%4E +PASS U+FF2F O %1B%24%42%23%4F +PASS U+FF30 P %1B%24%42%23%50 +PASS U+FF31 Q %1B%24%42%23%51 +PASS U+FF32 R %1B%24%42%23%52 +PASS U+FF33 S %1B%24%42%23%53 +PASS U+FF34 T %1B%24%42%23%54 +PASS U+FF35 U %1B%24%42%23%55 +PASS U+FF36 V %1B%24%42%23%56 +PASS U+FF37 W %1B%24%42%23%57 +PASS U+FF38 X %1B%24%42%23%58 +PASS U+FF39 Y %1B%24%42%23%59 +PASS U+FF3A Z %1B%24%42%23%5A +PASS U+FF3B [ %1B%24%42%21%4E +PASS U+FF3C \ %1B%24%42%21%40 +PASS U+FF3D ] %1B%24%42%21%4F +PASS U+FF3E ^ %1B%24%42%21%30 +PASS U+FF3F _ %1B%24%42%21%32 +PASS U+FF40 ` %1B%24%42%21%2E +PASS U+FF41 a %1B%24%42%23%61 +PASS U+FF42 b %1B%24%42%23%62 +PASS U+FF43 c %1B%24%42%23%63 +PASS U+FF44 d %1B%24%42%23%64 +PASS U+FF45 e %1B%24%42%23%65 +PASS U+FF46 f %1B%24%42%23%66 +PASS U+FF47 g %1B%24%42%23%67 +PASS U+FF48 h %1B%24%42%23%68 +PASS U+FF49 i %1B%24%42%23%69 +PASS U+FF4A j %1B%24%42%23%6A +PASS U+FF4B k %1B%24%42%23%6B +PASS U+FF4C l %1B%24%42%23%6C +PASS U+FF4D m %1B%24%42%23%6D +PASS U+FF4E n %1B%24%42%23%6E +PASS U+FF4F o %1B%24%42%23%6F +PASS U+FF50 p %1B%24%42%23%70 +PASS U+FF51 q %1B%24%42%23%71 +PASS U+FF52 r %1B%24%42%23%72 +PASS U+FF53 s %1B%24%42%23%73 +PASS U+FF54 t %1B%24%42%23%74 +PASS U+FF55 u %1B%24%42%23%75 +PASS U+FF56 v %1B%24%42%23%76 +PASS U+FF57 w %1B%24%42%23%77 +PASS U+FF58 x %1B%24%42%23%78 +PASS U+FF59 y %1B%24%42%23%79 +PASS U+FF5A z %1B%24%42%23%7A +PASS U+FF5B { %1B%24%42%21%50 +PASS U+FF5C | %1B%24%42%21%43 +PASS U+FF5D } %1B%24%42%21%51 +PASS U+FF5E ~ %1B%24%42%21%41 +PASS U+FF61 。 %1B%24%42%21%23 +PASS U+FF62 「 %1B%24%42%21%56 +PASS U+FF63 」 %1B%24%42%21%57 +PASS U+FF64 、 %1B%24%42%21%22 +PASS U+FF65 ・ %1B%24%42%21%26 +PASS U+FF66 ヲ %1B%24%42%25%72 +PASS U+FF67 ァ %1B%24%42%25%21 +PASS U+FF68 ィ %1B%24%42%25%23 +PASS U+FF69 ゥ %1B%24%42%25%25 +PASS U+FF6A ェ %1B%24%42%25%27 +PASS U+FF6B ォ %1B%24%42%25%29 +PASS U+FF6C ャ %1B%24%42%25%63 +PASS U+FF6D ュ %1B%24%42%25%65 +PASS U+FF6E ョ %1B%24%42%25%67 +PASS U+FF6F ッ %1B%24%42%25%43 +PASS U+FF70 ー %1B%24%42%21%3C +PASS U+FF71 ア %1B%24%42%25%22 +PASS U+FF72 イ %1B%24%42%25%24 +PASS U+FF73 ウ %1B%24%42%25%26 +PASS U+FF74 エ %1B%24%42%25%28 +PASS U+FF75 オ %1B%24%42%25%2A +PASS U+FF76 カ %1B%24%42%25%2B +PASS U+FF77 キ %1B%24%42%25%2D +PASS U+FF78 ク %1B%24%42%25%2F +PASS U+FF79 ケ %1B%24%42%25%31 +PASS U+FF7A コ %1B%24%42%25%33 +PASS U+FF7B サ %1B%24%42%25%35 +PASS U+FF7C シ %1B%24%42%25%37 +PASS U+FF7D ス %1B%24%42%25%39 +PASS U+FF7E セ %1B%24%42%25%3B +PASS U+FF7F ソ %1B%24%42%25%3D +PASS U+FF80 タ %1B%24%42%25%3F +PASS U+FF81 チ %1B%24%42%25%41 +PASS U+FF82 ツ %1B%24%42%25%44 +PASS U+FF83 テ %1B%24%42%25%46 +PASS U+FF84 ト %1B%24%42%25%48 +PASS U+FF85 ナ %1B%24%42%25%4A +PASS U+FF86 ニ %1B%24%42%25%4B +PASS U+FF87 ヌ %1B%24%42%25%4C +PASS U+FF88 ネ %1B%24%42%25%4D +PASS U+FF89 ノ %1B%24%42%25%4E +PASS U+FF8A ハ %1B%24%42%25%4F +PASS U+FF8B ヒ %1B%24%42%25%52 +PASS U+FF8C フ %1B%24%42%25%55 +PASS U+FF8D ヘ %1B%24%42%25%58 +PASS U+FF8E ホ %1B%24%42%25%5B +PASS U+FF8F マ %1B%24%42%25%5E +PASS U+FF90 ミ %1B%24%42%25%5F +PASS U+FF91 ム %1B%24%42%25%60 +PASS U+FF92 メ %1B%24%42%25%61 +PASS U+FF93 モ %1B%24%42%25%62 +PASS U+FF94 ヤ %1B%24%42%25%64 +PASS U+FF95 ユ %1B%24%42%25%66 +PASS U+FF96 ヨ %1B%24%42%25%68 +PASS U+FF97 ラ %1B%24%42%25%69 +PASS U+FF98 リ %1B%24%42%25%6A +PASS U+FF99 ル %1B%24%42%25%6B +PASS U+FF9A レ %1B%24%42%25%6C +PASS U+FF9B ロ %1B%24%42%25%6D +PASS U+FF9C ワ %1B%24%42%25%6F +PASS U+FF9D ン %1B%24%42%25%73 +PASS U+FF9E ゙ %1B%24%42%21%2B +PASS U+FF9F ゚ %1B%24%42%21%2C +PASS U+FFE0 ¢ %1B%24%42%21%71 +PASS U+FFE1 £ %1B%24%42%21%72 +PASS U+FFE2 ¬ %1B%24%42%22%4C +PASS U+FFE3  ̄ %1B%24%42%21%31 +FAIL U+FFE4 ¦ %1B%24%42%7C%7C assert_equals: expected "%1B%24%42%7C%7C" but got "%26%23%36%35%35%30%38%3B" +PASS U+FFE5 ¥ %1B%24%42%21%6F +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html index 9c811a9..d6893754 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>csshiftjis decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'csshiftjis' as for a document labeled 'shift_jis'."> @@ -14,47 +23,15 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-csshiftjis.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html index be96f70..50ac2b7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-errors.html
@@ -7,7 +7,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser decodes characters that are not recognised from the shift_jis index as replacement characters."> <style> iframe { display:none }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html index a73294f..e65a486d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>ms932 decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'ms932' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-ms932.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html index 2b2c298..c59b1da0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>ms_kanji decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'ms_kanji' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-ms_kanji.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html index dabb661..62159d1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>shift-jis decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'shift-jis' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-shift-jis.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html index d66b5184..9c4047e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>sjis decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'sjis' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-sjis.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html index 099cba6..2ed617b2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>windows-31j decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'windows-31j' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-windows-31j.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html index 5ffa4617..02e6a5d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html
@@ -4,8 +4,17 @@ <meta charset="utf-8"/> <title>x-sjis decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'x-sjis' as for a document labeled 'shift_jis'."> @@ -14,47 +23,14 @@ </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars-x-sjis.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html index e0355c2f..b05bc28f5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html
@@ -4,57 +4,33 @@ <meta charset="utf-8"/> <title>ShiftJIS decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser decodes all characters as expected from a file generated by encoding all pointers in the shift_jis encoding per the shift_jis encoder steps in the specification."> <style> iframe { display:none } </style> <script src="jis0208_index.js"></script> <script src="sjis-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(sjisDecoder);"> <iframe src="sjis_chars.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - sjisDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, sjisDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html index dd21b76..90002ca2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html
@@ -4,13 +4,22 @@ <meta charset="csshiftjis"> <!-- test breaks if the server overrides this --> <title>csshiftjis encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'csshiftjis' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'csshiftjis' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "csshiftjis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html index 8f80243..0c3f661 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html
@@ -4,12 +4,34 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding errors (form, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding han characters that are not in the shift_jis encoding."> <style> iframe { display:none } @@ -18,162 +40,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x4e00; i < 0x9fba; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } - } - - for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0xfa70; i < 0xfada; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "shift_jis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html index b2a953e..b62829f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html
@@ -4,12 +4,25 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding errors (form, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding hangul characters that are not in the shift_jis encoding."> <style> iframe { display:none } @@ -18,132 +31,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0xac00; i < 0xd7af; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "shift_jis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesHangul; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html index 0dc90d1..5bb89fe 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html
@@ -4,12 +4,17 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding errors (form, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding miscellaneous characters that are not in the shift_jis encoding."> <style> iframe { display:none } @@ -18,172 +23,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (var i = 0x80; i < 0x4ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } - } - - for (i = 0x2000; i < 0x23ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } - } - - for (i = 0x2460; i < 0x26ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } - } - - for (i = 0x3000; i < 0x33ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } - } - - for (i = 0xff00; i < 0xffef; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "shift_jis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesMisc; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html index f18bf665..bc440f37 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html
@@ -4,13 +4,22 @@ <meta charset="ms932"> <!-- test breaks if the server overrides this --> <title>ms932 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'ms932' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'ms932' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ms932"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html index 5b09074..8de1fbf 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html
@@ -4,13 +4,22 @@ <meta charset="ms_kanji"> <!-- test breaks if the server overrides this --> <title>ms_kanji encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'ms_kanji' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'ms_kanji' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ms_kanji"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html index cd6bb6e7..7a3bd86e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html
@@ -4,13 +4,22 @@ <meta charset="shift-jis"> <!-- test breaks if the server overrides this --> <title>shift-jis encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'shift-jis' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'shift-jis' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "shift-jis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html index ddade82..c6ff9b0a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html
@@ -4,13 +4,22 @@ <meta charset="sjis"> <!-- test breaks if the server overrides this --> <title>sjis encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'sjis' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'sjis' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "sjis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html index 335f622..596f011 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html
@@ -4,13 +4,22 @@ <meta charset="windows-31j"> <!-- test breaks if the server overrides this --> <title>windows-31j encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'windows-31j' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'windows-31j' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "windows-31j"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html index 1d754ffe..674c83da 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html
@@ -4,13 +4,22 @@ <meta charset="x-sjis"> <!-- test breaks if the server overrides this --> <title>x-sjis encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'x-sjis' as for a document labeled 'euc-jp'."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'x-sjis' as for a document labeled 'shift_jis'."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "x-sjis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html index 66d1483..5aa96ac 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html
@@ -4,13 +4,22 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> -<meta name="assert" content="The browser produces the expected byte sequences for all characters in the shift_jis encoding after 0x9F when encoding bytes for a URL produced by a form, using the encoder steps in the specification."> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> +<meta name="assert" content="The browser produces the expected byte sequences for all characters in the shift_jis encoding after 0x9F when encoding bytes for a URL produced by a form, using the encoder steps in the specification."> <style> iframe { display:none } form { display:none } @@ -18,131 +27,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; var separator = ","; -var encodedSeparator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "shift_jis"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(separator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeparator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html index 1f70550a2..0f883a6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html
@@ -4,97 +4,57 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding errors (href, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-10000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the shift_jis encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0x4e00; i < 0x9fba; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } -} - -for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0xfa70; i < 0xfada; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html index 29ec1a51..9bc926b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html
@@ -4,62 +4,47 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding (href, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding hangul characters that are not in the shift_jis encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0xac00; i < 0xd7af; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesHangul; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html index 8341d83..890c397 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html
@@ -4,106 +4,39 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding (href, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the shift_jis encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (var i = 0x80; i < 0x4ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } -} - -for (i = 0x2000; i < 0x23ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } -} - -for (i = 0x2460; i < 0x26ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } -} - -for (i = 0x3000; i < 0x33ff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } -} - -for (i = 0xff00; i < 0xffef; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = sjisEncoder; +var ranges = rangesMisc; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html index 35c33fa..288e4da4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html
@@ -4,59 +4,40 @@ <meta charset="shift_jis"> <!-- test breaks if the server overrides this --> <title>Shift_jis encoding (href)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="jis0208_index.js"></script> <script src="sjis-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> -<link rel="help" href="https://encoding.spec.whatwg.org//#shift_jis"> +<link rel="help" href="https://encoding.spec.whatwg.org/#shift_jis"> <meta name="assert" content="The browser produces the expected byte sequences for all characters in the shift_jis encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(normalizeStr(result), normalizeStr(expected)); - }, desc); -} - -// create a simple list of just those code points for which there is an encoding possible -codepoints = []; -for (var i = 0x80; i < 0xffff; i++) { - result = sjisEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - "U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = false; +var encoder = sjisEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); +} +</script> +<script src="../../resources/encode-form-common.js"></script> </body> </html> +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html index 4e1720d..8cd06a7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html
@@ -4,8 +4,27 @@ <meta charset="utf-8"/> <title>cseuckr decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'cseuckr' as for a document labeled 'euc-kr'."> @@ -14,47 +33,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-cseuckr.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html index bedfd7d..6d7e6b08 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html
@@ -4,8 +4,27 @@ <meta charset="utf-8"/> <title>csksc56011987 decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'csksc56011987' as for a document labeled 'euc-kr'."> @@ -14,47 +33,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-csksc56011987.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-expected.txt new file mode 100644 index 0000000..1fad62c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149-expected.txt new file mode 100644 index 0000000..c1d95b5b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html index ce71d3b..48e7fca7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-iso-ir-149.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean-expected.txt new file mode 100644 index 0000000..6885c4f2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html index 8a6971f..59ffdce 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-korean.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987-expected.txt new file mode 100644 index 0000000..cb8957b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html index 5c38428..7a26f48 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-ks_c_5601-1987.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989-expected.txt new file mode 100644 index 0000000..47dc607 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html index 09066b52..8c75cf5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-ks_c_5601-1989.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601-expected.txt new file mode 100644 index 0000000..7b71c4f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc5601 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html index 64e4e97..83c0922 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-ksc5601.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601-expected.txt new file mode 100644 index 0000000..ece8858 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html index 7429246..6499ab5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-ksc_5601.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949-expected.txt new file mode 100644 index 0000000..90646add --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL windows-949 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html index 66e71af..1f2f302d3 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars-windows-949.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode.html index dab13027a..a3b46f0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode.html
@@ -14,47 +14,14 @@ </style> <script src="euckr_index.js"></script> <script src="euckr-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(euckrDecoder);"> <iframe src="euckr_chars.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - euckrDecoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, euckrDecoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html index d8cdbe2..81143c3 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html
@@ -4,8 +4,27 @@ <meta charset="cseuckr"> <!-- test breaks if the server overrides this --> <title>cseuckr encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "cseuckr"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html index 8c6b9d6..2ee63e59 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html
@@ -4,8 +4,27 @@ <meta charset="csksc56011987"> <!-- test breaks if the server overrides this --> <title>csksc56011987 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "csksc56011987"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1-1000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_10001-11000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1001-2000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_11001-12000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_12001-13000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_13001-14000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_14001-15000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_15001-16000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_16001-17000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_17001-last-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_2001-3000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_3001-4000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_4001-5000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_5001-6000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_6001-7000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_7001-8000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_8001-9000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_9001-10000-expected.txt new file mode 100644 index 0000000..ef1e746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL csksc56011987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html index 033362dc2..8d79541 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html
@@ -4,8 +4,33 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding errors (form, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-22000"> +<meta name="variant" content="?22001-23000"> +<meta name="variant" content="?23001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,163 +43,19 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x4e00; i < 0x9fba; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } - } - - for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0xfa70; i < 0xfada; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-kr"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = euckrEncoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers deleted file mode 100644 index 3a990e85..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html.headers +++ /dev/null
@@ -1 +0,0 @@ -Content-Type: text/html; charset=euc-kr
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html index 130980f..4a7fa6d7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html
@@ -4,8 +4,13 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding errors (form, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,172 +23,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of unicode codepoints that are not encoded - var codepoints = []; - - for (var i = 0x80; i < 0x4ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } - } - - for (i = 0x2000; i < 0x23ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } - } - - for (i = 0x2460; i < 0x26ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } - } - - for (i = 0x3000; i < 0x33ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } - } - - for (i = 0xff00; i < 0xffef; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - " U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-kr"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = euckrEncoder; +var ranges = rangesMisc; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html index 4ced58e..df309c0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html
@@ -4,8 +4,27 @@ <meta charset="iso-ir-149"> <!-- test breaks if the server overrides this --> <title>iso-ir-149 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "iso-ir-149"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1-1000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_10001-11000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1001-2000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_11001-12000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_12001-13000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_13001-14000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_14001-15000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_15001-16000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_16001-17000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_17001-last-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_2001-3000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_3001-4000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_4001-5000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_5001-6000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_6001-7000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_7001-8000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_8001-9000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_9001-10000-expected.txt new file mode 100644 index 0000000..2e8be40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL iso-ir-149 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html index d7cae24..27b54f7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html
@@ -4,8 +4,27 @@ <meta charset="korean"> <!-- test breaks if the server overrides this --> <title>korean encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,140 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -// set up a sparse array of all unicode codepoints listed in the index -// this will be used for lookup in getByteSequence -var indexcodepoints = []; // index is unicode cp, value is pointer -for (p = 0; p < euckr.length; p++) { - if (euckr[p] != null && indexcodepoints[euckr[p]] == null) { - indexcodepoints[euckr[p]] = p; - } -} - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "korean"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1-1000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_10001-11000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1001-2000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_11001-12000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_12001-13000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_13001-14000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_14001-15000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_15001-16000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_16001-17000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_17001-last-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_2001-3000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_3001-4000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_4001-5000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_5001-6000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_6001-7000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_7001-8000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_8001-9000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_9001-10000-expected.txt new file mode 100644 index 0000000..bb9aee1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL korean encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html index f1f1b372..1160f8856 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html
@@ -4,8 +4,27 @@ <meta charset="ks_c_5601-1987"> <!-- test breaks if the server overrides this --> <title>ks_c_5601-1987 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ks_c_5601-1987"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1-1000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_10001-11000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1001-2000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_11001-12000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_12001-13000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_13001-14000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_14001-15000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_15001-16000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_16001-17000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_17001-last-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_2001-3000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_3001-4000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_4001-5000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_5001-6000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_6001-7000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_7001-8000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_8001-9000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_9001-10000-expected.txt new file mode 100644 index 0000000..d6a5f84d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1987 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html index 8a36d77..d8f1d80 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html
@@ -4,8 +4,27 @@ <meta charset="ks_c_5601-1989"> <!-- test breaks if the server overrides this --> <title>ks_c_5601-1989 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,140 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -// set up a sparse array of all unicode codepoints listed in the index -// this will be used for lookup in getByteSequence -var indexcodepoints = []; // index is unicode cp, value is pointer -for (p = 0; p < euckr.length; p++) { - if (euckr[p] != null && indexcodepoints[euckr[p]] == null) { - indexcodepoints[euckr[p]] = p; - } -} - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ks_c_5601-1989"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1-1000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_10001-11000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1001-2000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_11001-12000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_12001-13000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_13001-14000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_14001-15000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_15001-16000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_16001-17000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_17001-last-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_2001-3000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_3001-4000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_4001-5000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_5001-6000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_6001-7000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_7001-8000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_8001-9000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_9001-10000-expected.txt new file mode 100644 index 0000000..9c0a445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ks_c_5601-1989 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html index bc132bd..b6facc4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html
@@ -4,8 +4,27 @@ <meta charset="ksc5601"> <!-- test breaks if the server overrides this --> <title>ksc5601 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ksc5601"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html index f306e5b0..78b9fe5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html
@@ -4,8 +4,27 @@ <meta charset="ksc_5601"> <!-- test breaks if the server overrides this --> <title>ksc_5601 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "ksc_5601"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1-1000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_10001-11000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1001-2000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_11001-12000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_12001-13000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_13001-14000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_14001-15000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_15001-16000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_16001-17000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_17001-last-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_2001-3000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_3001-4000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_4001-5000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_5001-6000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_6001-7000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_7001-8000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_8001-9000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_9001-10000-expected.txt new file mode 100644 index 0000000..1dcd66d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL ksc_5601 encoding (form) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html index 3d2b4d1d..aac30680 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html
@@ -4,8 +4,28 @@ <meta charset="windows-949"> <!-- test breaks if the server overrides this --> <title>windows-949 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> + <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +38,17 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "windows-949"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html> +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html index 47e40aa..545f8ac9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html
@@ -4,8 +4,27 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +37,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "euc-kr"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html index ad334f9..91ef213 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html
@@ -4,97 +4,58 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding errors (href, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-22000"> +<meta name="variant" content="?22001-23000"> +<meta name="variant" content="?23001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-kr"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the euc-kr encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (i = 0x4e00; i < 0x9fba; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } -} - -for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0xfa70; i < 0xfada; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = euckrEncoder; +var ranges = rangesHan; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html index 51859635..a72a161 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html
@@ -4,106 +4,38 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding errors (href, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-kr"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the euc-kr encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// set up a simple array of unicode codepoints that are not encoded -var codepoints = []; - -for (var i = 0x80; i < 0x4ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } -} - -for (i = 0x2000; i < 0x23ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } -} - -for (i = 0x2460; i < 0x26ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } -} - -for (i = 0x3000; i < 0x33ff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } -} - -for (i = 0xff00; i < 0xffef; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the tests exclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = euckrEncoder; +var ranges = rangesMisc; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html index f03a417..a4963fd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html
@@ -4,59 +4,48 @@ <meta charset="euc-kr"> <!-- test breaks if the server overrides this --> <title>EUC-KR encoding (href)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="euckr_index.js"></script> <script src="euckr-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#euc-kr"> <meta name="assert" content="The browser produces the expected byte sequences for all characters in the euc-kr encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(normalizeStr(result), normalizeStr(expected)); - }, desc); -} - -// create a simple list of just those code points for which there is an encoding possible -codepoints = []; -for (var i = 0x80; i < 0xffff; i++) { - result = euckrEncoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - "U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the testsexclude ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../ranges.js"></script> +<script> +var errors = false; +var encoder = euckrEncoder; +var ranges = rangesAll; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); +} +</script> +<script src="../../encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1-1000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_10001-11000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_10001-11000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_10001-11000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1001-2000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_11001-12000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_11001-12000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_11001-12000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_12001-13000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_12001-13000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_12001-13000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_13001-14000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_13001-14000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_13001-14000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_14001-15000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_14001-15000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_14001-15000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_15001-16000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_15001-16000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_15001-16000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_16001-17000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_16001-17000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_16001-17000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_17001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_17001-last-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_17001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_2001-3000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_3001-4000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_3001-4000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_4001-5000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_4001-5000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_5001-6000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_5001-6000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_6001-7000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_6001-7000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_7001-8000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_7001-8000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_8001-9000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_8001-9000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_8001-9000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_9001-10000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_9001-10000-expected.txt new file mode 100644 index 0000000..695230f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href_9001-10000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL EUC-KR encoding (href) Uncaught ReferenceError: rangesAll is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html index e3344f6..c9c137f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html
@@ -4,8 +4,24 @@ <meta charset="utf-8"/> <title>big5-hkscs decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'big5-hkscs' as for a document labeled 'big5'."> @@ -15,49 +31,14 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(big5Decoder);"> <iframe src="big5_chars-big5-hkscs.html" name="scriptWindow" id="scrwin"></iframe> - <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html index 998b8a49..d553e6eb 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html
@@ -4,8 +4,24 @@ <meta charset="utf-8"/> <title>cn-big5 decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'cn-big5' as for a document labeled 'big5'."> @@ -15,49 +31,14 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(big5Decoder);"> <iframe src="big5_chars-cn-big5.html" name="scriptWindow" id="scrwin"></iframe> - <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html index d107ecc..dc880d2d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html
@@ -4,8 +4,24 @@ <meta charset="utf-8"/> <title>csbig5 decoding</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels"> <meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'csbig5' as for a document labeled 'big5'."> @@ -15,49 +31,14 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(big5Decoder);"> <iframe src="big5_chars-csbig5.html" name="scriptWindow" id="scrwin"></iframe> - <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-expected.txt new file mode 100644 index 0000000..d3328d8e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra-expected.txt new file mode 100644 index 0000000..d453f46 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 decoding (extra) Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html index 7c5b0f9..9db3836 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-extra.html
@@ -15,48 +15,14 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(big5Decoder);"> <iframe src="big5_chars_extra.html" name="scriptWindow" id="scrwin"></iframe> <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5-expected.txt new file mode 100644 index 0000000..7d01163 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL x-x-big5 decoding Uncaught ReferenceError: subsetTest is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html index 31aec04e..563a3c8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html
@@ -15,49 +15,14 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> -<body onload="showNodes();"> +<body onload="showNodes(big5Decoder);"> <iframe src="big5_chars-x-x-big5.html" name="scriptWindow" id="scrwin"></iframe> - <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode.html index 5a00717..17b2a722 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode.html
@@ -15,6 +15,7 @@ </style> <script src="big5_index.js"></script> <script src="big5-decoder.js"></script> +<script src="../../resources/decode-common.js"></script> </head> <body onload="showNodes();"> @@ -23,40 +24,5 @@ <div id="log"></div> -<script> -var tests = []; - -function iframeRef(frameRef) { - return frameRef.contentWindow - ? frameRef.contentWindow.document - : frameRef.contentDocument; -} - -function showNodes() { - var iframe = iframeRef(document.getElementById("scrwin")); - nodes = iframe.querySelectorAll("span"); - - for (var i = 0; i < nodes.length; i++) { - tests[i] = async_test( - "U+" + - nodes[i].dataset.cp + - " " + - String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + - " " + - big5Decoder(nodes[i].dataset.bytes) + - " " + - nodes[i].dataset.bytes - ); - } - - for (var i = 0; i < nodes.length; i++) { - tests[i].step(function() { - assert_equals(nodes[i].textContent, big5Decoder(nodes[i].dataset.bytes)); - }); - tests[i].done(); - } -} -</script> - </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html index 9fbfed6..ee5f0c9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html
@@ -4,8 +4,24 @@ <meta charset="big5-hkscs"> <!-- test breaks if the server overrides this --> <title>big5-hkscs encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -17,133 +33,17 @@ </style> </head> <body> - <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5-hkscs"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html index 04db127..4495f1ba 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html
@@ -4,8 +4,24 @@ <meta charset="cn-big5"> <!-- test breaks if the server overrides this --> <title>cn-big5 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -17,133 +33,18 @@ </style> </head> <body> - <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "cn-big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html> +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html index 410fa50..4d71c77 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html
@@ -4,8 +4,24 @@ <meta charset="csbig5"> <!-- test breaks if the server overrides this --> <title>csbig5 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -17,133 +33,17 @@ </style> </head> <body> - <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "csbig5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html index 752956f6..d9eca7a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html
@@ -4,8 +4,31 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, extB, part1)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,133 +41,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x20000; i < 0x2536b; i++) { - // cjk extension A - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extB (pt 1)"; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesExtBa; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html index 186c7dc..b7406f2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html
@@ -4,8 +4,31 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, extB, part2)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,133 +41,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x2536b; i < 0x2a6e0; i++) { - // cjk extension A - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extB (pt 2) "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesExtBb; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html index 0698ed5..82930e2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html
@@ -4,8 +4,24 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,175 +34,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0x4e00; i < 0x9fba; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } - } - - for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0xfa70; i < 0xfada; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } - } - - for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } - } - /* - for (i=0x20000;i<0x2A6E0;i++) { // cjk extension A - result = getByteSequence(i) - if (!result) { - var item = {} - codepoints.push(item) - item.cp = i - item.expected = '%26%23'+item.cp+'%3B' - item.desc = 'extension A ' - } - } - */ - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html index 106d9d1..ca90edf 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html
@@ -4,8 +4,21 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,132 +31,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 400; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0xac00; i < 0xd7af; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesHangul; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html index 98d68618..34d90c1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html
@@ -4,8 +4,13 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,172 +23,20 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (var i = 0x80; i < 0x4ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } - } - - for (i = 0x2000; i < 0x23ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } - } - - for (i = 0x2460; i < 0x26ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } - } - - for (i = 0x3000; i < 0x33ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } - } - - for (i = 0xff00; i < 0xffef; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call(document.getElementsByTagName("form")); - inputs = Array.prototype.slice.call(document.getElementsByTagName("input")); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesMisc; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +// Overwrite normalizeStr +function normalizeStr(str) { + return str; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html index fd037d19..2fc7bb2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html
@@ -4,8 +4,16 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (form, pua)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,132 +26,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // set up a simple array of miscellaneous unicode codepoints that are not encoded - var codepoints = []; - - for (i = 0xe000; i < 0xf8ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "pua "; - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - item.desc = codepoints[i].desc; - currentTests.push( - async_test( - item.desc + - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals(results[j], cplist[i][j].expected); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = true; +var encoder = big5Encoder; +var ranges = rangesPua; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html index 79d2975..684dc52 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html
@@ -4,8 +4,24 @@ <meta charset="x-x-big5"> <!-- test breaks if the server overrides this --> <title>x-x-big5 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -17,133 +33,17 @@ </style> </head> <body> - <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "x-x-big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form.html index b374fe5..2d72031 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form.html
@@ -4,8 +4,24 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding (form)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> @@ -18,131 +34,16 @@ </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> <script> -var tests = []; -var cplist = []; -var numTests = null; -var numFrames = 2; -var chunkSize = 500; -var numChunks = null; -var frames = null; -var frames = null; -var forms = null; -var seperator = ","; -var encodedSeperator = encodeURIComponent(","); -var currentChunkIndex = 0; - -setup(function() { - // create a simple list of just those code points for which there is an encoding possible - codepoints = []; - for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } - } - - // convert the information into a simple array of objects that can be easily traversed - var currentChunk = []; - var currentTests = []; - cplist = [currentChunk]; - tests = [currentTests]; - for (i = 0; i < codepoints.length; i++) { - if (currentChunk.length == chunkSize) { - currentChunk = []; - cplist.push(currentChunk); - currentTests = []; - tests.push(currentTests); - } - var item = {}; - currentChunk.push(item); - item.cp = codepoints[i].cp; - item.expected = codepoints[i].expected; - currentTests.push( - async_test( - "U+" + - item.cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(item.cp) + - " " + - item.expected - ) - ); - } - - numChunks = cplist.length; - - for (var i = 0; i < numFrames; i++) { - var frame = document.createElement("iframe"); - frame.id = frame.name = "frame-" + i; - document.body.appendChild(frame); - var form = document.createElement("form"); - form.id = "form-" + i; - form.method = "GET"; - form.action = "/common/blank.html"; - form.acceptCharset = "big5"; - form.target = frame.id; - var input = document.createElement("input"); - input.id = input.name = "input-" + i; - form.appendChild(input); - document.body.appendChild(form); - } - - addEventListener("load", function() { - frames = Array.prototype.slice.call( - document.getElementsByTagName("iframe") - ); - forms = Array.prototype.slice.call( - document.getElementsByTagName("form") - ); - inputs = Array.prototype.slice.call( - document.getElementsByTagName("input") - ); - for (var i = 0; i < Math.min(numFrames, numChunks); i++) { - runNext(i); - } - }); -}); - -function runNext(id) { - var i = currentChunkIndex; - currentChunkIndex += 1; - - var iframe = frames[id]; - var form = forms[id]; - var input = inputs[id]; - - input.value = cplist[i] - .map(function(x) { - return String.fromCodePoint(x.cp); - }) - .join(seperator); - form.submit(); - - iframe.onload = function() { - var url = iframe.contentWindow.location; - var query = url.search; - var result_string = query.substr(query.indexOf("=") + 1); - var results = result_string.split(encodedSeperator); - - for (var j = 0; j < cplist[i].length; j++) { - var t = tests[i][j]; - t.step(function() { - assert_equals( - normalizeStr(results[j]), - normalizeStr(cplist[i][j].expected) - ); - }); - t.done(); - } - if (currentChunkIndex < numChunks) { - runNext(id); - } - }; +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +var separator = ","; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); } </script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html index c538cf4e..84d8b2d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html
@@ -4,97 +4,56 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (href, han)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-11000"> +<meta name="variant" content="?11001-12000"> +<meta name="variant" content="?12001-13000"> +<meta name="variant" content="?13001-14000"> +<meta name="variant" content="?14001-15000"> +<meta name="variant" content="?15001-16000"> +<meta name="variant" content="?16001-17000"> +<meta name="variant" content="?17001-18000"> +<meta name="variant" content="?18001-19000"> +<meta name="variant" content="?19001-20000"> +<meta name="variant" content="?20001-21000"> +<meta name="variant" content="?21001-22000"> +<meta name="variant" content="?22001-23000"> +<meta name="variant" content="?23001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#big5"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the gbk encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// create a simple list of just those code points for which there is no encoding is possible, from a representative subset of the BMP -codepoints = []; - -for (i = 0x4e00; i < 0x9fba; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "cjk "; - } -} - -for (i = 0xf900; i < 0xfa6e; i++) { - // compatibility - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0xfa70; i < 0xfada; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "compatibility "; - } -} - -for (i = 0x3400; i < 0x4dbf; i++) { - // cjk extension A - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "extension A "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = big5Encoder; +var ranges = rangesHan; +var separator = ","; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html> +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html index 48a23f0..d825447 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html
@@ -4,62 +4,43 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (href, hangul)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-8000"> +<meta name="variant" content="?8001-9000"> +<meta name="variant" content="?9001-10000"> +<meta name="variant" content="?10001-10000"> +<meta name="variant" content="?11001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#big5"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding hangul characters that are not in the gbk encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// create a simple list of just those code points for which there is no encoding is possible, from a representative subset of the BMP -codepoints = []; - -for (i = 0xac00; i < 0xd7af; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "hangul "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = big5Encoder; +var ranges = rangesHangul; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html> +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html index 0ff27f4f..1a212d6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html
@@ -4,105 +4,34 @@ <meta charset="big5"> <!-- test breaks if the server overrides this --> <title>Big5 encoding errors (href, misc)</title> <meta name="timeout" content="long"> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#big5"> <meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the gbk encoding."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(result, expected); - }, desc); -} - -// create a simple list of just those code points for which there is no encoding is possible, from a representative subset of the BMP -codepoints = []; - -for (var i = 0x80; i < 0x4ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "latin, greek, cyrillic, etc "; - } -} -for (i = 0x2000; i < 0x23ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "punctuation, currency, symbols "; - } -} - -for (i = 0x2460; i < 0x26ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "enclosed chars and boxes "; - } -} - -for (i = 0x3000; i < 0x33ff; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "various asian "; - } -} - -for (i = 0xff00; i < 0xffef; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (!result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%26%23" + item.cp + "%3B"; - item.desc = "half/full width "; - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - codepoints[x].desc + - " U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = true; +var encoder = eucjpEncoder; +var ranges = rangesMisc; +function expect(result, codepoint) { + return "%26%23" + codepoint + "%3B"; +} +</script> +<script src="../../resources/encode-form-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1-1000-expected.txt new file mode 100644 index 0000000..d08147e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1-1000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 encoding errors (href, misc) Uncaught ReferenceError: eucjpEncoder is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1001-2000-expected.txt new file mode 100644 index 0000000..d08147e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_1001-2000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 encoding errors (href, misc) Uncaught ReferenceError: eucjpEncoder is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_2001-3000-expected.txt new file mode 100644 index 0000000..d08147e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_2001-3000-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 encoding errors (href, misc) Uncaught ReferenceError: eucjpEncoder is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_3001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_3001-last-expected.txt new file mode 100644 index 0000000..d08147e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc_3001-last-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Big5 encoding errors (href, misc) Uncaught ReferenceError: eucjpEncoder is not defined +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href.html index fb8824c..c7a23d8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href.html
@@ -4,59 +4,38 @@ <meta name="timeout" content="long"> <title>Big5 encoding (href)</title> <meta charset="big5"> <!-- test breaks if the server overrides this --> +<meta name="variant" content="?1-1000"> +<meta name="variant" content="?1001-2000"> +<meta name="variant" content="?2001-3000"> +<meta name="variant" content="?3001-4000"> +<meta name="variant" content="?4001-5000"> +<meta name="variant" content="?5001-6000"> +<meta name="variant" content="?6001-7000"> +<meta name="variant" content="?7001-last"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/subset-tests.js"></script> <script src="big5_index.js"></script> <script src="big5-encoder.js"></script> <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> <link rel="help" href="https://encoding.spec.whatwg.org/#big5"> <meta name="assert" content="The browser produces the expected byte sequences for all characters in the big5 encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification."> -<script> -function encode(input, expected, desc) { - // tests whether a Unicode character is converted to an equivalent byte sequence by href - // input: a Unicode character - // expected: expected byte sequence - // desc: what's being tested - test(function() { - var a = document.createElement("a"); // <a> uses document encoding for URL's query - a.href = "https://example.com/?" + input; - result = a.search.substr(1); // remove leading "?" - assert_equals(normalizeStr(result), normalizeStr(expected)); - }, desc); -} - -// create a simple list of just those code points for which there is an encoding possible -codepoints = []; -for (var i = 0x80; i < 0x2a6df; i++) { - result = big5Encoder(String.fromCodePoint(i)); - if (result) { - var item = {}; - codepoints.push(item); - item.cp = i; - item.expected = "%" + result.replace(/ /g, "%"); - } -} - -// run the tests -for (var x = 0; x < codepoints.length; x++) { - encode( - String.fromCodePoint(codepoints[x].cp), - codepoints[x].expected, - "U+" + - codepoints[x].cp.toString(16).toUpperCase() + - " " + - String.fromCodePoint(codepoints[x].cp) + - " " + - codepoints[x].expected - ); -} - -// NOTES -// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers -// the test excludes ASCII characters -</script> +<style> + iframe { display:none } + form { display:none } +</style> </head> <body> <div id="log"></div> +<script src="../../resources/ranges.js"></script> +<script> +var errors = false; +var encoder = big5Encoder; +var ranges = rangesAll; +function expect(result, codepoint) { + return "%" + result.replace(/ /g, "%"); +} +</script> +<script src="../../resources/encode-href-common.js"></script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/decode-common.js b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/decode-common.js new file mode 100644 index 0000000..19dd6939 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/decode-common.js
@@ -0,0 +1,40 @@ +var tests = []; + +function iframeRef(frameRef) { + return frameRef.contentWindow + ? frameRef.contentWindow.document + : frameRef.contentDocument; +} + +function showNodes(decoder) { + var iframe = iframeRef(document.getElementById("scrwin")); + nodes = iframe.querySelectorAll("span"); + + for (var i = 0; i < nodes.length; i++) { + var test = subsetTest(async_test, + "U+" + + nodes[i].dataset.cp + + " " + + String.fromCodePoint(parseInt(nodes[i].dataset.cp, 16)) + + " " + + decoder(nodes[i].dataset.bytes) + + " " + + nodes[i].dataset.bytes + ); + if (test) { + tests[i] = test; + } + } + + for (var i = 0; i < nodes.length; i++) { + if (tests[i]) { + tests[i].step(function() { + assert_equals( + nodes[i].textContent, + decoder(nodes[i].dataset.bytes) + ); + }); + tests[i].done(); + } + } +}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-form-common.js b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-form-common.js new file mode 100644 index 0000000..6f8777b3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-form-common.js
@@ -0,0 +1,140 @@ +// These are defined by the test: +// errors (boolean) +// encoder (function) +// ranges (array) +// separator (string) +// expect (function) + +var tests = []; +var cplist = []; +var numTests = null; +var numFrames = 2; +var chunkSize = 400; +var numChunks = null; +var frames = null; +var frames = null; +var forms = null; +var encodedSeparator = encodeURIComponent(separator); +var currentChunkIndex = 0; +var pageCharset = document.querySelector("meta[charset]").getAttribute("charset"); + +setup(function() { + // create a simple list of just those code points for which there is an encoding possible + codepoints = []; + for (var range of ranges) { + for (var i = range[0]; i < range[1]; i++) { + result = encoder(String.fromCodePoint(i)); + var success = !!result; + if (errors) { + success = !success; + } + if (success) { + var item = {}; + codepoints.push(item); + item.cp = i; + item.expected = expect(result, i); + item.desc = range[2]; + } + } + } + + // convert the information into a simple array of objects that can be easily traversed + var currentChunk = []; + var currentTests = []; + cplist = [currentChunk]; + tests = [currentTests]; + for (i = 0; i < codepoints.length; i++) { + if (currentChunk.length == chunkSize) { + currentChunk = []; + cplist.push(currentChunk); + currentTests = []; + tests.push(currentTests); + } + var item = {}; + currentChunk.push(item); + item.cp = codepoints[i].cp; + item.expected = codepoints[i].expected; + item.desc = codepoints[i].desc; + currentTests.push(subsetTest(async_test, + (item.desc ? item.desc + " " : "") + + "U+" + + item.cp.toString(16).toUpperCase() + + " " + + String.fromCodePoint(item.cp) + + " " + + item.expected + )); + } + + numChunks = cplist.length; + + for (var i = 0; i < numFrames; i++) { + var frame = document.createElement("iframe"); + frame.id = frame.name = "frame-" + i; + document.body.appendChild(frame); + var form = document.createElement("form"); + form.id = "form-" + i; + form.method = "GET"; + form.action = "/common/blank.html"; + form.acceptCharset = pageCharset; + form.target = frame.id; + var input = document.createElement("input"); + input.id = input.name = "input-" + i; + form.appendChild(input); + document.body.appendChild(form); + } + + addEventListener("load", function() { + frames = Array.prototype.slice.call( + document.getElementsByTagName("iframe") + ); + forms = Array.prototype.slice.call( + document.getElementsByTagName("form") + ); + inputs = Array.prototype.slice.call( + document.getElementsByTagName("input") + ); + for (var i = 0; i < Math.min(numFrames, numChunks); i++) { + runNext(i); + } + }); +}); + +function runNext(id) { + var i = currentChunkIndex; + currentChunkIndex += 1; + + var iframe = frames[id]; + var form = forms[id]; + var input = inputs[id]; + + input.value = cplist[i] + .map(function(x) { + return String.fromCodePoint(x.cp); + }) + .join(separator); + form.submit(); + + iframe.onload = function() { + var url = iframe.contentWindow.location; + var query = url.search; + var result_string = query.substr(query.indexOf("=") + 1); + var results = result_string.split(encodedSeparator); + + for (var j = 0; j < cplist[i].length; j++) { + var t = tests[i][j]; + if (t) { + t.step(function() { + assert_equals( + normalizeStr(results[j]), + normalizeStr(cplist[i][j].expected) + ); + }); + t.done(); + } + } + if (currentChunkIndex < numChunks) { + runNext(id); + } + }; +}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-href-common.js b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-href-common.js new file mode 100644 index 0000000..dc646fe8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/encode-href-common.js
@@ -0,0 +1,57 @@ +// These are defined by the test: +// errors (boolean) +// encoder (function) +// ranges (array) +// expect (function) + +function encode(input, expected, desc) { + // tests whether a Unicode character is converted to an equivalent byte sequence by href + // input: a Unicode character + // expected: expected byte sequence + // desc: what's being tested + subsetTest(test, function() { + var a = document.createElement("a"); // <a> uses document encoding for URL's query + a.href = "https://example.com/?" + input; + result = a.search.substr(1); // remove leading "?" + assert_equals(normalizeStr(result), normalizeStr(expected)); + }, desc); +} + +// set up a simple array of unicode codepoints that are not encoded +var codepoints = []; + +for (var range of ranges) { + for (var i = range[0]; i < range[1]; i++) { + result = encoder(String.fromCodePoint(i)); + var success = !!result; + if (errors) { + success = !success; + } + if (success) { + var item = {}; + codepoints.push(item); + item.cp = i; + item.expected = expect(result, i); + item.desc = range[2] ? range[2] + " " : ""; + } + } +} + +// run the tests +for (var x = 0; x < codepoints.length; x++) { + encode( + String.fromCodePoint(codepoints[x].cp), + codepoints[x].expected, + codepoints[x].desc + + " U+" + + codepoints[x].cp.toString(16).toUpperCase() + + " " + + String.fromCodePoint(codepoints[x].cp) + + " " + + codepoints[x].expected + ); +} + +// NOTES +// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers +// the tests exclude ASCII characters
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/ranges.js b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/ranges.js new file mode 100644 index 0000000..81dc711 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/resources/ranges.js
@@ -0,0 +1,28 @@ +var rangesHan = [ + [0x4e00, 0x9fba, "cjk"], + [0xf900, 0xfa6e, "compatibility"], + [0xfa70, 0xfada, "compatibility"], + [0x3400, 0x4dbf, "extension A"], +]; +var rangesHangul = [ + [0xac00, 0xd7af, "hangul"], +]; +var rangesMisc = [ + [0x80, 0x4ff, "latin, greek, cyrillic, etc"], + [0x2000, 0x23ff, "punctuation, currency, symbols"], + [0x2460, 0x26ff, "enclosed chars and boxes"], + [0x3000, 0x33ff, "various asian"], + [0xff00, 0xffef, "half/full width"], +]; +var rangesAll = [ + [0x80, 0xffff], +]; +var rangesExtBa = [ + [0x20000, 0x2536b, "extB (pt 1)"], +]; +var rangesExtBb = [ + [0x2536b, 0x2a6e0, "extB (pt 2)"], +]; +var rangesPua = [ + [0xe000, 0xf8ff, "pua"], +];
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encoding/single-byte-decoder.html b/third_party/WebKit/LayoutTests/external/wpt/encoding/single-byte-decoder.html index 1833fda..70d8fb73 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/encoding/single-byte-decoder.html +++ b/third_party/WebKit/LayoutTests/external/wpt/encoding/single-byte-decoder.html
@@ -1,5 +1,8 @@ <!doctype html> <meta name=timeout content=long> +<meta name="variant" content="?XMLHttpRequest"> +<meta name="variant" content="?TextDecoder"> +<meta name="variant" content="?document"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=resources/encodings.js></script> @@ -62,38 +65,49 @@ } } + var subsetTest = ""; + if (location.search) { + subsetTest = location.search.substr(1); + } + // Setting up all the tests for(var i = 0, l = singleByteEncodings.length; i < l; i++) { var encoding = singleByteEncodings[i] for(var ii = 0, ll = encoding.labels.length; ii < ll; ii++) { var label = encoding.labels[ii] - async_test(function(t) { - var xhr = new XMLHttpRequest, - name = encoding.name // need scoped variable - xhr.open("GET", "resources/single-byte-raw.py?label=" + label) - xhr.send(null) - xhr.onload = t.step_func_done(function() { assert_decode(xhr.responseText, name) }) - }, encoding.name + ": " + label + " (XMLHttpRequest)") + if (subsetTest == "XMLHttpRequest" || !subsetTest) { + async_test(function(t) { + var xhr = new XMLHttpRequest, + name = encoding.name // need scoped variable + xhr.open("GET", "resources/single-byte-raw.py?label=" + label) + xhr.send(null) + xhr.onload = t.step_func_done(function() { assert_decode(xhr.responseText, name) }) + }, encoding.name + ": " + label + " (XMLHttpRequest)") + } - test(function() { - var d = new TextDecoder(label), - data = d.decode(view) - assert_equals(d.encoding, encoding.name.toLowerCase()) // ASCII names only, so safe - assert_decode(data, encoding.name) - }, encoding.name + ": " + label + " (TextDecoder)") + if (subsetTest == "TextDecoder" || !subsetTest) { + test(function() { + var d = new TextDecoder(label), + data = d.decode(view) + assert_equals(d.encoding, encoding.name.toLowerCase()) // ASCII names only, so safe + assert_decode(data, encoding.name) + }, encoding.name + ": " + label + " (TextDecoder)") + } - async_test(function(t) { - var frame = document.createElement("iframe"), - name = encoding.name; - frame.src = "resources/text-plain-charset.py?label=" + label - frame.onload = t.step_func_done(function() { - assert_equals(frame.contentDocument.characterSet, name) - assert_equals(frame.contentDocument.inputEncoding, name) - }) - t.add_cleanup(function() { document.body.removeChild(frame) }) - document.body.appendChild(frame) - }, encoding.name + ": " + label + " (document.characterSet and document.inputEncoding)") + if (subsetTest == "document" || !subsetTest) { + async_test(function(t) { + var frame = document.createElement("iframe"), + name = encoding.name; + frame.src = "resources/text-plain-charset.py?label=" + label + frame.onload = t.step_func_done(function() { + assert_equals(frame.contentDocument.characterSet, name) + assert_equals(frame.contentDocument.inputEncoding, name) + }) + t.add_cleanup(function() { document.body.removeChild(frame) }) + document.body.appendChild(frame) + }, encoding.name + ": " + label + " (document.characterSet and document.inputEncoding)") + } } } </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr-expected.txt new file mode 100644 index 0000000..bceae9062 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS Computed display and visibility of table +PASS Computed display and visibility of caption +FAIL Computed display and visibility of colgroup assert_equals: expected "table-column-group" but got "none" +FAIL Computed display and visibility of col assert_equals: expected "table-column" but got "none" +FAIL Computed display and visibility of thead assert_equals: expected "table-header-group" but got "none" +FAIL Computed display and visibility of tbody assert_equals: expected "table-row-group" but got "none" +FAIL Computed display and visibility of tfoot assert_equals: expected "table-footer-group" but got "none" +FAIL Computed display and visibility of tr assert_equals: expected "table-row" but got "none" +FAIL Computed display and visibility of td assert_equals: expected "table-cell" but got "none" +FAIL Computed display and visibility of th assert_equals: expected "table-cell" but got "none" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr.html new file mode 100644 index 0000000..d914344 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<title>UA style for hidden attribute on table elements</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#tables-2"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<table hidden></table> +<table><caption hidden></caption></table> +<table><colgroup hidden></table> +<table><col hidden></table> +<table><thead hidden></table> +<table><tbody hidden></table> +<table><tfoot hidden></table> +<table><tr hidden></table> +<table><tr><td hidden></table> +<table><tr><th hidden></table> +<script> +const expectedDisplay = { + 'table': 'none', + 'caption': 'none', + 'colgroup': 'table-column-group', + 'col': 'table-column', + 'thead': 'table-header-group', + 'tbody': 'table-row-group', + 'tfoot': 'table-footer-group', + 'tr': 'table-row', + 'td': 'table-cell', + 'th': 'table-cell', +}; +for (const el of document.querySelectorAll("[hidden]")) { + test(function() { + const style = getComputedStyle(el); + assert_equals(style.display, expectedDisplay[el.localName]); + if (el instanceof HTMLTableElement || + el instanceof HTMLTableCaptionElement) { + assert_equals(style.visibility, 'visible'); + } else { + assert_equals(style.visibility, 'collapse'); + } + }, `Computed display and visibility of ${el.localName}`); +} +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/offscreencanvas-text/tools/gentestutils.py b/third_party/WebKit/LayoutTests/fast/canvas/offscreencanvas-text/tools/gentestutils.py index 36d0b3b..96674f0 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/offscreencanvas-text/tools/gentestutils.py +++ b/third_party/WebKit/LayoutTests/fast/canvas/offscreencanvas-text/tools/gentestutils.py
@@ -7,7 +7,7 @@ # http://philip.html5.org/tests/canvas/suite/tests/ # # It has been adapted for use with the Web Platform Test Suite suite at -# https://github.com/w3c/web-platform-tests/ +# https://github.com/web-platform-tests/wpt/ # # The original version had a number of now-removed features (multiple versions of # each test case of varying verbosity, Mozilla mochitests, semi-automated test
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event-expected.html b/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event-expected.html deleted file mode 100644 index 8914f94..0000000 --- a/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event-expected.html +++ /dev/null
@@ -1,21 +0,0 @@ -<!DOCTYPE html> -<html> -<script> -function test() { - sel = document.getElementById("sel"); - sel.selectedIndex = 49; - sel.selectedIndex = -1; -} -</script> -<body onload="test()"> - <select multiple id="sel" style="width:500px; height:300px;"></select> - <script> - sel = document.getElementById("sel"); - for (var i = 0; i < 50; i++) { - option = document.createElement("option"); - option.innerHTML = "Option " + i; - sel.appendChild(option); - } - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event.html b/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event.html index b6a6f0d6..27777b8 100644 --- a/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event.html +++ b/third_party/WebKit/LayoutTests/fast/scrolling/listbox-wheel-event.html
@@ -1,24 +1,34 @@ <!DOCTYPE html> -<html> +<script src='../../resources/testharness.js'></script> +<script src='../../resources/testharnessreport.js'></script> +<script src='../../resources/gesture-util.js'></script> + +<style> + #sel { + width: 500px; + height: 300px; + } +</style> + +<select multiple id='sel'></select> + <script> -function test() { - if (window.eventSender) { - eventSender.mouseMoveTo(100, 100); - eventSender.continuousMouseScrollBy(0, -10000); - eventSender.mouseMoveTo(0, 0); - } -} + const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + + internals.settings.setScrollAnimatorEnabled(false); + let sel = document.getElementById('sel'); + for (let i = 0; i < 50; i++) { + let option = document.createElement('option'); + option.innerHTML = 'Option ' + i; + sel.appendChild(option); + } + + window.onload = async () => { + await waitForCompositorCommit(); + + promise_test(async () => { + await smoothScroll(100, 100, 100, MOUSE_INPUT, 'down', 1000); + await waitFor(() => { return sel.scrollTop > 0; }); + }, 'Ensure <select> scrollable'); + } </script> -<body onload="test()"> - <select multiple id="sel" style="width:500px; height:300px;"></select> - <script> - internals.settings.setScrollAnimatorEnabled(false); - sel = document.getElementById("sel"); - for (var i = 0; i < 50; i++) { - option = document.createElement("option"); - option.innerHTML = "Option " + i; - sel.appendChild(option); - } - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/same-page-navigate.html b/third_party/WebKit/LayoutTests/fast/scrolling/same-page-navigate.html index 4904d8d..5e404da 100644 --- a/third_party/WebKit/LayoutTests/fast/scrolling/same-page-navigate.html +++ b/third_party/WebKit/LayoutTests/fast/scrolling/same-page-navigate.html
@@ -1,14 +1,22 @@ <!DOCTYPE html> +<script src='../../resources/testharness.js'></script> +<script src='../../resources/testharnessreport.js'></script> +<script src='../../resources/gesture-util.js'></script> -<a href="./same-page-navigate.html" id="same-page" style="position: absolute; top: 2000px">link to self</a> +<style> + #same-page { + position: absolute; + top: 2000px; + } +</style> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> +<a href='./same-page-navigate.html' id='same-page'>link to self</a> <script> -var same_page_navigate_test = async_test("Ensure that the scroll position is correct when we navigate to same page after scale(zoom-in/zoom-out)"); +let same_page_navigate_test = async_test("Ensure that the scroll position is correct when we navigate to same page after scale(zoom-in/zoom-out)"); -same_page_navigate_test.step(function(){ +same_page_navigate_test.step(async () => { + await waitForCompositorCommit(); // exit in second load, using scale to detect if (internals.pageScaleFactor() == 2) { assert_equals(scrollX, 0); @@ -18,15 +26,11 @@ } internals.setPageScaleFactor(2); + await waitForCompositorCommit(); + scrollTo(0, 10000); - var atag = document.getElementById('same-page'); - var x = (atag.offsetLeft - scrollX + 1) * 2; - var y = (atag.offsetTop - scrollY + 1) * 2; - // this clicks on the link which causes a reload of this page. - eventSender.mouseMoveTo(x, y); - eventSender.mouseDown(); - eventSender.mouseUp(); + document.getElementById('same-page').click(); }); </script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest-expected.txt b/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest-expected.txt deleted file mode 100644 index 6e12995b..0000000 --- a/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest-expected.txt +++ /dev/null
@@ -1,10 +0,0 @@ -Checks that clicking on scrollbar works when tickmarks are added. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS did scroll -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html b/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html index 73dda35..ecf4b912 100644 --- a/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html +++ b/third_party/WebKit/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html
@@ -1,41 +1,38 @@ -<html> -<script src="../../resources/js-test.js"></script> -<body style="min-height: 5000px"> -<span id="elt"> </span> +<!DOCTYPE html> +<script src='../../resources/testharness.js'></script> +<script src='../../resources/testharnessreport.js'></script> +<script src='../../resources/gesture-util.js'></script> + +<style> + body, + html { + min-height: 5000px; + } +</style> + +<span id='elt'> </span> <script> -description('Checks that clicking on scrollbar works when tickmarks are added.'); -if (window.internals) { + if (window.internals) internals.runtimeFlags.overlayScrollbarsEnabled = true; -} -onload = function() -{ - if (window.testRunner) - testRunner.dumpAsText(); - var range = document.createRange(); - var elt = document.getElementById('elt'); + window.onload = async () => { + await waitForCompositorCommit(); + + internals.setScrollbarVisibilityInScrollableArea( + internals.effectiveRootScroller(document), true); + let range = document.createRange(); + let elt = document.getElementById('elt'); range.selectNodeContents(elt); - if (window.internals) { - internals.addTextMatchMarker(range, 'kActive'); - } - if (window.eventSender) { - eventSender.mouseMoveTo(window.innerWidth - 1, 10); - eventSender.mouseDown(); - eventSender.mouseMoveTo(window.innerWidth - 1, 100); - eventSender.mouseUp(); - } -} + if (window.internals) + internals.addTextMatchMarker(range, 'kActive'); -onscroll = function() -{ - testPassed('did scroll'); - finishJSTest(); -} + await waitForCompositorCommit(); -var jsTestIsAsync = true; + promise_test(async () => { + await mouseDragAndDrop(window.innerWidth - 1, 10, window.innerWidth - 1, 100); + // Will throw exception if window.scrollY not greater than 0. + await waitFor(() => { return window.scrollY > 0; }); + }, 'Checks that clicking on overlay scrollbar works when tickmarks are added.'); + } </script> - - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fullscreen/api/document-exit-fullscreen-vs-request.html b/third_party/WebKit/LayoutTests/fullscreen/api/document-exit-fullscreen-vs-request.html index 85758c77..841452fa 100644 --- a/third_party/WebKit/LayoutTests/fullscreen/api/document-exit-fullscreen-vs-request.html +++ b/third_party/WebKit/LayoutTests/fullscreen/api/document-exit-fullscreen-vs-request.html
@@ -6,7 +6,7 @@ <div id="log"></div> <div id="parent"><div></div></div> <script> -// Adapted from https://github.com/w3c/web-platform-tests/pull/4250 +// Adapted from https://github.com/web-platform-tests/wpt/pull/4250 // TODO(foolip): Remove this test when the above is imported and passing. async_test(t => { const parent = document.getElementById("parent");
diff --git a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-elements.html b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-elements.html index 8644e18c..218966f 100644 --- a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-elements.html +++ b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-elements.html
@@ -7,7 +7,7 @@ <div id="a"></div> <div id="b"></div> <script> -// Adapted from https://github.com/w3c/web-platform-tests/pull/4250 +// Adapted from https://github.com/web-platform-tests/wpt/pull/4250 // TODO(foolip): Remove this test when the above is imported and passing. async_test(t => { // Request fullscreen on both elements, but in reverse tree order.
diff --git a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-iframes.html b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-iframes.html index 59570a36..7a7b483e 100644 --- a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-iframes.html +++ b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-two-iframes.html
@@ -7,7 +7,7 @@ <iframe id="a" allowfullscreen></iframe> <iframe id="b" allowfullscreen></iframe> <script> -// Adapted from https://github.com/w3c/web-platform-tests/pull/4250 +// Adapted from https://github.com/web-platform-tests/wpt/pull/4250 // TODO(foolip): Remove this test when the above is imported and passing. async_test(t => { // Request fullscreen on the body elements of both iframes, but in reverse
diff --git a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-vs-exit.html b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-vs-exit.html index ce9c2b2c..a615001 100644 --- a/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-vs-exit.html +++ b/third_party/WebKit/LayoutTests/fullscreen/api/element-request-fullscreen-vs-exit.html
@@ -6,7 +6,7 @@ <div id="log"></div> <div id="target"></div> <script> -// Adapted from https://github.com/w3c/web-platform-tests/pull/4250 +// Adapted from https://github.com/web-platform-tests/wpt/pull/4250 // TODO(foolip): Remove this test when the above is imported and passing. async_test(t => { const target = document.getElementById("target");
diff --git a/third_party/WebKit/LayoutTests/http/tests/activedomobject/media-expected.txt b/third_party/WebKit/LayoutTests/http/tests/activedomobject/media-expected.txt index 521736c..5cc0c2c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/activedomobject/media-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/activedomobject/media-expected.txt
@@ -2,8 +2,8 @@ Before Reparenting -PASS: internals.pausableObjectCount(document) should be '3' and is. -PASS: internals.pausableObjectCount(iframe) should be '3' and is. -After Reparenting -PASS: internals.pausableObjectCount(document) should be '4' and is. +PASS: internals.pausableObjectCount(document) should be '2' and is. PASS: internals.pausableObjectCount(iframe) should be '2' and is. +After Reparenting +PASS: internals.pausableObjectCount(document) should be '3' and is. +PASS: internals.pausableObjectCount(iframe) should be '1' and is.
diff --git a/third_party/WebKit/LayoutTests/http/tests/activedomobject/media.html b/third_party/WebKit/LayoutTests/http/tests/activedomobject/media.html index 9dd91094..f4e2aa8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/activedomobject/media.html +++ b/third_party/WebKit/LayoutTests/http/tests/activedomobject/media.html
@@ -10,14 +10,14 @@ window.iframe = document.querySelector('iframe').contentDocument; log('Before Reparenting'); - shouldBe('internals.pausableObjectCount(document)', 3); - shouldBe('internals.pausableObjectCount(iframe)', 3); + shouldBe('internals.pausableObjectCount(document)', 2); + shouldBe('internals.pausableObjectCount(iframe)', 2); document.body.appendChild(window.iframe.querySelector('video')); log('After Reparenting'); - shouldBe('internals.pausableObjectCount(document)', 4); - shouldBe('internals.pausableObjectCount(iframe)', 2); + shouldBe('internals.pausableObjectCount(document)', 3); + shouldBe('internals.pausableObjectCount(iframe)', 1); } </script> </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-1.html b/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-1.html index 893763e..9d97636 100644 --- a/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-1.html +++ b/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-1.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <!-- This test is imported from -https://github.com/w3c/web-platform-tests/blob/master/dom/events/EventListener-incumbent-global-1.sub.html +https://github.com/web-platform-tests/wpt/blob/master/dom/events/EventListener-incumbent-global-1.sub.html --> <title></title> <script src="/resources/testharness.js"></script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-2.html b/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-2.html index 1179e8c..d172089 100644 --- a/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-2.html +++ b/third_party/WebKit/LayoutTests/http/tests/dom/EventListener-incumbent-global-2.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <!-- This test is imported from -https://github.com/w3c/web-platform-tests/blob/master/dom/events/EventListener-incumbent-global-2.sub.html +https://github.com/web-platform-tests/wpt/blob/master/dom/events/EventListener-incumbent-global-2.sub.html --> <title></title> <script src="/resources/testharness.js"></script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html index fdc3346..14ce615 100644 --- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html +++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html
@@ -8,7 +8,7 @@ <body> Correct progress event sequencing on abort(), <a href="http://crbug.com/315488">bug 315488</a>. <script> -// Based on http://w3c-test.org/web-platform-tests/master/XMLHttpRequest/abort-during-upload.htm +// Based on http://w3c-test.org/xhr/abort-during-upload.htm var expected = [ 'upload', 'progress',
diff --git a/third_party/WebKit/LayoutTests/media/autoplay.html b/third_party/WebKit/LayoutTests/media/autoplay.html index 3dbd455..3a711dd4 100644 --- a/third_party/WebKit/LayoutTests/media/autoplay.html +++ b/third_party/WebKit/LayoutTests/media/autoplay.html
@@ -1,5 +1,5 @@ <!doctype html> -<!-- original: https://github.com/w3c/web-platform-tests/blob/6b3893bb99f70e4238011dbcd1f380891e89ec5e/html/semantics/embedded-content-0/media-elements/autoplay.html --> +<!-- original: https://github.com/web-platform-tests/wpt/blob/6b3893bb99f70e4238011dbcd1f380891e89ec5e/html/semantics/embedded-content-0/media-elements/autoplay.html --> <title>autoplay</title> <script src="../resources/testharness.js"></script> <script src="../resources/testharnessreport.js"></script>
diff --git a/third_party/WebKit/LayoutTests/media/seek-to-currentTime.html b/third_party/WebKit/LayoutTests/media/seek-to-currentTime.html index e657ba6..1e8b13ac 100644 --- a/third_party/WebKit/LayoutTests/media/seek-to-currentTime.html +++ b/third_party/WebKit/LayoutTests/media/seek-to-currentTime.html
@@ -1,5 +1,5 @@ <!DOCTYPE html> -<!-- original: https://github.com/w3c/web-platform-tests/blob/master/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html --> +<!-- original: https://github.com/web-platform-tests/wpt/blob/master/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html --> <title>seek to currentTime</title> <script src="../resources/testharness.js"></script> <script src="../resources/testharnessreport.js"></script>
diff --git a/third_party/WebKit/LayoutTests/paint/filters/feimage-circular-reference-foreign-object-crash.html b/third_party/WebKit/LayoutTests/paint/filters/feimage-circular-reference-foreign-object-crash.html new file mode 100644 index 0000000..5db3e5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/filters/feimage-circular-reference-foreign-object-crash.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/run-after-layout-and-paint.js"></script> +<script> +async_test(t => { + runAfterLayoutAndPaint(t.step_func_done(() => { + feImage.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#svg'); + })); +}); +</script> +<svg> + <filter id="filter"> + <feImage id="feImage"></feImage> + </filter> +</svg> +<svg id="svg"> + <foreignObject id="foreignObject" filter="url(#filter)">FO</foreignObject> +</svg>
diff --git a/third_party/WebKit/LayoutTests/paint/filters/feimage-reference-foreign-object-crash.html b/third_party/WebKit/LayoutTests/paint/filters/feimage-reference-foreign-object-crash.html new file mode 100644 index 0000000..74a7115 --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/filters/feimage-reference-foreign-object-crash.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/run-after-layout-and-paint.js"></script> +<script> +async_test(t => { + runAfterLayoutAndPaint(t.step_func_done(() => { + feImage.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#svg'); + })); +}); +</script> +<svg> + <filter id="filter"> + <feImage id="feImage"></feImage> + </filter> +</svg> +<div style="filter: url(#filter)"></div> +<svg id="svg"> + <foreignObject id="foreignObject">FO</foreignObject> +</svg>
diff --git a/third_party/WebKit/LayoutTests/resize-observer/README.md b/third_party/WebKit/LayoutTests/resize-observer/README.md index df2b2f0..b0dfaf3b 100644 --- a/third_party/WebKit/LayoutTests/resize-observer/README.md +++ b/third_party/WebKit/LayoutTests/resize-observer/README.md
@@ -3,4 +3,4 @@ The tests use APIs not available in web-platform-tests suite. Standard tests are in -https://github.com/w3c/web-platform-tests/tree/master/resize-observer +https://github.com/web-platform-tests/wpt/tree/master/resize-observer
diff --git a/third_party/WebKit/LayoutTests/resources/README.txt b/third_party/WebKit/LayoutTests/resources/README.txt index ec4f135b..a0b985a 100644 --- a/third_party/WebKit/LayoutTests/resources/README.txt +++ b/third_party/WebKit/LayoutTests/resources/README.txt
@@ -18,5 +18,5 @@ https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md References: -* web-platform-tests https://github.com/w3c/web-platform-tests +* web-platform-tests https://github.com/web-platform-tests/wpt * webidl2.js https://github.com/w3c/webidl2.js
diff --git a/third_party/WebKit/LayoutTests/resources/gesture-util.js b/third_party/WebKit/LayoutTests/resources/gesture-util.js index 81b1f34..4cbdeb7 100644 --- a/third_party/WebKit/LayoutTests/resources/gesture-util.js +++ b/third_party/WebKit/LayoutTests/resources/gesture-util.js
@@ -92,3 +92,23 @@ }); } +// Simulate a mouse drag and drop. mouse down at {start_x, start_y}, move to +// {end_x, end_y} and release. +function mouseDragAndDrop(start_x, start_y, end_x, end_y) { + return new Promise((resolve, reject) => { + if (chrome && chrome.gpuBenchmarking) { + let pointerActions = [{ + source: 'mouse', + actions: [ + { 'name': 'pointerMove', 'x': start_x, 'y': start_y }, + { 'name': 'pointerDown', 'x': start_x, 'y': start_y }, + { 'name': 'pointerMove', 'x': end_x, 'y': end_y }, + { 'name': 'pointerUp' }, + ] + }]; + chrome.gpuBenchmarking.pointerActionSequence(pointerActions, resolve); + } else { + reject('This test requires chrome.gpuBenchmarking'); + } + }); +}
diff --git a/third_party/WebKit/LayoutTests/resources/testharnessreport.js b/third_party/WebKit/LayoutTests/resources/testharnessreport.js index 820a803a..301fd29 100644 --- a/third_party/WebKit/LayoutTests/resources/testharnessreport.js +++ b/third_party/WebKit/LayoutTests/resources/testharnessreport.js
@@ -9,7 +9,7 @@ * * For more documentation about the callback functions and the * parameters they are called with, see testharness.js, or the docs at: - * http://web-platform-tests.org/writing-tests/testharness-api.html + * https://web-platform-tests.org/writing-tests/testharness-api.html */ (function() {
diff --git a/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/README.txt b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/README.txt new file mode 100644 index 0000000..5dfaab06 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/README.txt
@@ -0,0 +1 @@ +This directory is for testing blob URLs over mojo.
diff --git a/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt new file mode 100644 index 0000000..d32d41b --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +PASS It is possible to revoke same-origin blob URLs from different frames. +PASS It is possible to revoke same-origin blob URLs from a different worker global. +PASS It is not possible to revoke cross-origin blob URLs. +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt new file mode 100644 index 0000000..13a230c --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +PASS Blob URLs can be used in fetch +PASS fetch with a fragment should succeed +PASS fetch of a revoked URL should fail +PASS Only exact matches should revoke URLs, using fetch +PASS Appending a query string should cause fetch to fail +PASS Appending a path should cause fetch to fail +PASS fetch with method "HEAD" should fail +PASS fetch with method "POST" should fail +PASS fetch with method "DELETE" should fail +PASS fetch with method "OPTIONS" should fail +PASS fetch with method "PUT" should fail +PASS fetch with method "CUSTOM" should fail +PASS fetch should return Content-Type from Blob +PASS Revoke blob URL after creating Request, will fetch +PASS Revoke blob URL after calling fetch, fetch should succeed +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt new file mode 100644 index 0000000..332691d --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +PASS Blob URLs can be used in XHR +PASS XHR with a fragment should succeed +PASS XHR of a revoked URL should fail +PASS Only exact matches should revoke URLs, using XHR +PASS Appending a query string should cause XHR to fail +PASS Appending a path should cause XHR to fail +PASS XHR with method "HEAD" should fail +PASS XHR with method "POST" should fail +PASS XHR with method "DELETE" should fail +PASS XHR with method "OPTIONS" should fail +PASS XHR with method "PUT" should fail +PASS XHR with method "CUSTOM" should fail +PASS XHR should return Content-Type from Blob +PASS Revoke blob URL after open(), will fetch +Harness: the test ran to completion. +
diff --git a/third_party/blink/public/platform/web_security_origin.h b/third_party/blink/public/platform/web_security_origin.h index 567603e9..7945147 100644 --- a/third_party/blink/public/platform/web_security_origin.h +++ b/third_party/blink/public/platform/web_security_origin.h
@@ -76,7 +76,9 @@ BLINK_PLATFORM_EXPORT unsigned short EffectivePort() const; // A unique WebSecurityOrigin is the least privileged WebSecurityOrigin. - BLINK_PLATFORM_EXPORT bool IsUnique() const; + BLINK_PLATFORM_EXPORT bool IsOpaque() const; + // TODO(dcheng): Remove this. https://crbug.com/695622 + bool IsUnique() const { return IsOpaque(); } // Returns true if this WebSecurityOrigin can script objects in the given // SecurityOrigin. For example, call this function before allowing
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn index 18930ed..2d8e3c6 100644 --- a/third_party/blink/renderer/core/BUILD.gn +++ b/third_party/blink/renderer/core/BUILD.gn
@@ -1851,6 +1851,7 @@ "html/media/html_media_element_event_listeners_test.cc", "html/media/html_media_element_test.cc", "html/media/html_video_element_persistent_test.cc", + "html/media/html_video_element_test.cc", "html/media/media_custom_controls_fullscreen_detector_test.cc", "html/media_element_filling_viewport_test.cc", "html/parser/atomic_html_token_test.cc",
diff --git a/third_party/blink/renderer/core/dom/container_node.cc b/third_party/blink/renderer/core/dom/container_node.cc index c83fecbd..a64887bb 100644 --- a/third_party/blink/renderer/core/dom/container_node.cc +++ b/third_party/blink/renderer/core/dom/container_node.cc
@@ -404,6 +404,10 @@ // 5. Insert node into parent before reference child. NodeVector post_insertion_notification_targets; { +#if DCHECK_IS_ON() + NestingLevelIncrementer slot_assignment_recalc_forbidden_scope( + GetDocument().SlotAssignmentRecalcForbiddenRecursionDepth()); +#endif ChildListMutationScope mutation(*this); InsertNodeVector(targets, ref_child, AdoptAndInsertBefore(), &post_insertion_notification_targets); @@ -568,6 +572,11 @@ needs_recheck = true; } +#if DCHECK_IS_ON() + NestingLevelIncrementer slot_assignment_recalc_forbidden_scope( + GetDocument().SlotAssignmentRecalcForbiddenRecursionDepth()); +#endif + // 13. Let nodes be node’s children if node is a DocumentFragment node, and // a list containing solely node otherwise. DOMTreeMutationDetector detector(*new_child, *this);
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 9135056a..f54e4c51 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -600,7 +600,6 @@ context_features_(ContextFeatures::DefaultSwitch()), well_formed_(false), printing_(kNotPrinting), - paginated_for_screen_(false), compatibility_mode_(kNoQuirksMode), compatibility_mode_locked_(false), has_autofocused_(false), @@ -4103,7 +4102,7 @@ } String Document::OutgoingReferrer() const { - if (GetSecurityOrigin()->IsUnique()) { + if (GetSecurityOrigin()->IsOpaque()) { // Return |no-referrer|. return String(); }
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index 7a7a988..6a5a2eb 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -712,10 +712,7 @@ } void SetPrinting(PrintingState); - bool PaginatedForScreen() const { return paginated_for_screen_; } - void SetPaginatedForScreen(bool p) { paginated_for_screen_ = p; } - - bool Paginated() const { return Printing() || PaginatedForScreen(); } + bool Paginated() const { return Printing(); } enum CompatibilityMode { kQuirksMode, kLimitedQuirksMode, kNoQuirksMode }; @@ -1614,7 +1611,6 @@ Member<CSSStyleSheet> elem_sheet_; PrintingState printing_; - bool paginated_for_screen_; CompatibilityMode compatibility_mode_; // This is cheaper than making setCompatibilityMode virtual.
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc index c26e8cfb..2a52cff 100644 --- a/third_party/blink/renderer/core/dom/document_test.cc +++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -581,7 +581,7 @@ mask |= kSandboxOrigin; GetDocument().EnforceSandboxFlags(mask); - EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); // A unique origin does not bypass secure context checks unless it @@ -592,19 +592,19 @@ SecurityOrigin::CreateFromString("very-special-scheme://example.test"); GetDocument().SetSecurityOrigin(origin); GetDocument().EnforceSandboxFlags(mask); - EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_FALSE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); SchemeRegistry::RegisterURLSchemeAsSecure("very-special-scheme"); GetDocument().SetSecurityOrigin(origin); GetDocument().EnforceSandboxFlags(mask); - EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); origin = SecurityOrigin::CreateFromString("https://example.test"); GetDocument().SetSecurityOrigin(origin); GetDocument().EnforceSandboxFlags(mask); - EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsOpaque()); EXPECT_TRUE(GetDocument().GetSecurityOrigin()->IsPotentiallyTrustworthy()); }
diff --git a/third_party/blink/renderer/core/dom/events/dom_window_event_queue.cc b/third_party/blink/renderer/core/dom/events/dom_window_event_queue.cc index a0374e4..29fe5d3 100644 --- a/third_party/blink/renderer/core/dom/events/dom_window_event_queue.cc +++ b/third_party/blink/renderer/core/dom/events/dom_window_event_queue.cc
@@ -30,54 +30,21 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" -#include "third_party/blink/renderer/core/frame/pausable_timer.h" #include "third_party/blink/renderer/core/probe/core_probes.h" namespace blink { -class DOMWindowEventQueueTimer final - : public GarbageCollectedFinalized<DOMWindowEventQueueTimer>, - public PausableTimer { - USING_GARBAGE_COLLECTED_MIXIN(DOMWindowEventQueueTimer); - - public: - DOMWindowEventQueueTimer(DOMWindowEventQueue* event_queue, - ExecutionContext* context) - // This queue is unthrottled because throttling IndexedDB events may break - // scenarios where several tabs, some of which are backgrounded, access - // the same database concurrently. - : PausableTimer(context, TaskType::kUnthrottled), - event_queue_(event_queue) {} - - // Eager finalization is needed to promptly stop this timer object. - // (see DOMTimer comment for more.) - EAGERLY_FINALIZE(); - void Trace(blink::Visitor* visitor) override { - visitor->Trace(event_queue_); - PausableTimer::Trace(visitor); - } - - private: - void Fired() override { event_queue_->PendingEventTimerFired(); } - - Member<DOMWindowEventQueue> event_queue_; - DISALLOW_COPY_AND_ASSIGN(DOMWindowEventQueueTimer); -}; - DOMWindowEventQueue* DOMWindowEventQueue::Create(ExecutionContext* context) { return new DOMWindowEventQueue(context); } DOMWindowEventQueue::DOMWindowEventQueue(ExecutionContext* context) - : pending_event_timer_(new DOMWindowEventQueueTimer(this, context)), - is_closed_(false) { - pending_event_timer_->PauseIfNeeded(); -} + : context_(context), is_closed_(false) {} DOMWindowEventQueue::~DOMWindowEventQueue() = default; void DOMWindowEventQueue::Trace(blink::Visitor* visitor) { - visitor->Trace(pending_event_timer_); + visitor->Trace(context_); visitor->Trace(queued_events_); EventQueue::Trace(visitor); } @@ -94,27 +61,30 @@ bool was_added = queued_events_.insert(event).is_new_entry; DCHECK(was_added); // It should not have already been in the list. - if (!pending_event_timer_->IsActive()) - pending_event_timer_->StartOneShot(TimeDelta(), from_here); + // This queue is unthrottled because throttling IndexedDB events may break + // scenarios where several tabs, some of which are backgrounded, access + // the same database concurrently. + scoped_refptr<base::SingleThreadTaskRunner> task_runner = + context_->GetTaskRunner(TaskType::kUnthrottled); + + // Pass the event as a weak persistent so that GC can collect an event-related + // object like IDBTransaction as soon as possible. + task_runner->PostTask( + FROM_HERE, WTF::Bind(&DOMWindowEventQueue::DispatchEvent, + WrapPersistent(this), WrapWeakPersistent(event))); return true; } bool DOMWindowEventQueue::CancelEvent(Event* event) { - auto it = queued_events_.find(event); - bool found = it != queued_events_.end(); - if (found) { - probe::AsyncTaskCanceled(event->target()->GetExecutionContext(), event); - queued_events_.erase(it); - } - if (queued_events_.IsEmpty()) - pending_event_timer_->Stop(); - return found; + if (!RemoveEvent(event)) + return false; + probe::AsyncTaskCanceled(event->target()->GetExecutionContext(), event); + return true; } void DOMWindowEventQueue::Close() { is_closed_ = true; - pending_event_timer_->Stop(); for (const auto& queued_event : queued_events_) { if (queued_event) { probe::AsyncTaskCanceled(queued_event->target()->GetExecutionContext(), @@ -124,26 +94,18 @@ queued_events_.clear(); } -void DOMWindowEventQueue::PendingEventTimerFired() { - DCHECK(!pending_event_timer_->IsActive()); - DCHECK(!queued_events_.IsEmpty()); - - // Insert a marker for where we should stop. - DCHECK(!queued_events_.Contains(nullptr)); - bool was_added = queued_events_.insert(nullptr).is_new_entry; - DCHECK(was_added); // It should not have already been in the list. - - while (!queued_events_.IsEmpty()) { - auto it = queued_events_.begin(); - Event* event = *it; - queued_events_.erase(it); - if (!event) - break; - DispatchEvent(event); - } +bool DOMWindowEventQueue::RemoveEvent(Event* event) { + auto found = queued_events_.find(event); + if (found == queued_events_.end()) + return false; + queued_events_.erase(found); + return true; } void DOMWindowEventQueue::DispatchEvent(Event* event) { + if (!event || !RemoveEvent(event)) + return; + EventTarget* event_target = event->target(); probe::AsyncTask async_task(event_target->GetExecutionContext(), event); if (LocalDOMWindow* window = event_target->ToLocalDOMWindow())
diff --git a/third_party/blink/renderer/core/dom/events/dom_window_event_queue.h b/third_party/blink/renderer/core/dom/events/dom_window_event_queue.h index 27ecbd5..c03e731 100644 --- a/third_party/blink/renderer/core/dom/events/dom_window_event_queue.h +++ b/third_party/blink/renderer/core/dom/events/dom_window_event_queue.h
@@ -50,10 +50,10 @@ private: explicit DOMWindowEventQueue(ExecutionContext*); - void PendingEventTimerFired(); + bool RemoveEvent(Event*); void DispatchEvent(Event*); - Member<DOMWindowEventQueueTimer> pending_event_timer_; + Member<ExecutionContext> context_; HeapLinkedHashSet<Member<Event>> queued_events_; bool is_closed_;
diff --git a/third_party/blink/renderer/core/dom/idle_deadline_test.cc b/third_party/blink/renderer/core/dom/idle_deadline_test.cc index fbf1add..ccd5e5f 100644 --- a/third_party/blink/renderer/core/dom/idle_deadline_test.cc +++ b/third_party/blink/renderer/core/dom/idle_deadline_test.cc
@@ -50,7 +50,7 @@ void RemoveTaskObserver( base::MessageLoop::TaskObserver* task_observer) override {} - scheduler::NonMainThreadScheduler* AsNonMainThreadScheduler() override { + scheduler::NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { return nullptr; }
diff --git a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc index e2256b5..facd2d0 100644 --- a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc +++ b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
@@ -57,7 +57,7 @@ void RemoveTaskObserver( base::MessageLoop::TaskObserver* task_observer) override {} - scheduler::NonMainThreadScheduler* AsNonMainThreadScheduler() override { + scheduler::NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { return nullptr; }
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index bee1593..14044fb 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -2729,10 +2729,8 @@ void WebViewImpl::SetZoomFactorForDeviceScaleFactor( float zoom_factor_for_device_scale_factor) { - if (zoom_factor_for_device_scale_factor_ == - zoom_factor_for_device_scale_factor) { - return; - } + // We can't early-return here if these are already equal, because we may + // need to propagate the correct zoom factor to newly navigated frames. zoom_factor_for_device_scale_factor_ = zoom_factor_for_device_scale_factor; if (!layer_tree_view_) return;
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc index 495b4e4..56439964 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
@@ -239,10 +239,10 @@ csp->BindToExecutionContext(execution_context.Get()); csp->DidReceiveHeader("sandbox;", kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceMeta); - EXPECT_FALSE(execution_context->GetSecurityOrigin()->IsUnique()); + EXPECT_FALSE(execution_context->GetSecurityOrigin()->IsOpaque()); csp->DidReceiveHeader("sandbox;", kContentSecurityPolicyHeaderTypeEnforce, kContentSecurityPolicyHeaderSourceHTTP); - EXPECT_TRUE(execution_context->GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(execution_context->GetSecurityOrigin()->IsOpaque()); } // Tests that report-uri directives are discarded from policies
diff --git a/third_party/blink/renderer/core/frame/dom_window.cc b/third_party/blink/renderer/core/frame/dom_window.cc index eb43a9a..cdb6728 100644 --- a/third_party/blink/renderer/core/frame/dom_window.cc +++ b/third_party/blink/renderer/core/frame/dom_window.cc
@@ -170,7 +170,7 @@ target = SecurityOrigin::CreateFromString(target_origin); // It doesn't make sense target a postMessage at a unique origin // because there's no way to represent a unique origin in a string. - if (target->IsUnique()) { + if (target->IsOpaque()) { exception_state.ThrowDOMException( kSyntaxError, "Invalid target origin '" + target_origin + "' in a call to 'postMessage'.");
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc index 82ba2201ab..b2471aa0b 100644 --- a/third_party/blink/renderer/core/frame/history.cc +++ b/third_party/blink/renderer/core/frame/history.cc
@@ -248,7 +248,7 @@ // We allow sandboxed documents, `data:`/`file:` URLs, etc. to use // 'pushState'/'replaceState' to modify the URL fragment: see // https://crbug.com/528681 for the compatibility concerns. - if (document_origin->IsUnique() || document_origin->IsLocal()) + if (document_origin->IsOpaque() || document_origin->IsLocal()) return EqualIgnoringQueryAndFragment(url, document_url); if (!EqualIgnoringPathQueryAndFragment(url, document_url)) @@ -256,7 +256,7 @@ scoped_refptr<const SecurityOrigin> requested_origin = SecurityOrigin::Create(url); - if (requested_origin->IsUnique() || + if (requested_origin->IsOpaque() || !requested_origin->IsSameSchemeHostPort(document_origin)) { return false; }
diff --git a/third_party/blink/renderer/core/frame/mhtml_loading_test.cc b/third_party/blink/renderer/core/frame/mhtml_loading_test.cc index e97bdeb6..7601d88 100644 --- a/third_party/blink/renderer/core/frame/mhtml_loading_test.cc +++ b/third_party/blink/renderer/core/frame/mhtml_loading_test.cc
@@ -128,7 +128,7 @@ document->GetSandboxFlags()); // MHTML document should be loaded into unique origin. - EXPECT_TRUE(document->GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(document->GetSecurityOrigin()->IsOpaque()); // Script execution should be disabled. EXPECT_FALSE(document->CanExecuteScripts(kNotAboutToExecuteScript)); @@ -147,7 +147,7 @@ child_document->GetSandboxFlags()); // MHTML document should be loaded into unique origin. - EXPECT_TRUE(child_document->GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(child_document->GetSecurityOrigin()->IsOpaque()); // Script execution should be disabled. EXPECT_FALSE(child_document->CanExecuteScripts(kNotAboutToExecuteScript)); @@ -174,7 +174,7 @@ document->GetSandboxFlags()); // MHTML document should be loaded into unique origin. - EXPECT_TRUE(document->GetSecurityOrigin()->IsUnique()); + EXPECT_TRUE(document->GetSecurityOrigin()->IsOpaque()); // Script execution should be disabled. EXPECT_FALSE(document->CanExecuteScripts(kNotAboutToExecuteScript)); }
diff --git a/third_party/blink/renderer/core/html/custom/README.md b/third_party/blink/renderer/core/html/custom/README.md index 289833d..243b82b 100644 --- a/third_party/blink/renderer/core/html/custom/README.md +++ b/third_party/blink/renderer/core/html/custom/README.md
@@ -85,9 +85,9 @@ The custom element layout tests are generally in third_party/WebKit/LayoutTests/custom-elements. -All custom elements layout tests use the [W3C web-platform-tests -harness](http://web-platform-tests.org/) and follow its style. The -W3C is not very prescriptive, so be consistent with other custom +All custom elements layout tests use the [web-platform-tests +harness](https://web-platform-tests.org/) and follow its style. The +WPT style is not very prescriptive, so be consistent with other custom elements tests. When naming tests, use short names describing what the test is doing. @@ -99,8 +99,8 @@ ###### Spec Tests -These will be upstreamed to the W3C, replacing [the tests for -registerElement](https://github.com/w3c/web-platform-tests/commits/master/custom-elements) +These will be upstreamed to WPT, replacing [the tests for +registerElement](https://github.com/web-platform-tests/wpt/tree/master/custom-elements) we contributed earlier. To facilitate that, follow these guidelines: * Keep the tests together in the `spec` directory.
diff --git a/third_party/blink/renderer/core/html/html_iframe_element_test.cc b/third_party/blink/renderer/core/html/html_iframe_element_test.cc index 190213c..3ca5e96a 100644 --- a/third_party/blink/renderer/core/html/html_iframe_element_test.cc +++ b/third_party/blink/renderer/core/html/html_iframe_element_test.cc
@@ -40,13 +40,13 @@ effective_origin = GetOriginForFeaturePolicy(frame_element); EXPECT_FALSE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_TRUE(effective_origin->IsUnique()); + EXPECT_TRUE(effective_origin->IsOpaque()); frame_element->setAttribute(HTMLNames::srcAttr, "http://example.net/"); effective_origin = GetOriginForFeaturePolicy(frame_element); EXPECT_FALSE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_FALSE(effective_origin->IsUnique()); + EXPECT_FALSE(effective_origin->IsOpaque()); } // Test that a unique origin is used when constructing the container policy in a @@ -65,13 +65,13 @@ GetOriginForFeaturePolicy(frame_element); EXPECT_FALSE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_TRUE(effective_origin->IsUnique()); + EXPECT_TRUE(effective_origin->IsOpaque()); frame_element->setAttribute(HTMLNames::srcAttr, "http://example.net/"); effective_origin = GetOriginForFeaturePolicy(frame_element); EXPECT_FALSE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_TRUE(effective_origin->IsUnique()); + EXPECT_TRUE(effective_origin->IsOpaque()); } // Test that a sandboxed iframe with the allow-same-origin sandbox flag uses the @@ -90,7 +90,7 @@ GetOriginForFeaturePolicy(frame_element); EXPECT_TRUE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_FALSE(effective_origin->IsUnique()); + EXPECT_FALSE(effective_origin->IsOpaque()); } // Test that the parent document's origin is used when constructing the @@ -126,7 +126,7 @@ GetOriginForFeaturePolicy(frame_element); EXPECT_FALSE( effective_origin->IsSameSchemeHostPort(document->GetSecurityOrigin())); - EXPECT_TRUE(effective_origin->IsUnique()); + EXPECT_TRUE(effective_origin->IsOpaque()); } // Test that iframes with relative src urls correctly construct their origin
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc index f74fda2..e3c74ef 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -3714,7 +3714,8 @@ return ToTextTrackContainer(*first_child); Node* to_be_inserted = first_child; - if (first_child && first_child->IsMediaRemotingInterstitial()) { + if (first_child && (first_child->IsMediaRemotingInterstitial() || + first_child->IsPictureInPictureInterstitial())) { Node* second_child = first_child->nextSibling(); if (second_child && second_child->IsTextTrackContainer()) return ToTextTrackContainer(*second_child);
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index 308fa7e..dc92316 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -744,6 +744,7 @@ friend class MediaControlsRotateToFullscreenDelegateTest; friend class MediaControlLoadingPanelElementTest; friend class ContextMenuControllerTest; + friend class HTMLVideoElementTest; Member<AutoplayPolicy> autoplay_policy_;
diff --git a/third_party/blink/renderer/core/html/media/html_video_element_test.cc b/third_party/blink/renderer/core/html/media/html_video_element_test.cc new file mode 100644 index 0000000..5df2d3c --- /dev/null +++ b/third_party/blink/renderer/core/html/media/html_video_element_test.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/html/media/html_video_element.h" + +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/renderer/core/dom/shadow_root.h" +#include "third_party/blink/renderer/core/html_names.h" +#include "third_party/blink/renderer/core/loader/empty_clients.h" +#include "third_party/blink/renderer/core/testing/page_test_base.h" +#include "third_party/blink/renderer/platform/testing/empty_web_media_player.h" +#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" + +namespace blink { + +class HTMLVideoElementFrameClient : public EmptyLocalFrameClient { + public: + HTMLVideoElementFrameClient() + : player_(std::make_unique<EmptyWebMediaPlayer>()) {} + + std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( + HTMLMediaElement&, + const WebMediaPlayerSource&, + WebMediaPlayerClient* client, + WebLayerTreeView*) override { + DCHECK(player_) << " Empty injected player - already used?"; + return std::move(player_); + } + + private: + std::unique_ptr<WebMediaPlayer> player_; +}; + +class HTMLVideoElementTest : public PageTestBase { + public: + void SetUp() override { + SetupPageWithClients(nullptr, new HTMLVideoElementFrameClient(), nullptr); + video_ = HTMLVideoElement::Create(GetDocument()); + GetDocument().body()->appendChild(video_); + } + + void SetFakeCcLayer(cc::Layer* layer) { video_->SetCcLayer(layer); } + + HTMLVideoElement* video() { return video_.Get(); } + + private: + Persistent<HTMLVideoElement> video_; +}; + +TEST_F(HTMLVideoElementTest, PictureInPictureInterstitialAndTextContainer) { + scoped_refptr<cc::Layer> layer = cc::Layer::Create(); + SetFakeCcLayer(layer.get()); + + video()->SetBooleanAttribute(HTMLNames::controlsAttr, true); + video()->SetSrc("http://example.com/foo.mp4"); + test::RunPendingTasks(); + + // Simulate the text track being displayed. + video()->UpdateTextTrackDisplay(); + video()->UpdateTextTrackDisplay(); + + // Simulate entering Picture-in-Picture. + video()->OnEnteredPictureInPicture(); + + // Simulate that text track are displayed again. + video()->UpdateTextTrackDisplay(); + + EXPECT_EQ(3u, video()->EnsureUserAgentShadowRoot().CountChildren()); + + // Reset cc::layer to avoid crashes depending on timing. + SetFakeCcLayer(nullptr); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/BUILD.gn b/third_party/blink/renderer/core/layout/BUILD.gn index cd5296f7..8cb9b3d 100644 --- a/third_party/blink/renderer/core/layout/BUILD.gn +++ b/third_party/blink/renderer/core/layout/BUILD.gn
@@ -44,6 +44,7 @@ "custom/css_layout_worklet.h", "custom/custom_layout_child.cc", "custom/custom_layout_child.h", + "custom/custom_layout_constraints.cc", "custom/custom_layout_constraints.h", "custom/custom_layout_fragment.cc", "custom/custom_layout_fragment.h",
diff --git a/third_party/blink/renderer/core/layout/custom/css_layout_definition.cc b/third_party/blink/renderer/core/layout/custom/css_layout_definition.cc index 3df60411..75e2e4d 100644 --- a/third_party/blink/renderer/core/layout/custom/css_layout_definition.cc +++ b/third_party/blink/renderer/core/layout/custom/css_layout_definition.cc
@@ -53,7 +53,8 @@ bool CSSLayoutDefinition::Instance::Layout( const LayoutCustom& layout_custom, - FragmentResultOptions* fragment_result_options) { + FragmentResultOptions* fragment_result_options, + scoped_refptr<SerializedScriptValue>* fragment_result_data) { ScriptState* script_state = definition_->GetScriptState(); ExecutionContext* execution_context = ExecutionContext::From(script_state); @@ -92,8 +93,8 @@ return false; } - CustomLayoutConstraints* constraints = - new CustomLayoutConstraints(layout_custom.LogicalWidth()); + CustomLayoutConstraints* constraints = new CustomLayoutConstraints( + layout_custom.LogicalWidth(), layout_custom.GetConstraintData(), isolate); // TODO(ikilpatrick): Instead of creating a new style_map each time here, // store on LayoutCustom, and update when the style changes. @@ -142,7 +143,7 @@ CustomLayoutFragmentRequest* fragment_request = V8LayoutFragmentRequest::ToImpl(v8::Local<v8::Object>::Cast(value)); - CustomLayoutFragment* fragment = fragment_request->PerformLayout(); + CustomLayoutFragment* fragment = fragment_request->PerformLayout(isolate); if (!fragment) { execution_context->AddConsoleMessage(ConsoleMessage::Create( kJSMessageSource, kInfoMessageLevel, @@ -168,7 +169,7 @@ v8::Local<v8::Array> results = v8::Array::New(isolate, requests.size()); uint32_t index = 0; for (const auto& request : requests) { - CustomLayoutFragment* fragment = request->PerformLayout(); + CustomLayoutFragment* fragment = request->PerformLayout(isolate); if (!fragment) { execution_context->AddConsoleMessage(ConsoleMessage::Create( @@ -224,6 +225,28 @@ return false; } + // Serialize any extra data provided by the web-developer to potentially pass + // up to the parent custom layout. + if (fragment_result_options->hasData()) { + // We serialize "kForStorage" so that SharedArrayBuffers can't be shared + // between LayoutWorkletGlobalScopes. + *fragment_result_data = SerializedScriptValue::Serialize( + isolate, fragment_result_options->data().V8Value(), + SerializedScriptValue::SerializeOptions( + SerializedScriptValue::kForStorage), + exception_state); + } + + if (exception_state.HadException()) { + V8ScriptRunner::ReportException(isolate, exception_state.GetException()); + exception_state.ClearException(); + execution_context->AddConsoleMessage( + ConsoleMessage::Create(kJSMessageSource, kInfoMessageLevel, + "Unable to serialize the data provided in the " + "result, falling back to block layout.")); + return false; + } + return true; }
diff --git a/third_party/blink/renderer/core/layout/custom/css_layout_definition.h b/third_party/blink/renderer/core/layout/custom/css_layout_definition.h index e0d4ba7..000648c 100644 --- a/third_party/blink/renderer/core/layout/custom/css_layout_definition.h +++ b/third_party/blink/renderer/core/layout/custom/css_layout_definition.h
@@ -19,6 +19,7 @@ class FragmentResultOptions; class LayoutCustom; class ScriptState; +class SerializedScriptValue; // Represents a javascript class registered on the LayoutWorkletGlobalScope by // the author. @@ -45,8 +46,11 @@ Instance(CSSLayoutDefinition*, v8::Local<v8::Object> instance); // Runs the web developer defined layout, returns true if everything - // succeeded, and populates the FragmentResultOptions dictionary. - bool Layout(const LayoutCustom&, FragmentResultOptions*); + // succeeded. It populates the FragmentResultOptions dictionary, and + // fragment_result_data. + bool Layout(const LayoutCustom&, + FragmentResultOptions*, + scoped_refptr<SerializedScriptValue>* fragment_result_data); void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_child.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_child.cc index d5c687d..56535b9 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_child.cc +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_child.cc
@@ -22,8 +22,26 @@ definition.ChildCustomInvalidationProperties())) {} CustomLayoutFragmentRequest* CustomLayoutChild::layoutNextFragment( - const CustomLayoutConstraintsOptions& options) { - return new CustomLayoutFragmentRequest(this, options); + ScriptState* script_state, + const CustomLayoutConstraintsOptions& options, + ExceptionState& exception_state) { + // Serialize the provided data if needed. + scoped_refptr<SerializedScriptValue> constraint_data; + if (options.hasData()) { + // We serialize "kForStorage" so that SharedArrayBuffers can't be shared + // between LayoutWorkletGlobalScopes. + constraint_data = SerializedScriptValue::Serialize( + script_state->GetIsolate(), options.data().V8Value(), + SerializedScriptValue::SerializeOptions( + SerializedScriptValue::kForStorage), + exception_state); + + if (exception_state.HadException()) + return nullptr; + } + + return new CustomLayoutFragmentRequest(this, options, + std::move(constraint_data)); } void CustomLayoutChild::Trace(blink::Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_child.h b/third_party/blink/renderer/core/layout/custom/custom_layout_child.h index 4e1193e1..6312ea1 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_child.h +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_child.h
@@ -32,7 +32,9 @@ // LayoutChild.idl PrepopulatedComputedStylePropertyMap* styleMap() const { return style_map_; } CustomLayoutFragmentRequest* layoutNextFragment( - const CustomLayoutConstraintsOptions&); + ScriptState*, + const CustomLayoutConstraintsOptions&, + ExceptionState&); LayoutBox* GetLayoutBox() const { DCHECK(box_);
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.cc new file mode 100644 index 0000000..ba372cd --- /dev/null +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.cc
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/layout/custom/custom_layout_constraints.h" + +#include "third_party/blink/renderer/bindings/core/v8/script_value.h" +#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" +#include "third_party/blink/renderer/platform/bindings/script_state.h" + +namespace blink { + +CustomLayoutConstraints::CustomLayoutConstraints(LayoutUnit fixed_inline_size, + SerializedScriptValue* data, + v8::Isolate* isolate) + : fixed_inline_size_(fixed_inline_size) { + if (data) + layout_worklet_world_v8_data_.Set(isolate, data->Deserialize(isolate)); +} + +CustomLayoutConstraints::~CustomLayoutConstraints() = default; + +ScriptValue CustomLayoutConstraints::data(ScriptState* script_state) const { + // "data" is *only* exposed to the LayoutWorkletGlobalScope, and we are able + // to return the same deserialized object. We don't need to check which world + // it is being accessed from. + DCHECK(ExecutionContext::From(script_state)->IsLayoutWorkletGlobalScope()); + DCHECK(script_state->World().IsWorkerWorld()); + + if (layout_worklet_world_v8_data_.IsEmpty()) + return ScriptValue::CreateNull(script_state); + + return ScriptValue(script_state, layout_worklet_world_v8_data_.NewLocal( + script_state->GetIsolate())); +} + +void CustomLayoutConstraints::Trace(blink::Visitor* visitor) { + visitor->Trace(layout_worklet_world_v8_data_); + ScriptWrappable::Trace(visitor); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.h b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.h index 7c3d615..1a1500cc 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.h +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints.h
@@ -6,25 +6,36 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_CUSTOM_CUSTOM_LAYOUT_CONSTRAINTS_H_ #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" +#include "third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/layout_unit.h" namespace blink { +class ScriptState; +class ScriptValue; +class SerializedScriptValue; + // Represents the constraints given to the layout by the parent that isn't // encapsulated by the style, or edges. class CustomLayoutConstraints : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); public: - CustomLayoutConstraints(LayoutUnit fixed_inline_size) - : fixed_inline_size_(fixed_inline_size.ToDouble()) {} - ~CustomLayoutConstraints() override = default; + CustomLayoutConstraints(LayoutUnit fixed_inline_size, + SerializedScriptValue* data, + v8::Isolate*); + ~CustomLayoutConstraints() override; // LayoutConstraints.idl double fixedInlineSize() const { return fixed_inline_size_; } + ScriptValue data(ScriptState*) const; + + void Trace(blink::Visitor*) override; private: double fixed_inline_size_; + TraceWrapperV8Reference<v8::Value> layout_worklet_world_v8_data_; DISALLOW_COPY_AND_ASSIGN(CustomLayoutConstraints); };
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_constraints_options.idl b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints_options.idl index 8742a775..5c16d5b 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_constraints_options.idl +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_constraints_options.idl
@@ -17,5 +17,5 @@ // double percentageInlineSize; // double percentageBlockSize; - // any data; + any data; };
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.cc index 007fb38..555981b 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.cc +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.cc
@@ -5,16 +5,28 @@ #include "third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h" #include "third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.h" +#include "third_party/blink/renderer/core/layout/custom/layout_custom.h" +#include "third_party/blink/renderer/core/layout/layout_box.h" namespace blink { CustomLayoutFragment::CustomLayoutFragment( CustomLayoutFragmentRequest* fragment_request, const LayoutUnit inline_size, - const LayoutUnit block_size) + const LayoutUnit block_size, + v8::Isolate* isolate) : fragment_request_(fragment_request), inline_size_(inline_size.ToDouble()), - block_size_(block_size.ToDouble()) {} + block_size_(block_size.ToDouble()) { + // Immediately store the result data, so that it remains immutable between + // layout calls to the child. + if (GetLayoutBox()->IsLayoutCustom()) { + SerializedScriptValue* data = + ToLayoutCustom(GetLayoutBox())->GetFragmentResultData(); + if (data) + layout_worklet_world_v8_data_.Set(isolate, data->Deserialize(isolate)); + } +} LayoutBox* CustomLayoutFragment::GetLayoutBox() const { return fragment_request_->GetLayoutBox(); @@ -24,8 +36,23 @@ return fragment_request_->IsValid(); } +ScriptValue CustomLayoutFragment::data(ScriptState* script_state) const { + // "data" is *only* exposed to the LayoutWorkletGlobalScope, and we are able + // to return the same deserialized object. We don't need to check which world + // it is being accessed from. + DCHECK(ExecutionContext::From(script_state)->IsLayoutWorkletGlobalScope()); + DCHECK(script_state->World().IsWorkerWorld()); + + if (layout_worklet_world_v8_data_.IsEmpty()) + return ScriptValue::CreateNull(script_state); + + return ScriptValue(script_state, layout_worklet_world_v8_data_.NewLocal( + script_state->GetIsolate())); +} + void CustomLayoutFragment::Trace(blink::Visitor* visitor) { visitor->Trace(fragment_request_); + visitor->Trace(layout_worklet_world_v8_data_); ScriptWrappable::Trace(visitor); }
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h index 8c18e76..7623897 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_CUSTOM_CUSTOM_LAYOUT_FRAGMENT_H_ #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" +#include "third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/layout_unit.h" @@ -13,6 +14,8 @@ class CustomLayoutFragmentRequest; class LayoutBox; +class ScriptState; +class ScriptValue; // This represents the result of a layout (on a LayoutChild). // @@ -30,7 +33,8 @@ public: CustomLayoutFragment(CustomLayoutFragmentRequest*, const LayoutUnit inline_size, - const LayoutUnit block_size); + const LayoutUnit block_size, + v8::Isolate*); ~CustomLayoutFragment() override = default; double inlineSize() const { return inline_size_; } @@ -42,6 +46,8 @@ void setInlineOffset(double inline_offset) { inline_offset_ = inline_offset; } void setBlockOffset(double block_offset) { block_offset_ = block_offset; } + ScriptValue data(ScriptState*) const; + LayoutBox* GetLayoutBox() const; bool IsValid() const; @@ -69,6 +75,8 @@ double inline_offset_ = 0; double block_offset_ = 0; + TraceWrapperV8Reference<v8::Value> layout_worklet_world_v8_data_; + DISALLOW_COPY_AND_ASSIGN(CustomLayoutFragment); };
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc index b401bba..a2fcf1dc 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc
@@ -7,6 +7,7 @@ #include "third_party/blink/renderer/core/layout/custom/custom_layout_child.h" #include "third_party/blink/renderer/core/layout/custom/custom_layout_constraints_options.h" #include "third_party/blink/renderer/core/layout/custom/custom_layout_fragment.h" +#include "third_party/blink/renderer/core/layout/custom/layout_custom.h" #include "third_party/blink/renderer/core/layout/layout_block.h" #include "third_party/blink/renderer/core/layout/layout_box.h" @@ -14,10 +15,14 @@ CustomLayoutFragmentRequest::CustomLayoutFragmentRequest( CustomLayoutChild* child, - const CustomLayoutConstraintsOptions& options) - : child_(child), options_(options) {} + const CustomLayoutConstraintsOptions& options, + scoped_refptr<SerializedScriptValue> constraint_data) + : child_(child), + options_(options), + constraint_data_(std::move(constraint_data)) {} -CustomLayoutFragment* CustomLayoutFragmentRequest::PerformLayout() { +CustomLayoutFragment* CustomLayoutFragmentRequest::PerformLayout( + v8::Isolate* isolate) { // Abort if the child we are trying to perform layout upon doesn't exist. if (!IsValid()) return nullptr; @@ -70,18 +75,24 @@ } } + if (box->IsLayoutCustom()) + ToLayoutCustom(box)->SetConstraintData(constraint_data_); + box->ForceLayout(); box->ClearOverrideContainingBlockContentSize(); box->ClearOverrideSize(); + if (box->IsLayoutCustom()) + ToLayoutCustom(box)->ClearConstraintData(); + LayoutUnit fragment_inline_size = is_parallel_writing_mode ? box->LogicalWidth() : box->LogicalHeight(); LayoutUnit fragment_block_size = is_parallel_writing_mode ? box->LogicalHeight() : box->LogicalWidth(); return new CustomLayoutFragment(this, fragment_inline_size, - fragment_block_size); + fragment_block_size, isolate); } LayoutBox* CustomLayoutFragmentRequest::GetLayoutBox() const {
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.h b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.h index 6035364..eafa09b 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.h +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.h
@@ -14,6 +14,7 @@ class CustomLayoutChild; class CustomLayoutFragment; class LayoutBox; +class SerializedScriptValue; // This represents a request to perform layout on a child. It is an opaque // object from the web developers point of view. @@ -21,14 +22,16 @@ DEFINE_WRAPPERTYPEINFO(); public: - CustomLayoutFragmentRequest(CustomLayoutChild*, - const CustomLayoutConstraintsOptions&); + CustomLayoutFragmentRequest( + CustomLayoutChild*, + const CustomLayoutConstraintsOptions&, + scoped_refptr<SerializedScriptValue> constraint_data); ~CustomLayoutFragmentRequest() override = default; // Produces a CustomLayoutFragment from this CustomLayoutFragmentRequest. This // may fail if the underlying LayoutBox represented by the CustomLayoutChild // has been removed from the tree. - CustomLayoutFragment* PerformLayout(); + CustomLayoutFragment* PerformLayout(v8::Isolate*); LayoutBox* GetLayoutBox() const; bool IsValid() const; @@ -38,6 +41,7 @@ private: Member<CustomLayoutChild> child_; const CustomLayoutConstraintsOptions options_; + scoped_refptr<SerializedScriptValue> constraint_data_; DISALLOW_COPY_AND_ASSIGN(CustomLayoutFragmentRequest); };
diff --git a/third_party/blink/renderer/core/layout/custom/fragment_result_options.idl b/third_party/blink/renderer/core/layout/custom/fragment_result_options.idl index e33c23b..376cc5b 100644 --- a/third_party/blink/renderer/core/layout/custom/fragment_result_options.idl +++ b/third_party/blink/renderer/core/layout/custom/fragment_result_options.idl
@@ -7,5 +7,5 @@ dictionary FragmentResultOptions { double autoBlockSize = 0; sequence<LayoutFragment> childFragments = []; - // any data = null; + any data = null; };
diff --git a/third_party/blink/renderer/core/layout/custom/layout_child.idl b/third_party/blink/renderer/core/layout/custom/layout_child.idl index a1a223c0..d49c2425 100644 --- a/third_party/blink/renderer/core/layout/custom/layout_child.idl +++ b/third_party/blink/renderer/core/layout/custom/layout_child.idl
@@ -13,6 +13,6 @@ readonly attribute StylePropertyMapReadOnly styleMap; // IntrinsicSizesRequest intrinsicSizes(); - LayoutFragmentRequest layoutNextFragment(CustomLayoutConstraintsOptions options); + [CallWith=ScriptState, RaisesException] LayoutFragmentRequest layoutNextFragment(optional CustomLayoutConstraintsOptions options); };
diff --git a/third_party/blink/renderer/core/layout/custom/layout_constraints.idl b/third_party/blink/renderer/core/layout/custom/layout_constraints.idl index b64fca0f..ad788bab 100644 --- a/third_party/blink/renderer/core/layout/custom/layout_constraints.idl +++ b/third_party/blink/renderer/core/layout/custom/layout_constraints.idl
@@ -19,5 +19,5 @@ // readonly attribute double percentageInlineSize; // readonly attribute double percentageBlockSize; - // readonly attribute any data; + [CallWith=ScriptState] readonly attribute any data; };
diff --git a/third_party/blink/renderer/core/layout/custom/layout_custom.cc b/third_party/blink/renderer/core/layout/custom/layout_custom.cc index cead5ac..57e729e 100644 --- a/third_party/blink/renderer/core/layout/custom/layout_custom.cc +++ b/third_party/blink/renderer/core/layout/custom/layout_custom.cc
@@ -42,6 +42,23 @@ DCHECK(element); } +SerializedScriptValue* LayoutCustom::GetConstraintData() const { + return constraint_data_.get(); +} + +void LayoutCustom::SetConstraintData( + scoped_refptr<SerializedScriptValue> data) { + constraint_data_ = std::move(data); +} + +void LayoutCustom::ClearConstraintData() { + constraint_data_ = nullptr; +} + +SerializedScriptValue* LayoutCustom::GetFragmentResultData() const { + return fragment_result_data_.get(); +} + void LayoutCustom::AddChild(LayoutObject* new_child, LayoutObject* before_child) { // Only use the block-flow AddChild logic when we are unloaded, i.e. we @@ -110,14 +127,20 @@ // fall back onto regular block layout. bool success = PerformLayout(relayout_children, &layout_scope); - if (!success) + if (!success) { LayoutBlockFlow::UpdateBlockLayout(relayout_children); + DCHECK_EQ(fragment_result_data_, nullptr); + } } bool LayoutCustom::PerformLayout(bool relayout_children, SubtreeLayoutScope* layout_scope) { LayoutCustomPhaseScope phase_scope(*this); + // We clear the fragment result data, so that if we fallback to block layout, + // we don't pass invalid data up the tree to a custom layout parent. + fragment_result_data_ = nullptr; + // We need to fallback to block layout if we don't have a registered // definition yet. if (state_ == kUnloaded) @@ -148,7 +171,9 @@ } FragmentResultOptions fragment_result_options; - if (!instance_->Layout(*this, &fragment_result_options)) + scoped_refptr<SerializedScriptValue> fragment_result_data; + if (!instance_->Layout(*this, &fragment_result_options, + &fragment_result_data)) return false; size_t index = 0; @@ -215,7 +240,7 @@ : LayoutPoint(block_offset, logical_left)); } - // Currently we only support + // Currently we only support exactly one LayoutFragment per LayoutChild. if (index != child_fragments.size()) { GetDocument().AddConsoleMessage( ConsoleMessage::Create(kJSMessageSource, kInfoMessageLevel, @@ -225,6 +250,10 @@ return false; } + // We aren't able to fallback to block layout now, it's safe to set the + // result data. + fragment_result_data_ = std::move(fragment_result_data); + SetLogicalHeight( LayoutUnit::FromDoubleRound(fragment_result_options.autoBlockSize()));
diff --git a/third_party/blink/renderer/core/layout/custom/layout_custom.h b/third_party/blink/renderer/core/layout/custom/layout_custom.h index 16ac049..423368da 100644 --- a/third_party/blink/renderer/core/layout/custom/layout_custom.h +++ b/third_party/blink/renderer/core/layout/custom/layout_custom.h
@@ -36,6 +36,17 @@ LayoutCustomState State() const { return state_; } LayoutCustomPhase Phase() const { return phase_; } + // "ConstraintData" is the additional input data object passed from parent to + // child layouts. It must be set before a custom layout pass, then + // immediately cleared. + SerializedScriptValue* GetConstraintData() const; + void SetConstraintData(scoped_refptr<SerializedScriptValue> data); + void ClearConstraintData(); + + // "FragmentResultData" is the additional output data object passed from the + // child to parent. + SerializedScriptValue* GetFragmentResultData() const; + bool CreatesNewFormattingContext() const override { return true; } void AddChild(LayoutObject* new_child, LayoutObject* before_child) override; @@ -56,6 +67,9 @@ LayoutCustomState state_; LayoutCustomPhase phase_; Persistent<CSSLayoutDefinition::Instance> instance_; + + scoped_refptr<SerializedScriptValue> constraint_data_; + scoped_refptr<SerializedScriptValue> fragment_result_data_; }; DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutCustom, IsLayoutCustom());
diff --git a/third_party/blink/renderer/core/layout/custom/layout_fragment.idl b/third_party/blink/renderer/core/layout/custom/layout_fragment.idl index 997f257..e142bcd 100644 --- a/third_party/blink/renderer/core/layout/custom/layout_fragment.idl +++ b/third_party/blink/renderer/core/layout/custom/layout_fragment.idl
@@ -16,5 +16,5 @@ attribute double inlineOffset; attribute double blockOffset; - // readonly attribute any data; + [CallWith=ScriptState] readonly attribute any data; };
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.cc b/third_party/blink/renderer/core/paint/paint_layer_painter.cc index c7b28522..362435d4 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.cc
@@ -349,14 +349,17 @@ if (paint_layer_.GetLayoutObject().GetFrameView()->ShouldThrottleRendering()) return result; - // TODO(crbug.com/846227): The layer object doesn't have local border box - // properties may mean that 1. the object missed paint property update, or - // 2. we are painting before PrePaintClean. - CHECK_GE(paint_layer_.GetLayoutObject().GetDocument().Lifecycle().GetState(), - DocumentLifecycle::LifecycleState::kPrePaintClean); - CHECK(paint_layer_.GetLayoutObject() - .FirstFragment() - .HasLocalBorderBoxProperties()); + // A paint layer should always have LocalBorderBoxProperties when it's ready + // for paint. + if (!paint_layer_.GetLayoutObject() + .FirstFragment() + .HasLocalBorderBoxProperties()) { + // TODO(crbug.com/848056): This can happen e.g. when we paint a filter + // referencing a SVG foreign object through feImage, especially when there + // is circular references. Should find a better solution. + paint_layer_.SetPreviousPaintDirtyRect(LayoutRect()); + return kMayBeClippedByPaintDirtyRect; + } DCHECK(paint_layer_.IsSelfPaintingLayer() || paint_layer_.HasSelfPaintingLayerDescendant());
diff --git a/third_party/blink/renderer/core/policy/policy.cc b/third_party/blink/renderer/core/policy/policy.cc index b00ce70..2cc25f0 100644 --- a/third_party/blink/renderer/core/policy/policy.cc +++ b/third_party/blink/renderer/core/policy/policy.cc
@@ -25,7 +25,7 @@ bool Policy::allowsFeature(const String& feature, const String& url) const { scoped_refptr<const SecurityOrigin> origin = SecurityOrigin::CreateFromString(url); - if (!origin || origin->IsUnique()) { + if (!origin || origin->IsOpaque()) { GetDocument()->AddConsoleMessage(ConsoleMessage::Create( kOtherMessageSource, kWarningMessageLevel, "Invalid origin url for feature '" + feature + "': " + url + "."));
diff --git a/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc b/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc index 18d8a84..c17755b 100644 --- a/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc +++ b/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc
@@ -83,8 +83,8 @@ TEST_F(MainThreadWorkletTest, SecurityOrigin) { // The SecurityOrigin for a worklet should be a unique opaque origin, while // the owner Document's SecurityOrigin shouldn't. - EXPECT_TRUE(global_scope_->GetSecurityOrigin()->IsUnique()); - EXPECT_FALSE(global_scope_->DocumentSecurityOrigin()->IsUnique()); + EXPECT_TRUE(global_scope_->GetSecurityOrigin()->IsOpaque()); + EXPECT_FALSE(global_scope_->DocumentSecurityOrigin()->IsOpaque()); } TEST_F(MainThreadWorkletTest, ContentSecurityPolicy) {
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc index 4a556bb..1fa8cde 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc +++ b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc
@@ -86,8 +86,8 @@ WorkletGlobalScope* global_scope = ToWorkletGlobalScope(GlobalScope()); // The SecurityOrigin for a worklet should be a unique opaque origin, while // the owner Document's SecurityOrigin shouldn't. - EXPECT_TRUE(global_scope->GetSecurityOrigin()->IsUnique()); - EXPECT_FALSE(global_scope->DocumentSecurityOrigin()->IsUnique()); + EXPECT_TRUE(global_scope->GetSecurityOrigin()->IsOpaque()); + EXPECT_FALSE(global_scope->DocumentSecurityOrigin()->IsOpaque()); PostCrossThreadTask( *GetParentExecutionContextTaskRunners()->Get(TaskType::kInternalTest), FROM_HERE, CrossThreadBind(&test::ExitRunLoop));
diff --git a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc index 1c2f368..0e9c4d6f 100644 --- a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc +++ b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc
@@ -38,7 +38,7 @@ BroadcastChannel* BroadcastChannel::Create(ExecutionContext* execution_context, const String& name, ExceptionState& exception_state) { - if (execution_context->GetSecurityOrigin()->IsUnique()) { + if (execution_context->GetSecurityOrigin()->IsOpaque()) { // TODO(mek): Decide what to do here depending on // https://github.com/whatwg/html/issues/1319 exception_state.ThrowDOMException(
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc index d137963..a9cfe6a 100644 --- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -123,7 +123,7 @@ const SecurityOrigin* origin = resolver->GetFrame()->GetSecurityContext()->GetSecurityOrigin(); - if (origin->IsUnique()) { + if (origin->IsOpaque()) { String error_message = "The origin ' " + origin->ToRawString() + "' is an opaque origin and hence not allowed to access " +
diff --git a/third_party/blink/renderer/modules/quota/deprecated_storage_quota.cc b/third_party/blink/renderer/modules/quota/deprecated_storage_quota.cc index 8ad4565..de22d04 100644 --- a/third_party/blink/renderer/modules/quota/deprecated_storage_quota.cc +++ b/third_party/blink/renderer/modules/quota/deprecated_storage_quota.cc
@@ -143,7 +143,7 @@ const SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); - if (security_origin->IsUnique()) { + if (security_origin->IsOpaque()) { EnqueueStorageErrorCallback(script_state, error_callback, kNotSupportedError); return; @@ -186,7 +186,7 @@ Document* document = ToDocument(execution_context); const SecurityOrigin* security_origin = document->GetSecurityOrigin(); - if (security_origin->IsUnique()) { + if (security_origin->IsOpaque()) { // Unique origins cannot store persistent state. std::move(callback).Run(blink::mojom::QuotaStatusCode::kErrorAbort, 0, 0); return;
diff --git a/third_party/blink/renderer/modules/quota/storage_manager.cc b/third_party/blink/renderer/modules/quota/storage_manager.cc index 67d8779a..2bed43c0 100644 --- a/third_party/blink/renderer/modules/quota/storage_manager.cc +++ b/third_party/blink/renderer/modules/quota/storage_manager.cc
@@ -59,7 +59,7 @@ DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL const SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); - if (security_origin->IsUnique()) { + if (security_origin->IsOpaque()) { resolver->Reject(V8ThrowException::CreateTypeError( script_state->GetIsolate(), kUniqueOriginErrorMessage)); return promise; @@ -84,7 +84,7 @@ DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL const SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); - if (security_origin->IsUnique()) { + if (security_origin->IsOpaque()) { resolver->Reject(V8ThrowException::CreateTypeError( script_state->GetIsolate(), kUniqueOriginErrorMessage)); return promise; @@ -105,7 +105,7 @@ DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL const SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); - if (security_origin->IsUnique()) { + if (security_origin->IsOpaque()) { resolver->Reject(V8ThrowException::CreateTypeError( script_state->GetIsolate(), kUniqueOriginErrorMessage)); return promise;
diff --git a/third_party/blink/renderer/modules/serviceworkers/service_worker_global_scope_proxy.cc b/third_party/blink/renderer/modules/serviceworkers/service_worker_global_scope_proxy.cc index 69ab797..8769a41 100644 --- a/third_party/blink/renderer/modules/serviceworkers/service_worker_global_scope_proxy.cc +++ b/third_party/blink/renderer/modules/serviceworkers/service_worker_global_scope_proxy.cc
@@ -287,7 +287,7 @@ MessagePortArray* ports = MessagePort::EntanglePorts(*worker_global_scope_, std::move(msg.ports)); String origin; - if (!source_origin.IsUnique()) + if (!source_origin.IsOpaque()) origin = source_origin.ToString(); ServiceWorkerClient* source = nullptr; if (client.client_type == mojom::ServiceWorkerClientType::kWindow) @@ -312,7 +312,7 @@ MessagePortArray* ports = MessagePort::EntanglePorts(*worker_global_scope_, std::move(msg.ports)); String origin; - if (!source_origin.IsUnique()) + if (!source_origin.IsOpaque()) origin = source_origin.ToString(); ServiceWorker* source = ServiceWorker::From(worker_global_scope_->GetExecutionContext(),
diff --git a/third_party/blink/renderer/platform/exported/web_security_origin.cc b/third_party/blink/renderer/platform/exported/web_security_origin.cc index 003b6a1..c4d47789 100644 --- a/third_party/blink/renderer/platform/exported/web_security_origin.cc +++ b/third_party/blink/renderer/platform/exported/web_security_origin.cc
@@ -77,9 +77,9 @@ return private_->EffectivePort(); } -bool WebSecurityOrigin::IsUnique() const { +bool WebSecurityOrigin::IsOpaque() const { DCHECK(private_); - return private_->IsUnique(); + return private_->IsOpaque(); } bool WebSecurityOrigin::CanAccess(const WebSecurityOrigin& other) const {
diff --git a/third_party/blink/renderer/platform/feature_policy/feature_policy.cc b/third_party/blink/renderer/platform/feature_policy/feature_policy.cc index b7c27b6a..52c6b01 100644 --- a/third_party/blink/renderer/platform/feature_policy/feature_policy.cc +++ b/third_party/blink/renderer/platform/feature_policy/feature_policy.cc
@@ -86,7 +86,7 @@ if (tokens.size() == 1) { if (!src_origin) { origins.push_back(self_origin->ToUrlOrigin()); - } else if (!src_origin->IsUnique()) { + } else if (!src_origin->IsOpaque()) { origins.push_back(src_origin->ToUrlOrigin()); } else { whitelist.matches_opaque_src = true; @@ -109,7 +109,7 @@ // opaque origin of the frame, which is not known yet. In this case, // the |matches_opaque_src| flag on the declaration is set, rather // than adding an origin to the allowlist. - if (src_origin->IsUnique()) { + if (src_origin->IsOpaque()) { whitelist.matches_opaque_src = true; } else { origins.push_back(src_origin->ToUrlOrigin());
diff --git a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc index 8f6c3f8..e0e5c1e 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc
@@ -75,7 +75,7 @@ void ImageLayerBridge::Dispose() { if (layer_) { GraphicsLayer::UnregisterContentsLayer(layer_.get()); - layer_->ClearTexture(); + layer_->ClearClient(); layer_ = nullptr; } image_ = nullptr;
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc index 8c14015..6d2fe1f 100644 --- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc
@@ -181,8 +181,10 @@ } OffscreenCanvasResourceProvider::FrameResource::~FrameResource() { - provider->frame_dispatcher_->DidDeleteSharedBitmap( - SharedBitmapIdToGpuMailboxPtr(shared_bitmap_id)); + if (!shared_bitmap_id.IsZero()) { + provider->frame_dispatcher_->DidDeleteSharedBitmap( + SharedBitmapIdToGpuMailboxPtr(shared_bitmap_id)); + } } } // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/heap_test.cc b/third_party/blink/renderer/platform/heap/heap_test.cc index 48210b1..c5372acf 100644 --- a/third_party/blink/renderer/platform/heap/heap_test.cc +++ b/third_party/blink/renderer/platform/heap/heap_test.cc
@@ -367,13 +367,13 @@ atomic_pause_scope_(ThreadState::Current()), persistent_lock_(ProcessHeap::CrossThreadPersistentMutex()) { ThreadState::Current()->Heap().stats_collector()->Start(BlinkGC::kTesting); - ThreadState::Current()->MarkPhasePrologue(state, BlinkGC::kAtomicMarking, - BlinkGC::kPreciseGC); + ThreadState::Current()->AtomicPausePrologue(state, BlinkGC::kAtomicMarking, + BlinkGC::kPreciseGC); } ~TestGCMarkingScope() { ThreadState::Current()->MarkPhaseEpilogue(BlinkGC::kAtomicMarking); - ThreadState::Current()->PreSweep(BlinkGC::kAtomicMarking, - BlinkGC::kEagerSweeping); + ThreadState::Current()->AtomicPauseEpilogue(BlinkGC::kAtomicMarking, + BlinkGC::kEagerSweeping); } private:
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc index 7cec65b3..5bf94ff7 100644 --- a/third_party/blink/renderer/platform/heap/thread_state.cc +++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -892,8 +892,8 @@ Heap().stats_collector()->Stop(); } -void ThreadState::PreSweep(BlinkGC::MarkingType marking_type, - BlinkGC::SweepingType sweeping_type) { +void ThreadState::AtomicPauseEpilogue(BlinkGC::MarkingType marking_type, + BlinkGC::SweepingType sweeping_type) { DCHECK(InAtomicMarkingPause()); DCHECK(CheckThread()); Heap().PrepareForSweep(); @@ -1352,31 +1352,15 @@ } void ThreadState::IncrementalMarkingFinalize() { - { - ThreadHeapStatsCollector::Scope stats_scope( - Heap().stats_collector(), - ThreadHeapStatsCollector::kIncrementalMarkingFinalize); - VLOG(2) << "[state:" << this << "] " - << "IncrementalMarking: Finalize"; - SetGCState(kNoGCScheduled); - DisableIncrementalMarkingBarrier(); - AtomicPauseScope atomic_pause_scope(this); - DCHECK(IsMarkingInProgress()); - { - ThreadHeapStatsCollector::Scope stats_scope( - Heap().stats_collector(), - ThreadHeapStatsCollector::kIncrementalMarkingFinalizeMarking); - MarkPhaseVisitRoots(); - bool complete = - MarkPhaseAdvanceMarking(std::numeric_limits<double>::infinity()); - CHECK(complete); - MarkPhaseEpilogue(current_gc_data_.marking_type); - } - PreSweep(current_gc_data_.marking_type, BlinkGC::kLazySweeping); - DCHECK(IsSweepingInProgress()); - DCHECK_EQ(GcState(), kNoGCScheduled); - ScheduleIdleLazySweep(); - } + ThreadHeapStatsCollector::Scope stats_scope( + Heap().stats_collector(), + ThreadHeapStatsCollector::kIncrementalMarkingFinalize); + VLOG(2) << "[state:" << this << "] " + << "IncrementalMarking: Finalize"; + // Call into the regular bottleneck instead of the internal version to get + // UMA accounting and allow follow up GCs if necessary. + CollectGarbage(BlinkGC::kNoHeapPointersOnStack, BlinkGC::kIncrementalMarking, + BlinkGC::kLazySweeping, current_gc_data_.reason); } void ThreadState::CollectGarbage(BlinkGC::StackState stack_state, @@ -1398,10 +1382,10 @@ const bool was_incremental_marking = IsMarkingInProgress(); if (was_incremental_marking) { - // Set stack state in case we are starting a Conservative GC while - // incremental marking is in progress. - current_gc_data_.stack_state = stack_state; - IncrementalMarkingFinalize(); + SetGCState(kNoGCScheduled); + DisableIncrementalMarkingBarrier(); + DCHECK(IsMarkingInProgress()); + RunAtomicPause(stack_state, marking_type, sweeping_type, reason); } // We don't want floating garbage for the specific garbage collection types @@ -1447,12 +1431,12 @@ ThreadHeapStatsCollector::kAtomicPhaseMarking, "lazySweeping", sweeping_type == BlinkGC::kLazySweeping ? "yes" : "no", "gcReason", GcReasonString(reason)); - MarkPhasePrologue(stack_state, marking_type, reason); + AtomicPausePrologue(stack_state, marking_type, reason); MarkPhaseVisitRoots(); CHECK(MarkPhaseAdvanceMarking(std::numeric_limits<double>::infinity())); MarkPhaseEpilogue(marking_type); } - PreSweep(marking_type, sweeping_type); + AtomicPauseEpilogue(marking_type, sweeping_type); } if (marking_type == BlinkGC::kTakeSnapshot) { FinishSnapshot(); @@ -1505,6 +1489,22 @@ if (should_compact) Heap().Compaction()->Initialize(this); + if (marking_type != BlinkGC::kTakeSnapshot) + Heap().ResetHeapCounters(); +} + +void ThreadState::AtomicPausePrologue(BlinkGC::StackState stack_state, + BlinkGC::MarkingType marking_type, + BlinkGC::GCReason reason) { + if (IsMarkingInProgress()) { + // Incremental marking is already in progress. Only update the state + // that is necessary to update. + current_gc_data_.reason = reason; + current_gc_data_.stack_state = stack_state; + } else { + MarkPhasePrologue(stack_state, marking_type, reason); + } + if (marking_type == BlinkGC::kTakeSnapshot) BlinkGCMemoryDumpProvider::Instance()->ClearProcessDumpForCurrentGC(); @@ -1514,9 +1514,6 @@ DCHECK(InAtomicMarkingPause()); Heap().MakeConsistentForGC(); Heap().ClearArenaAges(); - - if (marking_type != BlinkGC::kTakeSnapshot) - Heap().ResetHeapCounters(); } void ThreadState::MarkPhaseVisitRoots() {
diff --git a/third_party/blink/renderer/platform/heap/thread_state.h b/third_party/blink/renderer/platform/heap/thread_state.h index cbe918c4..dc958e2 100644 --- a/third_party/blink/renderer/platform/heap/thread_state.h +++ b/third_party/blink/renderer/platform/heap/thread_state.h
@@ -301,7 +301,6 @@ void DisableIncrementalMarkingBarrier(); void CompleteSweep(); - void PreSweep(BlinkGC::MarkingType, BlinkGC::SweepingType); void FinishSnapshot(); void PostSweep(); @@ -588,12 +587,17 @@ ThreadState(); ~ThreadState(); + // The version is needed to be able to start incremental marking. void MarkPhasePrologue(BlinkGC::StackState, BlinkGC::MarkingType, BlinkGC::GCReason); + void AtomicPausePrologue(BlinkGC::StackState, + BlinkGC::MarkingType, + BlinkGC::GCReason); + void AtomicPauseEpilogue(BlinkGC::MarkingType, BlinkGC::SweepingType); + void MarkPhaseEpilogue(BlinkGC::MarkingType); void MarkPhaseVisitRoots(); bool MarkPhaseAdvanceMarking(double deadline_seconds); - void MarkPhaseEpilogue(BlinkGC::MarkingType); void VerifyMarking(BlinkGC::MarkingType); void RunAtomicPause(BlinkGC::StackState,
diff --git a/third_party/blink/renderer/platform/layout_unit.h b/third_party/blink/renderer/platform/layout_unit.h index 7291a446..f3016922 100644 --- a/third_party/blink/renderer/platform/layout_unit.h +++ b/third_party/blink/renderer/platform/layout_unit.h
@@ -583,17 +583,18 @@ return return_val; } -// For returning the remainder after a division with integer results. +// Returns the remainder after a division with integer results. +// This calculates the modulo so that: +// a = static_cast<int>(a / b) * b + IntMod(a, b). inline LayoutUnit IntMod(const LayoutUnit& a, const LayoutUnit& b) { - // This calculates the modulo so that: a = static_cast<int>(a / b) * b + - // intMod(a, b). LayoutUnit return_val; return_val.SetRawValue(a.RawValue() % b.RawValue()); return return_val; } -inline LayoutUnit operator%(const LayoutUnit& a, const LayoutUnit& b) { - // This calculates the modulo so that: a = (a / b) * b + a % b. +// Returns the remainder after a division with LayoutUnit results. +// This calculates the modulo so that: a = (a / b) * b + LayoutMod(a, b). +inline LayoutUnit LayoutMod(const LayoutUnit& a, const LayoutUnit& b) { LayoutUnit return_val; long long raw_val = (static_cast<long long>(kFixedPointDenominator) * a.RawValue()) % @@ -602,12 +603,8 @@ return return_val; } -inline LayoutUnit operator%(const LayoutUnit& a, int b) { - return a % LayoutUnit(b); -} - -inline LayoutUnit operator%(int a, const LayoutUnit& b) { - return LayoutUnit(a) % b; +inline LayoutUnit LayoutMod(const LayoutUnit& a, int b) { + return LayoutMod(a, LayoutUnit(b)); } inline LayoutUnit& operator+=(LayoutUnit& a, const LayoutUnit& b) { @@ -697,15 +694,6 @@ return value.Abs(); } -inline LayoutUnit LayoutMod(const LayoutUnit& numerator, - const LayoutUnit& denominator) { - return numerator % denominator; -} - -inline LayoutUnit LayoutMod(const LayoutUnit& numerator, int denominator) { - return numerator % LayoutUnit(denominator); -} - inline bool IsIntegerValue(const LayoutUnit value) { return value.ToInt() == value; }
diff --git a/third_party/blink/renderer/platform/layout_unit_test.cc b/third_party/blink/renderer/platform/layout_unit_test.cc index 9545139..5eadbe8e 100644 --- a/third_party/blink/renderer/platform/layout_unit_test.cc +++ b/third_party/blink/renderer/platform/layout_unit_test.cc
@@ -295,4 +295,29 @@ EXPECT_EQ(LayoutUnit::Max(), LayoutUnit(LayoutUnit::Max())++); } +TEST(LayoutUnitTest, IntMod) { + EXPECT_EQ(LayoutUnit(5), IntMod(LayoutUnit(55), LayoutUnit(10))); + EXPECT_EQ(LayoutUnit(5), IntMod(LayoutUnit(55), LayoutUnit(-10))); + EXPECT_EQ(LayoutUnit(-5), IntMod(LayoutUnit(-55), LayoutUnit(10))); + EXPECT_EQ(LayoutUnit(-5), IntMod(LayoutUnit(-55), LayoutUnit(-10))); + EXPECT_EQ(LayoutUnit(1.5), IntMod(LayoutUnit(7.5), LayoutUnit(3))); + EXPECT_EQ(LayoutUnit(1.25), IntMod(LayoutUnit(7.5), LayoutUnit(3.125))); + EXPECT_EQ(LayoutUnit(), IntMod(LayoutUnit(7.5), LayoutUnit(2.5))); + EXPECT_EQ(LayoutUnit(), IntMod(LayoutUnit(), LayoutUnit(123))); +} + +TEST(LayoutUnitTest, LayoutMod) { +#define CHECK_LAYOUT_MOD(a, b) EXPECT_EQ(a, (a / b) * b + LayoutMod(a, b)) + CHECK_LAYOUT_MOD(LayoutUnit(55), LayoutUnit(10)); + CHECK_LAYOUT_MOD(LayoutUnit(1234), LayoutUnit(789)); + CHECK_LAYOUT_MOD(LayoutUnit::Max(), LayoutUnit::Max()); + CHECK_LAYOUT_MOD(LayoutUnit::Max(), LayoutUnit::Min()); + CHECK_LAYOUT_MOD(LayoutUnit::Min(), LayoutUnit::Max()); + CHECK_LAYOUT_MOD(LayoutUnit::Min(), LayoutUnit::Min()); + + EXPECT_EQ(LayoutUnit(), LayoutMod(LayoutUnit(123), 2)); + EXPECT_EQ(LayoutUnit(LayoutUnit::Epsilon()), + LayoutMod(LayoutUnit(123 + LayoutUnit::Epsilon()), 2)); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc index ae7ae0a..d5874be 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -711,7 +711,7 @@ return blocked_reason; const scoped_refptr<const SecurityOrigin>& origin = options.security_origin; - if (origin && !origin->IsUnique() && + if (origin && !origin->IsOpaque() && !origin->IsSameSchemeHostPort(Context().GetSecurityOrigin())) { // |options.security_origin| may differ from the document's origin if // this is a fetch initiated by an isolated world execution context, with a
diff --git a/third_party/blink/renderer/platform/mojo/kurl_security_origin_test.cc b/third_party/blink/renderer/platform/mojo/kurl_security_origin_test.cc index e776e70..926078de 100644 --- a/third_party/blink/renderer/platform/mojo/kurl_security_origin_test.cc +++ b/third_party/blink/renderer/platform/mojo/kurl_security_origin_test.cc
@@ -79,11 +79,11 @@ scoped_refptr<const SecurityOrigin> output; EXPECT_TRUE(proxy->BounceOrigin(non_unique, &output)); EXPECT_TRUE(non_unique->IsSameSchemeHostPort(output.get())); - EXPECT_FALSE(output->IsUnique()); + EXPECT_FALSE(output->IsOpaque()); scoped_refptr<const SecurityOrigin> unique = SecurityOrigin::CreateUnique(); EXPECT_TRUE(proxy->BounceOrigin(unique, &output)); - EXPECT_TRUE(output->IsUnique()); + EXPECT_TRUE(output->IsOpaque()); } } // namespace url
diff --git a/third_party/blink/renderer/platform/mojo/security_origin_struct_traits.h b/third_party/blink/renderer/platform/mojo/security_origin_struct_traits.h index 5aeaa5f..d674695 100644 --- a/third_party/blink/renderer/platform/mojo/security_origin_struct_traits.h +++ b/third_party/blink/renderer/platform/mojo/security_origin_struct_traits.h
@@ -28,7 +28,7 @@ } static bool unique( const scoped_refptr<const ::blink::SecurityOrigin>& origin) { - return origin->IsUnique(); + return origin->IsOpaque(); } static bool Read(url::mojom::blink::Origin::DataView data, scoped_refptr<const ::blink::SecurityOrigin>* out) { @@ -45,7 +45,7 @@ // If a unique origin was created, but the unique flag wasn't set, then // the values provided to 'create' were invalid. - if (!data.unique() && (*out)->IsUnique()) + if (!data.unique() && (*out)->IsOpaque()) return false; return true;
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn index 66c5a9f..99a2e0d 100644 --- a/third_party/blink/renderer/platform/scheduler/BUILD.gn +++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -115,7 +115,6 @@ "main_thread/web_render_widget_scheduling_state.cc", "public/frame_or_worker_scheduler.h", "public/frame_scheduler.h", - "public/non_main_thread_scheduler.h", "public/page_scheduler.h", "public/thread_scheduler.h", "renderer/frame_status.cc", @@ -137,9 +136,10 @@ "utility/webthread_impl_for_utility_thread.h", "worker/compositor_thread_scheduler.cc", "worker/compositor_thread_scheduler.h", - "worker/non_main_thread_scheduler.cc", "worker/non_main_thread_scheduler_helper.cc", "worker/non_main_thread_scheduler_helper.h", + "worker/non_main_thread_scheduler_impl.cc", + "worker/non_main_thread_scheduler_impl.h", "worker/worker_thread_scheduler.cc", "worker/worker_thread_scheduler.h", ]
diff --git a/third_party/blink/renderer/platform/scheduler/child/webthread_base.cc b/third_party/blink/renderer/platform/scheduler/child/webthread_base.cc index 8b0a45fa2..ee3cae3 100644 --- a/third_party/blink/renderer/platform/scheduler/child/webthread_base.cc +++ b/third_party/blink/renderer/platform/scheduler/child/webthread_base.cc
@@ -117,7 +117,7 @@ private: // WebThreadImplForWorkerScheduler: - std::unique_ptr<blink::scheduler::NonMainThreadScheduler> + std::unique_ptr<blink::scheduler::NonMainThreadSchedulerImpl> CreateNonMainThreadScheduler() override { return std::make_unique<CompositorThreadScheduler>( GetThread(),
diff --git a/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc b/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc index fc4f97b0..76dcba8a 100644 --- a/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc
@@ -85,10 +85,10 @@ completion->Signal(); } -std::unique_ptr<NonMainThreadScheduler> +std::unique_ptr<NonMainThreadSchedulerImpl> WebThreadImplForWorkerScheduler::CreateNonMainThreadScheduler() { - return NonMainThreadScheduler::Create(thread_type_, - worker_scheduler_proxy_.get()); + return NonMainThreadSchedulerImpl::Create(thread_type_, + worker_scheduler_proxy_.get()); } void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() {
diff --git a/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.h b/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.h index d205e5c..cd586e8 100644 --- a/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.h
@@ -28,7 +28,7 @@ namespace scheduler { class SingleThreadIdleTaskRunner; -class NonMainThreadScheduler; +class NonMainThreadSchedulerImpl; class WorkerSchedulerProxy; class PLATFORM_EXPORT WebThreadImplForWorkerScheduler @@ -51,7 +51,7 @@ // base::MessageLoopCurrent::DestructionObserver implementation. void WillDestroyCurrentMessageLoop() override; - scheduler::NonMainThreadScheduler* GetNonMainThreadScheduler() { + scheduler::NonMainThreadSchedulerImpl* GetNonMainThreadScheduler() { return non_main_thread_scheduler_.get(); } @@ -60,7 +60,7 @@ } protected: - virtual std::unique_ptr<NonMainThreadScheduler> + virtual std::unique_ptr<NonMainThreadSchedulerImpl> CreateNonMainThreadScheduler(); base::Thread* GetThread() const { return thread_.get(); } @@ -80,7 +80,8 @@ std::unique_ptr<base::Thread> thread_; const WebThreadType thread_type_; std::unique_ptr<scheduler::WorkerSchedulerProxy> worker_scheduler_proxy_; - std::unique_ptr<scheduler::NonMainThreadScheduler> non_main_thread_scheduler_; + std::unique_ptr<scheduler::NonMainThreadSchedulerImpl> + non_main_thread_scheduler_; scoped_refptr<base::sequence_manager::TaskQueue> task_queue_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; scoped_refptr<scheduler::SingleThreadIdleTaskRunner> idle_task_runner_;
diff --git a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc index f084971d4..87df4001 100644 --- a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc
@@ -76,7 +76,7 @@ completion->Signal(); } - std::unique_ptr<NonMainThreadScheduler> CreateNonMainThreadScheduler() + std::unique_ptr<NonMainThreadSchedulerImpl> CreateNonMainThreadScheduler() override { auto scheduler = std::make_unique<WorkerThreadSchedulerForTest>( base::sequence_manager::TaskQueueManager::TakeOverCurrentThread(),
diff --git a/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.cc b/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.cc index 67098630..85a4a9ed 100644 --- a/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.cc +++ b/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.cc
@@ -5,7 +5,7 @@ #include "third_party/blink/renderer/platform/scheduler/child/worker_task_queue.h" #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h" -#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h" namespace blink { namespace scheduler { @@ -15,7 +15,7 @@ WorkerTaskQueue::WorkerTaskQueue( std::unique_ptr<base::sequence_manager::internal::TaskQueueImpl> impl, const TaskQueue::Spec& spec, - NonMainThreadScheduler* non_main_thread_scheduler) + NonMainThreadSchedulerImpl* non_main_thread_scheduler) : TaskQueue(std::move(impl), spec), non_main_thread_scheduler_(non_main_thread_scheduler) { if (GetTaskQueueImpl()) {
diff --git a/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.h b/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.h index 194cf95..8d1b8b1 100644 --- a/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.h +++ b/third_party/blink/renderer/platform/scheduler/child/worker_task_queue.h
@@ -10,7 +10,7 @@ namespace blink { namespace scheduler { -class NonMainThreadScheduler; +class NonMainThreadSchedulerImpl; class PLATFORM_EXPORT WorkerTaskQueue : public base::sequence_manager::TaskQueue { @@ -18,7 +18,7 @@ WorkerTaskQueue( std::unique_ptr<base::sequence_manager::internal::TaskQueueImpl> impl, const Spec& spec, - NonMainThreadScheduler* non_main_thread_scheduler); + NonMainThreadSchedulerImpl* non_main_thread_scheduler); ~WorkerTaskQueue() override; void OnTaskCompleted(const base::sequence_manager::TaskQueue::Task& task, @@ -28,7 +28,7 @@ private: // Not owned. - NonMainThreadScheduler* non_main_thread_scheduler_; + NonMainThreadSchedulerImpl* non_main_thread_scheduler_; }; } // namespace scheduler
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc index 4cfa325..3779e8bb 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -293,8 +293,8 @@ case TaskType::kInternalMedia: case TaskType::kInternalMediaRealTime: case TaskType::kInternalUserInteraction: - return TaskQueueWithTaskType::Create(PausableTaskQueue(), type); case TaskType::kUnthrottled: + return TaskQueueWithTaskType::Create(PausableTaskQueue(), type); case TaskType::kInternalTest: case TaskType::kInternalWebCrypto: case TaskType::kInternalIPC:
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h index c18a1dc..290459c 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -159,7 +159,7 @@ override; base::TimeTicks MonotonicallyIncreasingVirtualTime() override; WebThreadScheduler* GetWebMainThreadSchedulerForTest() override; - NonMainThreadScheduler* AsNonMainThreadScheduler() override { + NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { return nullptr; }
diff --git a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h index f39010a..ad3f656 100644 --- a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h
@@ -16,7 +16,7 @@ namespace blink { namespace scheduler { -class NonMainThreadScheduler; +class NonMainThreadSchedulerImpl; } // This class is used to submit tasks and pass other information from Blink to @@ -108,7 +108,7 @@ return nullptr; } - virtual scheduler::NonMainThreadScheduler* AsNonMainThreadScheduler() = 0; + virtual scheduler::NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() = 0; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc index 196a92d0..6d0f055 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc
@@ -23,7 +23,7 @@ base::Thread* thread, std::unique_ptr<base::sequence_manager::TaskQueueManager> task_queue_manager) - : NonMainThreadScheduler(std::make_unique<NonMainThreadSchedulerHelper>( + : NonMainThreadSchedulerImpl(std::make_unique<NonMainThreadSchedulerHelper>( std::move(task_queue_manager), this, TaskType::kCompositorThreadTaskQueueDefault)),
diff --git a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.h index 2c6c905..fd97ac6e 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.h
@@ -12,8 +12,8 @@ #include "third_party/blink/public/platform/web_thread_type.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/scheduler/child/compositor_metrics_helper.h" -#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/util/task_duration_metric_reporter.h" +#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h" namespace base { class Thread; @@ -23,7 +23,7 @@ namespace scheduler { class PLATFORM_EXPORT CompositorThreadScheduler - : public NonMainThreadScheduler, + : public NonMainThreadSchedulerImpl, public SingleThreadIdleTaskRunner::Delegate { public: CompositorThreadScheduler( @@ -33,7 +33,7 @@ ~CompositorThreadScheduler() override; - // NonMainThreadScheduler: + // NonMainThreadSchedulerImpl: scoped_refptr<WorkerTaskQueue> DefaultTaskQueue() override; void OnTaskCompleted(WorkerTaskQueue* worker_task_queue, const base::sequence_manager::TaskQueue::Task& task,
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler.cc deleted file mode 100644 index 528e3bad..0000000 --- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler.cc +++ /dev/null
@@ -1,125 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h" - -#include <utility> - -#include "third_party/blink/public/platform/platform.h" -#include "third_party/blink/renderer/platform/scheduler/child/task_queue_with_task_type.h" -#include "third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler.h" -#include "third_party/blink/renderer/platform/scheduler/common/throttling/wake_up_budget_pool.h" -#include "third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h" - -namespace blink { -namespace scheduler { - -NonMainThreadScheduler::NonMainThreadScheduler( - std::unique_ptr<NonMainThreadSchedulerHelper> helper) - : helper_(std::move(helper)) {} - -NonMainThreadScheduler::~NonMainThreadScheduler() { - DCHECK(worker_schedulers_.empty()); -} - -// static -std::unique_ptr<NonMainThreadScheduler> NonMainThreadScheduler::Create( - WebThreadType thread_type, - WorkerSchedulerProxy* proxy) { - return std::make_unique<WorkerThreadScheduler>( - thread_type, - base::sequence_manager::TaskQueueManager::TakeOverCurrentThread(), proxy); -} - -// static -NonMainThreadScheduler* NonMainThreadScheduler::Current() { - DCHECK_NE(Platform::Current()->CurrentThread(), - Platform::Current()->MainThread()); - return ThreadScheduler::Current()->AsNonMainThreadScheduler(); -} - -void NonMainThreadScheduler::Init() { - InitImpl(); -} - -scoped_refptr<WorkerTaskQueue> NonMainThreadScheduler::CreateTaskRunner() { - helper_->CheckOnValidThread(); - return helper_->NewTaskQueue( - base::sequence_manager::TaskQueue::Spec("worker_tq") - .SetShouldMonitorQuiescence(true) - .SetTimeDomain(nullptr)); -} - -void NonMainThreadScheduler::RunIdleTask(blink::WebThread::IdleTask task, - base::TimeTicks deadline) { - std::move(task).Run((deadline - base::TimeTicks()).InSecondsF()); -} - -void NonMainThreadScheduler::PostIdleTask(const base::Location& location, - blink::WebThread::IdleTask task) { - IdleTaskRunner()->PostIdleTask( - location, - base::BindOnce(&NonMainThreadScheduler::RunIdleTask, std::move(task))); -} - -void NonMainThreadScheduler::PostNonNestableIdleTask( - const base::Location& location, - blink::WebThread::IdleTask task) { - IdleTaskRunner()->PostNonNestableIdleTask( - location, - base::BindOnce(&NonMainThreadScheduler::RunIdleTask, std::move(task))); -} - -std::unique_ptr<blink::PageScheduler> -NonMainThreadScheduler::CreatePageScheduler(PageScheduler::Delegate* delegate) { - NOTREACHED(); - return nullptr; -} - -std::unique_ptr<NonMainThreadScheduler::RendererPauseHandle> -NonMainThreadScheduler::PauseScheduler() { - return nullptr; -} - -base::TimeTicks NonMainThreadScheduler::MonotonicallyIncreasingVirtualTime() { - return base::TimeTicks::Now(); -} - -void NonMainThreadScheduler::RegisterWorkerScheduler( - WorkerScheduler* worker_scheduler) { - worker_schedulers_.insert(worker_scheduler); -} - -void NonMainThreadScheduler::UnregisterWorkerScheduler( - WorkerScheduler* worker_scheduler) { - DCHECK(worker_schedulers_.find(worker_scheduler) != worker_schedulers_.end()); - worker_schedulers_.erase(worker_scheduler); -} - -scoped_refptr<base::SingleThreadTaskRunner> -NonMainThreadScheduler::ControlTaskRunner() { - return helper_->ControlWorkerTaskQueue(); -} - -void NonMainThreadScheduler::RegisterTimeDomain( - base::sequence_manager::TimeDomain* time_domain) { - return helper_->RegisterTimeDomain(time_domain); -} - -void NonMainThreadScheduler::UnregisterTimeDomain( - base::sequence_manager::TimeDomain* time_domain) { - return helper_->UnregisterTimeDomain(time_domain); -} - -base::sequence_manager::TimeDomain* -NonMainThreadScheduler::GetActiveTimeDomain() { - return helper_->real_time_domain(); -} - -const base::TickClock* NonMainThreadScheduler::GetTickClock() { - return helper_->GetClock(); -} - -} // namespace scheduler -} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc index dd674be..793d255 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc +++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc
@@ -16,7 +16,7 @@ NonMainThreadSchedulerHelper::NonMainThreadSchedulerHelper( std::unique_ptr<base::sequence_manager::TaskQueueManager> task_queue_manager, - NonMainThreadScheduler* non_main_thread_scheduler, + NonMainThreadSchedulerImpl* non_main_thread_scheduler, TaskType default_task_type) : SchedulerHelper(std::move(task_queue_manager)), non_main_thread_scheduler_(non_main_thread_scheduler),
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h index 8613de25..8441e45 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h +++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h
@@ -13,13 +13,13 @@ namespace blink { namespace scheduler { -class NonMainThreadScheduler; +class NonMainThreadSchedulerImpl; class PLATFORM_EXPORT NonMainThreadSchedulerHelper : public SchedulerHelper { public: NonMainThreadSchedulerHelper( std::unique_ptr<base::sequence_manager::TaskQueueManager> manager, - NonMainThreadScheduler* non_main_thread_scheduler, + NonMainThreadSchedulerImpl* non_main_thread_scheduler, TaskType default_task_type); ~NonMainThreadSchedulerHelper() override; @@ -34,7 +34,7 @@ scoped_refptr<base::sequence_manager::TaskQueue> ControlTaskQueue() override; private: - NonMainThreadScheduler* non_main_thread_scheduler_; // NOT OWNED + NonMainThreadSchedulerImpl* non_main_thread_scheduler_; // NOT OWNED const scoped_refptr<WorkerTaskQueue> default_task_queue_; const scoped_refptr<WorkerTaskQueue> control_task_queue_;
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc new file mode 100644 index 0000000..d5f31d9 --- /dev/null +++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc
@@ -0,0 +1,120 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h" + +#include <utility> + +#include "third_party/blink/public/platform/platform.h" +#include "third_party/blink/renderer/platform/scheduler/child/task_queue_with_task_type.h" +#include "third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler.h" +#include "third_party/blink/renderer/platform/scheduler/common/throttling/wake_up_budget_pool.h" +#include "third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h" + +namespace blink { +namespace scheduler { + +NonMainThreadSchedulerImpl::NonMainThreadSchedulerImpl( + std::unique_ptr<NonMainThreadSchedulerHelper> helper) + : helper_(std::move(helper)) {} + +NonMainThreadSchedulerImpl::~NonMainThreadSchedulerImpl() { + DCHECK(worker_schedulers_.empty()); +} + +// static +std::unique_ptr<NonMainThreadSchedulerImpl> NonMainThreadSchedulerImpl::Create( + WebThreadType thread_type, + WorkerSchedulerProxy* proxy) { + return std::make_unique<WorkerThreadScheduler>( + thread_type, + base::sequence_manager::TaskQueueManager::TakeOverCurrentThread(), proxy); +} + +void NonMainThreadSchedulerImpl::Init() { + InitImpl(); +} + +scoped_refptr<WorkerTaskQueue> NonMainThreadSchedulerImpl::CreateTaskRunner() { + helper_->CheckOnValidThread(); + return helper_->NewTaskQueue( + base::sequence_manager::TaskQueue::Spec("worker_tq") + .SetShouldMonitorQuiescence(true) + .SetTimeDomain(nullptr)); +} + +void NonMainThreadSchedulerImpl::RunIdleTask(blink::WebThread::IdleTask task, + base::TimeTicks deadline) { + std::move(task).Run((deadline - base::TimeTicks()).InSecondsF()); +} + +void NonMainThreadSchedulerImpl::PostIdleTask(const base::Location& location, + blink::WebThread::IdleTask task) { + IdleTaskRunner()->PostIdleTask( + location, base::BindOnce(&NonMainThreadSchedulerImpl::RunIdleTask, + std::move(task))); +} + +void NonMainThreadSchedulerImpl::PostNonNestableIdleTask( + const base::Location& location, + blink::WebThread::IdleTask task) { + IdleTaskRunner()->PostNonNestableIdleTask( + location, base::BindOnce(&NonMainThreadSchedulerImpl::RunIdleTask, + std::move(task))); +} + +std::unique_ptr<blink::PageScheduler> +NonMainThreadSchedulerImpl::CreatePageScheduler( + PageScheduler::Delegate* delegate) { + NOTREACHED(); + return nullptr; +} + +std::unique_ptr<NonMainThreadSchedulerImpl::RendererPauseHandle> +NonMainThreadSchedulerImpl::PauseScheduler() { + return nullptr; +} + +base::TimeTicks +NonMainThreadSchedulerImpl::MonotonicallyIncreasingVirtualTime() { + return base::TimeTicks::Now(); +} + +void NonMainThreadSchedulerImpl::RegisterWorkerScheduler( + WorkerScheduler* worker_scheduler) { + worker_schedulers_.insert(worker_scheduler); +} + +void NonMainThreadSchedulerImpl::UnregisterWorkerScheduler( + WorkerScheduler* worker_scheduler) { + DCHECK(worker_schedulers_.find(worker_scheduler) != worker_schedulers_.end()); + worker_schedulers_.erase(worker_scheduler); +} + +scoped_refptr<base::SingleThreadTaskRunner> +NonMainThreadSchedulerImpl::ControlTaskRunner() { + return helper_->ControlWorkerTaskQueue(); +} + +void NonMainThreadSchedulerImpl::RegisterTimeDomain( + base::sequence_manager::TimeDomain* time_domain) { + return helper_->RegisterTimeDomain(time_domain); +} + +void NonMainThreadSchedulerImpl::UnregisterTimeDomain( + base::sequence_manager::TimeDomain* time_domain) { + return helper_->UnregisterTimeDomain(time_domain); +} + +base::sequence_manager::TimeDomain* +NonMainThreadSchedulerImpl::GetActiveTimeDomain() { + return helper_->real_time_domain(); +} + +const base::TickClock* NonMainThreadSchedulerImpl::GetTickClock() { + return helper_->GetClock(); +} + +} // namespace scheduler +} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h similarity index 81% rename from third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h rename to third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h index 192ff35..f496b57 100644 --- a/third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_NON_MAIN_THREAD_SCHEDULER_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_NON_MAIN_THREAD_SCHEDULER_H_ +#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_WORKER_NON_MAIN_THREAD_SCHEDULER_IMPL_H_ +#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_WORKER_NON_MAIN_THREAD_SCHEDULER_IMPL_H_ #include <memory> @@ -27,21 +27,15 @@ class WakeUpBudgetPool; class CPUTimeBudgetPool; -// TODO(yutak): Rename this class to NonMainThreadSchedulerImpl and consider -// changing all non-impl scheduler classes to have only static methods. -class PLATFORM_EXPORT NonMainThreadScheduler : public ThreadSchedulerImpl { +class PLATFORM_EXPORT NonMainThreadSchedulerImpl : public ThreadSchedulerImpl { public: - ~NonMainThreadScheduler() override; + ~NonMainThreadSchedulerImpl() override; - static std::unique_ptr<NonMainThreadScheduler> Create( + static std::unique_ptr<NonMainThreadSchedulerImpl> Create( WebThreadType thread_type, WorkerSchedulerProxy* proxy); - // Same as ThreadScheduler::Current(), but this asserts the caller is on - // a non-main thread. - static NonMainThreadScheduler* Current(); - - // Blink should use NonMainThreadScheduler::DefaultTaskQueue instead of + // Blink should use NonMainThreadSchedulerImpl::DefaultTaskQueue instead of // WebThreadScheduler::DefaultTaskRunner. virtual scoped_refptr<WorkerTaskQueue> DefaultTaskQueue() = 0; @@ -80,7 +74,9 @@ // Returns TimeTicks::Now() by default. base::TimeTicks MonotonicallyIncreasingVirtualTime() override; - NonMainThreadScheduler* AsNonMainThreadScheduler() override { return this; } + NonMainThreadSchedulerImpl* AsNonMainThreadScheduler() override { + return this; + } // The following virtual methods are defined in *both* WebThreadScheduler // and ThreadScheduler, with identical interfaces and semantics. They are @@ -105,12 +101,12 @@ } protected: - explicit NonMainThreadScheduler( + explicit NonMainThreadSchedulerImpl( std::unique_ptr<NonMainThreadSchedulerHelper> helper); friend class WorkerScheduler; - // Each WorkerScheduler should notify NonMainThreadScheduler when it is + // Each WorkerScheduler should notify NonMainThreadSchedulerImpl when it is // created or destroyed. virtual void RegisterWorkerScheduler(WorkerScheduler* worker_scheduler); virtual void UnregisterWorkerScheduler(WorkerScheduler* worker_scheduler); @@ -135,10 +131,10 @@ private: static void RunIdleTask(WebThread::IdleTask task, base::TimeTicks deadline); - DISALLOW_COPY_AND_ASSIGN(NonMainThreadScheduler); + DISALLOW_COPY_AND_ASSIGN(NonMainThreadSchedulerImpl); }; } // namespace scheduler } // namespace blink -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_NON_MAIN_THREAD_SCHEDULER_H_ +#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_WORKER_NON_MAIN_THREAD_SCHEDULER_IMPL_H_
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc index d2df8dd..3dd49da0 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
@@ -106,7 +106,7 @@ std::unique_ptr<base::sequence_manager::TaskQueueManager> task_queue_manager, WorkerSchedulerProxy* proxy) - : NonMainThreadScheduler(std::make_unique<NonMainThreadSchedulerHelper>( + : NonMainThreadSchedulerImpl(std::make_unique<NonMainThreadSchedulerHelper>( std::move(task_queue_manager), this, TaskType::kWorkerThreadTaskQueueDefault)), @@ -280,7 +280,7 @@ void WorkerThreadScheduler::RegisterWorkerScheduler( WorkerScheduler* worker_scheduler) { - NonMainThreadScheduler::RegisterWorkerScheduler(worker_scheduler); + NonMainThreadSchedulerImpl::RegisterWorkerScheduler(worker_scheduler); worker_scheduler->OnThrottlingStateChanged(throttling_state_); }
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h index 2f5f6f8..d423ca9d6 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h
@@ -14,9 +14,9 @@ #include "third_party/blink/renderer/platform/scheduler/child/idle_helper.h" #include "third_party/blink/renderer/platform/scheduler/child/worker_metrics_helper.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" -#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/util/task_duration_metric_reporter.h" #include "third_party/blink/renderer/platform/scheduler/util/thread_load_tracker.h" +#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h" namespace base { namespace sequence_manager { @@ -30,7 +30,7 @@ class WorkerSchedulerProxy; class PLATFORM_EXPORT WorkerThreadScheduler - : public NonMainThreadScheduler, + : public NonMainThreadSchedulerImpl, public IdleHelper::Delegate, public base::sequence_manager::TaskTimeObserver { public: @@ -54,7 +54,7 @@ base::MessageLoop::TaskObserver* task_observer) override; void Shutdown() override; - // NonMainThreadScheduler implementation: + // NonMainThreadSchedulerImpl implementation: scoped_refptr<WorkerTaskQueue> DefaultTaskQueue() override; void OnTaskCompleted(WorkerTaskQueue* worker_task_queue, const base::sequence_manager::TaskQueue::Task& task,
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin.h b/third_party/blink/renderer/platform/weborigin/security_origin.h index e54f3f6..7dc3420d 100644 --- a/third_party/blink/renderer/platform/weborigin/security_origin.h +++ b/third_party/blink/renderer/platform/weborigin/security_origin.h
@@ -196,8 +196,6 @@ // details), such as for documents generated from data: URLs or documents // with the sandboxed origin browsing context flag set. bool IsOpaque() const { return is_opaque_; } - // Deprecated alias for IsOpaque(). - bool IsUnique() const { return IsOpaque(); } // By default 'file:' URLs may access other 'file:' URLs. This method // denies access. If either SecurityOrigin sets this flag, the access
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy.cc b/third_party/blink/renderer/platform/weborigin/security_policy.cc index fa1c15ba..679feab 100644 --- a/third_party/blink/renderer/platform/weborigin/security_policy.cc +++ b/third_party/blink/renderer/platform/weborigin/security_policy.cc
@@ -72,8 +72,8 @@ bool allow_destination_subdomains, OriginAccessMap& access_map) { DCHECK(IsMainThread()); - DCHECK(!source_origin.IsUnique()); - if (source_origin.IsUnique()) + DCHECK(!source_origin.IsOpaque()); + if (source_origin.IsOpaque()) return; String source_string = source_origin.ToString(); @@ -94,8 +94,8 @@ bool allow_destination_subdomains, OriginAccessMap& access_map) { DCHECK(IsMainThread()); - DCHECK(!source_origin.IsUnique()); - if (source_origin.IsUnique()) + DCHECK(!source_origin.IsOpaque()); + if (source_origin.IsOpaque()) return; String source_string = source_origin.ToString(); @@ -257,7 +257,7 @@ const SecurityOrigin& origin) { // Early return if there are no whitelisted origins to avoid unnecessary // allocations, copies, and frees. - if (origin.IsUnique() || TrustworthyOriginSet().IsEmpty()) + if (origin.IsOpaque() || TrustworthyOriginSet().IsEmpty()) return false; if (TrustworthyOriginSet().Contains(origin.ToRawString())) return true;
diff --git a/third_party/blink/tools/blinkpy/third_party/README.chromium b/third_party/blink/tools/blinkpy/third_party/README.chromium index 2b4ea64..e201727b 100644 --- a/third_party/blink/tools/blinkpy/third_party/README.chromium +++ b/third_party/blink/tools/blinkpy/third_party/README.chromium
@@ -31,7 +31,7 @@ Name: web-platform-tests - Test Suites for Web Platform specifications Short Name: wpt -URL: https://github.com/w3c/web-platform-tests/ +URL: https://github.com/web-platform-tests/wpt/ Version: ad84337c037685845f96d63618bb9b46ae9e9468 License: LICENSES FOR W3C TEST SUITES (http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html) License File: wpt/wpt/LICENSE.md
diff --git a/third_party/blink/tools/blinkpy/third_party/wpt/README.chromium b/third_party/blink/tools/blinkpy/third_party/wpt/README.chromium index 72244dc..6e73fa0 100644 --- a/third_party/blink/tools/blinkpy/third_party/wpt/README.chromium +++ b/third_party/blink/tools/blinkpy/third_party/wpt/README.chromium
@@ -3,7 +3,7 @@ Design Doc: https://goo.gl/iXUaZd This directory contains checked out and reduced code from web-platform-tests -(https://github.com/w3c/web-platform-tests/) required to run WPT tests as part +(https://github.com/web-platform-tests/wpt/) required to run WPT tests as part of Blink's test infrastructure and some maintenance/configuration code. The third party code lives entirely in the wpt subdirectory: @@ -126,7 +126,7 @@ Configuration Read instructions in WPT README: -https://github.com/w3c/web-platform-tests/blob/master/README.md +https://github.com/web-platform-tests/wpt/blob/master/README.md Also, check out the WPTServe Documentation (https://wptserve.readthedocs.org/en/latest/).
diff --git a/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/serve/serve.py b/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/serve/serve.py index 0fd5f907..75e55be 100644 --- a/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/serve/serve.py +++ b/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/serve/serve.py
@@ -454,7 +454,7 @@ # for this context. These systems do not reserve any value for this # purpose, so the inavailability of the domains must be taken for granted. # - # https://github.com/w3c/web-platform-tests/issues/10560 + # https://github.com/web-platform-tests/wpt/issues/10560 if platform.uname()[0] == "Windows": for not_domain in config.not_domains_set: rv.append("0.0.0.0\t%s\n" % not_domain)
diff --git a/third_party/closure_compiler/externs/users_private.js b/third_party/closure_compiler/externs/users_private.js index 85b9a10..c7338c5 100644 --- a/third_party/closure_compiler/externs/users_private.js +++ b/third_party/closure_compiler/externs/users_private.js
@@ -1,9 +1,9 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. +// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file was generated by: -// ./tools/json_schema_compiler/compiler.py. +// tools/json_schema_compiler/compiler.py. // NOTE: The format of types has changed. 'FooType' is now // 'chrome.usersPrivate.FooType'. // Please run the closure compiler before committing changes. @@ -22,7 +22,8 @@ * displayEmail: string, * name: string, * isOwner: boolean, - * isSupervised: boolean + * isSupervised: boolean, + * isChild: boolean * }} * @see https://developer.chrome.com/extensions/usersPrivate#type-User */ @@ -57,15 +58,15 @@ chrome.usersPrivate.removeWhitelistedUser = function(email, callback) {}; /** - * Whether the current user is the owner of the device. - * @param {function(boolean):void} callback - * @see https://developer.chrome.com/extensions/usersPrivate#method-isCurrentUserOwner - */ -chrome.usersPrivate.isCurrentUserOwner = function(callback) {}; - -/** * Whether the whitelist is managed by enterprise. * @param {function(boolean):void} callback * @see https://developer.chrome.com/extensions/usersPrivate#method-isWhitelistManaged */ chrome.usersPrivate.isWhitelistManaged = function(callback) {}; + +/** + * Returns the current user. + * @param {function(!chrome.usersPrivate.User):void} callback + * @see https://developer.chrome.com/extensions/usersPrivate#method-getCurrentUser + */ +chrome.usersPrivate.getCurrentUser = function(callback) {};
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index d742a2d..3228297 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-9-1-34 -Revision: d45d4b97e6a03cfe21a2952138cf6e970fc358e5 +Version: VER-2-9-1-36 +Revision: 0589f6e6ee6e9bfe0c7139374fc8812e849e7bf7 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses" License File: src/docs/FTL.TXT
diff --git a/third_party/libaom/BUILD.gn.cmake b/third_party/libaom/BUILD.gn.cmake index d80671d0..2723e35 100644 --- a/third_party/libaom/BUILD.gn.cmake +++ b/third_party/libaom/BUILD.gn.cmake
@@ -262,6 +262,10 @@ sources += aom_scale_sources sources += aom_sources sources += aom_util_sources + if (current_cpu == "arm64") { + sources += aom_av1_common_intrin_neon + sources += aom_dsp_common_intrin_neon + } deps = [] if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) { deps += [
diff --git a/third_party/libaom/cmake_update.sh b/third_party/libaom/cmake_update.sh index 6a5f403..437d27f9 100755 --- a/third_party/libaom/cmake_update.sh +++ b/third_party/libaom/cmake_update.sh
@@ -17,6 +17,9 @@ # Toolchain for armv7: # -gcc-arm-linux-gnueabihf # -g++-arm-linux-gnueabihf +# Toolchain for arm64: +# -gcc-aarch64-linux-gnu +# -g++-aarch64-linux-gnu # 32bit build environment for cmake. Including but potentially not limited to: # -lib32gcc-7-dev # -lib32stdc++-7-dev @@ -213,4 +216,8 @@ "${toolchain}/armv7-linux-gcc.cmake -DCONFIG_RUNTIME_CPU_DETECT=1 ${all_platforms}" gen_rtcd_header linux/arm-neon-cpu-detect armv7 +reset_dirs linux/arm64 +gen_config_files linux/arm64 "${toolchain}/arm64-linux-gcc.cmake ${all_platforms}" +gen_rtcd_header linux/arm64 arm64 + clean
diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn index 7b22cb4..0147b75 100644 --- a/third_party/openh264/BUILD.gn +++ b/third_party/openh264/BUILD.gn
@@ -24,6 +24,7 @@ if (!is_win || is_clang) { cflags += [ "-Wno-format", + "-Wno-format-security", "-Wno-header-hygiene", "-Wno-unused-function", "-Wno-unused-value",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 1a5952a0..2528b20 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -1890,6 +1890,14 @@ <int value="3" label="Audio and silence"/> </enum> +<enum name="AudioInputStreamDisconnectReason"> + <int value="0" label="Default"/> + <int value="1" label="Platform error"/> + <int value="2" label="Terminated by client"/> + <int value="3" label="Stream creation failed"/> + <int value="4" label="Document destroyed"/> +</enum> + <enum name="AudioOutputProxyStreamFormat"> <int value="0" label="Bitstream"/> <int value="1" label="Linear PCM"/> @@ -1917,6 +1925,14 @@ <int value="2" label="Failed to open stream"/> </enum> +<enum name="AudioOutputStreamDisconnectReason"> + <int value="0" label="Default"/> + <int value="1" label="Platform error"/> + <int value="2" label="Terminated by client"/> + <int value="3" label="Stream creation failed"/> + <int value="4" label="Document destroyed"/> +</enum> + <enum name="AudioRendererEvents"> <int value="0" label="Initialized"/> <int value="1" label="Runtime error"/> @@ -15621,6 +15637,7 @@ <int value="1253" label="DEVELOPERPRIVATE_ADDHOSTPERMISSION"/> <int value="1254" label="DEVELOPERPRIVATE_REMOVEHOSTPERMISSION"/> <int value="1255" label="MEDIAPERCEPTIONPRIVATE_SETCOMPONENTPROCESSSTATE"/> + <int value="1256" label="USERSPRIVATE_GETCURRENTUSER"/> </enum> <enum name="ExtensionIconState">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 54e1997..9d1a278 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -36901,6 +36901,17 @@ </summary> </histogram> +<histogram name="Media.Audio.Capture.StreamBrokerDisconnectReason" + enum="AudioInputStreamDisconnectReason" expires_after="2019-02-01"> + <owner>jonasolsson@chromium.org</owner> + <owner>maxmorin@chromium.org</owner> + <owner>olka@chromium.org</owner> + <summary> + Error codes from AudioInputStreamBroker::ObserverBindingLost. They describe + why an audio input stream ended. + </summary> +</histogram> + <histogram name="Media.Audio.Capture.StreamCallbackError" enum="BooleanError"> <owner>maxmorin@chromium.org</owner> <summary> @@ -37447,6 +37458,17 @@ </summary> </histogram> +<histogram name="Media.Audio.Render.StreamBrokerDisconnectReason" + enum="AudioOutputStreamDisconnectReason" expires_after="2019-02-01"> + <owner>jonasolsson@chromium.org</owner> + <owner>maxmorin@chromium.org</owner> + <owner>olka@chromium.org</owner> + <summary> + Error codes from AudioOutputStreamBroker::ObserverBindingLost. They describe + why an audio output stream ended. + </summary> +</histogram> + <histogram name="Media.Audio.Render.StreamCallbackError" enum="BooleanError"> <owner>maxmorin@chromium.org</owner> <summary>
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index c8db425..e5e6d48 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -216,12 +216,12 @@ crbug.com/555089 [ Android_Svelte ] smoothness.tough_ad_cases/* [ Skip ] # Benchmark: smoothness.tough_animation_cases -crbug.com/350692 [ All ] smoothness.tough_animation_cases/robohornetpro [ Skip ] -crbug.com/755556 [ Android ] smoothness.tough_animation_cases/balls_css_keyframe_animations_composited_transform.html [ Skip ] -crbug.com/755556 [ Mac ] smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html [ Skip ] -crbug.com/755556 [ Mac ] smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html [ Skip ] -crbug.com/829499 [ Android_One ] smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316 [ Skip ] -crbug.com/829499 [ Android_One ] smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316 [ Skip ] +crbug.com/350692 [ All ] smoothness.tough_animation_cases/microsoft_performance [ Skip ] +crbug.com/755556 [ Android ] smoothness.tough_animation_cases/balls_css_key_frame_animations_composited_transform [ Skip ] +crbug.com/755556 [ Mac ] smoothness.tough_animation_cases/mix_blend_mode_animation_difference [ Skip ] +crbug.com/755556 [ Mac ] smoothness.tough_animation_cases/mix_blend_mode_animation_hue [ Skip ] +crbug.com/829499 [ Android_One ] smoothness.tough_animation_cases/css_animations_many_keyframes [ Skip ] +crbug.com/829499 [ Android_One ] smoothness.tough_animation_cases/web_animations_many_keyframes [ Skip ] # Benchmark: smoothness.tough_canvas_cases crbug.com/785485 [ Android_Webview ] smoothness.tough_canvas_cases/kevs_3d [ Skip ]
diff --git a/tools/perf/page_sets/data/tough_animation_cases.json b/tools/perf/page_sets/data/tough_animation_cases.json index 521e37ef..46a559e 100644 --- a/tools/perf/page_sets/data/tough_animation_cases.json +++ b/tools/perf/page_sets/data/tough_animation_cases.json
@@ -1,9 +1,9 @@ { "archives": { - "http://ie.microsoft.com/testdrive/performance/robohornetpro/": { + "microsoft_performance": { "DEFAULT": "tough_animation_cases_000.wprgo" } }, "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "platform_specific": true -} \ No newline at end of file +}
diff --git a/tools/perf/page_sets/tough_animation_cases.py b/tools/perf/page_sets/tough_animation_cases.py index c59adb0..0ea0852 100644 --- a/tools/perf/page_sets/tough_animation_cases.py +++ b/tools/perf/page_sets/tough_animation_cases.py
@@ -7,10 +7,7 @@ class ToughAnimationCasesPage(page_module.Page): - def __init__(self, url, page_set, need_measurement_ready): - name = url.split('/')[-1] - if not name: - name = url.split('/')[-2] + def __init__(self, name, url, page_set, need_measurement_ready): super(ToughAnimationCasesPage, self).__init__( url=url, page_set=page_set, name=name) self._need_measurement_ready = need_measurement_ready @@ -37,240 +34,311 @@ urls_list_one = [ # Why: Tests the balls animation implemented with SVG animations. - 'file://tough_animation_cases/balls_svg_animations.html', + ('balls_svg_animations', + 'file://tough_animation_cases/balls_svg_animations.html'), # Why: Tests the balls animation implemented with Javascript and canvas. - 'file://tough_animation_cases/balls_javascript_canvas.html', + ('balls_javascript_canvas', + 'file://tough_animation_cases/balls_javascript_canvas.html'), # Why: Tests the balls animation implemented with Javascript and CSS. - 'file://tough_animation_cases/balls_javascript_css.html', + ('balls_javascript_css', + 'file://tough_animation_cases/balls_javascript_css.html'), # Why: Tests the balls animation implemented with CSS keyframe animations. - 'file://tough_animation_cases/balls_css_keyframe_animations.html', + ('balls_css_key_frame_animations', + 'file://tough_animation_cases/balls_css_keyframe_animations.html'), # Why: Tests the balls animation implemented with transforms and CSS # keyframe animations to be run on the compositor thread. - # pylint: disable=line-too-long - 'file://tough_animation_cases/balls_css_keyframe_animations_composited_transform.html', + ('balls_css_key_frame_animations_composited_transform', + # pylint: disable=line-too-long + 'file://tough_animation_cases/balls_css_keyframe_animations_composited_transform.html'), # Why: Tests the balls animation implemented with CSS transitions on 2 # properties. - 'file://tough_animation_cases/balls_css_transition_2_properties.html', + ('balls_css_transition_2_properties', + 'file://tough_animation_cases/balls_css_transition_2_properties.html'), # Why: Tests the balls animation implemented with CSS transitions on 40 # properties. - 'file://tough_animation_cases/balls_css_transition_40_properties.html', + ('balls_css_transition_40_properties', + 'file://tough_animation_cases/balls_css_transition_40_properties.html'), # Why: Tests the balls animation implemented with CSS transitions on all # animatable properties. - 'file://tough_animation_cases/balls_css_transition_all_properties.html', - # pylint: disable=line-too-long - 'file://tough_animation_cases/overlay_background_color_css_transitions.html', + ('balls_css_transition_all_properties', + 'file://tough_animation_cases/balls_css_transition_all_properties.html'), + ('overlay_background_color_css_transitions_page', + # pylint: disable=line-too-long + 'file://tough_animation_cases/overlay_background_color_css_transitions.html'), # Why: Tests many CSS Transitions all starting at the same time triggered # by inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316', + ('css_transitions_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Transitions all starting at the same time triggered # by inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316', + ('css_transitions_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Transitions all starting at the same time triggered # by updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316', + ('css_transitions_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316'), # Why: Tests many CSS Transitions all starting at the same time triggered # by updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316', + ('css_transitions_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316'), # Why: Tests many CSS Transitions chained together using events at # different times triggered by inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316', + ('css_transitions_staggered_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Transitions chained together using events at # different times triggered by inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316', + ('css_transitions_staggered_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Transitions chained together using events at # different times triggered by updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316', + ('css_transitions_staggered_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316'), # Why: Tests many CSS Transitions chained together using events at # different times triggered by updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316', + ('css_transitions_staggered_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316'), # Why: Tests many CSS Transitions starting at different times triggered by # inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316', + ('css_transitions_triggered_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Transitions starting at different times triggered by # inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316', + ('css_transitions_triggered_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Transitions starting at different times triggered by # updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316', + ('css_transitions_triggered_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316'), # Why: Tests many CSS Transitions starting at different times triggered by # updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316', + ('css_transitions_triggered_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time with 500 # keyframes each. - 'file://tough_animation_cases/css_animations_many_keyframes.html?N=0316', + ('css_animations_many_keyframes', + 'file://tough_animation_cases/css_animations_many_keyframes.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time triggered # by inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316', + ('css_animations_simultaneous_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time triggered # by inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316', + ('css_animations_simultaneous_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time triggered # by updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316', + ('css_animations_simultaneous_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time triggered # by updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316', + ('css_animations_simultaneous_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316'), # Why: Tests many CSS Animations chained together using events at # different times triggered by inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316', + ('css_animations_staggered_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Animations chained together using events at # different times triggered by inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316', + ('css_animations_staggered_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Animations chained together using events at # different times triggered by updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316', + ('css_animations_staggered_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316'), # Why: Tests many CSS Animations chained together using events at # different times triggered by updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316', + ('css_animations_staggered_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316'), # Why: Tests many CSS Animations starting at different times triggered by # inserting new elements. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316', + ('css_animations_triggered_new_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316'), # Why: Tests many CSS Animations all starting at the same time with # staggered animation offsets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316', + ('css_animations_staggered_infinite_iterations', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316'), # Why: Tests many CSS Animations starting at different times triggered by # inserting style sheets. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316', + ('css_animations_triggered_style_element', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316'), # Why: Tests many CSS Animations starting at different times triggered by # updating class. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316', + ('css_animations_triggered_updating_class', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316'), # Why: Tests many CSS Animations starting at different times triggered by # updating inline style. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316', + ('css_animations_triggered_inline_style', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316'), # Why: Tests many Web Animations all starting at the same time with 500 # keyframes each. - 'file://tough_animation_cases/web_animations_many_keyframes.html?N=0316', + ('web_animations_many_keyframes', + 'file://tough_animation_cases/web_animations_many_keyframes.html?N=0316'), # Why: Tests many paused Web Animations having their currentTimes updated # in every requestAnimationFrame. - # pylint: disable=line-too-long - 'file://tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316', + ('web_animations_set_current_time', + # pylint: disable=line-too-long + 'file://tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316'), # Why: Tests many Web Animations all starting at the same time. - 'file://tough_animation_cases/web_animations_simultaneous.html?N=0316', + ('web_animations_simultaneous', + 'file://tough_animation_cases/web_animations_simultaneous.html?N=0316'), # Why: Tests many Web Animations all starting at different times then # chained together using events. - # pylint: disable=line-too-long - 'file://tough_animation_cases/web_animations_staggered_chaining.html?N=0316', + ('web_animations_staggered_chaining', + # pylint: disable=line-too-long + 'file://tough_animation_cases/web_animations_staggered_chaining.html?N=0316'), # Why: Tests many Web Animations all starting at different times with # infinite iterations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316', + ('web_animations_staggered_infinite_iterations', + # pylint: disable=line-too-long + 'file://tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316'), # Why: Tests many Web Animations all starting at different times. - # pylint: disable=line-too-long - 'file://tough_animation_cases/web_animations_staggered_triggering.html?N=0316', + ('web_animations_staggered_triggering_page', + # pylint: disable=line-too-long + 'file://tough_animation_cases/web_animations_staggered_triggering.html?N=0316'), # Why: Tests color animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316', + ('css_value_type_color', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316'), # Why: Tests filter animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316', + ('css_value_type_filter', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316'), # Why: Tests length 3D animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316', + ('css_value_type_length', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316'), # Why: Tests complex length animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316', + ('css_value_type_length_complex', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316'), # Why: Tests simple length animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316', + ('css_value_type_length_simple', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316'), # Why: Tests path animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316', + ('css_value_type_path', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316'), # Why: Tests shadow animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316', + ('css_value_type_shadow', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316'), # Why: Tests complex transform animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316', + ('css_value_type_transform_complex', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316'), # Why: Tests simple transform animations using CSS Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316', + ('css_value_type_transform_simple', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316'), # Why: Tests color animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316', + ('web_animation_value_type_color', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316'), # Why: Tests length 3D animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316', + ('web_animation_value_type_length_3d', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316'), # Why: Tests complex length animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316', + ('web_animation_value_type_length_complex', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316'), # Why: Tests simple length animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316', + ('web_animation_value_type_length_simple', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316'), # Why: Tests path animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316', + ('web_animation_value_type_path', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316'), # Why: Tests shadow animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316', + ('web_animation_value_type_shadow', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316'), # Why: Tests complex transform animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316', + ('web_animation_value_type_transform_complex', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316'), # Why: Tests simple transform animations using Web Animations. - # pylint: disable=line-too-long - 'file://tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316', + ('web_animation_value_type_transform_simple', + # pylint: disable=line-too-long + 'file://tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316'), # Why: Test to update and then draw many times a large set of textures # to compare one-copy and zero-copy. - 'file://tough_animation_cases/compositor_heavy_animation.html?N=0200', + ('compositor_heavy_animation', + 'file://tough_animation_cases/compositor_heavy_animation.html?N=0200'), ] - for url in urls_list_one: - self.AddStory(ToughAnimationCasesPage(url, self, - need_measurement_ready=True)) + for name,url in urls_list_one: + self.AddStory(ToughAnimationCasesPage(name=name, + url=url, + page_set=self, + need_measurement_ready=True)) urls_list_two = [ # Why: Tests various keyframed animations. - 'file://tough_animation_cases/keyframed_animations.html', + ('keyframed_animations', + 'file://tough_animation_cases/keyframed_animations.html'), # Why: Tests various transitions. - 'file://tough_animation_cases/transform_transitions.html', + ('transform_transitions', + 'file://tough_animation_cases/transform_transitions.html'), # Why: JS execution blocks CSS transition unless initial transform is set. - 'file://tough_animation_cases/transform_transition_js_block.html', + ('transform_transitions_js_block', + 'file://tough_animation_cases/transform_transition_js_block.html'), # Why: Tests animating elements having mix-blend-mode: difference (a # separable popular blend mode). - 'file://tough_animation_cases/mix_blend_mode_animation_difference.html', + ('mix_blend_mode_animation_difference', + 'file://tough_animation_cases/mix_blend_mode_animation_difference.html'), # Why: Tests animating elements having mix-blend-mode: hue (a # non-separable blend mode). - 'file://tough_animation_cases/mix_blend_mode_animation_hue.html', + ('mix_blend_mode_animation_hue', + 'file://tough_animation_cases/mix_blend_mode_animation_hue.html'), # Why: Tests animating elements having mix-blend-mode: screen. - 'file://tough_animation_cases/mix_blend_mode_animation_screen.html', + ('mix_blend_mode_animation_screen', + 'file://tough_animation_cases/mix_blend_mode_animation_screen.html'), # Why: Tests software-animating a deep DOM subtree having one blending # leaf. - 'file://tough_animation_cases/mix_blend_mode_propagating_isolation.html', + ('mix_blend_mode_animation_propagating_isolation', + 'file://tough_animation_cases/mix_blend_mode_propagating_isolation.html'), # Why: Login page is slow because of ineffecient transform operations. - 'http://ie.microsoft.com/testdrive/performance/robohornetpro/', + ('microsoft_performance', + 'http://ie.microsoft.com/testdrive/performance/robohornetpro/'), ] - for url in urls_list_two: - self.AddStory(ToughAnimationCasesPage(url, self, + for name,url in urls_list_two: + self.AddStory(ToughAnimationCasesPage(name=name, + url=url, + page_set=self, need_measurement_ready=False))
diff --git a/ui/android/DEPS b/ui/android/DEPS index 7a34e43..f10295f 100644 --- a/ui/android/DEPS +++ b/ui/android/DEPS
@@ -25,6 +25,7 @@ specific_include_rules = { ".*test\.(cc|h)": [ + "+components/viz/service/display_embedder", "+components/viz/test" ] }
diff --git a/ui/android/delegated_frame_host_android_unittest.cc b/ui/android/delegated_frame_host_android_unittest.cc index 7b40b361..49e9a41 100644 --- a/ui/android/delegated_frame_host_android_unittest.cc +++ b/ui/android/delegated_frame_host_android_unittest.cc
@@ -10,6 +10,7 @@ #include "components/viz/common/hit_test/hit_test_region_list.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/test/compositor_frame_helpers.h" #include "testing/gmock/include/gmock/gmock.h" @@ -75,7 +76,8 @@ class DelegatedFrameHostAndroidTest : public testing::Test { public: DelegatedFrameHostAndroidTest() - : frame_sink_id_(1, 1), + : frame_sink_manager_impl_(&shared_bitmap_manager_), + frame_sink_id_(1, 1), task_runner_(new base::TestMockTimeTaskRunner()), lock_manager_(task_runner_, &lock_manager_client_) { host_frame_sink_manager_.SetLocalManager(&frame_sink_manager_impl_); @@ -116,6 +118,7 @@ protected: MockWindowAndroidCompositor compositor_; ui::ViewAndroid view_; + viz::ServerSharedBitmapManager shared_bitmap_manager_; viz::FrameSinkManagerImpl frame_sink_manager_impl_; viz::HostFrameSinkManager host_frame_sink_manager_; MockDelegatedFrameHostAndroidClient client_;
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index 10fd7ce..faaf22a 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn
@@ -345,6 +345,7 @@ "//base:i18n", "//build/win:default_exe_manifest", "//components/viz/host", + "//components/viz/service", "//skia", "//third_party/icu", "//ui/base",
diff --git a/ui/aura/demo/DEPS b/ui/aura/demo/DEPS index 4026dbd..608c21f 100644 --- a/ui/aura/demo/DEPS +++ b/ui/aura/demo/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/viz/host", + "+components/viz/service", # In-process viz service. "+ui/display", # Windows DPI Initialization. "+ui/gl/init/gl_factory.h", # To initialize GL bindings. ]
diff --git a/ui/aura/demo/demo_main.cc b/ui/aura/demo/demo_main.cc index 7c7c6da5..c44a9f8b 100644 --- a/ui/aura/demo/demo_main.cc +++ b/ui/aura/demo/demo_main.cc
@@ -16,6 +16,8 @@ #include "base/task_scheduler/task_scheduler.h" #include "build/build_config.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" +#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "third_party/skia/include/core/SkBlendMode.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/client/window_parenting_client.h" @@ -147,7 +149,8 @@ // The ContextFactory must exist before any Compositors are created. viz::HostFrameSinkManager host_frame_sink_manager; - viz::FrameSinkManagerImpl frame_sink_manager; + viz::ServerSharedBitmapManager server_shared_bitmap_manager; + viz::FrameSinkManagerImpl frame_sink_manager(&server_shared_bitmap_manager); host_frame_sink_manager.SetLocalManager(&frame_sink_manager); frame_sink_manager.SetLocalClient(&host_frame_sink_manager); auto context_factory = std::make_unique<ui::InProcessContextFactory>(
diff --git a/ui/base/win/direct_manipulation.cc b/ui/base/win/direct_manipulation.cc index 52daec7..9172f088 100644 --- a/ui/base/win/direct_manipulation.cc +++ b/ui/base/win/direct_manipulation.cc
@@ -12,6 +12,7 @@ #include "base/win/windows_version.h" #include "ui/base/ui_base_features.h" #include "ui/display/win/screen_win.h" +#include "ui/gfx/geometry/rect.h" namespace ui { namespace win { @@ -70,10 +71,6 @@ DirectManipulationHelper::DirectManipulationHelper() {} -// We only use Direct Manipulation as event handler so we can use any size for -// the fake viewport. -const RECT VIEWPORT_DEFAULT_RECT = {0, 0, 1000, 1000}; - bool DirectManipulationHelper::Initialize(WindowEventTarget* event_target) { // IDirectManipulationUpdateManager is the first COM object created by the // application to retrieve other objects in the Direct Manipulation API. @@ -127,7 +124,10 @@ if (!SUCCEEDED(hr)) return false; - hr = viewport_->SetViewportRect(&VIEWPORT_DEFAULT_RECT); + // Set default rect for viewport before activate. + viewport_size_ = {1000, 1000}; + RECT rect = gfx::Rect(viewport_size_).ToRECT(); + hr = viewport_->SetViewportRect(&rect); if (!SUCCEEDED(hr)) return false; @@ -142,13 +142,26 @@ } void DirectManipulationHelper::Activate() { + viewport_->Stop(); manager_->Activate(window_); } void DirectManipulationHelper::Deactivate() { + viewport_->Stop(); manager_->Deactivate(window_); } +void DirectManipulationHelper::SetSize(const gfx::Size& size) { + if (viewport_size_ == size) + return; + + viewport_->Stop(); + + viewport_size_ = size; + RECT rect = gfx::Rect(viewport_size_).ToRECT(); + viewport_->SetViewportRect(&rect); +} + bool DirectManipulationHelper::OnPointerHitTest( WPARAM w_param, WindowEventTarget* event_target) { @@ -181,11 +194,10 @@ HRESULT DirectManipulationHelper::ResetViewport(bool need_poll_events) { // By zooming the primary content to a rect that match the viewport rect, we // reset the content's transform to identity. - HRESULT hr = viewport_->ZoomToRect( - static_cast<float>(VIEWPORT_DEFAULT_RECT.left), - static_cast<float>(VIEWPORT_DEFAULT_RECT.top), - static_cast<float>(VIEWPORT_DEFAULT_RECT.right), - static_cast<float>(VIEWPORT_DEFAULT_RECT.bottom), FALSE); + HRESULT hr = + viewport_->ZoomToRect(static_cast<float>(0), static_cast<float>(0), + static_cast<float>(viewport_size_.width()), + static_cast<float>(viewport_size_.height()), FALSE); if (!SUCCEEDED(hr)) return hr;
diff --git a/ui/base/win/direct_manipulation.h b/ui/base/win/direct_manipulation.h index c0b603a..2f709b2 100644 --- a/ui/base/win/direct_manipulation.h +++ b/ui/base/win/direct_manipulation.h
@@ -15,7 +15,7 @@ #include "base/macros.h" #include "ui/base/ui_base_export.h" #include "ui/base/win/window_event_target.h" -#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/size.h" namespace content { class DirectManipulationBrowserTest; @@ -118,6 +118,9 @@ // Deactivates Direct Manipulation processing on the passed in |window|. void Deactivate(); + // Updates viewport size. Call it when window bounds updated. + void SetSize(const gfx::Size& size_in_pixels); + // Reset the fake viewport for gesture end. HRESULT ResetViewport(bool need_animtation); @@ -149,6 +152,7 @@ HWND window_; DWORD view_port_handler_cookie_; bool need_poll_events_ = false; + gfx::Size viewport_size_; DISALLOW_COPY_AND_ASSIGN(DirectManipulationHelper); };
diff --git a/ui/compositor/test/context_factories_for_test.cc b/ui/compositor/test/context_factories_for_test.cc index ece65c0..aa1eb18 100644 --- a/ui/compositor/test/context_factories_for_test.cc +++ b/ui/compositor/test/context_factories_for_test.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/sys_info.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "ui/compositor/compositor.h" #include "ui/compositor/compositor_switches.h" @@ -16,6 +17,7 @@ namespace { static viz::HostFrameSinkManager* g_host_frame_sink_manager = nullptr; +static viz::ServerSharedBitmapManager* g_shared_bitmap_manager = nullptr; static viz::FrameSinkManagerImpl* g_frame_sink_manager = nullptr; static ui::InProcessContextFactory* g_implicit_factory = nullptr; static gl::DisableNullDrawGLBindings* g_disable_null_draw = nullptr; @@ -44,7 +46,8 @@ if (enable_pixel_output) g_disable_null_draw = new gl::DisableNullDrawGLBindings; g_host_frame_sink_manager = new viz::HostFrameSinkManager; - g_frame_sink_manager = new viz::FrameSinkManagerImpl; + g_shared_bitmap_manager = new viz::ServerSharedBitmapManager; + g_frame_sink_manager = new viz::FrameSinkManagerImpl(g_shared_bitmap_manager); g_implicit_factory = new InProcessContextFactory(g_host_frame_sink_manager, g_frame_sink_manager); g_implicit_factory->SetUseFastRefreshRateForTests(); @@ -64,6 +67,8 @@ g_host_frame_sink_manager = nullptr; delete g_frame_sink_manager; g_frame_sink_manager = nullptr; + delete g_shared_bitmap_manager; + g_shared_bitmap_manager = nullptr; delete g_disable_null_draw; g_disable_null_draw = nullptr; }
diff --git a/ui/file_manager/integration_tests/file_manager/open_audio_files.js b/ui/file_manager/integration_tests/file_manager/open_audio_files.js index 1a1d109..43f99e4 100644 --- a/ui/file_manager/integration_tests/file_manager/open_audio_files.js +++ b/ui/file_manager/integration_tests/file_manager/open_audio_files.js
@@ -7,22 +7,19 @@ (function() { /** - * Obtains track text. - * @param {string} audioAppId Window ID. - * @param {query} query Query for the track. - * @return {Promise} Promise to be fulfilled with {title:string, artist:string} - * object. + * Returns the title and artist text associated with the given track. + * + * @param {string} audioAppId The Audio Player window ID. + * @param {query} track Query for the Audio Player track. + * @return {Promise<Object>} Promise to be fulfilled with a track details + * object containing {title:string, artist:string}. */ -function getTrackText(audioAppId, query) { - var titleElements = audioPlayerApp.callRemoteTestUtil( - 'queryAllElements', - audioAppId, - [query + ' > .data > .data-title']); - var artistElements = audioPlayerApp.callRemoteTestUtil( - 'queryAllElements', - audioAppId, - [query + ' > .data > .data-artist']); - return Promise.all([titleElements, artistElements]).then(function(data) { +function getTrackText(audioAppId, track) { + var titleElement = audioPlayerApp.callRemoteTestUtil( + 'queryAllElements', audioAppId, [track + ' > .data > .data-title']); + var artistElement = audioPlayerApp.callRemoteTestUtil( + 'queryAllElements', audioAppId, [track + ' > .data > .data-artist']); + return Promise.all([titleElement, artistElement]).then((data) => { return { title: data[0][0] && data[0][0].text, artist: data[1][0] && data[1][0].text @@ -30,8 +27,42 @@ }); } +/* + * Returns an Audio Player current track URL query for the given file name. + * + * @return {string} Track query for file name. + */ +function audioTrackQuery(fileName) { + return '[currenttrackurl$="' + self.encodeURIComponent(fileName) + '"]'; +} + +/** + * Returns a query for when the Audio Player is playing the given file name. + * + * @param {string} fileName The file name. + * @return {string} Query for file name being played. + */ +function audioPlayingQuery(fileName) { + return 'audio-player[playing]' + audioTrackQuery(fileName); +} + +/** + * Makes the current Audio Player track leap forward in time in 10% increments + * to 90% of the track duration. This "leap-forward-in-time" effect works best + * if called real-soon™ after the track starts playing. + * + * @param {string} audioAppId The Audio Player window ID. + */ +function audioTimeLeapForward(audioAppId) { + for (let i = 1; i <= 9; ++i) { + audioPlayerApp.fakeKeyDown( + audioAppId, 'body', 'ArrowRight', 'Right', false, false, false); + } +} + /** * Converts a file name to a file system scheme URL for a given volume path. + * TODO(noel): remove all uses of this routine. * * @param {string} path Directory path: Downloads or Drive. * @param {string} fileName The file name. @@ -50,34 +81,27 @@ let audioAppId; let appId; - StepsRunner.run([ // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Open Beautiful Song.ogg audio file. + // Open an audio file. function(result) { appId = result.windowId; remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the Audio Player window to open. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Check: Audio Player should automatically play. + // Check: Audio Player should automatically play the file. function(windowId) { audioAppId = windowId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); - }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - this.next(); + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, // Close the Audio Player window. function() { @@ -110,105 +134,81 @@ var expectedFilesAfter = expectedFilesBefore.concat([ENTRIES.newlyAdded.getExpectedRow()]).sort(); - var caller = getCaller(); StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Add an additional audio file. function(results) { appId = results.windowId; - - // Add an additional audio file. addEntries(['local', 'drive'], [ENTRIES.newlyAdded], this.next); }, + // Wait for the file list to change. function(result) { chrome.test.assertTrue(result); - remoteCall.waitForFileListChange(appId, expectedFilesBefore.length). - then(this.next); + remoteCall.waitForFiles(appId, expectedFilesAfter).then(this.next); }, - function(actualFilesAfter) { - chrome.test.assertEq(expectedFilesAfter, actualFilesAfter); + // Open an audio file. + function() { remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); + // Check: track 0 should be active. + function() { + getTrackText(audioAppId, '.track[index="0"][active]').then(this.next); + }, + // Check: track 0 should have the correct title and artist. + function(song) { + chrome.test.assertEq('Beautiful Song', song.title); + chrome.test.assertEq('Unknown Artist', song.artist); this.next(); }, - // Verify the track 0 is active, verify the track titles. - function(element) { - var query1 = 'audio-player /deep/ .track[index="0"][active]'; - var query2 = 'audio-player /deep/ .track[index="1"]:not([active])'; - repeatUntil(function() { - var trackText1 = getTrackText(audioAppId, query1); - var trackText2 = getTrackText(audioAppId, query2); - return Promise.all([trackText1, trackText2]).then(function(tracks) { - var expected = [ - {title: 'Beautiful Song', artist: 'Unknown Artist'}, - {title: 'newly added file', artist: 'Unknown Artist'} - ]; - if (!chrome.test.checkDeepEq(expected, tracks)) { - return pending( - caller, 'Tracks are expected as: %j, but is %j.', expected, - tracks); - } - }); - }).then(this.next, function(e) { chrome.test.fail(e); }); + // Check: track 1 should be inactive. + function() { + const inactive = '.track[index="1"]:not([active])'; + audioPlayerApp.waitForElement(audioAppId, inactive).then(this.next); }, // Open another file. - function() { + function(element) { + chrome.test.assertTrue(!!element); remoteCall.callRemoteTestUtil( 'openFile', appId, ['newly added file.ogg'], this.next); }, - // Wait for the changes of the player status. + // Check: Audio Player should automatically play the file. function(result) { - chrome.test.assertTrue(result, 'Fail to open the 2nd file'); - var query = 'audio-player' + - '[playing]' + - '[currenttrackurl$="newly%20added%20file.ogg"]'; - audioPlayerApp.waitForElement(audioAppId, query).then(this.next); + chrome.test.assertTrue(result); + const playFile = audioPlayingQuery('newly added file.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: newly added file.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'newly added file.ogg'), - element.attributes.currenttrackurl); + // Check: track 1 should be active. + function() { + getTrackText(audioAppId, '.track[index="1"][active]').then(this.next); + }, + // Check: track 1 should have the correct title and artist. + function(song) { + chrome.test.assertEq('newly added file', song.title); + chrome.test.assertEq('Unknown Artist', song.artist); this.next(); }, - // Verify the track 1 is active, verify the track titles. + // Check: track 0 should be inactive. function() { - var query1 = 'audio-player /deep/ .track[index="0"]:not([active])'; - var query2 = 'audio-player /deep/ .track[index="1"][active]'; - repeatUntil(function() { - var trackText1 = getTrackText(audioAppId, query1); - var trackText2 = getTrackText(audioAppId, query2); - return Promise.all([trackText1, trackText2]).then(function(tracks) { - var expected = [ - {title: 'Beautiful Song', artist: 'Unknown Artist'}, - {title: 'newly added file', artist: 'Unknown Artist'} - ]; - if (!chrome.test.checkDeepEq(expected, tracks)) { - return pending( - caller, 'Tracks are expected as: %j, but is %j.', expected, - tracks); - } - }); - }).then(this.next, function(e) { chrome.test.fail(e); }); + const inactive = '.track[index="0"]:not([active])'; + audioPlayerApp.waitForElement(audioAppId, inactive).then(this.next); }, - function() { + function(element) { + chrome.test.assertTrue(!!element); checkIfNoErrorsOccured(this.next); } ]); @@ -230,53 +230,46 @@ expectedFilesBefore.concat([ENTRIES.newlyAdded.getExpectedRow()]).sort(); StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Add an additional audio file. function(results) { appId = results.windowId; - - // Add an additional audio file. addEntries(['local', 'drive'], [ENTRIES.newlyAdded], this.next); }, + // Wait for the file list to change. function(result) { chrome.test.assertTrue(result); - remoteCall.waitForFileListChange(appId, expectedFilesBefore.length). - then(this.next); + remoteCall.waitForFiles(appId, expectedFilesAfter).then(this.next); }, - function(actualFilesAfter) { - chrome.test.assertEq(expectedFilesAfter, actualFilesAfter); + // Open an audio file. + function() { remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - - // Wait for next song. - var query = 'audio-player' + - '[playing]' + - '[currenttrackurl$="newly%20added%20file.ogg"]'; - audioPlayerApp.waitForElement(audioAppId, query).then(this.next); + // Leap forward and check: the same file should still be playing. + function() { + audioTimeLeapForward(audioAppId); + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: newly added file.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'newly added file.ogg'), - element.attributes.currenttrackurl); - this.next(); + // When it ends, Audio Player should play the next file (advance). + function() { + const playFile = audioPlayingQuery('newly added file.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, function() { checkIfNoErrorsOccured(this.next); @@ -294,37 +287,32 @@ var audioAppId; StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Open an audio file. function(results) { appId = results.windowId; - remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - + // Click the repeat button for repeat-all. + function() { + const repeatButton = ['repeat-button .no-repeat']; audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .no-repeat'], - this.next); + 'fakeMouseClick', audioAppId, repeatButton, this.next); }, function(result) { chrome.test.assertTrue(result, 'Failed to click the repeat button'); @@ -354,32 +342,29 @@ var audioAppId; StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Open an audio file. function(results) { appId = results.windowId; - remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - + // When it ends, Audio Player should stop playing. + function() { var selector = 'audio-player[playcount="1"]:not([playing])'; audioPlayerApp.waitForElement(audioAppId, selector).then(this.next); }, @@ -399,44 +384,39 @@ var audioAppId; StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Open an audio file. function(results) { appId = results.windowId; - remoteCall.callRemoteTestUtil( 'openFile', appId, ['Beautiful Song.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - - audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .no-repeat'], - this.next); - }, + // Click the repeat button for repeat-all. function() { + const repeatButton = ['repeat-button .no-repeat']; audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .repeat-all'], - this.next); + 'fakeMouseClick', audioAppId, repeatButton, this.next); + }, + // Click the repeat button again for repeat-once. + function(result) { + chrome.test.assertTrue(result, 'Failed to click the repeat button'); + const repeatButton = ['repeat-button .repeat-all']; + audioPlayerApp.callRemoteTestUtil( + 'fakeMouseClick', audioAppId, repeatButton, this.next); }, function(result) { chrome.test.assertTrue(result, 'Failed to click the repeat button'); @@ -472,61 +452,50 @@ expectedFilesBefore.concat([ENTRIES.newlyAdded.getExpectedRow()]); StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Add an additional audio file. function(results) { appId = results.windowId; - - // Add an additional audio file. addEntries(['local', 'drive'], [ENTRIES.newlyAdded], this.next); }, + // Wait for the file list to change. function(result) { chrome.test.assertTrue(result); remoteCall.waitForFiles(appId, expectedFilesAfter).then(this.next); }, - function(/* no result */) { + // Open an audio file. + function() { remoteCall.callRemoteTestUtil( 'openFile', appId, ['newly added file.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('newly added file.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: newly added file.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'newly added file.ogg'), - element.attributes.currenttrackurl); - + // Click the repeat button for repeat-all. + function() { + const repeatButton = ['repeat-button .no-repeat']; audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .no-repeat'], - this.next); + 'fakeMouseClick', audioAppId, repeatButton, this.next); }, + // Wait for next song. function(result) { chrome.test.assertTrue(result, 'Failed to click the repeat button'); - - // Wait for next song. - var query = 'audio-player' + - '[playing]' + - '[currenttrackurl$="Beautiful%20Song.ogg"]'; - audioPlayerApp.waitForElement(audioAppId, query).then(this.next); + const playFile = audioPlayingQuery('Beautiful Song.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: Beautiful Song.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'Beautiful Song.ogg'), - element.attributes.currenttrackurl); - this.next(); - }, + // TODO(noel): this test is broken. It should check that the first + // song plays again (since repeat-all mode is active). function() { checkIfNoErrorsOccured(this.next); } @@ -549,43 +518,40 @@ expectedFilesBefore.concat([ENTRIES.newlyAdded.getExpectedRow()]); StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Add an additional audio file. function(results) { appId = results.windowId; - - // Add an additional audio file. addEntries(['local', 'drive'], [ENTRIES.newlyAdded], this.next); }, + // Wait for the file list to change. function(result) { chrome.test.assertTrue(result); remoteCall.waitForFiles(appId, expectedFilesAfter).then(this.next); }, - function(/* no result */) { + // Open an audio file. + function() { remoteCall.callRemoteTestUtil( 'openFile', appId, ['newly added file.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('newly added file.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: newly added file.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'newly added file.ogg'), - element.attributes.currenttrackurl); - - // Wait for next song. - var query = 'audio-player:not([playing])'; - audioPlayerApp.waitForElement(audioAppId, query).then(this.next); + // When it ends, Audio Player should stop playing. + function() { + const stopped = 'audio-player:not([playing])'; + audioPlayerApp.waitForElement(audioAppId, stopped).then(this.next); }, function() { checkIfNoErrorsOccured(this.next); @@ -609,52 +575,48 @@ expectedFilesBefore.concat([ENTRIES.newlyAdded.getExpectedRow()]); StepsRunner.run([ + // Open Files.App on the given (volume) path. function() { setupAndWaitUntilReady(null, path, this.next); }, - // Select the song. + // Add an additional audio file. function(results) { appId = results.windowId; - - // Add an additional audio file. addEntries(['local', 'drive'], [ENTRIES.newlyAdded], this.next); }, + // Wait for the file list to change. function(result) { chrome.test.assertTrue(result); remoteCall.waitForFiles(appId, expectedFilesAfter).then(this.next); }, - function(/* no result */) { + // Open an audio file. + function() { remoteCall.callRemoteTestUtil( 'openFile', appId, ['newly added file.ogg'], this.next); }, - // Wait for the audio player window. + // Wait for the Audio Player window. function(result) { chrome.test.assertTrue(result); audioPlayerApp.waitForWindow('audio_player.html').then(this.next); }, - // Wait for the changes of the player status. - function(inAppId) { - audioAppId = inAppId; - audioPlayerApp.waitForElement(audioAppId, 'audio-player[playing]'). - then(this.next); + // Check: Audio Player should automatically play the file. + function(windowId) { + audioAppId = windowId; + const playFile = audioPlayingQuery('newly added file.ogg'); + audioPlayerApp.waitForElement(audioAppId, playFile).then(this.next); }, - // Check: newly added file.ogg should be playing. - function(element) { - chrome.test.assertEq(audioFileSystemURL(path, 'newly added file.ogg'), - element.attributes.currenttrackurl); - - audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .no-repeat'], - this.next); - }, + // Click the repeat button for repeat-all. function() { + const repeatButton = ['repeat-button .no-repeat']; audioPlayerApp.callRemoteTestUtil( - 'fakeMouseClick', - audioAppId, - ['audio-player /deep/ repeat-button .repeat-all'], - this.next); + 'fakeMouseClick', audioAppId, repeatButton, this.next); + }, + // Click the repeat button again for repeat-once. + function(result) { + chrome.test.assertTrue(result, 'Failed to click the repeat button'); + const repeatButton = ['repeat-button .repeat-all']; + audioPlayerApp.callRemoteTestUtil( + 'fakeMouseClick', audioAppId, repeatButton, this.next); }, function(result) { chrome.test.assertTrue(result, 'Failed to click the repeat button');
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc index cfe8464..a7aadad 100644 --- a/ui/views/controls/button/checkbox.cc +++ b/ui/views/controls/button/checkbox.cc
@@ -223,7 +223,7 @@ SkPath Checkbox::GetFocusRingPath() const { SkPath path; - gfx::Rect bounds = image()->bounds(); + gfx::Rect bounds = image()->GetMirroredBounds(); bounds.Inset(1, 1); path.addRect(RectToSkRect(bounds)); return path;
diff --git a/ui/views/controls/button/radio_button.cc b/ui/views/controls/button/radio_button.cc index efadd78..9bd49000 100644 --- a/ui/views/controls/button/radio_button.cc +++ b/ui/views/controls/button/radio_button.cc
@@ -163,7 +163,7 @@ SkPath RadioButton::GetFocusRingPath() const { SkPath path; - path.addOval(gfx::RectToSkRect(image()->bounds())); + path.addOval(gfx::RectToSkRect(image()->GetMirroredBounds())); return path; }
diff --git a/ui/views/controls/focus_ring.h b/ui/views/controls/focus_ring.h index 1b4d99ca2..26a1ac8 100644 --- a/ui/views/controls/focus_ring.h +++ b/ui/views/controls/focus_ring.h
@@ -53,7 +53,9 @@ static bool IsPathUseable(const SkPath& path); // Sets the path to draw this FocusRing around. This path is in the parent - // view's coordinate system, *not* in the FocusRing's coordinate system. + // view's coordinate system, *not* in the FocusRing's coordinate system. Note + // that this path will not be mirrored in RTL, so your View's computation of + // it should take RTL into account. void SetPath(const SkPath& path); // Sets whether the FocusRing should show an invalid state for the View it
diff --git a/ui/views/examples/BUILD.gn b/ui/views/examples/BUILD.gn index 750ae529..c757e20b 100644 --- a/ui/views/examples/BUILD.gn +++ b/ui/views/examples/BUILD.gn
@@ -113,6 +113,7 @@ "//base/test:test_support", "//build/win:default_exe_manifest", "//components/viz/host", + "//components/viz/service", "//ui/base", "//ui/compositor", "//ui/compositor:test_support",
diff --git a/ui/views/examples/DEPS b/ui/views/examples/DEPS index c55d1e8..38ff08c 100644 --- a/ui/views/examples/DEPS +++ b/ui/views/examples/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/viz/host", + "+components/viz/service", # In-process viz service. "+content/public", "+content/shell", "+sandbox",
diff --git a/ui/views/examples/examples_main.cc b/ui/views/examples/examples_main.cc index 9ddb537f8..4dd22a7 100644 --- a/ui/views/examples/examples_main.cc +++ b/ui/views/examples/examples_main.cc
@@ -17,6 +17,8 @@ #include "base/test/test_discardable_memory_allocator.h" #include "build/build_config.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" +#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "ui/base/ime/input_method_initializer.h" #include "ui/base/material_design/material_design_controller.h" #include "ui/base/resource/resource_bundle.h" @@ -68,7 +70,8 @@ // The ContextFactory must exist before any Compositors are created. viz::HostFrameSinkManager host_frame_sink_manager; - viz::FrameSinkManagerImpl frame_sink_manager; + viz::ServerSharedBitmapManager shared_bitmap_manager; + viz::FrameSinkManagerImpl frame_sink_manager(&shared_bitmap_manager); host_frame_sink_manager.SetLocalManager(&frame_sink_manager); frame_sink_manager.SetLocalClient(&host_frame_sink_manager); auto context_factory = std::make_unique<ui::InProcessContextFactory>(