@Test
  public void testProcessProductWithMaskAndSuperSampling() throws Exception {
    int superSampling = 3;
    BinningContext ctx = createValidCtx(superSampling, null);
    VariableContextImpl variableContext = (VariableContextImpl) ctx.getVariableContext();
    variableContext.setMaskExpr("floor(X) % 2");
    Product product = createProduct();

    MySpatialBinConsumer mySpatialBinConsumer = new MySpatialBinConsumer();
    SpatialBinner spatialBinner = new SpatialBinner(ctx, mySpatialBinConsumer);
    long numObservations =
        SpatialProductBinner.processProduct(
            product, spatialBinner, new HashMap<Product, List<Band>>(), ProgressMonitor.NULL);
    assertEquals(32 / 2 * 256 * superSampling * superSampling, numObservations);
    assertEquals(numObservations, mySpatialBinConsumer.numObs);
  }
  @Test
  public void testAddedBands() throws Exception {

    BinningContext ctx = createValidCtx(1, null);
    Product product = createProduct();

    HashMap<Product, List<Band>> productBandListMap = new HashMap<Product, List<Band>>();
    SpatialProductBinner.processProduct(
        product,
        new SpatialBinner(ctx, new MySpatialBinConsumer()),
        productBandListMap,
        ProgressMonitor.NULL);

    assertEquals(1, productBandListMap.size());
    List<Band> bandList = productBandListMap.get(product);
    assertNotNull(bandList);
    VariableContext variableContext = ctx.getVariableContext();
    assertEquals(variableContext.getVariableCount(), bandList.size());
    for (int i = 0; i < bandList.size(); i++) {
      assertEquals(variableContext.getVariableName(i), bandList.get(i).getName());
    }
  }