tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestRemoveFrameRectFilter.cpp (13393B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "gtest/gtest.h"
      8 
      9 #include "mozilla/gfx/2D.h"
     10 #include "Common.h"
     11 #include "Decoder.h"
     12 #include "DecoderFactory.h"
     13 #include "SourceBuffer.h"
     14 #include "SurfaceFilters.h"
     15 #include "SurfacePipe.h"
     16 
     17 using namespace mozilla;
     18 using namespace mozilla::gfx;
     19 using namespace mozilla::image;
     20 
     21 template <typename Func>
     22 void WithRemoveFrameRectFilter(const IntSize& aSize, const IntRect& aFrameRect,
     23                               Func aFunc) {
     24  RefPtr<image::Decoder> decoder = CreateTrivialDecoder();
     25  ASSERT_TRUE(decoder != nullptr);
     26 
     27  WithFilterPipeline(
     28      decoder, std::forward<Func>(aFunc), RemoveFrameRectConfig{aFrameRect},
     29      SurfaceConfig{decoder, aSize, SurfaceFormat::OS_RGBA, false});
     30 }
     31 
     32 void AssertConfiguringRemoveFrameRectFilterFails(const IntSize& aSize,
     33                                                 const IntRect& aFrameRect) {
     34  RefPtr<image::Decoder> decoder = CreateTrivialDecoder();
     35  ASSERT_TRUE(decoder != nullptr);
     36 
     37  AssertConfiguringPipelineFails(
     38      decoder, RemoveFrameRectConfig{aFrameRect},
     39      SurfaceConfig{decoder, aSize, SurfaceFormat::OS_RGBA, false});
     40 }
     41 
     42 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_0_0_100_100)
     43 {
     44  WithRemoveFrameRectFilter(
     45      IntSize(100, 100), IntRect(0, 0, 100, 100),
     46      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
     47        CheckWritePixels(aDecoder, aFilter,
     48                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
     49                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
     50                         /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 100)));
     51      });
     52 }
     53 
     54 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_0_0_0_0)
     55 {
     56  WithRemoveFrameRectFilter(
     57      IntSize(100, 100), IntRect(0, 0, 0, 0),
     58      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
     59        CheckWritePixels(aDecoder, aFilter,
     60                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
     61                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
     62                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
     63                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
     64      });
     65 }
     66 
     67 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_50_0_0)
     68 {
     69  WithRemoveFrameRectFilter(
     70      IntSize(100, 100), IntRect(-50, 50, 0, 0),
     71      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
     72        CheckWritePixels(aDecoder, aFilter,
     73                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
     74                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
     75                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
     76                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
     77      });
     78 }
     79 
     80 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_Minus50_0_0)
     81 {
     82  WithRemoveFrameRectFilter(
     83      IntSize(100, 100), IntRect(50, -50, 0, 0),
     84      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
     85        CheckWritePixels(aDecoder, aFilter,
     86                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
     87                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
     88                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
     89                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
     90      });
     91 }
     92 
     93 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_150_50_0_0)
     94 {
     95  WithRemoveFrameRectFilter(
     96      IntSize(100, 100), IntRect(150, 50, 0, 0),
     97      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
     98        CheckWritePixels(aDecoder, aFilter,
     99                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    100                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    101                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    102                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    103      });
    104 }
    105 
    106 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_150_0_0)
    107 {
    108  WithRemoveFrameRectFilter(
    109      IntSize(100, 100), IntRect(50, 150, 0, 0),
    110      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    111        CheckWritePixels(aDecoder, aFilter,
    112                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    113                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    114                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    115                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    116      });
    117 }
    118 
    119 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_200_200_100_100)
    120 {
    121  WithRemoveFrameRectFilter(
    122      IntSize(100, 100), IntRect(200, 200, 100, 100),
    123      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    124        // Note that aInputRect is zero-size because RemoveFrameRectFilter
    125        // ignores trailing rows that don't show up in the output. (Leading rows
    126        // unfortunately can't be ignored.)
    127        CheckWritePixels(aDecoder, aFilter,
    128                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    129                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    130                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    131                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    132      });
    133 }
    134 
    135 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus200_25_100_100)
    136 {
    137  WithRemoveFrameRectFilter(
    138      IntSize(100, 100), IntRect(-200, 25, 100, 100),
    139      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    140        // Note that aInputRect is zero-size because RemoveFrameRectFilter
    141        // ignores trailing rows that don't show up in the output. (Leading rows
    142        // unfortunately can't be ignored.)
    143        CheckWritePixels(aDecoder, aFilter,
    144                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    145                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    146                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    147                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    148      });
    149 }
    150 
    151 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_Minus200_100_100)
    152 {
    153  WithRemoveFrameRectFilter(
    154      IntSize(100, 100), IntRect(25, -200, 100, 100),
    155      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    156        // Note that aInputRect is zero-size because RemoveFrameRectFilter
    157        // ignores trailing rows that don't show up in the output. (Leading rows
    158        // unfortunately can't be ignored.)
    159        CheckWritePixels(aDecoder, aFilter,
    160                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    161                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    162                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    163                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    164      });
    165 }
    166 
    167 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_200_25_100_100)
    168 {
    169  WithRemoveFrameRectFilter(
    170      IntSize(100, 100), IntRect(200, 25, 100, 100),
    171      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    172        // Note that aInputRect is zero-size because RemoveFrameRectFilter
    173        // ignores trailing rows that don't show up in the output. (Leading rows
    174        // unfortunately can't be ignored.)
    175        CheckWritePixels(aDecoder, aFilter,
    176                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    177                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    178                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    179                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    180      });
    181 }
    182 
    183 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_200_100_100)
    184 {
    185  WithRemoveFrameRectFilter(
    186      IntSize(100, 100), IntRect(25, 200, 100, 100),
    187      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    188        // Note that aInputRect is zero-size because RemoveFrameRectFilter
    189        // ignores trailing rows that don't show up in the output. (Leading rows
    190        // unfortunately can't be ignored.)
    191        CheckWritePixels(aDecoder, aFilter,
    192                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    193                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    194                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    195                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    196      });
    197 }
    198 
    199 TEST(ImageRemoveFrameRectFilter,
    200     WritePixels100_100_to_Minus200_Minus200_100_100)
    201 {
    202  WithRemoveFrameRectFilter(
    203      IntSize(100, 100), IntRect(-200, -200, 100, 100),
    204      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    205        CheckWritePixels(aDecoder, aFilter,
    206                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    207                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    208                         /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
    209                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
    210      });
    211 }
    212 
    213 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_Minus50_100_100)
    214 {
    215  WithRemoveFrameRectFilter(
    216      IntSize(100, 100), IntRect(-50, -50, 100, 100),
    217      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    218        CheckWritePixels(aDecoder, aFilter,
    219                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    220                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    221                         /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 100)),
    222                         /* aOutputWriteRect = */ Some(IntRect(0, 0, 50, 50)));
    223      });
    224 }
    225 
    226 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_25_100_50)
    227 {
    228  WithRemoveFrameRectFilter(
    229      IntSize(100, 100), IntRect(-50, 25, 100, 50),
    230      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    231        CheckWritePixels(aDecoder, aFilter,
    232                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    233                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    234                         /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 50)),
    235                         /* aOutputWriteRect = */ Some(IntRect(0, 25, 50, 50)));
    236      });
    237 }
    238 
    239 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_Minus50_50_100)
    240 {
    241  WithRemoveFrameRectFilter(
    242      IntSize(100, 100), IntRect(25, -50, 50, 100),
    243      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    244        CheckWritePixels(aDecoder, aFilter,
    245                         /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    246                         /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    247                         /* aInputWriteRect = */ Some(IntRect(0, 0, 50, 100)),
    248                         /* aOutputWriteRect = */ Some(IntRect(25, 0, 50, 50)));
    249      });
    250 }
    251 
    252 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_25_100_50)
    253 {
    254  WithRemoveFrameRectFilter(
    255      IntSize(100, 100), IntRect(50, 25, 100, 50),
    256      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    257        CheckWritePixels(
    258            aDecoder, aFilter,
    259            /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    260            /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    261            /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 50)),
    262            /* aOutputWriteRect = */ Some(IntRect(50, 25, 50, 50)));
    263      });
    264 }
    265 
    266 TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_50_50_100)
    267 {
    268  WithRemoveFrameRectFilter(
    269      IntSize(100, 100), IntRect(25, 50, 50, 100),
    270      [](image::Decoder* aDecoder, SurfaceFilter* aFilter) {
    271        // Note that aInputRect is 50x50 because RemoveFrameRectFilter ignores
    272        // trailing rows that don't show up in the output. (Leading rows
    273        // unfortunately can't be ignored.)
    274        CheckWritePixels(
    275            aDecoder, aFilter,
    276            /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
    277            /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
    278            /* aInputWriteRect = */ Some(IntRect(0, 0, 50, 50)),
    279            /* aOutputWriteRect = */ Some(IntRect(25, 50, 50, 100)));
    280      });
    281 }
    282 
    283 TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsFor0_0_to_0_0_100_100)
    284 {
    285  // A zero-size image is disallowed.
    286  AssertConfiguringRemoveFrameRectFilterFails(IntSize(0, 0),
    287                                              IntRect(0, 0, 100, 100));
    288 }
    289 
    290 TEST(ImageRemoveFrameRectFilter,
    291     RemoveFrameRectFailsForMinus1_Minus1_to_0_0_100_100)
    292 {
    293  // A negative-size image is disallowed.
    294  AssertConfiguringRemoveFrameRectFilterFails(IntSize(-1, -1),
    295                                              IntRect(0, 0, 100, 100));
    296 }
    297 
    298 TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsFor100_100_to_0_0_0_0)
    299 {
    300  // A zero size frame rect is disallowed.
    301  AssertConfiguringRemoveFrameRectFilterFails(IntSize(100, 100),
    302                                              IntRect(0, 0, -1, -1));
    303 }
    304 
    305 TEST(ImageRemoveFrameRectFilter,
    306     RemoveFrameRectFailsFor100_100_to_0_0_Minus1_Minus1)
    307 {
    308  // A negative size frame rect is disallowed.
    309  AssertConfiguringRemoveFrameRectFilterFails(IntSize(100, 100),
    310                                              IntRect(0, 0, -1, -1));
    311 }