/*******************************************************************************
 * Copyright (c) 2018, 2019 Red Hat and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Red Hat - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.tests.gtk.snippets;


//import static org.junit.Assert.*;

import org.eclipse.swt.widgets.Shell;
//import org.junit.Test;

public class Bug336238_ShellBoundsTest {

  static int cycles = 5;

//  @Test
  public void testSetBounds() {

    int x;
    int y;
    int width = 100;
    int height = 100;

    for (int i=0; i < cycles; i++) {

      x = (Double.valueOf(Math.random()*1000)).intValue();
      y = (Double.valueOf(Math.random()*1000)).intValue();

      Shell testShell = new Shell();
      testShell.open();

      testShell.setBounds(x, y, width, height);

//      assertEquals(x, testShell.getLocation().x);
//      assertEquals(y, testShell.getLocation().y);
      testShell.close();
    }
  }
}