/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/

/**
 * 
 */
package fvt.gui.sc.chart;

import static org.junit.Assert.*;
import static testlib.gui.UIMap.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.openoffice.test.common.Logger;

import testlib.gui.AppTool;

/**
 * Test the setting about chart dialog in spreadsheet
 */
public class ChartDialogSetting {
	@Rule
	public Logger log = Logger.getLogger(this);

	@Before
	public void setUp() throws Exception {
		app.start(true);
		AppTool.newSpreadsheet();
		app.dispatch(".uno:InsertObjectChart");
	}

	@After
	public void tearDown() throws Exception {
		app.stop();

	}

	/**
	 * Test cancel and back button in chart wizard dialog
	 * 
	 * @throws java.lang.Exception
	 */
	@Test
	public void testChartDialogCancelBack() {
		wizardNextButton.click();
		assertTrue("Range Choose Tab is disable",chartRangeChooseTabPage.isEnabled());
		wizardBackButton.click();
		assertTrue("Type Choose Tab is disable",chartTypeChooseTabPage.isEnabled());
		chartWizard.cancel();
		assertFalse("Chart wizard not exist", chartWizard.exists());
	}
}
